Files
3ybactuk-marketplace-go-ser…/cart/internal/infra/http/middlewares/metrics.go
Никита Шубин 4396bebe80 [hw-7] add metrics, tracing
2025-07-26 14:15:40 +00:00

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))
})
}