Skip to content

Commit bcbd2f5

Browse files
authored
feat(go): change in-flight metric to only count expensive requests (#845)
1 parent 728fb53 commit bcbd2f5

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

pkg/api/middleware/metrics.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
var (
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+
5061
var (
5162
_ http.ResponseWriter = (*statusRecordingResponseWriter)(nil)
5263
_ http.Flusher = (*statusRecordingResponseWriter)(nil)

pkg/api/mux.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,20 @@ func NewHandler(
3535
mux.Handle("GET /metrics", middleware.TracingFor("promhttp.HandlerFor", promhttp.HandlerFor(metrics, promhttp.HandlerOpts{Registry: metrics})))
3636
mux.Handle("GET /healthz", HandleGetHealthz())
3737
mux.Handle("GET /version", HandleGetVersion(versions, browser))
38-
mux.Handle("GET /render", middleware.RequireAuthToken(middleware.TrustedURL(limiter.Limit(HandleGetRender(browser))), serverConfig.AuthTokens...))
39-
mux.Handle("GET /render/csv", middleware.RequireAuthToken(middleware.TrustedURL(limiter.Limit(HandleGetRenderCSV(browser))), serverConfig.AuthTokens...))
38+
mux.Handle("GET /render",
39+
middleware.RequireAuthToken(
40+
middleware.TrustedURL(
41+
limiter.Limit(
42+
middleware.InFlightMetrics(
43+
HandleGetRender(browser)))),
44+
serverConfig.AuthTokens...))
45+
mux.Handle("GET /render/csv",
46+
middleware.RequireAuthToken(
47+
middleware.TrustedURL(
48+
limiter.Limit(
49+
middleware.InFlightMetrics(
50+
HandleGetRenderCSV(browser)))),
51+
serverConfig.AuthTokens...))
4052
mux.Handle("GET /render/version", HandleGetRenderVersion(versions))
4153

4254
handler := middleware.RequestMetrics(mux)

0 commit comments

Comments
 (0)