[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,37 @@
package round_trippers
import (
"net/http"
"strconv"
"time"
"route256/cart/internal/infra/http/metrics"
)
type MetricsRoundTripper struct {
rt http.RoundTripper
}
func NewMetricsRoundTripper(rt http.RoundTripper) http.RoundTripper {
return &MetricsRoundTripper{
rt: rt,
}
}
func (m *MetricsRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
start := time.Now()
resp, err := m.rt.RoundTrip(r)
status := "error"
if resp != nil {
status = strconv.Itoa(resp.StatusCode)
}
url := r.URL.Path
metrics.IncOutboundRequestCount(r.Method, url, status)
metrics.StoreOutboundRequestDuration(r.Method, url, status, time.Since(start))
return resp, err
}