You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/11/18 15:15:08 UTC
[camel] branch main updated: camel-micrometer - Register micrometer registry in compomnent lifecycle instead of per exchange that leads to race condition. Fix camel-jbang get micrometer.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 8325855061a camel-micrometer - Register micrometer registry in compomnent lifecycle instead of per exchange that leads to race condition. Fix camel-jbang get micrometer.
8325855061a is described below
commit 8325855061abf50e3d7e55dd14c8fb785d890ee2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Nov 18 16:14:42 2022 +0100
camel-micrometer - Register micrometer registry in compomnent lifecycle instead of per exchange that leads to race condition. Fix camel-jbang get micrometer.
---
.../component/micrometer/MicrometerComponent.java | 7 +++++-
.../component/micrometer/MicrometerConsole.java | 18 +++++++++++----
.../micrometer/MicrometerComponentTest.java | 27 ----------------------
...oprofile-metrics.joor => camel-micrometer.joor} | 14 +++++------
.../auto-configure/camel-microprofile-metrics.joor | 2 +-
5 files changed, 27 insertions(+), 41 deletions(-)
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java
index 553721e509d..a1388867b36 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java
@@ -49,12 +49,17 @@ public class MicrometerComponent extends DefaultComponent {
}
@Override
- protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+ protected void doInit() throws Exception {
+ super.doInit();
if (metricsRegistry == null) {
Registry camelRegistry = getCamelContext().getRegistry();
metricsRegistry
= MicrometerUtils.getOrCreateMeterRegistry(camelRegistry, MicrometerConstants.METRICS_REGISTRY_NAME);
}
+ }
+
+ @Override
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
String metricsName = getMetricsName(remaining);
Meter.Type metricsType = getMetricsType(remaining);
Iterable<Tag> tags = getMetricsTag(parameters);
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConsole.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConsole.java
index d67a8bf8613..6d67a20cecc 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConsole.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConsole.java
@@ -134,8 +134,8 @@ public class MicrometerConsole extends AbstractDevConsole {
MeterRegistry mr = lookupMeterRegistry();
int i = 0;
+ List<JsonObject> list = new ArrayList<>();
for (Meter m : mr.getMeters()) {
- final List<JsonObject> list = new ArrayList<>();
if (m instanceof Counter) {
Counter c = (Counter) m;
if (i == 0) {
@@ -160,9 +160,10 @@ public class MicrometerConsole extends AbstractDevConsole {
list.add(jo);
}
}
+ list.sort(this::sortByName);
i = 0;
+ list = new ArrayList<>();
for (Meter m : mr.getMeters()) {
- final List<JsonObject> list = new ArrayList<>();
if (m instanceof Gauge) {
Gauge g = (Gauge) m;
if (i == 0) {
@@ -179,10 +180,11 @@ public class MicrometerConsole extends AbstractDevConsole {
list.add(jo);
}
}
+ list.sort(this::sortByName);
i = 0;
+ list = new ArrayList<>();
for (Meter m : mr.getMeters()) {
if (m instanceof Timer) {
- final List<JsonObject> list = new ArrayList<>();
Timer t = (Timer) m;
if (i == 0) {
root.put("timers", list);
@@ -201,10 +203,11 @@ public class MicrometerConsole extends AbstractDevConsole {
list.add(jo);
}
}
+ list.sort(this::sortByName);
i = 0;
+ list = new ArrayList<>();
for (Meter m : mr.getMeters()) {
if (m instanceof LongTaskTimer) {
- final List<JsonObject> list = new ArrayList<>();
LongTaskTimer t = (LongTaskTimer) m;
if (i == 0) {
root.put("longTaskTimers", list);
@@ -223,10 +226,11 @@ public class MicrometerConsole extends AbstractDevConsole {
list.add(jo);
}
}
+ list.sort(this::sortByName);
i = 0;
+ list = new ArrayList<>();
for (Meter m : mr.getMeters()) {
if (m instanceof DistributionSummary) {
- final List<JsonObject> list = new ArrayList<>();
DistributionSummary d = (DistributionSummary) m;
if (i == 0) {
root.put("distribution", list);
@@ -267,4 +271,8 @@ public class MicrometerConsole extends AbstractDevConsole {
MicrometerConstants.METRICS_REGISTRY_NAME);
}
+ private int sortByName(JsonObject o1, JsonObject o2) {
+ return o1.getString("name").compareToIgnoreCase(o2.getString("name"));
+ }
+
}
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
index 142004e9dfd..db3a7f5003c 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
@@ -17,8 +17,6 @@
package org.apache.camel.component.micrometer;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry;
@@ -69,31 +67,6 @@ public class MicrometerComponentTest {
inOrder = Mockito.inOrder(camelContext, camelRegistry, metricRegistry, typeConverter);
}
- @Test
- public void testCreateEndpoint() throws Exception {
- component.setCamelContext(camelContext);
- when(camelContext.getRegistry()).thenReturn(camelRegistry);
- when(camelContext.getTypeConverter()).thenReturn(typeConverter);
- when(typeConverter.convertTo(String.class, "key=value")).thenReturn("key=value");
- when(camelRegistry.lookupByNameAndType(MicrometerConstants.METRICS_REGISTRY_NAME, MeterRegistry.class))
- .thenReturn(metricRegistry);
-
- Map<String, Object> params = new HashMap<>();
- params.put("tags", "key=value");
- Endpoint result = component.createEndpoint("micrometer:counter:counter", "counter:counter", params);
- assertThat(result, is(notNullValue()));
- assertThat(result, is(instanceOf(MicrometerEndpoint.class)));
- MicrometerEndpoint me = (MicrometerEndpoint) result;
- assertThat(me.getMetricsName(), is("counter"));
- assertThat(me.getRegistry(), is(metricRegistry));
- inOrder.verify(camelContext, times(1)).getRegistry();
- inOrder.verify(camelRegistry, times(1)).lookupByNameAndType(MicrometerConstants.METRICS_REGISTRY_NAME,
- MeterRegistry.class);
- inOrder.verify(camelContext, times(1)).getTypeConverter();
- inOrder.verify(typeConverter, times(1)).convertTo(String.class, "key=value");
- inOrder.verifyNoMoreInteractions();
- }
-
@Test
public void testCreateNewEndpointForCounter() {
Endpoint endpoint = new MicrometerEndpoint(null, null, metricRegistry, Meter.Type.COUNTER, "a name", Tags.empty());
diff --git a/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-microprofile-metrics.joor b/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-micrometer.joor
similarity index 68%
copy from dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-microprofile-metrics.joor
copy to dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-micrometer.joor
index 0927fde9e1b..5df2b7438b4 100644
--- a/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-microprofile-metrics.joor
+++ b/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-micrometer.joor
@@ -16,20 +16,20 @@
*/
var answer = "";
var registry = context.getRegistry();
-var mr = registry.lookupByNameAndType("metricRegistry", org.eclipse.microprofile.metrics.MetricRegistry.class);
+var mr = registry.lookupByNameAndType("metricsRegistry", io.micrometer.core.instrument.MeterRegistry.class);
if (mr == null) {
// automatic create metrics registry
- answer = "Auto-configuring camel-microprofile-metrics: Creating default MetricRegistry";
- mr = new io.smallrye.metrics.MetricRegistries().getApplicationRegistry();
- registry.bind("metricRegistry", mr);
+ answer = "Auto-configuring camel-micrometer: Creating default MeterRegistry";
+ mr = new io.micrometer.core.instrument.simple.SimpleMeterRegistry();
+ registry.bind("metricsRegistry", mr);
// also setup metrics as route policy factory to capture route level details
- var rpf = new org.apache.camel.component.microprofile.metrics.route.policy.MicroProfileMetricsRoutePolicyFactory();
- rpf.setMetricRegistry(mr);
+ var rpf = new org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyFactory();
+ rpf.setMeterRegistry(mr);
context.addRoutePolicyFactory(rpf);
// and setup dev console
var dcr = context.getExtension(org.apache.camel.console.DevConsoleRegistry.class);
if (dcr != null) {
- dcr.resolveById("microprofile-metrics");
+ dcr.register(new org.apache.camel.component.micrometer.MicrometerConsole());
}
}
return answer;
\ No newline at end of file
diff --git a/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-microprofile-metrics.joor b/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-microprofile-metrics.joor
index 0927fde9e1b..a24d5c04a3f 100644
--- a/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-microprofile-metrics.joor
+++ b/dsl/camel-kamelet-main/src/main/resources/auto-configure/camel-microprofile-metrics.joor
@@ -29,7 +29,7 @@ if (mr == null) {
// and setup dev console
var dcr = context.getExtension(org.apache.camel.console.DevConsoleRegistry.class);
if (dcr != null) {
- dcr.resolveById("microprofile-metrics");
+ dcr.register(new org.apache.camel.component.microprofile.metrics.MicroProfileConsole());
}
}
return answer;
\ No newline at end of file