Added maximum threshold for NVMe/SMART attributes

* Fixes issue #95
This commit is contained in:
2Shirt 2019-03-05 19:34:44 -07:00
parent 68a3b6d0c7
commit d5dc453ffa
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
3 changed files with 40 additions and 25 deletions

View file

@ -27,11 +27,12 @@ global_vars = {}
# STATIC VARIABLES
COLORS = {
'CLEAR': '\033[0m',
'RED': '\033[31m',
'RED': '\033[31m',
'ORANGE': '\033[31;1m',
'GREEN': '\033[32m',
'YELLOW': '\033[33m',
'BLUE': '\033[34m',
'PURPLE': '\033[35m',
'CYAN': '\033[36m',
}
try:

View file

@ -156,18 +156,23 @@ class DiskObj():
items = self.smart_attributes.items()
for k, v in items:
if k in ATTRIBUTES[attr_type]:
if 'Error' not in ATTRIBUTES[attr_type][k]:
# Only worried about error thresholds
if not ATTRIBUTES[attr_type][k]['Error']:
# Informational attribute, skip
continue
if ATTRIBUTES[attr_type][k].get('Ignore', False):
if ATTRIBUTES[attr_type][k]['Ignore']:
# Attribute is non-failing, skip
continue
if v['raw'] >= ATTRIBUTES[attr_type][k]['Error']:
self.disk_ok = False
if (ATTRIBUTES[attr_type][k]['Maximum']
and v['raw'] >= ATTRIBUTES[attr_type][k]['Maximum']):
# Non-standard value, skip
continue
else:
self.disk_ok = False
# Disable override if necessary
override_disabled |= ATTRIBUTES[attr_type][k].get(
'Critical', False)
# Disable override if necessary
override_disabled |= ATTRIBUTES[attr_type][k].get(
'Critical', False)
# SMART overall assessment
## NOTE: Only fail drives if the overall value exists and reports failed
@ -262,10 +267,12 @@ class DiskObj():
n=v['name'][:28])
# Set color
for _t, _c in [['Warning', 'YELLOW'], ['Error', 'RED']]:
if _t in ATTRIBUTES[attr_type][k]:
for _t, _c in ATTRIBUTE_COLORS:
if ATTRIBUTES[attr_type][k][_t]:
if v['raw'] >= ATTRIBUTES[attr_type][k][_t]:
_color = COLORS[_c]
if _t == 'Maximum':
_note = '(invalid?)'
# 199/C7 warning
if str(k) == '199' and v['raw'] > 0:

View file

@ -1,5 +1,7 @@
# Wizard Kit: Settings - HW Diagnostics
from collections import OrderedDict
# General
OVERRIDES_FORCED = False
OVERRIDES_LIMITED = True # If True this disables OVERRIDE_FORCED
@ -67,25 +69,30 @@ IO_VARS = {
# Tests: NVMe/SMART
ATTRIBUTES = {
'NVMe': {
'critical_warning': {'Error': 1, 'Critical': True},
'media_errors': {'Error': 1, 'Critical': True},
'power_on_hours': {'Warning': 12000, 'Error': 26298, 'Ignore': True},
'unsafe_shutdowns': {'Warning': 1},
'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, },
'unsafe_shutdowns': {'Critical': False, 'Ignore': True, 'Warning': 1, 'Error': None, 'Maximum': None, },
},
'SMART': {
5: {'Hex': '05', 'Error': 1, 'Critical': True},
9: {'Hex': '09', 'Warning': 12000, 'Error': 26298, 'Ignore': True},
10: {'Hex': '0A', 'Error': 1},
184: {'Hex': 'B8', 'Error': 1},
187: {'Hex': 'BB', 'Error': 1},
188: {'Hex': 'BC', 'Error': 1},
196: {'Hex': 'C4', 'Error': 1},
197: {'Hex': 'C5', 'Error': 1, 'Critical': True},
198: {'Hex': 'C6', 'Error': 1, 'Critical': True},
199: {'Hex': 'C7', 'Error': 1, 'Ignore': True},
201: {'Hex': 'C9', 'Error': 1},
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, },
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, },
188: {'Hex': 'BC', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
196: {'Hex': 'C4', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
197: {'Hex': 'C5', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
198: {'Hex': 'C6', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
199: {'Hex': 'C7', 'Critical': False, 'Ignore': True, 'Warning': None, 'Error': 1, 'Maximum': None, },
201: {'Hex': 'C9', 'Critical': False, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': 10000, },
},
}
ATTRIBUTE_COLORS = (
('Error', 'RED'),
('Maximum', 'PURPLE'),
('Warning', 'YELLOW'),
)
KEY_NVME = 'nvme_smart_health_information_log'
KEY_SMART = 'ata_smart_attributes'