From 0029c06d3348f23aa9fc685d1cae404a4ada9387 Mon Sep 17 00:00:00 2001 From: Georgios Andrianakis Date: Mon, 21 Mar 2022 09:48:30 +0200 Subject: [PATCH] Activate request context when prometheus scraping is invoked --- .../export/handlers/PrometheusHandler.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/export/handlers/PrometheusHandler.java b/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/export/handlers/PrometheusHandler.java index 1a3283734d26d..1b05851c58c37 100644 --- a/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/export/handlers/PrometheusHandler.java +++ b/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/export/handlers/PrometheusHandler.java @@ -8,6 +8,8 @@ import io.micrometer.prometheus.PrometheusMeterRegistry; import io.prometheus.client.exporter.common.TextFormat; +import io.quarkus.arc.Arc; +import io.quarkus.arc.ManagedContext; import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpServerResponse; @@ -31,11 +33,25 @@ public void handle(RoutingContext routingContext) { response.setStatusCode(500) .setStatusMessage("Unable to resolve Prometheus registry instance"); } else { - response.putHeader("Content-Type", TextFormat.CONTENT_TYPE_004) - .end(Buffer.buffer(registry.scrape())); + ManagedContext requestContext = Arc.container().requestContext(); + if (requestContext.isActive()) { + doHandle(response); + } else { + requestContext.activate(); + try { + doHandle(response); + } finally { + requestContext.terminate(); + } + } } } + private void doHandle(HttpServerResponse response) { + response.putHeader("Content-Type", TextFormat.CONTENT_TYPE_004) + .end(Buffer.buffer(registry.scrape())); + } + private void setup() { Instance registries = CDI.current().select(PrometheusMeterRegistry.class, Default.Literal.INSTANCE);