summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Schlömer <nico.schloemer@gmail.com>2022-03-10 14:02:39 +0100
committerGitHub <noreply@github.com>2022-03-10 14:02:39 +0100
commit82d5af9edb41d3f10a80f5bb81fd65b276bec903 (patch)
treeac780144b1aa2c2b4cda0dacbc0493b45960196a
parent3d32da11e44f84bb5711e09d701eddda5eb75a8a (diff)
parenta11ba8cc523836415d691c5b17dc52f4c2126a2e (diff)
Merge pull request #80 from nschloe/no-io-countersv0.2.4
No io counters
-rw-r--r--src/tiptop/__about__.py2
-rw-r--r--src/tiptop/_battery.py7
-rw-r--r--src/tiptop/_disk.py100
-rw-r--r--src/tiptop/_mem.py2
-rw-r--r--src/tiptop/_net.py7
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()