This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch camel-main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 1f39209e1c46d2bb74bb228396b066a27c3bedd6
Author: Pasquale Congiusti <pasquale.congiu...@gmail.com>
AuthorDate: Fri Jan 31 10:13:29 2025 +0100

    Support base-endpoint-uri-exchange-event-notifier metrics parameter
    
    Closes #6960
---
 .../pages/reference/extensions/micrometer.adoc     |  8 +++
 ...ndpointUriExchangeEventNotifierDisableTest.java | 76 ++++++++++++++++++++++
 .../MicrometerMetricsNamingPolicyLegacyTest.java   |  4 +-
 .../micrometer/CamelMicrometerConfig.java          | 10 +++
 .../micrometer/CamelMicrometerRecorder.java        | 13 +++-
 5 files changed, 107 insertions(+), 4 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc 
b/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc
index 35ff3c6cfe..4188fdebe5 100644
--- a/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc
@@ -111,6 +111,14 @@ Set whether to enable the MicrometerExchangeEventNotifier 
for capturing metrics
 | `boolean`
 | `true`
 
+|icon:lock[title=Fixed at build time] 
[[quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier]]`link:#quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier[quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier]`
+
+Whether to use static or dynamic values for Endpoint Name tags in captured 
metrics. By default, static values are
+used. When using dynamic tags, then a dynamic to (toD) can compute many 
different endpoint URIs that,
+can lead to many tags as the URI is dynamic, so use this with care if setting 
this option to false.
+| `boolean`
+| `true`
+
 |icon:lock[title=Fixed at build time] 
[[quarkus.camel.metrics.enable-route-event-notifier]]`link:#quarkus.camel.metrics.enable-route-event-notifier[quarkus.camel.metrics.enable-route-event-notifier]`
 
 Set whether to enable the MicrometerRouteEventNotifier for capturing metrics 
on the total number of routes and total
diff --git 
a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerBaseEndpointUriExchangeEventNotifierDisableTest.java
 
b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerBaseEndpointUriExchangeEventNotifierDisableTest.java
new file mode 100644
index 0000000000..41a34085df
--- /dev/null
+++ 
b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerBaseEndpointUriExchangeEventNotifierDisableTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.quarkus.component.micrometer.deployment;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Optional;
+import java.util.Properties;
+
+import io.quarkus.test.QuarkusUnitTest;
+import jakarta.inject.Inject;
+import org.apache.camel.CamelContext;
+import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier;
+import org.apache.camel.spi.EventNotifier;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class MicrometerBaseEndpointUriExchangeEventNotifierDisableTest {
+    @RegisterExtension
+    static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+            .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
+                    .addAsResource(applicationProperties(), 
"application.properties"));
+
+    @Inject
+    CamelContext context;
+
+    @Test
+    public void testBaseEndpointURIDisabled() {
+        Optional<EventNotifier> optionalExchangeEventNotifier = 
context.getManagementStrategy()
+                .getEventNotifiers()
+                .stream()
+                .filter(eventNotifier -> 
eventNotifier.getClass().equals(MicrometerExchangeEventNotifier.class))
+                .findFirst();
+        assertTrue(optionalExchangeEventNotifier.isPresent());
+
+        MicrometerExchangeEventNotifier eventNotifier = 
(MicrometerExchangeEventNotifier) optionalExchangeEventNotifier.get();
+        assertFalse(eventNotifier.isBaseEndpointURI());
+    }
+
+    public static Asset applicationProperties() {
+        Writer writer = new StringWriter();
+
+        Properties props = new Properties();
+        
props.setProperty("quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier",
 "false");
+
+        try {
+            props.store(writer, "");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+        return new StringAsset(writer.toString());
+    }
+}
diff --git 
a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java
 
b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java
index bab6367334..a080f32ef6 100644
--- 
a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java
+++ 
b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java
@@ -27,7 +27,7 @@ import io.quarkus.test.QuarkusUnitTest;
 import jakarta.inject.Inject;
 import org.apache.camel.CamelContext;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier;
-import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategy;
+import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategyLegacy;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifier;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifierNamingStrategy;
 import 
org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory;
@@ -93,7 +93,7 @@ public class MicrometerMetricsNamingPolicyLegacyTest {
 
         MicrometerExchangeEventNotifier micrometerExchangeEventNotifier = 
(MicrometerExchangeEventNotifier) optionalExchangeEventNotifier
                 .get();
-        assertEquals(MicrometerExchangeEventNotifierNamingStrategy.LEGACY,
+        
assertInstanceOf(MicrometerExchangeEventNotifierNamingStrategyLegacy.class,
                 micrometerExchangeEventNotifier.getNamingStrategy());
 
         Optional<EventNotifier> optionalRouteEventNotifier = 
context.getManagementStrategy()
diff --git 
a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java
 
b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java
index 94d9db3224..c897c09301 100644
--- 
a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java
+++ 
b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java
@@ -52,6 +52,16 @@ public interface CamelMicrometerConfig {
     @WithDefault("true")
     boolean enableExchangeEventNotifier();
 
+    /**
+     * Whether to use static or dynamic values for Endpoint Name tags in 
captured metrics. By default, static values are
+     * used. When using dynamic tags, then a dynamic to (toD) can compute many 
different endpoint URIs that,
+     * can lead to many tags as the URI is dynamic, so use this with care if 
setting this option to false.
+     *
+     * @asciidoclet
+     */
+    @WithDefault("true")
+    public boolean baseEndpointURIExchangeEventNotifier();
+
     /**
      * Set whether to enable the MicrometerRouteEventNotifier for capturing 
metrics on the total number of routes and total
      * number of routes running.
diff --git 
a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
 
b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
index d1449bc9e1..82ee4f6efc 100644
--- 
a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
+++ 
b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
@@ -23,7 +23,8 @@ import io.quarkus.runtime.annotations.Recorder;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.micrometer.MicrometerUtils;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier;
-import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategy;
+import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategyDefault;
+import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategyLegacy;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifier;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifierNamingStrategy;
 import 
org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory;
@@ -92,8 +93,16 @@ public class CamelMicrometerRecorder {
             ManagementStrategy managementStrategy = 
camelContext.getManagementStrategy();
             if (config.enableExchangeEventNotifier()) {
                 MicrometerExchangeEventNotifier eventNotifier = new 
MicrometerExchangeEventNotifier();
+                
eventNotifier.setBaseEndpointURI(config.baseEndpointURIExchangeEventNotifier());
+
                 if 
(config.namingStrategy().equals(MetricsNamingStrategy.LEGACY)) {
-                    
eventNotifier.setNamingStrategy(MicrometerExchangeEventNotifierNamingStrategy.LEGACY);
+                    eventNotifier.setNamingStrategy(
+                            new 
MicrometerExchangeEventNotifierNamingStrategyLegacy(
+                                    
config.baseEndpointURIExchangeEventNotifier()));
+                } else {
+                    eventNotifier.setNamingStrategy(
+                            new 
MicrometerExchangeEventNotifierNamingStrategyDefault(
+                                    
config.baseEndpointURIExchangeEventNotifier()));
                 }
                 managementStrategy.addEventNotifier(eventNotifier);
             }

Reply via email to