You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ji...@apache.org on 2024/03/22 09:14:14 UTC

(camel-quarkus) 24/36: Fixed micrometer in JVM because of CAMEL-20525

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 8e2401f749f6510720ca0dc39edfae8846ba4c7e
Author: JiriOndrusek <on...@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 3a9e22572a..d707df1144 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