]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/iostat/module.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / pybind / mgr / iostat / module.py
CommitLineData
20effc67
TL
1from typing import Any
2
f67539c2 3from mgr_module import CLIReadCommand, HandleCommandResult, MgrModule
11fdf7f2
TL
4
5
6class Module(MgrModule):
20effc67 7 def __init__(self, *args: Any, **kwargs: Any) -> None:
f67539c2 8 super().__init__(*args, **kwargs)
11fdf7f2 9
20effc67 10 def self_test(self) -> None:
11fdf7f2
TL
11 r = self.get('io_rate')
12 assert('pg_stats_delta' in r)
13 assert('stamp_delta' in r['pg_stats_delta'])
14 assert('stat_sum' in r['pg_stats_delta'])
15 assert('num_read_kb' in r['pg_stats_delta']['stat_sum'])
16 assert('num_write_kb' in r['pg_stats_delta']['stat_sum'])
17 assert('num_write' in r['pg_stats_delta']['stat_sum'])
18 assert('num_read' in r['pg_stats_delta']['stat_sum'])
19
f67539c2 20 @CLIReadCommand('iostat', poll=True)
20effc67 21 def iostat(self, width: int = 80, print_header: bool = False) -> HandleCommandResult:
f67539c2
TL
22 """
23 Get IO rates
24 """
11fdf7f2
TL
25 rd = 0
26 wr = 0
27 total = 0
28 rd_ops = 0
29 wr_ops = 0
30 total_ops = 0
31 ret = ''
32
f67539c2 33 r = self.get('io_rate')
11fdf7f2 34
f67539c2
TL
35 stamp_delta = int(float(r['pg_stats_delta']['stamp_delta']))
36 if stamp_delta > 0:
37 rd = r['pg_stats_delta']['stat_sum']['num_read_kb'] // stamp_delta
38 wr = r['pg_stats_delta']['stat_sum']['num_write_kb'] // stamp_delta
39 # The values are in kB, but to_pretty_iec() requires them to be in bytes
40 rd = rd << 10
41 wr = wr << 10
42 total = rd + wr
43
44 rd_ops = r['pg_stats_delta']['stat_sum']['num_read'] // stamp_delta
45 wr_ops = r['pg_stats_delta']['stat_sum']['num_write'] // stamp_delta
46 total_ops = rd_ops + wr_ops
47
48 if print_header:
49 elems = ['Read', 'Write', 'Total', 'Read IOPS', 'Write IOPS', 'Total IOPS']
50 ret += self.get_pretty_header(elems, width)
51
52 elems = [
53 self.to_pretty_iec(rd) + 'B/s',
54 self.to_pretty_iec(wr) + 'B/s',
55 self.to_pretty_iec(total) + 'B/s',
56 str(rd_ops),
57 str(wr_ops),
58 str(total_ops)
20effc67 59 ]
f67539c2 60 ret += self.get_pretty_row(elems, width)
11fdf7f2 61
f67539c2 62 return HandleCommandResult(stdout=ret)