feat: заменить прогресс-бар uptime на сегменты истории проверок
Build and deploy / build-deploy (push) Has been cancelled

Каждая сегментная полоска — одна проверка модели за последние 24ч
(зелёная = успех, красная = провал), слева старее, справа свежее.
Бэкенд отдаёт историю проверок в /api/models и обновляет её
после ручного теста.
This commit is contained in:
2026-10-21 21:53:14 +00:00
parent 76e67c68f3
commit 3f6b5768d0
2 changed files with 51 additions and 14 deletions
+16 -2
View File
@@ -22,6 +22,8 @@ OMNIROUTE_URL = os.environ.get("OMNIROUTE_URL", "http://192.168.1.101:20128")
OMNIROUTE_KEY = os.environ.get("OMNIROUTE_API_KEY", "")
ARENA_CACHE_TEXT = os.environ.get("ARENA_CACHE_TEXT", "/data/arena_text.json")
ARENA_CACHE_AGENT = os.environ.get("ARENA_CACHE_AGENT", "/data/arena_agent.json")
# Сколько последних проверок показывать сегментами в колонке Uptime.
HISTORY_LIMIT = int(os.environ.get("HISTORY_LIMIT", "40"))
# ─── DB setup ───────────────────────────────────────────────────────────────
@@ -352,7 +354,7 @@ def model_stats(db: sqlite3.Connection, model_id: str, hours: int = 24) -> dict:
).fetchone()
rows = db.execute(
"SELECT ok FROM checks WHERE model_id=? AND checked_at > ?",
"SELECT ok FROM checks WHERE model_id=? AND checked_at > ? ORDER BY checked_at ASC",
(model_id, cutoff)
).fetchall()
@@ -360,12 +362,16 @@ def model_stats(db: sqlite3.Connection, model_id: str, hours: int = 24) -> dict:
success = sum(1 for r in rows if r["ok"])
pct = round(100 * success / total) if total else None
# История последних проверок (старые → новые) для сегментной витрины.
history = [bool(r["ok"]) for r in rows][-HISTORY_LIMIT:]
return {
"last_ok": bool(last["ok"]) if last else None,
"last_latency_ms": last["latency_ms"] if last else None,
"last_checked": last["checked_at"] if last else None,
"uptime_pct": pct,
"checks_count": total,
"history": history,
}
@@ -499,8 +505,16 @@ def api_check(model_id: str):
(model_id, now, int(ok), latency),
)
db.commit()
stats = model_stats(db, model_id)
db.close()
return {"model_id": model_id, "ok": ok, "latency_ms": latency, "checked_at": now}
return {
"model_id": model_id,
"ok": ok,
"latency_ms": latency,
"checked_at": now,
"history": stats["history"],
"uptime_pct": stats["uptime_pct"],
}
@app.get("/", response_class=HTMLResponse)