diff --git a/.bin/Scripts/functions/hw_diags.py b/.bin/Scripts/functions/hw_diags.py index 39551a56..bf3a0c6c 100644 --- a/.bin/Scripts/functions/hw_diags.py +++ b/.bin/Scripts/functions/hw_diags.py @@ -166,6 +166,18 @@ class DiskObj(): # self.dd_skip_extra == 0 is fine pass + def is_aging(self): + """Check if power-on hours is above the threshold, returns bool.""" + if self.nvme_attributes: + poh = self.nvme_attributes.get('power_on_hours', {}).get('raw', -1) + elif self.smart_attributes: + poh = self.smart_attributes.get(9, {}).get('raw', -1) + + error_thresh = ATTRIBUTES['SMART'][9]['Error'] + max_thresh = ATTRIBUTES['SMART'][9]['Maximum'] + + return error_thresh <= poh < max_thresh + def check_attributes(self): """Check NVMe / SMART attributes for errors, returns bool.""" attr_type = self.attr_type @@ -1745,6 +1757,9 @@ def run_nvme_smart_tests(state, test, update_mode=False): if test.failed and not update_mode: for t in ['badblocks', 'I/O Benchmark']: dev.disable_test(t, 'Denied') + if dev.is_aging() and not update_mode: + test.failed = True + test.update_status('FAIL') # Done update_progress_pane(state) diff --git a/.bin/Scripts/settings/hw_diags.py b/.bin/Scripts/settings/hw_diags.py index 04eb9faa..2d6104f3 100644 --- a/.bin/Scripts/settings/hw_diags.py +++ b/.bin/Scripts/settings/hw_diags.py @@ -76,12 +76,12 @@ ATTRIBUTES = { 'NVMe': { 'critical_warning': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, 'media_errors': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, - 'power_on_hours': {'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, }, + 'power_on_hours': {'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': 122724,}, 'unsafe_shutdowns': {'Critical': False, 'Ignore': True, 'Warning': 1, 'Error': None, 'Maximum': None, }, }, 'SMART': { 5: {'Hex': '05', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, - 9: {'Hex': '09', 'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, }, + 9: {'Hex': '09', 'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': 122724,}, 10: {'Hex': '10', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, 184: {'Hex': 'B8', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, 187: {'Hex': 'BB', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },