Test that metrics label requests by route, not path
The new test sends two paths one route answers and three requests no route answers through the metrics middleware, and expects the handler label to hold the route's pattern and "unmatched". It fails: the label is each request's path, so every new path adds series. TestMetricsRecordsServedRequest serves its request outside any router, so it now expects handler="unmatched" where it expected the path handler="/test", as the owner approved in #254 (comment). Middleware gets a metricsRegistry field, nil being Prometheus' default registry, so the new test can register with a registry of its own: TestMetricsRecordsServedRequest registers with the default one. Model: opus-5-5
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"github.com/go-chi/cors"
|
||||
"github.com/go-chi/httprate"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
metrics "github.com/slok/go-http-metrics/metrics/prometheus"
|
||||
ghmm "github.com/slok/go-http-metrics/middleware"
|
||||
"github.com/slok/go-http-metrics/middleware/std"
|
||||
@@ -63,6 +64,10 @@ type Middleware struct {
|
||||
log *slog.Logger
|
||||
config *config.Config
|
||||
clientIP *clientip.Resolver
|
||||
|
||||
// metricsRegistry is the registry Metrics registers its metrics with.
|
||||
// nil is Prometheus' default registry, the one /metrics serves.
|
||||
metricsRegistry prometheus.Registerer
|
||||
}
|
||||
|
||||
// New creates a new Middleware instance.
|
||||
@@ -212,7 +217,9 @@ func (s *Middleware) CORS() func(http.Handler) http.Handler {
|
||||
// Metrics returns a Prometheus metrics middleware.
|
||||
func (s *Middleware) Metrics() func(http.Handler) http.Handler {
|
||||
mdlw := ghmm.New(ghmm.Config{
|
||||
Recorder: metrics.NewRecorder(metrics.Config{}),
|
||||
Recorder: metrics.NewRecorder(metrics.Config{
|
||||
Registry: s.metricsRegistry,
|
||||
}),
|
||||
})
|
||||
|
||||
return func(next http.Handler) http.Handler {
|
||||
|
||||
Reference in New Issue
Block a user