64 lines
1.6 KiB
Python
Executable File
64 lines
1.6 KiB
Python
Executable File
#!/usr/bin/python3
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
import re
|
|
from pprint import pprint
|
|
|
|
TEMP_RE = re.compile("temp\d_input")
|
|
|
|
threshold_warning = 70
|
|
threshold_critical = 80
|
|
|
|
exit_code=3
|
|
message="Unknown problem occured during execution"
|
|
|
|
try:
|
|
|
|
def check_values(d):
|
|
warning = False
|
|
critical = False
|
|
for value in d.values():
|
|
if value >= threshold_warning:
|
|
warning = True
|
|
if value >= threshold_critical:
|
|
critical = True
|
|
if critical: return 2
|
|
if warning: return 1
|
|
return 0
|
|
|
|
def format_dict(d):
|
|
result = ""
|
|
for key, value in d.items():
|
|
result += f"|'{key}'={value}°C;{threshold_warning};{threshold_critical}\n"
|
|
return result
|
|
|
|
def get_data():
|
|
json_data = subprocess.run(["sensors", "-Aj"], capture_output=True).stdout
|
|
parsed = json.loads(json_data)
|
|
|
|
stats = {}
|
|
|
|
for adapter, data in parsed.items():
|
|
for sensor, data in data.items():
|
|
temp_value = None
|
|
for key, value in data.items():
|
|
if TEMP_RE.fullmatch(key):
|
|
temp_value = value
|
|
if temp_value is not None:
|
|
stats[f"{adapter}.{sensor}"] = temp_value
|
|
|
|
return stats
|
|
|
|
data = get_data()
|
|
exit_code = check_values(data)
|
|
if exit_code == 0: message = "SENSORS OK"
|
|
elif exit_code == 1: message = "SENSORS WARNING"
|
|
elif exit_code == 2: message = "SENSORS CRITICAL"
|
|
else: message = "SOMETHINGS WRONG"
|
|
message += format_dict(data)
|
|
|
|
finally:
|
|
print(message)
|
|
sys.exit(exit_code)
|