github.com/joao-fontenele/go-url-shortener@v1.3.4/pkg/api/middleware/metrics.go (about)

     1  package middleware
     2  
     3  import (
     4  	"strconv"
     5  	"time"
     6  
     7  	"github.com/prometheus/client_golang/prometheus"
     8  	"github.com/valyala/fasthttp"
     9  
    10  	"github.com/joao-fontenele/go-url-shortener/pkg/metrics"
    11  )
    12  
    13  // Metrics is a middleware that handles default route metrics
    14  func Metrics(next fasthttp.RequestHandler) fasthttp.RequestHandler {
    15  	return func(ctx *fasthttp.RequestCtx) {
    16  		defer func() {
    17  			statusCode := strconv.Itoa(ctx.Response.StatusCode())
    18  			route := string(ctx.Path())
    19  
    20  			metrics.HTTPRequestsCounter.With(
    21  				prometheus.Labels{"route": route, "status": statusCode},
    22  			).Inc()
    23  			metrics.HTTPRequestsDurationHistogram.With(
    24  				prometheus.Labels{"route": route, "status": statusCode},
    25  			).Observe(time.Since(ctx.ConnTime()).Seconds())
    26  		}()
    27  		next(ctx)
    28  		return
    29  	}
    30  }