From adad94b11af576ef90843c1a7e08a6505c64bfac Mon Sep 17 00:00:00 2001 From: Thomas Stallinger Date: Tue, 1 Sep 2026 16:33:04 +0200 Subject: [PATCH] =?UTF-8?q?admin:=20Installations-/Aktions-Log=20f=C3=BCr?= =?UTF-8?q?=20Ger=C3=A4te=20(Merkmal-=20+=20Installationsereignisse)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Route /admin/geraete/{device_id}/log fasst device_merkmal_events (Auftragskatalog, bereits bestehend) und die neuen device_installation_events (Migration 0025 in provisioning-server, Boot-Medium-Meilensteine/Fehlschläge) chronologisch zusammen - eigenes Template (templates/admin/geraete_log.html), bewusst getrennt von der Kunden-Seite (templates/geraete_log.html bleibt unverändert), da noch offen ist, ob/wie umfangreich Installationsereignisse dem Kunden selbst gezeigt werden sollen. --- routers/admin_geraete.py | 25 ++++++++++++++++ templates/admin/geraete_liste.html | 5 +++- templates/admin/geraete_log.html | 46 ++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 templates/admin/geraete_log.html diff --git a/routers/admin_geraete.py b/routers/admin_geraete.py index 8dfe7a8..7030152 100644 --- a/routers/admin_geraete.py +++ b/routers/admin_geraete.py @@ -51,6 +51,31 @@ def oe_verschieben(device_id: str, oe_id: str = Form(...), user: dict = Depends( return RedirectResponse("/admin/geraete", status_code=303) +@router.get("/{device_id}/log") +def log_ansicht(request: Request, device_id: str, user: dict = Depends(require_admin)): + device = find_device(device_id) + + if device is None: + raise HTTPException(status_code=404, detail="Gerät wurde nicht gefunden.") + + # Merkmal-Anwendungen (Auftragskatalog) UND Installations-Meilensteine/ + # Fehlschlaege des Boot-Mediums selbst (siehe device_installation_events, + # Migration 0025 in provisioning-server) zusammengefuehrt, neueste + # zuerst - bewusst nur hier im Admin-Bereich (siehe + # templates/admin/geraete_log.html), nicht auf der Kunden-Seite. + merkmal_result = anode_request("GET", f"/api/v1/devices/{device_id}/events") + merkmal_events = merkmal_result.get("events", []) if merkmal_result.get("success") else [] + + installation_result = anode_request("GET", f"/api/v1/devices/{device_id}/installation-events") + installation_events = installation_result.get("events", []) if installation_result.get("success") else [] + + events = sorted(merkmal_events + installation_events, key=lambda e: e["occurred_at"], reverse=True) + + return templates.TemplateResponse( + request, "admin/geraete_log.html", {"user": user, "device": device, "events": events} + ) + + @router.get("/{device_id}") def auftragskatalog_ansicht(request: Request, device_id: str, user: dict = Depends(require_admin)): device = find_device(device_id) diff --git a/templates/admin/geraete_liste.html b/templates/admin/geraete_liste.html index eb068e9..3408ad2 100644 --- a/templates/admin/geraete_liste.html +++ b/templates/admin/geraete_liste.html @@ -18,7 +18,10 @@ {{ device.device_fingerprint }} {{ device.oe_name or "—" }} {{ device.agent_last_checkin or "noch nie" }}{% if device.debug_mode_until %}
🐞 Debug-Modus aktiv{% endif %} - Auftragskatalog → + + Auftragskatalog → + Log → +