parent
68a3b6d0c7
commit
d5dc453ffa
3 changed files with 40 additions and 25 deletions
|
|
@ -27,11 +27,12 @@ global_vars = {}
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
COLORS = {
|
COLORS = {
|
||||||
'CLEAR': '\033[0m',
|
'CLEAR': '\033[0m',
|
||||||
'RED': '\033[31m',
|
'RED': '\033[31m',
|
||||||
'ORANGE': '\033[31;1m',
|
'ORANGE': '\033[31;1m',
|
||||||
'GREEN': '\033[32m',
|
'GREEN': '\033[32m',
|
||||||
'YELLOW': '\033[33m',
|
'YELLOW': '\033[33m',
|
||||||
'BLUE': '\033[34m',
|
'BLUE': '\033[34m',
|
||||||
|
'PURPLE': '\033[35m',
|
||||||
'CYAN': '\033[36m',
|
'CYAN': '\033[36m',
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -156,18 +156,23 @@ class DiskObj():
|
||||||
items = self.smart_attributes.items()
|
items = self.smart_attributes.items()
|
||||||
for k, v in items:
|
for k, v in items:
|
||||||
if k in ATTRIBUTES[attr_type]:
|
if k in ATTRIBUTES[attr_type]:
|
||||||
if 'Error' not in ATTRIBUTES[attr_type][k]:
|
if not ATTRIBUTES[attr_type][k]['Error']:
|
||||||
# Only worried about error thresholds
|
# Informational attribute, skip
|
||||||
continue
|
continue
|
||||||
if ATTRIBUTES[attr_type][k].get('Ignore', False):
|
if ATTRIBUTES[attr_type][k]['Ignore']:
|
||||||
# Attribute is non-failing, skip
|
# Attribute is non-failing, skip
|
||||||
continue
|
continue
|
||||||
if v['raw'] >= ATTRIBUTES[attr_type][k]['Error']:
|
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
|
# Disable override if necessary
|
||||||
override_disabled |= ATTRIBUTES[attr_type][k].get(
|
override_disabled |= ATTRIBUTES[attr_type][k].get(
|
||||||
'Critical', False)
|
'Critical', False)
|
||||||
|
|
||||||
# SMART overall assessment
|
# SMART overall assessment
|
||||||
## NOTE: Only fail drives if the overall value exists and reports failed
|
## NOTE: Only fail drives if the overall value exists and reports failed
|
||||||
|
|
@ -262,10 +267,12 @@ class DiskObj():
|
||||||
n=v['name'][:28])
|
n=v['name'][:28])
|
||||||
|
|
||||||
# Set color
|
# Set color
|
||||||
for _t, _c in [['Warning', 'YELLOW'], ['Error', 'RED']]:
|
for _t, _c in ATTRIBUTE_COLORS:
|
||||||
if _t in ATTRIBUTES[attr_type][k]:
|
if ATTRIBUTES[attr_type][k][_t]:
|
||||||
if v['raw'] >= ATTRIBUTES[attr_type][k][_t]:
|
if v['raw'] >= ATTRIBUTES[attr_type][k][_t]:
|
||||||
_color = COLORS[_c]
|
_color = COLORS[_c]
|
||||||
|
if _t == 'Maximum':
|
||||||
|
_note = '(invalid?)'
|
||||||
|
|
||||||
# 199/C7 warning
|
# 199/C7 warning
|
||||||
if str(k) == '199' and v['raw'] > 0:
|
if str(k) == '199' and v['raw'] > 0:
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
# Wizard Kit: Settings - HW Diagnostics
|
# Wizard Kit: Settings - HW Diagnostics
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
# General
|
# General
|
||||||
OVERRIDES_FORCED = False
|
OVERRIDES_FORCED = False
|
||||||
OVERRIDES_LIMITED = True # If True this disables OVERRIDE_FORCED
|
OVERRIDES_LIMITED = True # If True this disables OVERRIDE_FORCED
|
||||||
|
|
@ -67,25 +69,30 @@ IO_VARS = {
|
||||||
# Tests: NVMe/SMART
|
# Tests: NVMe/SMART
|
||||||
ATTRIBUTES = {
|
ATTRIBUTES = {
|
||||||
'NVMe': {
|
'NVMe': {
|
||||||
'critical_warning': {'Error': 1, 'Critical': True},
|
'critical_warning': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
'media_errors': {'Error': 1, 'Critical': True},
|
'media_errors': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
'power_on_hours': {'Warning': 12000, 'Error': 26298, 'Ignore': True},
|
'power_on_hours': {'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, },
|
||||||
'unsafe_shutdowns': {'Warning': 1},
|
'unsafe_shutdowns': {'Critical': False, 'Ignore': True, 'Warning': 1, 'Error': None, 'Maximum': None, },
|
||||||
},
|
},
|
||||||
'SMART': {
|
'SMART': {
|
||||||
5: {'Hex': '05', 'Error': 1, 'Critical': True},
|
5: {'Hex': '05', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
9: {'Hex': '09', 'Warning': 12000, 'Error': 26298, 'Ignore': True},
|
9: {'Hex': '09', 'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, },
|
||||||
10: {'Hex': '0A', 'Error': 1},
|
10: {'Hex': '10', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
184: {'Hex': 'B8', 'Error': 1},
|
184: {'Hex': 'B8', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
187: {'Hex': 'BB', 'Error': 1},
|
187: {'Hex': 'BB', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
188: {'Hex': 'BC', 'Error': 1},
|
188: {'Hex': 'BC', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
196: {'Hex': 'C4', 'Error': 1},
|
196: {'Hex': 'C4', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
197: {'Hex': 'C5', 'Error': 1, 'Critical': True},
|
197: {'Hex': 'C5', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
198: {'Hex': 'C6', 'Error': 1, 'Critical': True},
|
198: {'Hex': 'C6', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
199: {'Hex': 'C7', 'Error': 1, 'Ignore': True},
|
199: {'Hex': 'C7', 'Critical': False, 'Ignore': True, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
201: {'Hex': 'C9', 'Error': 1},
|
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_NVME = 'nvme_smart_health_information_log'
|
||||||
KEY_SMART = 'ata_smart_attributes'
|
KEY_SMART = 'ata_smart_attributes'
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue