]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pybind/mgr/iostat/module.py
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / pybind / mgr / iostat / module.py
index f5c3179ded1cbd8463e7e96d60f39c5b0efe77a1..5c18f5bf0a022bd63cae3f54df55203d63680b86 100644 (file)
@@ -1,20 +1,9 @@
-
-from mgr_module import MgrModule
+from mgr_module import CLIReadCommand, HandleCommandResult, MgrModule
 
 
 class Module(MgrModule):
-    COMMANDS = [
-        {
-            "cmd": "iostat",
-            "desc": "Get IO rates",
-            "perm": "r",
-            "poll": "true"
-        },
-    ]
-
-
     def __init__(self, *args, **kwargs):
-        super(Module, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
 
     def self_test(self):
         r = self.get('io_rate')
@@ -26,7 +15,11 @@ class Module(MgrModule):
         assert('num_write' in r['pg_stats_delta']['stat_sum'])
         assert('num_read' in r['pg_stats_delta']['stat_sum'])
 
-    def handle_command(self, inbuf, command):
+    @CLIReadCommand('iostat', poll=True)
+    def iostat(self, width: int = 80, print_header: bool = False):
+        """
+        Get IO rates
+        """
         rd = 0
         wr = 0
         total = 0
@@ -35,39 +28,33 @@ class Module(MgrModule):
         total_ops = 0
         ret = ''
 
-        if command['prefix'] == 'iostat':
-            r = self.get('io_rate')
-
-            stamp_delta = float(r['pg_stats_delta']['stamp_delta'])
-            if (stamp_delta > 0):
-                rd = int(r['pg_stats_delta']['stat_sum']['num_read_kb']) / stamp_delta
-                wr = int(r['pg_stats_delta']['stat_sum']['num_write_kb']) / stamp_delta
-                # The values are in kB, but to_pretty_iec() requires them to be in bytes
-                rd = int(rd) << 10
-                wr = int(wr) << 10
-                total = rd + wr
-
-                rd_ops = int(r['pg_stats_delta']['stat_sum']['num_read']) / stamp_delta
-                wr_ops = int(r['pg_stats_delta']['stat_sum']['num_write']) / stamp_delta
-                total_ops = rd_ops + wr_ops
-
-            if 'width' in command:
-                width = command['width']
-            else:
-                width = 80
-
-            if command.get('print_header', False):
-                elems = ['Read', 'Write', 'Total', 'Read IOPS', 'Write IOPS', 'Total IOPS']
-                ret += self.get_pretty_header(elems, width)
+        r = self.get('io_rate')
 
-            elems = [
-                self.to_pretty_iec(rd) + 'B/s',
-                self.to_pretty_iec(wr) + 'B/s',
-                self.to_pretty_iec(total) + 'B/s',
-                int(rd_ops),
-                int(wr_ops),
-                int(total_ops)
+        stamp_delta = int(float(r['pg_stats_delta']['stamp_delta']))
+        if stamp_delta > 0:
+            rd = r['pg_stats_delta']['stat_sum']['num_read_kb'] // stamp_delta
+            wr = r['pg_stats_delta']['stat_sum']['num_write_kb'] // stamp_delta
+            # The values are in kB, but to_pretty_iec() requires them to be in bytes
+            rd = rd << 10
+            wr = wr << 10
+            total = rd + wr
+
+            rd_ops = r['pg_stats_delta']['stat_sum']['num_read'] // stamp_delta
+            wr_ops = r['pg_stats_delta']['stat_sum']['num_write'] // stamp_delta
+            total_ops = rd_ops + wr_ops
+
+        if print_header:
+            elems = ['Read', 'Write', 'Total', 'Read IOPS', 'Write IOPS', 'Total IOPS']
+            ret += self.get_pretty_header(elems, width)
+
+        elems = [
+            self.to_pretty_iec(rd) + 'B/s',
+            self.to_pretty_iec(wr) + 'B/s',
+            self.to_pretty_iec(total) + 'B/s',
+            str(rd_ops),
+            str(wr_ops),
+            str(total_ops)
             ]
-            ret += self.get_pretty_row(elems, width)
+        ret += self.get_pretty_row(elems, width)
 
-        return 0, '', ret
+        return HandleCommandResult(stdout=ret)