"""Tests für die Auswertung des llama-swap-Journals — Zeilenformat wie auf der Box (23.09.2026).""" from datetime import datetime from services import modell_nutzung ZEILEN = [ '2026-09-23T03:12:44+02:00 box llama-swap[1]: [INFO] Request 192.168.178.28 ' '"POST /v1/chat/completions HTTP/1.1" 200 10254 "Go-http-client/1.1" 1.2s', '2026-09-23T03:12:50+02:00 box llama-swap[1]: [INFO] Request 192.168.178.28 ' '"POST /v1/chat/completions HTTP/1.1" 200 9000 "Go-http-client/1.1" 1.1s', '2026-09-23T07:01:00+02:00 box llama-swap[1]: [INFO] Request 127.0.0.1 ' '"POST /v1/chat/completions HTTP/1.1" 200 800 "python-httpx/0.28.1" 3s', '2026-09-23T07:02:00+02:00 box llama-swap[1]: [INFO] Request 127.0.0.1 ' '"POST /v1/embeddings HTTP/1.1" 200 800 "python-httpx/0.28.1" 20ms', "2026-09-17T19:59:00+02:00 box llama-swap[1]: [INFO] Health check passed on http://localhost:5805/health", '2026-09-10T03:00:00+02:00 box llama-swap[1]: [INFO] Request 192.168.178.28 ' '"POST /v1/chat/completions HTTP/1.1" 200 1 "Go-http-client/1.1" 1s', ] NAMEN = {"127.0.0.1": "Lucy und OpenChamber über MC2", "192.168.178.28": "NerdQuiz auf Arcane"} def test_zaehlt_nur_chat_anfragen_je_absender(): d = modell_nutzung.werte_aus(ZEILEN, datetime.fromisoformat("2026-09-23T20:45:00+02:00"), NAMEN) assert d["absender"] == [ {"name": "NerdQuiz auf Arcane", "anfragen": 3}, {"name": "Lucy und OpenChamber über MC2", "anfragen": 1}, ] def test_letzte_24h_je_stunde_und_zuletzt_geladen(): d = modell_nutzung.werte_aus(ZEILEN, datetime.fromisoformat("2026-09-23T20:45:00+02:00"), NAMEN) stunden = {s["stunde"]: s["je_absender"] for s in d["letzte_24h"]} assert stunden["03"] == {"NerdQuiz auf Arcane": 2} # der Lauf vom 10.09. liegt außerhalb assert stunden["07"] == {"Lucy und OpenChamber über MC2": 1} assert len(d["letzte_24h"]) == 24 assert d["zuletzt_geladen"]["Qwen3.8-27B"].startswith("2026-09-17T19:59") def test_unbekannte_ip_bleibt_als_ip_stehen(): zeile = ('2026-09-23T10:00:00+02:00 box llama-swap[1]: [INFO] Request 10.0.0.9 ' '"POST /v1/chat/completions HTTP/1.1" 200 1 "curl/8" 1s') d = modell_nutzung.werte_aus([zeile], datetime.fromisoformat("2026-09-23T20:45:00+02:00"), NAMEN) assert d["absender"] == [{"name": "10.0.0.9", "anfragen": 1}]