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 <claus.ib...@gmail.com>
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");
+            }
+        };
+    }
+}

Reply via email to