@@ -12,7 +12,7 @@ import (
1212var (
1313 MetricRequestsInFlight = prometheus .NewGauge (prometheus.GaugeOpts {
1414 Name : "http_requests_in_flight" ,
15- Help : "How many requests are in flight?" ,
15+ Help : "How many expensive requests are in flight?" ,
1616 })
1717 MetricRequestDurations = prometheus .NewHistogramVec (prometheus.HistogramOpts {
1818 Name : "http_request_duration" ,
@@ -39,14 +39,25 @@ func RequestMetrics(h http.Handler) http.Handler {
3939 r = r .WithContext (ctx )
4040
4141 now := time .Now ()
42- MetricRequestsInFlight .Inc ()
4342 recorder := & statusRecordingResponseWriter {rw : w }
4443 h .ServeHTTP (recorder , r )
45- MetricRequestsInFlight .Dec ()
4644 MetricRequestDurations .WithLabelValues (r .Method , r .Pattern , strconv .Itoa (recorder .status )).Observe (time .Since (now ).Seconds ())
4745 })
4846}
4947
48+ func InFlightMetrics (h http.Handler ) http.Handler {
49+ return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
50+ tracer := tracer (r .Context ())
51+ ctx , span := tracer .Start (r .Context (), "InFlightMetrics" )
52+ defer span .End ()
53+ r = r .WithContext (ctx )
54+
55+ MetricRequestsInFlight .Inc ()
56+ defer MetricRequestsInFlight .Dec () // defer to run despite panics
57+ h .ServeHTTP (w , r )
58+ })
59+ }
60+
5061var (
5162 _ http.ResponseWriter = (* statusRecordingResponseWriter )(nil )
5263 _ http.Flusher = (* statusRecordingResponseWriter )(nil )
0 commit comments