func NewFactory()

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
	}
}