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 614f8125789c CAMEL-25625: camel-management - expose Destination on the 
managed throughput logger (#27789)
614f8125789c is described below

commit 614f8125789c3c6f397ae5e28d0b7ca41e58b9fd
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Oct 14 09:57:16 2026 +0200

    CAMEL-25625: camel-management - expose Destination on the managed 
throughput logger (#27789)
    
    Signed-off-by: Claus Ibsen <[email protected]>
    Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
---
 .../ProcessorDevConsoleThroughputLogTest.java      | 88 ++++++++++++++++++++++
 .../mbean/ManagedThroughputLoggerMBean.java        |  2 +-
 .../DefaultManagementObjectStrategy.java           |  2 +-
 .../management/mbean/ManagedThroughputLogger.java  | 29 +++++++
 .../camel/management/ManagedLogEndpointTest.java   |  3 +
 5 files changed, 122 insertions(+), 2 deletions(-)

diff --git 
a/core/camel-console/src/test/java/org/apache/camel/impl/console/ProcessorDevConsoleThroughputLogTest.java
 
b/core/camel-console/src/test/java/org/apache/camel/impl/console/ProcessorDevConsoleThroughputLogTest.java
new file mode 100644
index 000000000000..3f84c86f992b
--- /dev/null
+++ 
b/core/camel-console/src/test/java/org/apache/camel/impl/console/ProcessorDevConsoleThroughputLogTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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.impl.console;
+
+import java.util.Map;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.console.DevConsole;
+import org.apache.camel.support.PluginHelper;
+import org.apache.camel.util.json.JsonArray;
+import org.apache.camel.util.json.JsonObject;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * A to(log) with groupInterval or groupSize is managed as a throughput 
logger, which the processor and route consoles
+ * must report like any other to.
+ */
+public class ProcessorDevConsoleThroughputLogTest extends ContextTestSupport {
+
+    @Override
+    protected boolean useJmx() {
+        return true;
+    }
+
+    private DevConsole console(String id) {
+        return 
PluginHelper.getDevConsoleResolver(context).resolveDevConsole(id);
+    }
+
+    @Test
+    public void testProcessorConsoleJson() {
+        JsonObject out = (JsonObject) 
console("processor").call(DevConsole.MediaType.JSON);
+        JsonArray processors = out.getCollection("processors");
+        assertThat(processors).hasSize(3);
+        assertThat(destination(processors, 
"plain-log")).isEqualTo("log://plain");
+        assertThat(destination(processors, 
"interval-log")).isEqualTo("log://interval?groupInterval=5000");
+        assertThat(destination(processors, 
"size-log")).isEqualTo("log://size?groupSize=10");
+    }
+
+    @Test
+    public void testProcessorConsoleText() {
+        String out = (String) 
console("processor").call(DevConsole.MediaType.TEXT);
+        assertThat(out).contains("Uri: log://interval?groupInterval=5000", 
"Uri: log://size?groupSize=10");
+    }
+
+    @Test
+    public void testRouteConsoleWithProcessors() {
+        JsonObject out = (JsonObject) 
console("route").call(DevConsole.MediaType.JSON, Map.of("processors", "true"));
+        JsonArray routes = out.getCollection("routes");
+        JsonArray processors = ((JsonObject) 
routes.get(0)).getCollection("processors");
+        assertThat(destination(processors, 
"interval-log")).isEqualTo("log://interval?groupInterval=5000");
+    }
+
+    private static String destination(JsonArray processors, String id) {
+        JsonObject processor = (JsonObject) processors.stream()
+                .filter(p -> id.equals(((JsonObject) 
p).getString("id"))).findFirst().orElseThrow();
+        return processor.getString("uri");
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start").routeId("throughput")
+                        .to("log:plain").id("plain-log")
+                        
.to("log:interval?groupInterval=5000").id("interval-log")
+                        .to("log:size?groupSize=10").id("size-log");
+            }
+        };
+    }
+}
diff --git 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThroughputLoggerMBean.java
 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThroughputLoggerMBean.java
index e050b5bd74aa..29ad8c93b82a 100644
--- 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThroughputLoggerMBean.java
+++ 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThroughputLoggerMBean.java
@@ -19,7 +19,7 @@ package org.apache.camel.api.management.mbean;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedOperation;
 
-public interface ManagedThroughputLoggerMBean extends ManagedProcessorMBean {
+public interface ManagedThroughputLoggerMBean extends ManagedProcessorMBean, 
ManagedDestinationAware {
 
     @ManagedAttribute(description = "The received number of messages")
     long getReceivedCounter();
diff --git 
a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
 
b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
index d5dd85ab0fe1..d276134daace 100644
--- 
a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
+++ 
b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
@@ -473,7 +473,7 @@ public class DefaultManagementObjectStrategy implements 
ManagementObjectStrategy
             } else if (target instanceof SendProcessor sp) {
                 // special for sending to throughput logger
                 if (sp.getDestination() instanceof LogEndpoint le && 
le.getLogger() instanceof ThroughputLogger tl) {
-                    answer = new ManagedThroughputLogger(context, tl, 
definition);
+                    answer = new ManagedThroughputLogger(context, tl, 
definition, le);
                 }
                 // regular send processor
                 if (answer == null) {
diff --git 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThroughputLogger.java
 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThroughputLogger.java
index 7e38d0c97c84..3b7780531231 100644
--- 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThroughputLogger.java
+++ 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThroughputLogger.java
@@ -17,16 +17,40 @@
 package org.apache.camel.management.mbean;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedThroughputLoggerMBean;
 import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.support.processor.ThroughputLogger;
+import org.apache.camel.util.URISupport;
 
 @ManagedResource(description = "Managed ThroughputLogger")
 public class ManagedThroughputLogger extends ManagedProcessor implements 
ManagedThroughputLoggerMBean {
+    private final Endpoint endpoint;
+    private String destination;
 
     public ManagedThroughputLogger(CamelContext context, ThroughputLogger 
logger, ProcessorDefinition<?> definition) {
+        this(context, logger, definition, null);
+    }
+
+    public ManagedThroughputLogger(CamelContext context, ThroughputLogger 
logger, ProcessorDefinition<?> definition,
+                                   Endpoint endpoint) {
         super(context, logger, definition);
+        this.endpoint = endpoint;
+    }
+
+    @Override
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+        if (endpoint != null) {
+            boolean sanitize = strategy.getManagementAgent().getMask() != null 
? strategy.getManagementAgent().getMask() : true;
+            if (sanitize) {
+                destination = 
URISupport.sanitizeUri(endpoint.getEndpointUri());
+            } else {
+                destination = endpoint.getEndpointUri();
+            }
+        }
     }
 
     @Override
@@ -34,6 +58,11 @@ public class ManagedThroughputLogger extends 
ManagedProcessor implements Managed
         return (ThroughputLogger) super.getProcessor();
     }
 
+    @Override
+    public String getDestination() {
+        return destination;
+    }
+
     @Override
     public void reset() {
         super.reset();
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedLogEndpointTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedLogEndpointTest.java
index 614dee88d0a6..ed675dff58ce 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedLogEndpointTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedLogEndpointTest.java
@@ -52,6 +52,9 @@ public class ManagedLogEndpointTest extends 
ManagementTestSupport {
         Long total = (Long) mbeanServer.getAttribute(name, "ExchangesTotal");
         assertEquals(10, total.intValue());
 
+        String destination = (String) mbeanServer.getAttribute(name, 
"Destination");
+        assertEquals("log://foo?groupSize=10", destination);
+
         Long received = (Long) mbeanServer.getAttribute(name, 
"ReceivedCounter");
         assertEquals(10, received.intValue());
 

Reply via email to