From bb9fe626eabf2e626cb510315509c6a1669c36d7 Mon Sep 17 00:00:00 2001 From: perco Date: Sat, 25 Apr 2026 20:17:43 +0200 Subject: [PATCH] feat: stats cards cliquables pour filtrer les jobs par statut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chaque carte (Total, Actifs, Succès, Échecs) est maintenant un lien vers /?filter=. 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. --- app/main.py | 18 ++++++++++++++++-- templates/index.html | 41 ++++++++++++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/app/main.py b/app/main.py index b205fd2..8efe9d9 100644 --- a/app/main.py +++ b/app/main.py @@ -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}, }) diff --git a/templates/index.html b/templates/index.html index 6f5e34d..654d777 100644 --- a/templates/index.html +++ b/templates/index.html @@ -15,7 +15,9 @@
-

Jobs planifiés

+
+

Jobs planifiés

+ {% if active_filter %} + + + {{ {'total': 'Tous', 'active': 'Actifs', 'success': 'Succès', 'failed': 'Échecs'}[active_filter] }} + + + Effacer + + {% endif %} +
Rafraîchissement auto toutes les 30s