Add chart freshness diagnostics

This commit is contained in:
2569718930@qq.com
2026-06-10 15:34:34 +08:00
parent ba012736c9
commit 5a7d302d11
14 changed files with 833 additions and 42 deletions
+20
View File
@@ -4,6 +4,7 @@ from fastapi.testclient import TestClient
from web.app import app
from web.routers import sse_router
from web.sse_manager import SseManager
def _decode_sse_events(text: str):
@@ -15,6 +16,25 @@ def _decode_sse_events(text: str):
return events
def test_sse_format_event_stamps_emit_time_for_latency_diagnostics(monkeypatch):
monkeypatch.setattr("web.sse_manager.time.time", lambda: 1780750904.5)
frame = SseManager._format_event(
{
"type": "city_observation_patch.v1",
"revision": 123,
"city": "busan",
"source": "amos",
"ts": 1780750864062,
"payload": {"temp": 23.0},
}
)
event = _decode_sse_events(frame)[0]
assert event["sse_emitted_at_ms"] == 1780750904500
assert event["payload"]["temp"] == 23.0
def test_events_endpoint_replays_only_requested_cities(monkeypatch):
captured = {}
+18
View File
@@ -1012,6 +1012,13 @@ def test_city_detail_batch_returns_busy_when_global_builder_slot_is_full(monkeyp
assert payload["busy"] is True
assert payload["details"] == {}
assert payload["missing"] == ["paris", "shanghai"]
assert payload["diagnostics"]["partial_reason"] == "busy"
assert payload["diagnostics"]["response_source"] == "busy"
assert payload["diagnostics"]["requested_count"] == 2
assert payload["diagnostics"]["completed_count"] == 0
assert payload["diagnostics"]["missing_count"] == 2
assert payload["diagnostics"]["city_status"]["paris"]["status"] == "busy"
assert payload["diagnostics"]["city_status"]["shanghai"]["status"] == "busy"
assert build_calls == 0
@@ -1102,6 +1109,17 @@ def test_city_detail_batch_returns_completed_details_when_one_city_is_slow(monke
assert payload["partial"] is True
assert payload["missing"] == ["slow"]
assert payload["errors"] == {}
assert payload["diagnostics"]["partial_reason"] == "timeout"
assert payload["diagnostics"]["requested_count"] == 3
assert payload["diagnostics"]["completed_count"] == 2
assert payload["diagnostics"]["missing_count"] == 1
assert payload["diagnostics"]["error_count"] == 0
assert payload["diagnostics"]["batch_concurrency"] == 2
assert payload["diagnostics"]["partial_timeout_ms"] == 20
assert payload["diagnostics"]["city_status"]["fast"]["status"] == "ok"
assert payload["diagnostics"]["city_status"]["other"]["status"] == "ok"
assert payload["diagnostics"]["city_status"]["slow"]["status"] == "timeout"
assert isinstance(payload["diagnostics"]["city_status"]["fast"]["duration_ms"], (int, float))
assert "slow" not in completed