package telemetry import ( "fmt" "net/http" "sync/atomic" ) type Metrics struct { requests atomic.Uint64 failed atomic.Uint64 inFlight atomic.Int64 attempts atomic.Uint64 droppedUsage atomic.Uint64 } func (m *Metrics) RequestStarted() { m.requests.Add(1) m.inFlight.Add(1) } func (m *Metrics) RequestFinished(success bool) { m.inFlight.Add(-1) if !success { m.failed.Add(1) } } func (m *Metrics) UpstreamAttempt() { m.attempts.Add(1) } func (m *Metrics) UsageDropped() { m.droppedUsage.Add(1) } func (m *Metrics) ServeHTTP(w http.ResponseWriter, _ *http.Request) { w.Header().Set("Content-Type", "text/plain; version=0.0.4") fmt.Fprintf(w, "# TYPE aigw_requests_total counter\naigw_requests_total %d\n", m.requests.Load()) fmt.Fprintf(w, "# TYPE aigw_requests_failed_total counter\naigw_requests_failed_total %d\n", m.failed.Load()) fmt.Fprintf(w, "# TYPE aigw_requests_in_flight gauge\naigw_requests_in_flight %d\n", m.inFlight.Load()) fmt.Fprintf(w, "# TYPE aigw_upstream_attempts_total counter\naigw_upstream_attempts_total %d\n", m.attempts.Load()) fmt.Fprintf(w, "# TYPE aigw_usage_events_dropped_total counter\naigw_usage_events_dropped_total %d\n", m.droppedUsage.Load()) }