mirror of
https://github.com/3ybactuk/marketplace-go-service-project.git
synced 2025-10-30 05:53:45 +03:00
39 lines
748 B
Go
39 lines
748 B
Go
package middlewares
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
|
|
"route256/cart/internal/infra/http/metrics"
|
|
)
|
|
|
|
type statusWriter struct {
|
|
http.ResponseWriter
|
|
statusCode int
|
|
}
|
|
|
|
func (w *statusWriter) WriteHeader(code int) {
|
|
w.statusCode = code
|
|
w.ResponseWriter.WriteHeader(code)
|
|
}
|
|
|
|
func NewMetricsMiddleware(h http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
sw := &statusWriter{
|
|
ResponseWriter: w,
|
|
statusCode: http.StatusOK,
|
|
}
|
|
|
|
start := time.Now()
|
|
|
|
h.ServeHTTP(sw, r)
|
|
|
|
path := r.URL.Path
|
|
status := strconv.Itoa(sw.statusCode)
|
|
|
|
metrics.IncRequestHandlerCount(r.Method, path, status)
|
|
metrics.StoreHandlerRequestDuration(r.Method, path, status, time.Since(start))
|
|
})
|
|
}
|