37 lines
870 B
Go
37 lines
870 B
Go
|
|
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
|
||
|
|
}
|