diff options
author | Nico Schlömer <nico.schloemer@gmail.com> | 2022-03-10 14:02:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-10 14:02:39 +0100 |
commit | 82d5af9edb41d3f10a80f5bb81fd65b276bec903 (patch) | |
tree | ac780144b1aa2c2b4cda0dacbc0493b45960196a | |
parent | 3d32da11e44f84bb5711e09d701eddda5eb75a8a (diff) | |
parent | a11ba8cc523836415d691c5b17dc52f4c2126a2e (diff) |
Merge pull request #80 from nschloe/no-io-countersv0.2.4
No io counters
-rw-r--r-- | src/tiptop/__about__.py | 2 | ||||
-rw-r--r-- | src/tiptop/_battery.py | 7 | ||||
-rw-r--r-- | src/tiptop/_disk.py | 100 | ||||
-rw-r--r-- | src/tiptop/_mem.py | 2 | ||||
-rw-r--r-- | src/tiptop/_net.py | 7 |
5 files changed, 75 insertions, 43 deletions
diff --git a/src/tiptop/__about__.py b/src/tiptop/__about__.py index d31c31e..788da1f 100644 --- a/src/tiptop/__about__.py +++ b/src/tiptop/__about__.py @@ -1 +1 @@ -__version__ = "0.2.3" +__version__ = "0.2.4" diff --git a/src/tiptop/_battery.py b/src/tiptop/_battery.py index ca43862..5206e83 100644 --- a/src/tiptop/_battery.py +++ b/src/tiptop/_battery.py @@ -28,8 +28,7 @@ class Battery(Widget): assert bat is not None self.bat_stream.add_value(bat.percent) - - self.panel.renderable = Text("\n".join(self.bat_stream.graph), style="yellow") + self.refresh_graph() if bat.power_plugged: status = "charging" @@ -51,9 +50,13 @@ class Battery(Widget): self.refresh() + def refresh_graph(self): + self.panel.renderable = Text("\n".join(self.bat_stream.graph), style="yellow") + def render(self) -> Panel: return self.panel async def on_resize(self, event): self.bat_stream.reset_width(event.width - 4) self.bat_stream.reset_height(event.height - 2) + self.refresh_graph() diff --git a/src/tiptop/_disk.py b/src/tiptop/_disk.py index 75fc039..47307b9 100644 --- a/src/tiptop/_disk.py +++ b/src/tiptop/_disk.py @@ -17,29 +17,6 @@ class Disk(Widget): super().__init__() def on_mount(self): - self.down_box = Panel( - "", - title="read", - title_align="left", - style="green", - width=20, - box=box.SQUARE, - ) - self.up_box = Panel( - "", - title="write", - title_align="left", - style="blue", - width=20, - box=box.SQUARE, - ) - self.table = Table(expand=True, show_header=False, padding=0, box=None) - # Add ratio 1 to expand that column as much as possible - self.table.add_column("graph", no_wrap=True, ratio=1) - self.table.add_column("box", no_wrap=True, width=20) - self.table.add_row("", self.down_box) - self.table.add_row("", self.up_box) - # kick out /dev/loop* devices self.mountpoints = [ item.mountpoint @@ -47,7 +24,53 @@ class Disk(Widget): if not item.device.startswith("/dev/loop") ] - self.group = Group(self.table, "") + # io counters aren't always available, see + # <https://github.com/nschloe/tiptop/issues/79> + self.has_io_counters = False + try: + psutil.disk_io_counters() + except Exception: + pass + else: + self.has_io_counters = True + + if self.has_io_counters: + self.down_box = Panel( + "", + title="read", + title_align="left", + style="green", + width=20, + box=box.SQUARE, + ) + self.up_box = Panel( + "", + title="write", + title_align="left", + style="blue", + width=20, + box=box.SQUARE, + ) + self.table = Table(expand=True, show_header=False, padding=0, box=None) + # Add ratio 1 to expand that column as much as possible + self.table.add_column("graph", no_wrap=True, ratio=1) + self.table.add_column("box", no_wrap=True, width=20) + self.table.add_row("", self.down_box) + self.table.add_row("", self.up_box) + + self.group = Group(self.table, "") + + self.last_io = None + self.max_read_bytes_s = 0 + self.max_read_bytes_s_str = "" + self.max_write_bytes_s = 0 + self.max_write_bytes_s_str = "" + + self.read_stream = BrailleStream(20, 5, 0.0, 1.0e6) + self.write_stream = BrailleStream(20, 5, 0.0, 1.0e6, flipud=True) + else: + self.group = Group("") + self.panel = Panel( self.group, title="[b]disk[/]", @@ -57,21 +80,19 @@ class Disk(Widget): box=box.SQUARE, ) - self.last_io = None - self.max_read_bytes_s = 0 - self.max_read_bytes_s_str = "" - self.max_write_bytes_s = 0 - self.max_write_bytes_s_str = "" - - self.read_stream = BrailleStream(20, 5, 0.0, 1.0e6) - self.write_stream = BrailleStream(20, 5, 0.0, 1.0e6, flipud=True) - self.refresh_panel() self.interval_s = 2.0 self.set_interval(self.interval_s, self.refresh_panel) def refresh_panel(self): + if self.has_io_counters: + self.refresh_io_counters() + + self.refresh_disk_usage() + self.refresh() + + def refresh_io_counters(self): io = psutil.disk_io_counters() if self.last_io is None: @@ -115,7 +136,9 @@ class Disk(Widget): f"total {total_write_string}", ] ) + self.refresh_graphs() + def refresh_graphs(self): self.table.columns[0]._cells[0] = Text( "\n".join(self.read_stream.graph), style="green" ) @@ -123,6 +146,7 @@ class Disk(Widget): "\n".join(self.write_stream.graph), style="blue" ) + def refresh_disk_usage(self): table = Table(box=None, expand=False, padding=(0, 1), show_header=True) table.add_column("", justify="left", no_wrap=True, style="bold") table.add_column(Text("free", justify="left"), justify="right", no_wrap=True) @@ -151,13 +175,13 @@ class Disk(Widget): f"({du.percent:.1f}%)", style=style, ) - self.group.renderables[1] = table - - self.refresh() + self.group.renderables[-1] = table def render(self): return self.panel async def on_resize(self, event): - self.read_stream.reset_width(event.width - 25) - self.write_stream.reset_width(event.width - 25) + if self.has_io_counters: + self.read_stream.reset_width(event.width - 25) + self.write_stream.reset_width(event.width - 25) + self.refresh_graphs() diff --git a/src/tiptop/_mem.py b/src/tiptop/_mem.py index b5bb9ef..32e560c 100644 --- a/src/tiptop/_mem.py +++ b/src/tiptop/_mem.py @@ -102,3 +102,5 @@ class Mem(Widget): for ms, h in zip(self.mem_streams, heights): ms.reset_height(h) + + self.refresh_table() diff --git a/src/tiptop/_net.py b/src/tiptop/_net.py index aea1e5d..a66746b 100644 --- a/src/tiptop/_net.py +++ b/src/tiptop/_net.py @@ -168,7 +168,11 @@ class Net(Widget): f"total {total_sent_string}", ] ) + self.refresh_graphs() + self.refresh() + + def refresh_graphs(self): self.table.columns[0]._cells[0] = Text( "\n".join(self.recv_stream.graph), style="green" ) @@ -176,11 +180,10 @@ class Net(Widget): "\n".join(self.sent_stream.graph), style="blue" ) - self.refresh() - def render(self): return self.panel async def on_resize(self, event): self.sent_stream.reset_width(event.width - 25) self.recv_stream.reset_width(event.width - 25) + self.refresh_graphs() |