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()))
|
||
|
|
}
|