diff --git a/metrics.go b/metrics.go index 6f8f6da..40491bc 100644 --- a/metrics.go +++ b/metrics.go @@ -1,22 +1,19 @@ package main import ( - "fmt" - "github.com/fasthttp/router" "github.com/nspcc-dev/neofs-http-gw/response" "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/common/expfmt" "github.com/valyala/fasthttp" "go.uber.org/zap" ) func attachMetrics(r *router.Router, l *zap.Logger) { - r.GET("/metrics/", metricsHandler(prometheus.DefaultGatherer, l, promhttp.HandlerOpts{})) + r.GET("/metrics/", metricsHandler(prometheus.DefaultGatherer, l)) } -func metricsHandler(reg prometheus.Gatherer, logger *zap.Logger, opts promhttp.HandlerOpts) fasthttp.RequestHandler { +func metricsHandler(reg prometheus.Gatherer, logger *zap.Logger) fasthttp.RequestHandler { var ( inFlightSem chan struct{} errCnt = prometheus.NewCounterVec( @@ -28,32 +25,13 @@ func metricsHandler(reg prometheus.Gatherer, logger *zap.Logger, opts promhttp.H ) ) - if opts.MaxRequestsInFlight > 0 { - inFlightSem = make(chan struct{}, opts.MaxRequestsInFlight) - } - if opts.Registry != nil { - // Initialize all possibilites that can occur below. - errCnt.WithLabelValues("gathering") - errCnt.WithLabelValues("encoding") - if err := opts.Registry.Register(errCnt); err != nil { - if are, ok := err.(prometheus.AlreadyRegisteredError); ok { - errCnt = are.ExistingCollector.(*prometheus.CounterVec) - } else { - panic(err) - } - } - } - h := fasthttp.RequestHandler(func(c *fasthttp.RequestCtx) { if inFlightSem != nil { select { case inFlightSem <- struct{}{}: // All good, carry on. defer func() { <-inFlightSem }() default: - - response.Error(c, fmt.Sprintf( - "Limit of concurrent requests reached (%d), try again later.", opts.MaxRequestsInFlight, - ), fasthttp.StatusServiceUnavailable) + response.Error(c, "Limit of concurrent requests reached, try again later.", fasthttp.StatusServiceUnavailable) return } } @@ -64,19 +42,8 @@ func metricsHandler(reg prometheus.Gatherer, logger *zap.Logger, opts promhttp.H } errCnt.WithLabelValues("gathering").Inc() - switch opts.ErrorHandling { - case promhttp.PanicOnError: - panic(err) - case promhttp.ContinueOnError: - if len(mfs) == 0 { - // Still report the error if no metrics have been gathered. - response.Error(c, err.Error(), fasthttp.StatusServiceUnavailable) - return - } - case promhttp.HTTPErrorOnError: - response.Error(c, err.Error(), fasthttp.StatusServiceUnavailable) - return - } + response.Error(c, err.Error(), fasthttp.StatusServiceUnavailable) + return } contentType := expfmt.FmtText @@ -96,16 +63,8 @@ func metricsHandler(reg prometheus.Gatherer, logger *zap.Logger, opts promhttp.H logger.Error("encoding and sending metric family", zap.Error(err)) } errCnt.WithLabelValues("encoding").Inc() - switch opts.ErrorHandling { - case promhttp.PanicOnError: - panic(err) - case promhttp.HTTPErrorOnError: - response.Error(c, err.Error(), fasthttp.StatusServiceUnavailable) - return true - default: - // Do nothing in all other cases, including ContinueOnError. - return false - } + response.Error(c, err.Error(), fasthttp.StatusServiceUnavailable) + return true } for _, mf := range mfs { @@ -123,12 +82,5 @@ func metricsHandler(reg prometheus.Gatherer, logger *zap.Logger, opts promhttp.H handleError(lastErr) }) - if opts.Timeout <= 0 { - return h - } - - return fasthttp.TimeoutHandler(h, opts.Timeout, fmt.Sprintf( - "Exceeded configured timeout of %v.\n", - opts.Timeout, - )) + return h }