CI / CI (pull_request) Failing after 2m13s
- RecordTTFT: Time-to-First-Token in milliseconds - RecordITL: Inter-Token Latency in milliseconds - RecordTokenCount: Track total tokens generated - Prometheus exporter for /metrics endpoint - Grafana dashboard ConfigMap (llm-metrics.json) - ResponseWriterWrapper to capture metrics during LLM calls - Metrics exported: llm_ttft_seconds, llm_itl_seconds, llm_tokens_total
29 lines
762 B
Go
29 lines
762 B
Go
package observability
|
|
|
|
import (
|
|
"net/http"
|
|
)
|
|
|
|
// MetricsHandler serves Prometheus metrics
|
|
type MetricsHandler struct {
|
|
exporter *PrometheusExporter
|
|
}
|
|
|
|
// NewMetricsHandler creates a new metrics handler
|
|
func NewMetricsHandler(m *Metrics) *MetricsHandler {
|
|
return &MetricsHandler{
|
|
exporter: NewPrometheusExporter(m),
|
|
}
|
|
}
|
|
|
|
// ServeHTTP implements http.Handler for Prometheus /metrics endpoint
|
|
func (h *MetricsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "text/plain; version=0.0.4; charset=utf-8")
|
|
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
|
w.Header().Set("Pragma", "no-cache")
|
|
w.Header().Set("Expires", "0")
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write([]byte(h.exporter.Export()))
|
|
}
|