From 8001ed3ada13eb9799442a258d7c1a5f17633029 Mon Sep 17 00:00:00 2001 From: tobi-wan-kenobi Date: Tue, 27 Apr 2021 17:16:54 +0200 Subject: [PATCH] [modules/cpu] Add per-cpu mode By explicitly setting "cpu.percpu=True" as parameter, it is now possible to get the CPU utilization on a per-cpu basis. Future extension: One widget per CPU (add ID of CPU and add warning/error state on a per CPU basis) see #785 --- bumblebee_status/modules/core/cpu.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/bumblebee_status/modules/core/cpu.py b/bumblebee_status/modules/core/cpu.py index 59c6e71..51dc695 100644 --- a/bumblebee_status/modules/core/cpu.py +++ b/bumblebee_status/modules/core/cpu.py @@ -12,6 +12,7 @@ Parameters: * cpu.warning : Warning threshold in % of CPU usage (defaults to 70%) * cpu.critical: Critical threshold in % of CPU usage (defaults to 80%) * cpu.format : Format string (defaults to '{:.01f}%') + * cpu.percpu : If set to true, show each individual cpu (defaults to false) """ import psutil @@ -20,28 +21,37 @@ import core.module import core.widget import core.input +import util.format + class Module(core.module.Module): def __init__(self, config, theme): super().__init__(config, theme, core.widget.Widget(self.utilization)) - self.widget().set("theme.minwidth", self._format.format(100.0 - 10e-20)) - self._utilization = psutil.cpu_percent(percpu=False) + self._percpu = util.format.asbool(self.parameter("percpu", False)) + self.update() + self.widget().set("theme.minwidth", self._format.format(*[100.0 - 10e-20]*len(self._utilization))) core.input.register( self, button=core.input.LEFT_MOUSE, cmd="gnome-system-monitor" ) @property def _format(self): - return self.parameter("format", "{:.01f}%") + fmt = self.parameter("format", "{:.01f}%") + if self._percpu: + fmt = [fmt]*len(self._utilization) + fmt = " ".join(fmt) + return fmt def utilization(self, _): - return self._format.format(self._utilization) + return self._format.format(*self._utilization) def update(self): - self._utilization = psutil.cpu_percent(percpu=False) + self._utilization = psutil.cpu_percent(percpu=self._percpu) + if not self._percpu: + self._utilization = [self._utilization] def state(self, _): - return self.threshold_state(self._utilization, 70, 80) + return self.threshold_state(sum(self._utilization)/len(self._utilization), 70, 80) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4