diff options
author | Dave Henderson <dhenderson@gmail.com> | 2020-09-21 15:42:47 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-21 13:42:47 -0600 |
commit | b1d456d8abf15616afb6c6893af90473b4941365 (patch) | |
tree | 7fb46662b887e2bcd20401d31935b7c4fc49199a /modules/caddyhttp/metrics.go | |
parent | d16ede358a2ec049bda28bf37e79c9cfcaa64c29 (diff) |
metrics: Fix panic when headers aren't written (#3737)
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'modules/caddyhttp/metrics.go')
-rw-r--r-- | modules/caddyhttp/metrics.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/modules/caddyhttp/metrics.go b/modules/caddyhttp/metrics.go index 74be135..b764b90 100644 --- a/modules/caddyhttp/metrics.go +++ b/modules/caddyhttp/metrics.go @@ -108,7 +108,7 @@ func newMetricsInstrumentedHandler(handler string, mh MiddlewareHandler) *metric func (h *metricsInstrumentedHandler) ServeHTTP(w http.ResponseWriter, r *http.Request, next Handler) error { server := serverNameFromContext(r.Context()) labels := prometheus.Labels{"server": server, "handler": h.handler} - statusLabels := prometheus.Labels{"server": server, "handler": h.handler, "method": r.Method} + statusLabels := prometheus.Labels{"server": server, "handler": h.handler, "method": r.Method, "code": ""} inFlight := httpMetrics.requestInFlight.With(labels) inFlight.Inc() @@ -134,6 +134,14 @@ func (h *metricsInstrumentedHandler) ServeHTTP(w http.ResponseWriter, r *http.Re return err } + // If the code hasn't been set yet, and we didn't encounter an error, we're + // probably falling through with an empty handler. + if statusLabels["code"] == "" { + // we still sanitize it, even though it's likely to be 0. A 200 is + // returned on fallthrough so we want to reflect that. + statusLabels["code"] = sanitizeCode(wrec.Status()) + } + httpMetrics.requestDuration.With(statusLabels).Observe(dur) httpMetrics.requestSize.With(statusLabels).Observe(float64(computeApproximateRequestSize(r))) httpMetrics.responseSize.With(statusLabels).Observe(float64(wrec.Size())) |