in metrics/http_round_tripper/http_round_tripper.go [26:70]
func NewFactory(opts ...FactoryOption) Factory {
config := applyFactoryOptions(opts)
inFlightRequests := prometheus.NewGauge(prometheus.GaugeOpts{
Namespace: config.namespace,
Subsystem: config.subsystem,
Name: inFlightRequestsMetricName,
Help: "A gauge of requests currently being handled.",
})
requestsTotal := prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: config.namespace,
Subsystem: config.subsystem,
Name: requestsTotalMetricName,
Help: "A counter for total number of requests.",
},
config.labels,
)
requestDurationSeconds := prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: config.namespace,
Subsystem: config.subsystem,
Name: requestDurationSecondsMetricName,
Help: "A histogram of latencies for requests.",
Buckets: config.requestDurationBuckets,
},
config.labels,
)
prometheus.MustRegister(inFlightRequests, requestsTotal, requestDurationSeconds)
return func(next http.RoundTripper, opts ...Option) http.RoundTripper {
config := applyOptions(opts)
rt := next
rt = promhttp.InstrumentRoundTripperCounter(requestsTotal.MustCurryWith(config.labelValues), rt)
rt = promhttp.InstrumentRoundTripperDuration(requestDurationSeconds.MustCurryWith(config.labelValues), rt)
rt = promhttp.InstrumentRoundTripperInFlight(inFlightRequests, rt)
return rt
}
}