package metrics import ( "github.com/prometheus/client_golang/prometheus" ) type RequestMetrics struct { Total *prometheus.CounterVec FailedTotal *prometheus.CounterVec DurationSeconds *prometheus.HistogramVec } func NewRequestMetrics(subsystem string, durationBuckets []float64, labels ...string) *RequestMetrics { metrics := &RequestMetrics{ Total: prometheus.NewCounterVec(prometheus.CounterOpts{ Subsystem: subsystem, Name: "service_requests_total", }, []string{"method"}), FailedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{ Subsystem: subsystem, Name: "service_requests_failed_total", }, []string{"method"}), DurationSeconds: prometheus.NewHistogramVec(prometheus.HistogramOpts{ Subsystem: subsystem, Name: "service_request_duration_seconds", Buckets: durationBuckets, }, []string{"method"}), } prometheus.WrapRegistererWith(GetLabelsFromKV(labels), prometheus.DefaultRegisterer).MustRegister( metrics.Total, metrics.FailedTotal, metrics.DurationSeconds, ) return metrics }