import sqlite3 import json from datetime import datetime from threading import Lock DB_PATH = "health.db" RESULTS = {} LOCK = Lock() def init_db(): conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute(""" CREATE TABLE IF NOT EXISTS service_results ( id INTEGER PRIMARY KEY AUTOINCREMENT, service TEXT, status TEXT, checked_at TEXT, details TEXT ) """) conn.commit() conn.close() def update(service, data): now = datetime.utcnow().isoformat() with LOCK: # RAM RESULTS[service] = { **data, "last_check": now } # SQLite conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute( "INSERT INTO service_results (service, status, checked_at, details) VALUES (?, ?, ?, ?)", ( service, data["status"], now, json.dumps(data) ) ) conn.commit() conn.close() def history(service, limit=20): conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute(""" SELECT status, checked_at, details FROM service_results WHERE service = ? ORDER BY checked_at DESC LIMIT ? """, (service, limit)) rows = c.fetchall() conn.close() return [ { "status": r[0], "checked_at": r[1], "details": json.loads(r[2]) } for r in rows ] def all(): return RESULTS def get(service): return RESULTS.get(service)