[hw-7] add metrics, tracing

This commit is contained in:
Никита Шубин
2025-07-26 14:15:40 +00:00
parent 342bd3f726
commit 4396bebe80
38 changed files with 717 additions and 36 deletions

View File

@@ -0,0 +1,38 @@
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))
})
}