]>
Commit | Line | Data |
---|---|---|
20effc67 TL |
1 | from typing import Any |
2 | ||
f67539c2 | 3 | from mgr_module import CLIReadCommand, HandleCommandResult, MgrModule |
11fdf7f2 TL |
4 | |
5 | ||
6 | class 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) |