mirror of
https://github.com/FAUSheppy/icinga-webhook-gateway
synced 2025-12-06 07:21:38 +01:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
def normalize(smart):
|
|
'''Load different types of SMART outputs'''
|
|
|
|
ret = dict()
|
|
ret.update({ "temperature" : 0 })
|
|
ret.update({ "critical_warning" : 0 })
|
|
ret.update({ "unsafe_shutdowns" : 0 })
|
|
ret.update({ "power_cycles" : 0 })
|
|
ret.update({ "power_on_hours" : 0 })
|
|
ret.update({ "available_spare" : 100 })
|
|
ret.update({ "wearleveling_count" : 100 })
|
|
|
|
if "ata_smart_attributes" in smart:
|
|
|
|
# get main table #
|
|
table = smart["ata_smart_attributes"]["table"]
|
|
|
|
# temperatur #
|
|
ret["temperature"] = smart["temperature"]["current"]
|
|
|
|
for el in table:
|
|
|
|
# look for relevant metrics #
|
|
name = el["name"].lower()
|
|
target_name = el["name"].lower() # name in return map
|
|
|
|
# handle value mapping #
|
|
use_raw = False
|
|
if name == "used_rsvd_blk_cnt_tot":
|
|
target_name = "available_spare"
|
|
elif name == "power_cylce_count":
|
|
target_name = "power_cycles"
|
|
use_raw = True
|
|
elif name == "power_on_hours":
|
|
target_name = "power_on_hours"
|
|
use_raw = True
|
|
elif name == "perc_avail_resrvd_space":
|
|
target_name = "available_spare"
|
|
|
|
# check if metric should be recorded #
|
|
if target_name in ret:
|
|
|
|
# set return dict #
|
|
if use_raw:
|
|
value = el["raw"]["value"]
|
|
else:
|
|
value = el["value"]
|
|
|
|
ret[target_name] = value
|
|
|
|
if ret["critical_warning"] == 0 and "smart_status" in smart:
|
|
ret["critical_warning"] = int(not smart["smart_status"]["passed"])
|
|
|
|
return ret
|