package metrics import ( "context" "net/http" "net/http/httptest" "strings" "testing" "time" ) func TestMetricsHandlerExportsOnlyAggregateGatewayState(t *testing.T) { ObserveSubmit(true, 20*time.Millisecond) ObserveInboundStage("api_roundtrip", true, 30*time.Millisecond) ObserveSubmitStage("rate_limit_wait", true, 15*time.Millisecond) request := httptest.NewRequest(http.MethodGet, "/metrics", nil) response := httptest.NewRecorder() Handler(func(context.Context) Snapshot { return Snapshot{UpstreamDesired: 2, UpstreamConnected: 1, DownstreamConnected: 3, SubmitWorkerUp: true, SubmitWorkerConcurrency: 64, SubmitWorkerInFlight: 7, ResultWorkerUp: true, ResultWorkerConcurrency: 32, ResultWorkerInFlight: 5, InboundSubmitConcurrency: 96, InboundSubmitInFlight: 9, QueueAvailable: true, QueuePending: 4, QueueLag: 5, QueueOldestAgeSeconds: 12, ResultQueueAvailable: true, ResultQueuePending: 6, ResultQueueLag: 8} }).ServeHTTP(response, request) body := response.Body.String() if response.Code != http.StatusOK || !strings.Contains(body, "cmpp_gateway_submit_queue_pending 4") || !strings.Contains(body, "cmpp_gateway_upstream_connections{state=\"connected\"} 1") { t.Fatalf("unexpected metrics response: code=%d body=%s", response.Code, body) } for _, expected := range []string{ `cmpp_gateway_inbound_stage_duration_seconds_count{stage="api_roundtrip",result="success"} 1`, `cmpp_gateway_submit_stage_duration_seconds_count{stage="rate_limit_wait",result="success"} 1`, `cmpp_gateway_submit_worker_slots{state="configured"} 64`, `cmpp_gateway_submit_worker_slots{state="in_flight"} 7`, `cmpp_gateway_result_callback_worker_slots{state="configured"} 32`, `cmpp_gateway_result_callback_worker_slots{state="in_flight"} 5`, `cmpp_gateway_result_outbox_pending 6`, `cmpp_gateway_result_outbox_lag 8`, `cmpp_gateway_inbound_submit_slots{state="configured"} 96`, `cmpp_gateway_inbound_submit_slots{state="in_flight"} 9`, } { if !strings.Contains(body, expected) { t.Fatalf("metrics response is missing %q: %s", expected, body) } } for _, forbidden := range []string{"phone_number", "message_id", "channel_id"} { if strings.Contains(body, forbidden) { t.Fatalf("metrics expose forbidden label %q", forbidden) } } }