system: add cpu and memory usage tracking
This commit is contained in:
parent
ef184ceed3
commit
312f56a6a0
@ -10,16 +10,59 @@ class Panel(ScreenPanel):
|
||||
def __init__(self, screen, title):
|
||||
super().__init__(screen, title)
|
||||
self.current_row = 0
|
||||
sysinfo = screen.printer.system_info
|
||||
logging.debug(sysinfo)
|
||||
self.mem_multiplier = None
|
||||
self.scales = {}
|
||||
|
||||
self.grid = Gtk.Grid(column_spacing=10, row_spacing=5)
|
||||
|
||||
sysinfo = screen.printer.system_info
|
||||
logging.info(sysinfo)
|
||||
|
||||
self.cpu_count = int(sysinfo["cpu_info"]["cpu_count"])
|
||||
self.labels["cpu_usage"] = Gtk.Label(label="", xalign=0)
|
||||
self.grid.attach(self.labels["cpu_usage"], 0, self.current_row, 1, 1)
|
||||
self.scales["cpu_usage"] = Gtk.ProgressBar(
|
||||
hexpand=True, show_text=False, fraction=0
|
||||
)
|
||||
self.grid.attach(self.scales["cpu_usage"], 1, self.current_row, 1, 1)
|
||||
self.current_row += 1
|
||||
|
||||
for i in range(self.cpu_count):
|
||||
self.labels[f"cpu_usage_{i}"] = Gtk.Label(label="", xalign=0)
|
||||
self.grid.attach(self.labels[f"cpu_usage_{i}"], 0, self.current_row, 1, 1)
|
||||
self.scales[f"cpu_usage_{i}"] = Gtk.ProgressBar(
|
||||
hexpand=True, show_text=False, fraction=0
|
||||
)
|
||||
self.grid.attach(self.scales[f"cpu_usage_{i}"], 1, self.current_row, 1, 1)
|
||||
self.current_row += 1
|
||||
|
||||
self.labels["memory_usage"] = Gtk.Label(label="", xalign=0)
|
||||
self.grid.attach(self.labels["memory_usage"], 0, self.current_row, 1, 1)
|
||||
self.scales["memory_usage"] = Gtk.ProgressBar(
|
||||
hexpand=True, show_text=False, fraction=0
|
||||
)
|
||||
self.grid.attach(self.scales["memory_usage"], 1, self.current_row, 1, 1)
|
||||
self.current_row += 1
|
||||
|
||||
self.grid.attach(Gtk.Separator(), 0, self.current_row, 2, 1)
|
||||
self.current_row += 1
|
||||
self.populate_info(sysinfo)
|
||||
|
||||
scroll = self._gtk.ScrolledWindow()
|
||||
scroll.add(self.grid)
|
||||
self.content.add(scroll)
|
||||
|
||||
def set_mem_multiplier(self, data):
|
||||
memory_units = data.get("memory_units", "kB").lower()
|
||||
units_mapping = {
|
||||
"kb": 1024,
|
||||
"mb": 1024**2,
|
||||
"gb": 1024**3,
|
||||
"tb": 1024**4,
|
||||
"pb": 1024**5,
|
||||
}
|
||||
self.mem_multiplier = units_mapping.get(memory_units, 1)
|
||||
|
||||
def add_label_to_grid(self, text, column, bold=False):
|
||||
if bold:
|
||||
text = f"<b>{text}</b>"
|
||||
@ -28,12 +71,12 @@ class Panel(ScreenPanel):
|
||||
self.current_row += 1
|
||||
|
||||
def populate_info(self, sysinfo):
|
||||
logging.debug(sysinfo.items())
|
||||
for category, data in sysinfo.items():
|
||||
if category == "python":
|
||||
self.add_label_to_grid(self.prettify(category), 0, bold=True)
|
||||
self.current_row -= 1
|
||||
self.add_label_to_grid(
|
||||
f'Version: {data["version"][0]}.{data["version"][1]}', 1
|
||||
f'Version: {data["version_string"].split(" ")[0]}', 1
|
||||
)
|
||||
continue
|
||||
|
||||
@ -57,16 +100,9 @@ class Panel(ScreenPanel):
|
||||
if key in ("version_parts", "memory_units") or not value:
|
||||
continue
|
||||
if key == "total_memory":
|
||||
memory_units = data.get("memory_units", "kB").lower()
|
||||
units_mapping = {
|
||||
"kb": 1024,
|
||||
"mb": 1024**2,
|
||||
"gb": 1024**3,
|
||||
"tb": 1024**4,
|
||||
"pb": 1024**5,
|
||||
}
|
||||
multiplier = units_mapping.get(memory_units, 1)
|
||||
value = self.format_size(int(value) * multiplier)
|
||||
if not self.mem_multiplier:
|
||||
self.set_mem_multiplier(data)
|
||||
value = self.format_size(int(value) * self.mem_multiplier)
|
||||
if isinstance(value, dict):
|
||||
self.add_label_to_grid(self.prettify(key), 0)
|
||||
self.current_row -= 1
|
||||
@ -77,7 +113,6 @@ class Panel(ScreenPanel):
|
||||
isinstance(sub_value, list)
|
||||
and sub_key == "ip_addresses"
|
||||
):
|
||||
logging.info(sub_value)
|
||||
for _ip in sub_value:
|
||||
self.add_label_to_grid(
|
||||
f"{self.prettify(sub_key)}: {_ip['address']}", 1
|
||||
@ -88,3 +123,28 @@ class Panel(ScreenPanel):
|
||||
)
|
||||
else:
|
||||
self.add_label_to_grid(f"{self.prettify(key)}: {value}", 1)
|
||||
|
||||
def process_update(self, action, data):
|
||||
if action == "notify_proc_stat_update":
|
||||
self.labels["cpu_usage"].set_label(
|
||||
f'CPU: {data["system_cpu_usage"]["cpu"]:.0f}%'
|
||||
)
|
||||
self.scales["cpu_usage"].set_fraction(
|
||||
float(data["system_cpu_usage"]["cpu"]) / 100
|
||||
)
|
||||
for i in range(self.cpu_count):
|
||||
self.labels[f"cpu_usage_{i}"].set_label(
|
||||
f'CPU {i}: {data["system_cpu_usage"][f"cpu{i}"]:.0f}%'
|
||||
)
|
||||
self.scales[f"cpu_usage_{i}"].set_fraction(
|
||||
float(data["system_cpu_usage"][f"cpu{i}"]) / 100
|
||||
)
|
||||
|
||||
self.labels["memory_usage"].set_label(
|
||||
_("Memory")
|
||||
+ f': {(data["system_memory"]["used"] / data["system_memory"]["total"]) * 100:.0f}%'
|
||||
)
|
||||
self.scales["memory_usage"].set_fraction(
|
||||
float(data["system_memory"]["used"])
|
||||
/ float(data["system_memory"]["total"])
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user