This commit is contained in:
= 2025-08-18 23:04:57 -04:00
commit 27c3ff40e1

View file

@ -16,6 +16,14 @@ class DiskMonitor:
self.max_history_size = hysterisis_time self.max_history_size = hysterisis_time
def get(self): def get(self):
"""
Gets the percentage of the system's disk throughput for reading and writing.
Returns:
A tuple containing the percentages of the system's disk throughput for reading
and writing data as floats between 0.0 and 1.0. This is a ratio based on
the highest disk throughput rate over the history of the monitor.
"""
try: try:
disk_io = psutil.disk_io_counters() disk_io = psutil.disk_io_counters()
read_usage = disk_io.read_bytes read_usage = disk_io.read_bytes
@ -52,6 +60,14 @@ class NetworkMonitor:
self.max_history_size = hysterisis_time self.max_history_size = hysterisis_time
def get(self): def get(self):
"""
Gets the percentage of the system's network usage.
Returns:
A tuple containing the percentages of the system's network usage for sending
and receiving data as floats between 0.0 and 1.0. This is a ratio based on
the highest network usage rate over the history of the monitor.
"""
try: try:
net_io = psutil.net_io_counters() net_io = psutil.net_io_counters()
sent_usage = net_io.bytes_sent sent_usage = net_io.bytes_sent
@ -86,6 +102,12 @@ class CPUMonitor:
self.max_history_size = hysterisis_time self.max_history_size = hysterisis_time
def get(self): def get(self):
"""
Gets the percentage of the system's CPU usage per core.
Returns:
A list of values between 0.0 and 1.0 which is scaled to the CPU usage per core
"""
try: try:
cpu_usage = psutil.cpu_percent(percpu=True) cpu_usage = psutil.cpu_percent(percpu=True)
for i in range(self.cpu_count): for i in range(self.cpu_count):
@ -108,12 +130,24 @@ class CPUMonitor:
class MemoryMonitor: class MemoryMonitor:
@staticmethod @staticmethod
def get(): def get():
"""
Gets the percentage of the system's memory usage.
Returns:
A value between 0.0 and 1.0 which is scaled to the memory usage
"""
return psutil.virtual_memory().percent / 100.0 return psutil.virtual_memory().percent / 100.0
class BatteryMonitor: class BatteryMonitor:
@staticmethod @staticmethod
def get(): def get():
"""
Gets the percentage of the battery's charge and whether it is plugged in.
Returns:
A tuple containing the battery percentage as a float between 0.0 and 1.0 and whether it is plugged in
"""
battery = psutil.sensors_battery() battery = psutil.sensors_battery()
if battery is not None: if battery is not None:
battery_percentage = battery.percent / 100.0 battery_percentage = battery.percent / 100.0
@ -126,16 +160,34 @@ class BatteryMonitor:
def get_monitor_brightness(): def get_monitor_brightness():
"""
Gets the brightness of the main laptop display so that we can scale the LED Matrix
brightness to match. Handles operating system or configuration specific logic to
retrieve the brightness value.
Returns:
A value between 0.0 and 1.0 which is scaled to the monitor's brightness
"""
brightness_value = 1.0
try: try:
if os.name == 'nt': if os.name == 'nt':
return wmi.WMI(namespace='wmi').WmiMonitorBrightness()[0].CurrentBrightness / 100.0 return wmi.WMI(namespace='wmi').WmiMonitorBrightness()[0].CurrentBrightness / 100.0
else: else:
try: # First try the dGPU brightness try: # First try the dGPU brightness
return int(open('/sys/class/backlight/amdgpu_bl2/brightness', 'r').read()) / 255.0 brightness_value = int(open('/sys/class/backlight/amdgpu_bl2/brightness', 'r').read()) / 255.0
except: # If that doesn't work, try the iGPU brightness except: # If that doesn't work, try the iGPU brightness
return int(open('/sys/class/backlight/amdgpu_bl1/brightness', 'r').read()) / 255.0 brightness_value = int(open('/sys/class/backlight/amdgpu_bl1/brightness', 'r').read()) / 255.0
except Exception as e: except Exception as e:
return 1.0 print(f"Error in get_monitor_brightness(): {e}")
if brightness_value < 0.0:
print(f"Invalid brightness value returned by get_monitor_brightness(): {brightness_value}")
brightness_value = 0.0
elif brightness_value > 1.0:
print(f"Invalid brightness value returned by get_monitor_brightness(): {brightness_value}")
brightness_value = 1.0
return brightness_value
if __name__ == "__main__": if __name__ == "__main__":
print(get_monitor_brightness()) print(get_monitor_brightness())