llmproxy/docs/superpowers/specs/2026-05-10-log-viewer-autoreload-design.md

2.1 KiB

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: nameusage 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 <pre>-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