This is an automated email from the ASF dual-hosted git repository. jiriondrusek pushed a commit to branch camel-main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 62d4e040d997ec06a2a29c756c1b1d4f8ca07d3f Author: JiriOndrusek <ondrusek.j...@gmail.com> AuthorDate: Wed Mar 13 17:47:03 2024 +0100 Fixed micrometer in JVM because of CAMEL-20525 --- integration-tests/micrometer/pom.xml | 5 +++ .../micrometer/it/MicrometerResource.java | 33 ++++----------- .../component/micrometer/it/MicrometerRoutes.java | 3 ++ .../component/micrometer/it/MicrometerTest.java | 48 ++++++++++++++-------- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/integration-tests/micrometer/pom.xml b/integration-tests/micrometer/pom.xml index fa4c4e6f00..b7a972ad81 100644 --- a/integration-tests/micrometer/pom.xml +++ b/integration-tests/micrometer/pom.xml @@ -82,6 +82,11 @@ <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.awaitility</groupId> + <artifactId>awaitility</artifactId> + <scope>test</scope> + </dependency> </dependencies> <profiles> diff --git a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java index 4eafe512bf..4ea2d11460 100644 --- a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java +++ b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java @@ -20,14 +20,11 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.NoSuchElementException; -import java.util.Optional; import java.util.concurrent.TimeUnit; -import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; -import io.micrometer.core.instrument.composite.CompositeMeterRegistry; import io.micrometer.core.instrument.search.Search; import io.micrometer.prometheus.PrometheusMeterRegistry; import jakarta.inject.Inject; @@ -177,29 +174,6 @@ public class MicrometerResource { public Response statistics() { MicrometerEventNotifierService service = camelContext.hasService(MicrometerEventNotifierService.class); String json = service.dumpStatisticsAsJson(); - - //todo debug logging - LOG.info("json is " + json); - LOG.info("Service.started(): " + service.isStarted()); - LOG.info("meter registry is " + service.getMeterRegistry()); - if (service.getMeterRegistry() instanceof CompositeMeterRegistry) { - LOG.info("composite registry from " + ((CompositeMeterRegistry) service.getMeterRegistry()).getRegistries()); - } - LOG.info("Searching for the `camel.routes.added` in single registries."); - ((CompositeMeterRegistry) service.getMeterRegistry()).getRegistries().forEach(mr -> { - Optional<Meter> o = mr.getMeters().stream().filter(m -> m.getId().getName().equals("camel.routes.added")).findAny(); - LOG.info("`camel.routes.added` present in " + mr + ": " + o.isPresent()); - if (o.isPresent()) { - LOG.info(" with value " + o.get().measure().iterator().next()); - } - }); - - Optional<Meter> om = service.getMeterRegistry().getMeters().stream() - .filter(m -> m.getId().getName().contains("camel.routes.added")).findFirst(); - LOG.info("meter `camel.routes.added` " + om.get()); - if (om.isPresent()) { - LOG.info("value is " + om.get().measure().iterator().next().getValue()); - } return Response.ok().entity(json).build(); } @@ -250,4 +224,11 @@ public class MicrometerResource { } return Response.ok().build(); } + + @Path("/sendDumpAsJson") + @GET + public Response sendDumpAsJson() { + producerTemplate.sendBody("direct:dumpAsJson", "hello"); + return Response.ok().build(); + } } diff --git a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java index 64d50941e3..611527f714 100644 --- a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java +++ b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java @@ -55,5 +55,8 @@ public class MicrometerRoutes extends RouteBuilder { .id("jmxHistory") .log("log: ${body}"); + from("direct:dumpAsJson") + .id("dumpAsJson") + .log("log: ${body}"); } } diff --git a/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java b/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java index 55cda48300..75a78e6a84 100644 --- a/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java +++ b/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java @@ -17,8 +17,11 @@ package org.apache.camel.quarkus.component.micrometer.it; import java.lang.management.ManagementFactory; +import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import javax.management.Attribute; import javax.management.MBeanServer; @@ -29,6 +32,8 @@ import io.quarkus.test.junit.DisabledOnIntegrationTest; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.path.json.JsonPath; +import org.awaitility.Awaitility; +import org.hamcrest.Matchers; import org.jboss.logging.Logger; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -177,24 +182,35 @@ class MicrometerTest extends AbstractMicrometerTest { @Test public void testDumpAsJson() { - JsonPath jsonPath = RestAssured.get("/micrometer/statistics") + + RestAssured.get("/micrometer/sendDumpAsJson") .then() - .statusCode(200) - .extract().jsonPath(); + .statusCode(200); - //extract required values - Map<String, Float> result = jsonPath.getMap( - "gauges.findAll { it.id.name =~ /routes/ && it.id.tags.find { it.customTag } }.collectEntries { [it.id.name, it.value] }"); - //todo remove for debugging purposes - LOG.info("Dumped json is " + result); - - assertEquals(result.size(), 3); - assertTrue(result.containsKey("camel.routes.running")); - assertEquals(8.0f, result.get("camel.routes.running")); - assertTrue(result.containsKey("camel.routes.added")); - assertEquals(8.0f, result.get("camel.routes.added")); - assertTrue(result.containsKey("camel.routes.reloaded")); - assertEquals(0.0f, result.get("camel.routes.reloaded")); + Awaitility.await().atMost(10, TimeUnit.SECONDS).until(() -> { + JsonPath jsonPath = RestAssured.get("/micrometer/statistics") + .then() + .statusCode(200) + .extract().jsonPath(); + + //extract required values + Map<List<Map<String, String>>, Integer> result = jsonPath.getMap( + "timers.findAll { it.id.name=='camel.exchange.event.notifier' }.collectEntries { [it.id.tags, it.count] }"); + + //convert to simpler map + Map<String, Integer> filteredResult = result.entrySet().stream() + .collect(Collectors.toMap(e -> e.getKey().toString(), e2 -> e2.getValue())); + //remove prometheus tags + filteredResult.keySet().removeIf(k -> k.contains("customTag=prometheus")); + //keep only dumpAsJson routeId + filteredResult.keySet().removeIf(k -> !k.contains("routeId=dumpAsJson")); + //keep only `ExchangeCompletedEvent` + filteredResult.keySet().removeIf(k -> !k.contains("eventType=ExchangeCompletedEvent")); + + //assert results + return filteredResult.values().stream().map(String::valueOf).collect(Collectors.joining()); + }, + Matchers.is("1")); } @ParameterizedTest