From 9bf897f6471e5b0b66e91f3ff17030a2e6558cca Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 13:03:46 +0700 Subject: [PATCH 01/24] feat: add System Monitor plugin for hardware telemetry Implemented a new sensor plugin to monitor CPU usage, Memory, and Temperature. Added mock mode for cross-platform compatibility --- src/plugins/sensors/system_monitor.py | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/plugins/sensors/system_monitor.py diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py new file mode 100644 index 000000000..cf04aad2e --- /dev/null +++ b/src/plugins/sensors/system_monitor.py @@ -0,0 +1,58 @@ +import psutil +import time +import logging +from src.plugins.base import BasePlugin + +# Setup logger for the plugin +logger = logging.getLogger(__name__) + +class SystemMonitorPlugin(BasePlugin): + """ + SystemMonitorPlugin: Monitors hardware health (CPU, RAM, Temperature). + This allows the AI Agent to be aware of its physical constraints. + """ + def __init__(self, config=None): + super().__init__(config) + self.name = "system_monitor" + # Check if we are in a limited environment (e.g., Docker or MacOS) + # to decide if we should use mock data for temperature + self.mock_mode = config.get("mock_mode", False) if config else False + + def get_data(self): + """ + Collects current system metrics. + Returns: + dict: A dictionary containing CPU, Memory, and Temperature data. + """ + try: + data = { + "cpu_usage_percent": psutil.cpu_percent(interval=0.5), + "memory_usage_percent": psutil.virtual_memory().percent, + "temperature_c": self._get_temp(), + "status": "healthy", + "timestamp": time.time() + } + return data + except Exception as e: + logger.error(f"Failed to collect system metrics: {e}") + return {"status": "error", "message": str(e)} + + def _get_temp(self): + """ + Retrieves CPU temperature. + Note: Temperature sensors might not be available on all platforms. + """ + if self.mock_mode: + return 45.0 # Return a static safe temperature in mock mode + + try: + temps = psutil.sensors_temperatures() + # Try to find common CPU thermal zone names + for name in ['cpu_thermal', 'coretemp', 'soc_thermal']: + if name in temps: + return temps[name][0].current + return None # Temperature sensor not found + except AttributeError: + # psutil.sensors_temperatures is not available on Windows + logger.warning("Temperature sensors not supported on this platform. Switching to None.") + return None From f15e586d1b292feaf1f20d3df33a4b4bb365c040 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 13:20:43 +0700 Subject: [PATCH 02/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index cf04aad2e..7eed7a1d4 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -1,20 +1,24 @@ -import psutil -import time import logging +import time + +import psutil from src.plugins.base import BasePlugin + # Setup logger for the plugin logger = logging.getLogger(__name__) + class SystemMonitorPlugin(BasePlugin): """ SystemMonitorPlugin: Monitors hardware health (CPU, RAM, Temperature). This allows the AI Agent to be aware of its physical constraints. """ + def __init__(self, config=None): super().__init__(config) self.name = "system_monitor" - # Check if we are in a limited environment (e.g., Docker or MacOS) + # Check if we are in a limited environment (e.g., Docker or MacOS) # to decide if we should use mock data for temperature self.mock_mode = config.get("mock_mode", False) if config else False @@ -30,7 +34,7 @@ def get_data(self): "memory_usage_percent": psutil.virtual_memory().percent, "temperature_c": self._get_temp(), "status": "healthy", - "timestamp": time.time() + "timestamp": time.time(), } return data except Exception as e: @@ -39,20 +43,18 @@ def get_data(self): def _get_temp(self): """ - Retrieves CPU temperature. + Retrieves CPU temperature. Note: Temperature sensors might not be available on all platforms. """ if self.mock_mode: - return 45.0 # Return a static safe temperature in mock mode + return 45.0 try: temps = psutil.sensors_temperatures() - # Try to find common CPU thermal zone names - for name in ['cpu_thermal', 'coretemp', 'soc_thermal']: + for name in ["cpu_thermal", "coretemp", "soc_thermal"]: if name in temps: return temps[name][0].current - return None # Temperature sensor not found - except AttributeError: - # psutil.sensors_temperatures is not available on Windows - logger.warning("Temperature sensors not supported on this platform. Switching to None.") + return None + except (AttributeError, Exception): + logger.warning("Temperature sensors not supported on this platform.") return None From 0c72a84386887400fb038469937e56021dbf7726 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 13:26:20 +0700 Subject: [PATCH 03/24] Update system_monitor.py From df38b1095f9c7b659412342582221e402865cb52 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 13:32:31 +0700 Subject: [PATCH 04/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 7eed7a1d4..78e02c6db 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -12,6 +12,7 @@ class SystemMonitorPlugin(BasePlugin): """ SystemMonitorPlugin: Monitors hardware health (CPU, RAM, Temperature). + This allows the AI Agent to be aware of its physical constraints. """ @@ -25,6 +26,7 @@ def __init__(self, config=None): def get_data(self): """ Collects current system metrics. + Returns: dict: A dictionary containing CPU, Memory, and Temperature data. """ @@ -44,6 +46,7 @@ def get_data(self): def _get_temp(self): """ Retrieves CPU temperature. + Note: Temperature sensors might not be available on all platforms. """ if self.mock_mode: From 4e5236daa7ab5efd4244520aae5a0a51f626ea2c Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 13:39:28 +0700 Subject: [PATCH 05/24] Update system_monitor.py From 1d298e25ca11a953b8261c5778cc9aa55de4a4ac Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 13:48:32 +0700 Subject: [PATCH 06/24] Update system_monitor.py From c12ff813ed2983c652c81fa9406705462080c76a Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 13:54:16 +0700 Subject: [PATCH 07/24] Update system_monitor.py From 1ad185abb56cb2d868d0b8c575508d886e573d0e Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:01:52 +0700 Subject: [PATCH 08/24] Update system_monitor.py From 3b77a2cebd28246fcdf9bd3e4d38aff65e45ec73 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:11:00 +0700 Subject: [PATCH 09/24] Update system_monitor.py From 91c266f5a68ddfacfff4c55274d7fcecb8960533 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:19:05 +0700 Subject: [PATCH 10/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 78e02c6db..5169bb092 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -39,13 +39,14 @@ def get_data(self): "timestamp": time.time(), } return data - except Exception as e: + except (psutil.Error, RuntimeError) as e: + # Narrowed exception to catch only psutil-related or runtime issues logger.error(f"Failed to collect system metrics: {e}") return {"status": "error", "message": str(e)} def _get_temp(self): """ - Retrieves CPU temperature. + Retrieves CPU temperature safely. Note: Temperature sensors might not be available on all platforms. """ @@ -58,6 +59,10 @@ def _get_temp(self): if name in temps: return temps[name][0].current return None - except (AttributeError, Exception): - logger.warning("Temperature sensors not supported on this platform.") + except (AttributeError, KeyError, psutil.AccessDenied): + # Caught specific errors: + # - AttributeError: sensors_temperatures not on all platforms + # - KeyError: missing thermal zone names + # - AccessDenied: permissions issue + logger.warning("Temperature sensors not supported or accessible.") return None From 21d3babf94d91ca430912e01e4c7682d9873c307 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:23:31 +0700 Subject: [PATCH 11/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 5169bb092..dbb53d188 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -60,9 +60,6 @@ def _get_temp(self): return temps[name][0].current return None except (AttributeError, KeyError, psutil.AccessDenied): - # Caught specific errors: - # - AttributeError: sensors_temperatures not on all platforms - # - KeyError: missing thermal zone names - # - AccessDenied: permissions issue + # Caught specific errors to avoid broad exception clauses logger.warning("Temperature sensors not supported or accessible.") return None From 0e6d4e365f340a9469f0b0ed52037edc95c0a5a2 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:26:00 +0700 Subject: [PATCH 12/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 68 +++++++++++++-------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index dbb53d188..ed725c614 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -24,42 +24,40 @@ def __init__(self, config=None): self.mock_mode = config.get("mock_mode", False) if config else False def get_data(self): - """ - Collects current system metrics. + """ + Collects current system metrics. - Returns: - dict: A dictionary containing CPU, Memory, and Temperature data. - """ - try: - data = { - "cpu_usage_percent": psutil.cpu_percent(interval=0.5), - "memory_usage_percent": psutil.virtual_memory().percent, - "temperature_c": self._get_temp(), - "status": "healthy", - "timestamp": time.time(), - } - return data - except (psutil.Error, RuntimeError) as e: - # Narrowed exception to catch only psutil-related or runtime issues - logger.error(f"Failed to collect system metrics: {e}") - return {"status": "error", "message": str(e)} + Returns: + dict: A dictionary containing CPU, Memory, and Temperature data. + """ + try: + data = { + "cpu_usage_percent": psutil.cpu_percent(interval=0.5), + "memory_usage_percent": psutil.virtual_memory().percent, + "temperature_c": self._get_temp(), + "status": "healthy", + "timestamp": time.time(), + } + return data + except psutil.Error as e: # Catch psutil-specific errors (e.g., AccessDenied, NoSuchProcess) + logger.error(f"Failed to collect system metrics: {e}") + return {"status": "error", "message": str(e)} def _get_temp(self): - """ - Retrieves CPU temperature safely. - - Note: Temperature sensors might not be available on all platforms. - """ - if self.mock_mode: - return 45.0 + """ + Retrieves CPU temperature. - try: - temps = psutil.sensors_temperatures() - for name in ["cpu_thermal", "coretemp", "soc_thermal"]: - if name in temps: - return temps[name][0].current - return None - except (AttributeError, KeyError, psutil.AccessDenied): - # Caught specific errors to avoid broad exception clauses - logger.warning("Temperature sensors not supported or accessible.") - return None + Note: Temperature sensors might not be available on all platforms. + """ + if self.mock_mode: + return 45.0 + + try: + temps = psutil.sensors_temperatures() + for name in ["cpu_thermal", "coretemp", "soc_thermal"]: + if name in temps: + return temps[name][0].current + return None + except AttributeError: # Specific to when sensors_temperatures() is unavailable + logger.warning("Temperature sensors not supported on this platform.") + return None From ed3441d13b480fbb9fa90b83296765086bf222a2 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:31:46 +0700 Subject: [PATCH 13/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 68 ++++++++++++++------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index ed725c614..c752b780a 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -24,40 +24,42 @@ def __init__(self, config=None): self.mock_mode = config.get("mock_mode", False) if config else False def get_data(self): - """ - Collects current system metrics. + """ + Collects current system metrics. - Returns: - dict: A dictionary containing CPU, Memory, and Temperature data. - """ - try: - data = { - "cpu_usage_percent": psutil.cpu_percent(interval=0.5), - "memory_usage_percent": psutil.virtual_memory().percent, - "temperature_c": self._get_temp(), - "status": "healthy", - "timestamp": time.time(), - } - return data - except psutil.Error as e: # Catch psutil-specific errors (e.g., AccessDenied, NoSuchProcess) - logger.error(f"Failed to collect system metrics: {e}") - return {"status": "error", "message": str(e)} + Returns: + dict: A dictionary containing CPU, Memory, and Temperature data. + """ + try: + data = { + "cpu_usage_percent": psutil.cpu_percent(interval=0.5), + "memory_usage_percent": psutil.virtual_memory().percent, + "temperature_c": self._get_temp(), + "status": "healthy", + "timestamp": time.time(), + } + return data + except (RuntimeError, AttributeError) as e: + # Caught specific exceptions instead of broad Exception class + logger.error(f"Failed to collect system metrics: {e}") + return {"status": "error", "message": str(e)} def _get_temp(self): - """ - Retrieves CPU temperature. + """ + Retrieves CPU temperature safely. - Note: Temperature sensors might not be available on all platforms. - """ - if self.mock_mode: - return 45.0 - - try: - temps = psutil.sensors_temperatures() - for name in ["cpu_thermal", "coretemp", "soc_thermal"]: - if name in temps: - return temps[name][0].current - return None - except AttributeError: # Specific to when sensors_temperatures() is unavailable - logger.warning("Temperature sensors not supported on this platform.") - return None + Note: Temperature sensors might not be available on all platforms. + """ + if self.mock_mode: + return 45.0 + + try: + temps = psutil.sensors_temperatures() + for name in ["cpu_thermal", "coretemp", "soc_thermal"]: + if name in temps: + return temps[name][0].current + return None + except (AttributeError, KeyError, PermissionError): + # Caught specific errors to avoid broad exception clauses (Ruff BLE001) + logger.warning("Temperature sensors not supported or accessible.") + return None From 1eb30d408b63b2cc782d2c862aaf5e8f86748dc3 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:39:05 +0700 Subject: [PATCH 14/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index c752b780a..6d5fa0d8f 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -2,6 +2,7 @@ import time import psutil + from src.plugins.base import BasePlugin @@ -39,9 +40,9 @@ def get_data(self): "timestamp": time.time(), } return data - except (RuntimeError, AttributeError) as e: - # Caught specific exceptions instead of broad Exception class - logger.error(f"Failed to collect system metrics: {e}") + except (RuntimeError, AttributeError, psutil.Error) as e: + # Avoid broad Exception; catch specific errors (Ruff BLE001) + logger.error("Failed to collect system metrics: %s", e) return {"status": "error", "message": str(e)} def _get_temp(self): @@ -59,7 +60,7 @@ def _get_temp(self): if name in temps: return temps[name][0].current return None - except (AttributeError, KeyError, PermissionError): - # Caught specific errors to avoid broad exception clauses (Ruff BLE001) + except (AttributeError, KeyError, PermissionError, psutil.Error): + # Caught specific errors to ensure system stability logger.warning("Temperature sensors not supported or accessible.") return None From f5d9c5269c873acf4e5fe8c8e14357bf724628e8 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 14:46:05 +0700 Subject: [PATCH 15/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 6d5fa0d8f..b403b56bd 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -5,7 +5,6 @@ from src.plugins.base import BasePlugin - # Setup logger for the plugin logger = logging.getLogger(__name__) @@ -17,14 +16,14 @@ class SystemMonitorPlugin(BasePlugin): This allows the AI Agent to be aware of its physical constraints. """ - def __init__(self, config=None): + def __init__(self, config: dict | None = None) -> None: super().__init__(config) self.name = "system_monitor" # Check if we are in a limited environment (e.g., Docker or MacOS) # to decide if we should use mock data for temperature self.mock_mode = config.get("mock_mode", False) if config else False - def get_data(self): + def get_data(self) -> dict[str, float | str]: """ Collects current system metrics. @@ -40,12 +39,11 @@ def get_data(self): "timestamp": time.time(), } return data - except (RuntimeError, AttributeError, psutil.Error) as e: - # Avoid broad Exception; catch specific errors (Ruff BLE001) - logger.error("Failed to collect system metrics: %s", e) + except psutil.Error as e: # Only psutil-specific errors (e.g., AccessDenied, NoSuchProcess) + logger.error(f"Failed to collect system metrics: {e}") return {"status": "error", "message": str(e)} - def _get_temp(self): + def _get_temp(self) -> float | None: """ Retrieves CPU temperature safely. @@ -60,7 +58,10 @@ def _get_temp(self): if name in temps: return temps[name][0].current return None - except (AttributeError, KeyError, PermissionError, psutil.Error): - # Caught specific errors to ensure system stability - logger.warning("Temperature sensors not supported or accessible.") + except (AttributeError, KeyError, psutil.AccessDenied) as e: + # Specific errors: + # - AttributeError: sensors_temperatures not on all platforms + # - KeyError: missing thermal zone names + # - AccessDenied: permissions issue + logger.warning(f"Temperature sensors not supported or accessible: {e}") return None From 8751c5f7399a9dcee0126f945b07c5ecfeb6b974 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 15:01:09 +0700 Subject: [PATCH 16/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index b403b56bd..cf665e84a 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -23,7 +23,7 @@ def __init__(self, config: dict | None = None) -> None: # to decide if we should use mock data for temperature self.mock_mode = config.get("mock_mode", False) if config else False - def get_data(self) -> dict[str, float | str]: + def get_data(self) -> dict: """ Collects current system metrics. @@ -39,8 +39,12 @@ def get_data(self) -> dict[str, float | str]: "timestamp": time.time(), } return data - except psutil.Error as e: # Only psutil-specific errors (e.g., AccessDenied, NoSuchProcess) - logger.error(f"Failed to collect system metrics: {e}") + except ( + AttributeError, # For unavailable sensors + psutil.Error, # For psutil-specific issues like AccessDenied + ) as e: + # Catch specific expected exceptions to prevent masking bugs + logger.error("Failed to collect system metrics: %s", e) return {"status": "error", "message": str(e)} def _get_temp(self) -> float | None: @@ -58,10 +62,10 @@ def _get_temp(self) -> float | None: if name in temps: return temps[name][0].current return None - except (AttributeError, KeyError, psutil.AccessDenied) as e: - # Specific errors: - # - AttributeError: sensors_temperatures not on all platforms - # - KeyError: missing thermal zone names - # - AccessDenied: permissions issue - logger.warning(f"Temperature sensors not supported or accessible: {e}") + except ( + AttributeError, # sensors_temperatures not implemented + KeyError, # Thermal name not found + psutil.Error, # General psutil errors including AccessDenied + ): + logger.warning("Temperature sensors not supported or accessible.") return None From df0ab2cef24ba6ade9ce4306fdefbd93cb241f2e Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 15:38:04 +0700 Subject: [PATCH 17/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index cf665e84a..4693f86ea 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -2,9 +2,9 @@ import time import psutil - from src.plugins.base import BasePlugin + # Setup logger for the plugin logger = logging.getLogger(__name__) @@ -16,14 +16,14 @@ class SystemMonitorPlugin(BasePlugin): This allows the AI Agent to be aware of its physical constraints. """ - def __init__(self, config: dict | None = None) -> None: + def __init__(self, config=None): super().__init__(config) self.name = "system_monitor" # Check if we are in a limited environment (e.g., Docker or MacOS) # to decide if we should use mock data for temperature self.mock_mode = config.get("mock_mode", False) if config else False - def get_data(self) -> dict: + def get_data(self): """ Collects current system metrics. @@ -39,15 +39,12 @@ def get_data(self) -> dict: "timestamp": time.time(), } return data - except ( - AttributeError, # For unavailable sensors - psutil.Error, # For psutil-specific issues like AccessDenied - ) as e: - # Catch specific expected exceptions to prevent masking bugs + except (RuntimeError, AttributeError, psutil.Error) as e: + # Avoid broad Exception; catch specific errors (Ruff BLE001) logger.error("Failed to collect system metrics: %s", e) return {"status": "error", "message": str(e)} - def _get_temp(self) -> float | None: + def _get_temp(self): """ Retrieves CPU temperature safely. @@ -62,10 +59,7 @@ def _get_temp(self) -> float | None: if name in temps: return temps[name][0].current return None - except ( - AttributeError, # sensors_temperatures not implemented - KeyError, # Thermal name not found - psutil.Error, # General psutil errors including AccessDenied - ): + except (AttributeError, KeyError, PermissionError, psutil.Error): + # Caught specific errors to ensure system stability logger.warning("Temperature sensors not supported or accessible.") return None From 594f7290072cb6147bd7ac9ba835fe00b73df9d8 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 15:46:34 +0700 Subject: [PATCH 18/24] Update system_monitor.py From b3d2fd895108ab3b78361a16ec9ae27beb12b960 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 17:19:04 +0700 Subject: [PATCH 19/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 4693f86ea..6d5fa0d8f 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -2,6 +2,7 @@ import time import psutil + from src.plugins.base import BasePlugin From c1bb7298f23aa94790d8f1af917ddfe7b5adc7c5 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 18:18:09 +0700 Subject: [PATCH 20/24] Update system_monitor.py From d3f42789f4703f302fa38edd38f083b03d404c4b Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 19:42:58 +0700 Subject: [PATCH 21/24] Update system_monitor.py From c38ee010265d93b15b045a105e7020793ff68912 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 20:43:33 +0700 Subject: [PATCH 22/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 6d5fa0d8f..9486682a6 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -3,7 +3,7 @@ import psutil -from src.plugins.base import BasePlugin +from ...base import BasePlugin # Relative import moves this to "Local" block # Setup logger for the plugin From 55335a2f4c780794e6085c91fe74e9ff33d211cd Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 21:05:52 +0700 Subject: [PATCH 23/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 9486682a6..4693f86ea 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -2,8 +2,7 @@ import time import psutil - -from ...base import BasePlugin # Relative import moves this to "Local" block +from src.plugins.base import BasePlugin # Setup logger for the plugin From fffd830f1642d4ffbc56100157a2a231fc8da382 Mon Sep 17 00:00:00 2001 From: nhson0110-coder Date: Sun, 11 Jan 2026 21:21:11 +0700 Subject: [PATCH 24/24] Update system_monitor.py --- src/plugins/sensors/system_monitor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/sensors/system_monitor.py b/src/plugins/sensors/system_monitor.py index 4693f86ea..810662c4a 100644 --- a/src/plugins/sensors/system_monitor.py +++ b/src/plugins/sensors/system_monitor.py @@ -2,7 +2,8 @@ import time import psutil -from src.plugins.base import BasePlugin + +from ...base import BasePlugin # Setup logger for the plugin