in metrics/middleware.go [16:52]
func MetricsMiddleware() mux.MiddlewareFunc {
// Rergister all metrics
prometheus.MustRegister(ServiceInfo)
prometheus.MustRegister(httpInFlightRequests)
prometheus.MustRegister(httpRequestsTotal)
prometheus.MustRegister(httpRequestDurationSeconds)
prometheus.MustRegister(httpRequestSizeBytes)
prometheus.MustRegister(httpResponseSizeBytes)
prometheus.MustRegister(NumberIndexedPackages)
prometheus.MustRegister(StorageRequestsTotal)
prometheus.MustRegister(IndexerGetDurationSeconds)
prometheus.MustRegister(StorageIndexerUpdateIndexDurationSeconds)
prometheus.MustRegister(StorageIndexerUpdateIndexSuccessTotal)
prometheus.MustRegister(StorageIndexerUpdateIndexErrorsTotal)
return func(next http.Handler) http.Handler {
handler := next
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
route := mux.CurrentRoute(req)
path, err := route.GetPathTemplate()
if err != nil {
path = "unknown"
}
labels := prometheus.Labels{"path": path}
handler = promhttp.InstrumentHandlerCounter(httpRequestsTotal.MustCurryWith(labels), handler)
handler = promhttp.InstrumentHandlerDuration(httpRequestDurationSeconds.MustCurryWith(labels), handler)
handler = promhttp.InstrumentHandlerInFlight(httpInFlightRequests, handler)
handler = promhttp.InstrumentHandlerRequestSize(httpRequestSizeBytes.MustCurryWith(labels), handler)
handler = promhttp.InstrumentHandlerResponseSize(httpResponseSizeBytes.MustCurryWith(labels), handler)
handler.ServeHTTP(w, req)
})
}
}