Add navigation & usage metrics for end-user experience visibility
Instrument DB query timing (11 operations across 3 repositories), streaming lifecycle (TTFB, duration, feature count), cache operation latency, listing detail step breakdown, and frontend page load / time-to-first-listing / stream download / detail load metrics. Adds 16 new OTel instruments, extends the perf ingestion endpoint with 4 new frontend metrics, and adds ~20 Grafana dashboard panels across 4 new rows (DB Query Performance, Streaming Performance, Listing Detail Breakdown, Cache Performance, Frontend Navigation).
This commit is contained in:
parent
1ae00b7cbf
commit
35f1987ac1
11 changed files with 1236 additions and 26 deletions
|
|
@ -6,7 +6,10 @@ from pydantic import BaseModel, Field, field_validator
|
|||
|
||||
import api.metrics as app_metrics
|
||||
|
||||
ALLOWED_METRICS = {"worker_roundtrip", "worker_compute", "main_thread", "feature_count"}
|
||||
ALLOWED_METRICS = {
|
||||
"worker_roundtrip", "worker_compute", "main_thread", "feature_count",
|
||||
"page_load", "time_to_first_listing", "stream_download", "listing_detail_load",
|
||||
}
|
||||
MAX_BATCH_SIZE = 100
|
||||
|
||||
|
||||
|
|
@ -41,5 +44,13 @@ async def record_perf(samples: list[PerfSample]) -> Response:
|
|||
app_metrics.frontend_main_thread.record(s.value, attrs)
|
||||
elif s.metric == "feature_count":
|
||||
app_metrics.frontend_feature_count.record(s.value)
|
||||
elif s.metric == "page_load":
|
||||
app_metrics.frontend_page_load.record(s.value, attrs)
|
||||
elif s.metric == "time_to_first_listing":
|
||||
app_metrics.frontend_time_to_first_listing.record(s.value, attrs)
|
||||
elif s.metric == "stream_download":
|
||||
app_metrics.frontend_stream_download.record(s.value)
|
||||
elif s.metric == "listing_detail_load":
|
||||
app_metrics.frontend_listing_detail_load.record(s.value)
|
||||
|
||||
return Response(status_code=204)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue