feat: crl support, metrics
This commit is contained in:
35
internal/metrics/middleware.go
Normal file
35
internal/metrics/middleware.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package metrics
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
func Middleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
path := r.URL.Path
|
||||
|
||||
timer := prometheus.NewTimer(httpDuration.With(prometheus.Labels{
|
||||
labelPath: path,
|
||||
}))
|
||||
rw := newResponseWriter(w)
|
||||
next.ServeHTTP(rw, r)
|
||||
if rw.statusCode == 0 {
|
||||
rw.WriteHeader(http.StatusOK)
|
||||
}
|
||||
statusCode := rw.statusCode
|
||||
|
||||
responseStatus.With(prometheus.Labels{
|
||||
labelPath: path,
|
||||
labelStatus: strconv.Itoa(statusCode),
|
||||
}).Inc()
|
||||
totalRequests.With(prometheus.Labels{
|
||||
labelPath: path,
|
||||
}).Inc()
|
||||
|
||||
log.Printf("%s %s %s %d %s", r.RemoteAddr, r.Method, r.URL.Path, statusCode, timer.ObserveDuration())
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user