feat: stats cards cliquables pour filtrer les jobs par statut

Chaque carte (Total, Actifs, Succès, Échecs) est maintenant un lien
vers /?filter=<type>. Le tableau affiche uniquement les jobs correspondants,
avec un badge de filtre actif et un bouton "Effacer" dans l'en-tête.
Cliquer à nouveau sur la même carte désactive le filtre.
This commit is contained in:
perco
2026-04-25 20:17:43 +02:00
parent e0c822d093
commit bb9fe626ea
2 changed files with 48 additions and 11 deletions
+16 -2
View File
@@ -380,16 +380,30 @@ def api_get_logs(job_id: str, limit: int = 50):
# UI Routes
# ──────────────────────────────────────────────
@app.get("/", response_class=HTMLResponse)
def ui_index(request: Request):
def ui_index(request: Request, filter: Optional[str] = None):
jobs = get_all_jobs()
total = len(jobs)
active = sum(1 for j in jobs if j["enabled"])
failed = sum(1 for j in jobs if j["last_status"] == "failed")
success = sum(1 for j in jobs if j["last_status"] == "success")
VALID_FILTERS = {"total", "active", "success", "failed"}
active_filter = filter if filter in VALID_FILTERS else None
if active_filter == "active":
filtered_jobs = [j for j in jobs if j["enabled"]]
elif active_filter == "success":
filtered_jobs = [j for j in jobs if j["last_status"] == "success"]
elif active_filter == "failed":
filtered_jobs = [j for j in jobs if j["last_status"] == "failed"]
else:
filtered_jobs = jobs
return templates.TemplateResponse("index.html", {
"request": request,
"jobs": jobs,
"jobs": filtered_jobs,
"page": "dashboard",
"active_filter": active_filter,
"stats": {"total": total, "active": active, "failed": failed, "success": success},
})