feat: add component latency metrics end-to-end#91
Conversation
- Fix running-average bug in getNodePipelineRates that gave incorrect latency means when aggregating across >2 components - Add early return for formatLatency(0) to display "0ms" instead of "0.000ms"
52f9790 to
ef10532
Compare
Greptile SummaryThis PR wires Key design decisions to note:
The migration is non-destructive (nullable column, backward compatible with agents that don't report latency), the Zod schema extension is additive, and the SLI evaluator's Confidence Score: 4/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant Agent as Go Agent
participant VectorProm as Vector Prometheus
participant HB as /api/agent/heartbeat
participant MS as MetricStore (in-memory)
participant DB as PipelineMetric (PostgreSQL)
participant tRPC as tRPC Routers
Agent->>VectorProm: scrape component_latency_mean_seconds
VectorProm-->>Agent: gauge value per component (seconds)
Agent->>HB: POST heartbeat { componentMetrics[].latencyMeanSeconds }
HB->>HB: computeWeightedLatency()<br/>(throughput-weighted, seconds→ms)
HB->>MS: metricStore.recordTotals(..., latencyMeanSeconds)<br/>converts to latencyMeanMs (gauge, no delta)
HB->>DB: ingestMetrics({ latencyMeanMs })<br/>writes weighted mean to PipelineMetric row
Note over DB: metrics-ingest.ts also does<br/>second-level node aggregation<br/>(throughput-weighted across nodes)
tRPC->>DB: getPipelineMetrics / chartMetrics<br/>reads latencyMeanMs from PipelineMetric
tRPC->>MS: getNodePipelineRates<br/>reads latest latencyMeanMs from MetricStore<br/>(simple mean across components)
tRPC-->>tRPC: sli-evaluator latency_mean<br/>AVG(latencyMeanMs) over window
|
Summary
component_latency_mean_secondsgauge from Vector 0.54.0's Prometheus endpoint, transmit via heartbeat payloadgetPipelineMetrics,getNodePipelineRates, andchartMetricstRPC endpointslatency_meanSLI metric typeChanges
formatLatency()helper with tiered display (us/ms/s)Test Plan
go build ./...)go test ./...)pnpm tsc --noEmit)pnpm prisma validate)pnpm build)latency_meanaccepted as metric type