diff --git a/promql/parser/parse.go b/promql/parser/parse.go index 79424dd98d..6e9bbe23a5 100644 --- a/promql/parser/parse.go +++ b/promql/parser/parse.go @@ -169,6 +169,7 @@ func newParser(input string) *parser { p.injecting = false p.parseErrors = nil + p.generatedParserResult = nil // Clear lexer struct before reusing. p.lex = Lexer{ diff --git a/web/api/v1/api.go b/web/api/v1/api.go index a11686a3f9..b44dc86cee 100644 --- a/web/api/v1/api.go +++ b/web/api/v1/api.go @@ -249,6 +249,9 @@ func (api *API) Register(r *route.Router) { hf := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { httputil.SetCORS(w, api.CORSOrigin, r) result := f(r) + if result.finalizer != nil { + defer result.finalizer() + } if result.err != nil { api.respondError(w, result.err, result.data) } else if result.data != nil { @@ -256,9 +259,6 @@ func (api *API) Register(r *route.Router) { } else { w.WriteHeader(http.StatusNoContent) } - if result.finalizer != nil { - result.finalizer() - } }) return api.ready(httputil.CompressionHandler{ Handler: hf, diff --git a/web/federate.go b/web/federate.go index 93c9aece36..19ad59cdb3 100644 --- a/web/federate.go +++ b/web/federate.go @@ -44,6 +44,10 @@ var ( }) ) +func registerFederationMetrics(r prometheus.Registerer) { + r.MustRegister(federationWarnings, federationErrors) +} + func (h *Handler) federation(w http.ResponseWriter, req *http.Request) { h.mtx.RLock() defer h.mtx.RUnlock() diff --git a/web/web.go b/web/web.go index 21fc02158a..48fc62c8cd 100644 --- a/web/web.go +++ b/web/web.go @@ -139,6 +139,7 @@ func newMetrics(r prometheus.Registerer) *metrics { if r != nil { r.MustRegister(m.requestCounter, m.requestDuration, m.responseSize) + registerFederationMetrics(r) } return m }