This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch camel-4.22.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.22.x by this push:
new c3d9530a1d1f [backport camel-4.22.x] CAMEL-25625: camel-management -
expose Destination on the managed throughput logger (#27807)
c3d9530a1d1f is described below
commit c3d9530a1d1fabb51015f04cd8482d828a2e0137
Author: Guillaume Nodet <[email protected]>
AuthorDate: Wed Oct 14 16:45:42 2026 +0200
[backport camel-4.22.x] CAMEL-25625: camel-management - expose Destination
on the managed throughput logger (#27807)
* [backport camel-4.22.x] CAMEL-25625: camel-management - expose
Destination on the managed throughput logger
* Add camel-management test dependency to fix
ProcessorDevConsoleThroughputLogTest
---
core/camel-console/pom.xml | 8 +-
.../ProcessorDevConsoleThroughputLogTest.java | 88 ++++++++++++++++++++++
.../mbean/ManagedThroughputLoggerMBean.java | 2 +-
.../DefaultManagementObjectStrategy.java | 2 +-
.../management/mbean/ManagedThroughputLogger.java | 29 +++++++
.../camel/management/ManagedLogEndpointTest.java | 3 +
6 files changed, 129 insertions(+), 3 deletions(-)
diff --git a/core/camel-console/pom.xml b/core/camel-console/pom.xml
index 8dde20d8b186..0b279e65bfaf 100644
--- a/core/camel-console/pom.xml
+++ b/core/camel-console/pom.xml
@@ -57,7 +57,13 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
- <dependency>
+ <!-- many consoles are driven by the managed MBeans (JMX) -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-management</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
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 c5beb08537e5..5e06bdb23527 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
@@ -469,7 +469,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());