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 21747ce1412 CAMEL-21489: camel-micrometer - Add option to exclude
routes in captu… (#16407)
21747ce1412 is described below
commit 21747ce1412936d78defaf52c9cfaaf5d8c46d8c
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Nov 29 12:29:48 2024 +0100
CAMEL-21489: camel-micrometer - Add option to exclude routes in captu…
(#16407)
* CAMEL-21489: camel-micrometer - Add option to exclude routes in capturing
metrics
---
.../src/main/docs/micrometer-component.adoc | 1 +
.../routepolicy/MicrometerRoutePolicy.java | 10 +++
.../MicrometerRoutePolicyConfiguration.java | 9 +++
.../AbstractMicrometerRoutePolicyTest.java | 1 +
...=> MicrometerRoutePolicyConfigurationTest.java} | 2 +-
.../ZMicrometerRoutePolicyExcludePatternTest.java | 77 ++++++++++++++++++++++
6 files changed, 99 insertions(+), 1 deletion(-)
diff --git
a/components/camel-micrometer/src/main/docs/micrometer-component.adoc
b/components/camel-micrometer/src/main/docs/micrometer-component.adoc
index 7e92000a3f4..761e96b3e70 100644
--- a/components/camel-micrometer/src/main/docs/micrometer-component.adoc
+++ b/components/camel-micrometer/src/main/docs/micrometer-component.adoc
@@ -411,6 +411,7 @@ following options:
|Name |Default |Description
|contextEnabled | true | whether to include counter for context level metrics
|routeEnabled | true | whether to include counter for route level metrics
+|excludePattern | | Optional pattern to exclude routes matched by route ids.
Multiple ids can be separated by comma.
|additionalCounters | true | activates all additional counters
|exchangesSucceeded | true | activates counter for succeeded exchanges
|exchangesFailed | true | activates counter for failed exchanges
diff --git
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
index 5ccac1cc877..09a6d9ed4cf 100644
---
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
+++
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
@@ -34,9 +34,12 @@ import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.micrometer.MicrometerUtils;
import org.apache.camel.spi.ManagementStrategy;
import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.PatternHelper;
import org.apache.camel.support.RoutePolicySupport;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_METER_NAME;
import static org.apache.camel.component.micrometer.MicrometerConstants.KIND;
@@ -50,6 +53,8 @@ import static
org.apache.camel.component.micrometer.MicrometerConstants.METRICS_
*/
public class MicrometerRoutePolicy extends RoutePolicySupport implements
NonManagedService {
+ private static final Logger LOG =
LoggerFactory.getLogger(MicrometerRoutePolicy.class);
+
private final MicrometerRoutePolicyFactory factory;
private MeterRegistry meterRegistry;
private boolean prettyPrint;
@@ -321,6 +326,11 @@ public class MicrometerRoutePolicy extends
RoutePolicySupport implements NonMana
skip = (it.isCreatedByKamelet() && !registerKamelets)
|| (it.isCreatedByRouteTemplate() &&
!registerTemplates);
}
+ if (!skip && configuration.getExcludePattern() != null) {
+ String[] patterns =
configuration.getExcludePattern().split(",");
+ skip = PatternHelper.matchPatterns(route.getRouteId(),
patterns);
+ }
+ LOG.debug("Capturing metrics for route: {} -> {}",
route.getRouteId(), skip);
if (skip) {
return null;
}
diff --git
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfiguration.java
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfiguration.java
index 6b1f9eca8be..01bbc88367e 100644
---
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfiguration.java
+++
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfiguration.java
@@ -25,6 +25,7 @@ public class MicrometerRoutePolicyConfiguration {
public static final MicrometerRoutePolicyConfiguration DEFAULT = new
MicrometerRoutePolicyConfiguration();
private boolean contextEnabled = true;
private boolean routeEnabled = true;
+ private String excludePattern;
private boolean additionalCounters = true;
private boolean exchangesSucceeded = true;
private boolean exchangesFailed = true;
@@ -51,6 +52,14 @@ public class MicrometerRoutePolicyConfiguration {
this.routeEnabled = routeEnabled;
}
+ public String getExcludePattern() {
+ return excludePattern;
+ }
+
+ public void setExcludePattern(String excludePattern) {
+ this.excludePattern = excludePattern;
+ }
+
public boolean isAdditionalCounters() {
return additionalCounters;
}
diff --git
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java
index 287a19c19c8..bbe5e13ab25 100644
---
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java
+++
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java
@@ -33,6 +33,7 @@ public abstract class AbstractMicrometerRoutePolicyTest
extends CamelTestSupport
protected MicrometerRoutePolicyFactory
createMicrometerRoutePolicyFactory() {
MicrometerRoutePolicyFactory factory = new
MicrometerRoutePolicyFactory();
factory.getPolicyConfiguration().setContextEnabled(false);
+ factory.getPolicyConfiguration().setExcludePattern(null);
return factory;
}
diff --git
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfigrationTest.java
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfigurationTest.java
similarity index 97%
rename from
components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfigrationTest.java
rename to
components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfigurationTest.java
index a408b84862d..dc8b935fab7 100644
---
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfigrationTest.java
+++
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyConfigurationTest.java
@@ -26,7 +26,7 @@ import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
-public class MicrometerRoutePolicyConfigrationTest extends
AbstractMicrometerRoutePolicyTest {
+public class MicrometerRoutePolicyConfigurationTest extends
AbstractMicrometerRoutePolicyTest {
@Override
protected MicrometerRoutePolicyFactory
createMicrometerRoutePolicyFactory() {
diff --git
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ZMicrometerRoutePolicyExcludePatternTest.java
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ZMicrometerRoutePolicyExcludePatternTest.java
new file mode 100644
index 00000000000..abb3a396dc5
--- /dev/null
+++
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ZMicrometerRoutePolicyExcludePatternTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.micrometer.routepolicy;
+
+import java.util.List;
+
+import io.micrometer.core.instrument.Counter;
+import io.micrometer.core.instrument.Meter;
+import io.micrometer.core.instrument.Timer;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Must run last
+ */
+public class ZMicrometerRoutePolicyExcludePatternTest extends
AbstractMicrometerRoutePolicyTest {
+
+ @Override
+ protected MicrometerRoutePolicyFactory
createMicrometerRoutePolicyFactory() {
+ MicrometerRoutePolicyFactory factory =
super.createMicrometerRoutePolicyFactory();
+ factory.getPolicyConfiguration().setContextEnabled(false);
+ factory.getPolicyConfiguration().setRouteEnabled(true);
+ factory.getPolicyConfiguration().setExcludePattern("bar");
+ return factory;
+ }
+
+ @Test
+ public void testMetricsRoutePolicy() throws Exception {
+ int count = 10;
+ getMockEndpoint("mock:foo").expectedMessageCount(count);
+ getMockEndpoint("mock:bar").expectedMessageCount(count);
+
+ for (int i = 0; i < count; i++) {
+ template.sendBody("direct:foo", "Hello World");
+ }
+
+ MockEndpoint.assertIsSatisfied(context);
+
+ // there should be 6 metrics per route (only 1 route as bar is
excluded)
+ List<Meter> meters = meterRegistry.getMeters();
+ assertEquals(6, meters.size());
+ meters.forEach(meter -> assertTrue(meter instanceof Timer || meter
instanceof Counter));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct:foo").routeId("foo")
+ .to("direct:bar")
+ .to("mock:foo");
+
+ from("direct:bar").routeId("bar")
+ .to("mock:bar");
+ }
+ };
+ }
+}