diff --git a/docs/superpowers/specs/2026-05-10-log-viewer-autoreload-design.md b/docs/superpowers/specs/2026-05-10-log-viewer-autoreload-design.md new file mode 100644 index 0000000..0d19cb2 --- /dev/null +++ b/docs/superpowers/specs/2026-05-10-log-viewer-autoreload-design.md @@ -0,0 +1,67 @@ +# Design: Log-Viewer und Auto-Reload in der Admin-Oberfläche + +## Kontext + +Die Admin-Oberfläche zeigt aktuell nur API-Keys und Einstellungen. Es gibt kein automatisches Aktualisieren und keinen Zugriff auf die Logdateien. Hauptbedürfnis: Das aktuell geladene Ollama-Modell schnell im Blick haben, ohne manuell neu laden zu müssen. + +## Scope + +- Letzten 10 Zeilen von `usage.log` und `error.log` in der Settings-Sektion anzeigen +- Alle Daten (Keys, Settings, Logs) alle 5 Minuten automatisch neu laden +- Zeitstempel der letzten Aktualisierung anzeigen + +--- + +## Backend + +### Neuer Endpunkt: `GET /api/logs/{name}` + +**Datei:** `backend/admin.py` + +**Parameter:** `name` — `usage` oder `error` (andere Werte → 400) + +**Verhalten:** +- Leitet den Pfad aus `LOG_FILE` (Env-Var, Default: `logs/usage.log`) ab +- `error` → selbes Verzeichnis, Dateiname `error.log` +- Liest die letzten 10 Zeilen der Datei +- Gibt `{"lines": ["...", ...]}` zurück +- Datei nicht vorhanden → leeres Array `{"lines": []}` +- Geschützt durch `require_admin_auth` + +--- + +## Frontend + +### Log-Anzeige in `SettingsSection` + +**Datei:** `frontend/src/main.jsx` + +- Neuer Unterabschnitt am Ende der Settings-Karte +- Zwei `
`-Blöcke: `usage.log` (immer) und `error.log` (nur wenn nicht leer)
+- Stil konsistent mit bestehenden Settings-Elementen (dunkler Hintergrund, Monospace-Font)
+- Daten werden beim Mount von `SettingsSection` zusammen mit den übrigen Settings geladen
+
+### Auto-Reload
+
+- `setInterval` im `App`-Component, Intervall: **5 Minuten (300 000 ms)**
+- Ruft dieselben Fetch-Funktionen auf wie beim Login: Keys + Settings + Logs
+- Timer wird beim Unmount (Logout) via `clearInterval` bereinigt
+- Oben rechts in der eingeloggten UI: kleiner Hinweis „Zuletzt aktualisiert: HH:MM"
+
+---
+
+## Nicht im Scope
+
+- Live-Streaming / WebSocket
+- Filterung oder Suche in Logs
+- Konfigurierbare Zeilenzahl (fest: 10)
+- Automatisches Scrollen
+
+---
+
+## Tests
+
+- `GET /api/logs/usage` gibt die letzten 10 Zeilen zurück
+- `GET /api/logs/error` gibt leeres Array zurück wenn Datei nicht existiert
+- `GET /api/logs/invalid` gibt 400 zurück
+- Manueller Test: Admin-UI öffnen, 5 Minuten warten, Timestamp prüfen