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