diff --git a/panels/system.py b/panels/system.py index 31359b94..526292f5 100644 --- a/panels/system.py +++ b/panels/system.py @@ -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"{text}" @@ -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"]) + )