diff --git a/src/system-health/health_checker/hardware_checker.py b/src/system-health/health_checker/hardware_checker.py index 575564de8733..59e47fa26733 100644 --- a/src/system-health/health_checker/hardware_checker.py +++ b/src/system-health/health_checker/hardware_checker.py @@ -239,6 +239,18 @@ def _check_psu_status(self, config): voltage_min_th, voltage_max_th)) continue + + if not self._ignore_check(config.ignore_devices, 'psu', name, 'power_threshold'): + power_overload = data_dict.get('power_overload', None) + if power_overload == 'True': + try: + power = data_dict['power'] + power_critical_threshold = data_dict['power_critical_threshold'] + self.set_object_not_ok('PSU', name, 'power of {} ({}w) exceeds threshold ({}w)'.format(name, power, power_critical_threshold)) + except KeyError: + self.set_object_not_ok('PSU', name, 'power of {} exceeds threshold but power or power_critical_threshold is invalid'.format(name)) + continue + self.set_object_ok('PSU', name) def reset(self): diff --git a/src/system-health/tests/test_system_health.py b/src/system-health/tests/test_system_health.py index ab0a3bcb1145..73beb99cae83 100644 --- a/src/system-health/tests/test_system_health.py +++ b/src/system-health/tests/test_system_health.py @@ -362,6 +362,30 @@ def test_hardware_checker(): 'voltage': '10', 'voltage_min_threshold': '12', 'voltage_max_threshold': '15', + }, + 'PSU_INFO|PSU 6': { + 'presence': 'True', + 'status': 'True', + 'temp': '55', + 'temp_threshold': '100', + 'voltage': '12', + 'voltage_min_threshold': '12', + 'voltage_max_threshold': '15', + 'power_overload': 'True', + 'power': '101.0', + 'power_critical_threshold': '100.0', + 'power_warning_suppress_threshold': '90.0' + }, + 'PSU_INFO|PSU 7': { + 'presence': 'True', + 'status': 'True', + 'temp': '55', + 'temp_threshold': '100', + 'voltage': '12', + 'voltage_min_threshold': '12', + 'voltage_max_threshold': '15', + 'power_overload': 'True', + 'power': '101.0' } }) @@ -400,6 +424,14 @@ def test_hardware_checker(): assert 'PSU 5' in checker._info assert checker._info['PSU 5'][HealthChecker.INFO_FIELD_OBJECT_STATUS] == HealthChecker.STATUS_NOT_OK + assert 'PSU 6' in checker._info + assert checker._info['PSU 6'][HealthChecker.INFO_FIELD_OBJECT_MSG] == 'power of PSU 6 (101.0w) exceeds threshold (100.0w)' + assert checker._info['PSU 6'][HealthChecker.INFO_FIELD_OBJECT_STATUS] == HealthChecker.STATUS_NOT_OK + + assert 'PSU 7' in checker._info + assert checker._info['PSU 7'][HealthChecker.INFO_FIELD_OBJECT_STATUS] == HealthChecker.STATUS_NOT_OK + assert checker._info['PSU 7'][HealthChecker.INFO_FIELD_OBJECT_MSG] == 'power of PSU 7 exceeds threshold but power or power_critical_threshold is invalid' + def test_config(): config = Config()