Files
cybertron/pkg/metrics/http_client_metrics_recorder.go

37 lines
870 B
Go
Raw Normal View History

2024-07-23 14:16:26 +05:30
package metrics
import (
"cybertron/models/instrumentation"
"net/http"
"time"
)
type ClientHttpCall func(req *http.Request) (*http.Response, error)
func RecordClientHttpCallMetrics(req *http.Request, method ClientHttpCall) (*http.Response, error) {
startTime := time.Now()
resp, err := method(req)
endTime := time.Now()
duration := endTime.Sub(startTime)
metricsPublisher := NewMetricPublisher()
clientHttpCallMetrics := instrumentation.ClientHttpCallMetric{
Url: req.URL.Path,
StartTime: startTime.Unix(),
EndTime: endTime.Unix(),
DurationInMs: duration.Milliseconds(),
}
if resp != nil {
clientHttpCallMetrics.ResponseCode = resp.StatusCode
}
metricsPublisher.PublishMetrics(instrumentation.MetricAttributes{ClientHttpCallMetric: clientHttpCallMetrics},
instrumentation.CLIENT_HTTP_CALL_METRICS)
return resp, err
}