42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
from app import perf_metrics
|
|
|
|
def test_perf_snapshot_does_not_expose_paths_or_query_data():
|
|
perf_metrics.ingest_http({"endpoint": "GET /api/knowledge/:id", "status": 200,
|
|
"elapsed_ms": 12, "sql_count": 3, "sql_ms": 2.5,
|
|
"sql_lock_errors": 0})
|
|
perf_metrics.ingest_rag({"total_ms": 8, "cache_hit": True, "query": "secret"})
|
|
snap = perf_metrics.snapshot()
|
|
assert snap["scope"] == "current_process"
|
|
assert "secret" not in str(snap)
|
|
assert snap["api"]["sql_count"] >= 3
|
|
|
|
def test_sql_context_is_request_local():
|
|
with perf_metrics.request_scope("trace") as metrics:
|
|
perf_metrics.record_sql(1.5)
|
|
assert metrics.sql_count == 1
|
|
assert perf_metrics.current() is None
|
|
|
|
|
|
def test_rag_snapshot_reports_embedding_transport_phases():
|
|
# Keep this test deterministic when the module is reused by the complete
|
|
# suite (the telemetry deque is intentionally process global in runtime).
|
|
with perf_metrics._lock:
|
|
perf_metrics._rag.clear()
|
|
perf_metrics.ingest_rag({
|
|
"total_ms": 42,
|
|
"cache_hit": False,
|
|
"embedding_total_ms": 18,
|
|
"embedding_process_start_ms": 3,
|
|
"embedding_ipc_ms": 2,
|
|
"embedding_model_load_ms": 0,
|
|
"embedding_tokenizer_ms": 1,
|
|
"embedding_encode_ms": 14,
|
|
"embedding_postprocess_ms": 1,
|
|
"embedding_cache_hit": False,
|
|
"queue_wait_ms": 7,
|
|
})
|
|
embedding = perf_metrics.rag_snapshot()["embedding"]
|
|
assert embedding["embedding_process_start_ms"]["p95_ms"] == 3.0
|
|
assert embedding["embedding_ipc_ms"]["p95_ms"] == 2.0
|
|
assert perf_metrics.rag_snapshot()["phases"]["queue_wait_ms"]["p95_ms"] == 7.0
|