86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Daily Scrutiny health check — reports drive status to Telegram."""
|
|
|
|
import json
|
|
import urllib.request
|
|
import sys
|
|
|
|
SCRUTINY_URL = "http://localhost:7272/api/summary"
|
|
|
|
def get_scrutiny_data():
|
|
try:
|
|
with urllib.request.urlopen(SCRUTINY_URL, timeout=10) as r:
|
|
return json.loads(r.read())
|
|
except Exception as e:
|
|
print(f"❌ *Scrutiny Health Check Failed*\nCould not reach Scrutiny API: {e}")
|
|
sys.exit(0)
|
|
|
|
def check_drives(data):
|
|
devices = data.get("data", {}).get("summary", {})
|
|
if not devices:
|
|
print("❌ *Scrutiny Health Check*\nNo drives found in Scrutiny.")
|
|
return
|
|
|
|
issues = []
|
|
healthy = []
|
|
|
|
for wwn, info in devices.items():
|
|
d = info.get("device", {})
|
|
s = info.get("smart", {})
|
|
|
|
name = d.get("device_name", "?")
|
|
model = d.get("model_name", "Unknown")
|
|
temp = s.get("temp")
|
|
hours = s.get("power_on_hours", 0)
|
|
status = d.get("device_status", 0)
|
|
|
|
# status codes: 0=unknown, 1=pass, 2=fail
|
|
if status == 2:
|
|
issues.append(f"🔴 *{name}* ({model}) — FAILED status")
|
|
continue
|
|
elif status == 1:
|
|
healthy.append(f"✅ *{name}* ({model}) — Passed")
|
|
continue
|
|
|
|
# Temp warnings (HDDs >50C, SSDs >60C is concerning)
|
|
if temp is not None:
|
|
if "SSD" in model.upper():
|
|
temp_str = f"🌡️ {temp}°C"
|
|
if temp > 65:
|
|
issues.append(f"🔴 *{name}* ({model}) — Critical temp: {temp}°C")
|
|
continue
|
|
elif temp > 55:
|
|
issues.append(f"⚠️ *{name}* ({model}) — High temp: {temp}°C")
|
|
continue
|
|
else:
|
|
temp_str = f"🌡️ {temp}°C"
|
|
if temp > 55:
|
|
issues.append(f"🔴 *{name}* ({model}) — Critical temp: {temp}°C")
|
|
continue
|
|
elif temp > 48:
|
|
issues.append(f"⚠️ *{name}* ({model}) — High temp: {temp}°C")
|
|
continue
|
|
|
|
healthy.append(f"✅ *{name}* ({model}) — {temp_str if temp else 'N/A temp'}")
|
|
|
|
# Build message
|
|
lines = ["📀 *Daily Drive Health Check*\n"]
|
|
|
|
if issues:
|
|
lines.append("*⚠️ Issues Found:*")
|
|
lines.extend(issues)
|
|
lines.append("")
|
|
|
|
lines.append("*All Drives:*")
|
|
lines.extend(healthy)
|
|
lines.append("")
|
|
|
|
lines.append(f"📅 {__import__('datetime').datetime.now().strftime('%b %d, %Y %I:%M %p')}")
|
|
lines.append("🛡️ Scrutiny + Hermes")
|
|
|
|
print("\n".join(lines))
|
|
|
|
if __name__ == "__main__":
|
|
data = get_scrutiny_data()
|
|
check_drives(data)
|