healthy-checker/app/store.py

79 lines
1.6 KiB
Python

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)