You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2026/07/12 07:12:26 UTC

(camel) branch feature/CAMEL-24003-backlog-tracer-activity-queue created (now b76ad743e09f)

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

davsclaus pushed a change to branch feature/CAMEL-24003-backlog-tracer-activity-queue
in repository https://gitbox.apache.org/repos/asf/camel.git


      at b76ad743e09f CAMEL-24003: Test activityEnabled JMX attribute in BacklogTracerActivityTest

This branch includes the following new commits:

     new a94705edcc04 CAMEL-24003: Add activityEnabled option to BacklogTracer
     new b76ad743e09f CAMEL-24003: Test activityEnabled JMX attribute in BacklogTracerActivityTest

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(camel) 01/02: CAMEL-24003: Add activityEnabled option to BacklogTracer

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch feature/CAMEL-24003-backlog-tracer-activity-queue
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a94705edcc044db33ca0476f98262529aa114f8c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jul 12 09:11:05 2026 +0200

    CAMEL-24003: Add activityEnabled option to BacklogTracer
    
    Co-Authored-By: Claude Opus 4.6 <no...@anthropic.com>
    Signed-off-by: Claus Ibsen <cl...@gmail.com>
---
 .../main/camel-main-configuration-metadata.json    |  1 +
 .../java/org/apache/camel/spi/BacklogTracer.java   | 17 +++++++++++++++++
 .../apache/camel/impl/debugger/BacklogTracer.java  | 10 ++++++++++
 .../camel/impl/console/ActivityDevConsole.java     |  2 ++
 .../TracerConfigurationPropertiesConfigurer.java   |  7 +++++++
 .../camel-main-configuration-metadata.json         |  1 +
 core/camel-main/src/main/docs/main.adoc            |  3 ++-
 .../org/apache/camel/main/BaseMainSupport.java     |  1 +
 .../org/apache/camel/main/ProfileConfigurer.java   |  2 ++
 .../camel/main/TracerConfigurationProperties.java  | 22 ++++++++++++++++++++++
 .../mbean/ManagedBacklogTracerMBean.java           |  6 ++++++
 .../management/mbean/ManagedBacklogTracer.java     | 10 ++++++++++
 12 files changed, 81 insertions(+), 1 deletion(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
index 9c5e7a7718e5..996b4d992e3c 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
@@ -483,6 +483,7 @@
     { "name": "camel.threadpool.poolSize", "required": false, "description": "Sets the default core pool size (threads to keep minimum in pool)", "sourceType": "org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "integer", "javaType": "java.lang.Integer", "secret": false },
     { "name": "camel.threadpool.rejectedPolicy", "required": false, "description": "Sets the default handler for tasks which cannot be executed by the thread pool.", "sourceType": "org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "enum", "javaType": "org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy", "secret": false, "enum": [ "Abort", "CallerRuns", "DiscardOldest", "Discard" ] },
     { "name": "camel.threadpool.timeUnit", "required": false, "description": "Sets the default time unit used for keep alive time", "sourceType": "org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "object", "javaType": "java.util.concurrent.TimeUnit", "secret": false },
+    { "name": "camel.trace.activityEnabled", "required": false, "description": "Whether activity tracking is enabled. When enabled, the backlog tracer will capture activity data that can be enriched with additional details from tracing (such as span decorator attributes).", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": false, "secret": false },
     { "name": "camel.trace.activitySize", "required": false, "description": "Defines how many completed exchange summaries to keep in the activity queue (should be between 1 - 1000). The activity queue captures lightweight metadata (no body or headers) each time an exchange completes a route, providing a rolling window of recent exchange activity.", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "integer", "javaType": "int", "defaultValue": 100, "secret": false },
     { "name": "camel.trace.backlogSize", "required": false, "description": "Defines how many of the last messages to keep in the tracer (should be between 1 - 1000).", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "integer", "javaType": "int", "defaultValue": 100, "secret": false },
     { "name": "camel.trace.bodyIncludeFiles", "required": false, "description": "Whether to include the message body of file based messages. The overhead is that the file content has to be read from the file.", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true, "secret": false },
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracer.java b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracer.java
index 5b7563ae8247..672087ba0f50 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracer.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracer.java
@@ -43,6 +43,23 @@ import org.jspecify.annotations.Nullable;
  */
 public interface BacklogTracer {
 
+    /**
+     * Whether the activity tracking feature is enabled.
+     *
+     * @since 4.22
+     */
+    default boolean isActivityEnabled() {
+        return false;
+    }
+
+    /**
+     * To turn on or off the activity tracking feature.
+     *
+     * @since 4.22
+     */
+    default void setActivityEnabled(boolean activityEnabled) {
+    }
+
     /**
      * Is the tracer enabled.
      */
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
index 29e77353857a..c716dfbcd11c 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
@@ -86,6 +86,7 @@ public class BacklogTracer extends ServiceSupport implements org.apache.camel.sp
     private boolean includeExchangeProperties = true;
     private boolean includeExchangeVariables = true;
     private boolean includeException = true;
+    private boolean activityEnabled;
     private boolean traceRests;
     private boolean traceTemplates;
     // a pattern to filter tracing nodes
@@ -316,6 +317,11 @@ public class BacklogTracer extends ServiceSupport implements org.apache.camel.sp
         return predicate.matches(exchange);
     }
 
+    @Override
+    public boolean isActivityEnabled() {
+        return activityEnabled;
+    }
+
     @Override
     public boolean isEnabled() {
         return enabled;
@@ -689,6 +695,10 @@ public class BacklogTracer extends ServiceSupport implements org.apache.camel.sp
         return traceCounter.incrementAndGet();
     }
 
+    public void setActivityEnabled(boolean activityEnabled) {
+        this.activityEnabled = activityEnabled;
+    }
+
     @Override
     protected void doStart() throws Exception {
         camelContext.getManagementStrategy().addEventNotifier(activityEventNotifier);
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/ActivityDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/ActivityDevConsole.java
index 4082259daafa..e126c5a3ae45 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/ActivityDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/ActivityDevConsole.java
@@ -39,6 +39,7 @@ public class ActivityDevConsole extends AbstractDevConsole {
 
         BacklogTracer tracer = getCamelContext().getCamelContextExtension().getContextPlugin(BacklogTracer.class);
         if (tracer != null) {
+            sb.append("Activity Enabled: ").append(tracer.isActivityEnabled()).append("\n");
             sb.append("Activity Size: ").append(tracer.getActivitySize()).append("\n");
             for (BacklogTracerActivityMessage event : tracer.getActivity()) {
                 sb.append(String.format("  %s | %s | %s | %dms | %s",
@@ -64,6 +65,7 @@ public class ActivityDevConsole extends AbstractDevConsole {
 
         BacklogTracer tracer = getCamelContext().getCamelContextExtension().getContextPlugin(BacklogTracer.class);
         if (tracer != null) {
+            root.put("activityEnabled", tracer.isActivityEnabled());
             root.put("activitySize", tracer.getActivitySize());
 
             JsonArray arr = new JsonArray();
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/TracerConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/TracerConfigurationPropertiesConfigurer.java
index 811931a0aad8..ddb0b731980a 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/TracerConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/TracerConfigurationPropertiesConfigurer.java
@@ -22,6 +22,7 @@ public class TracerConfigurationPropertiesConfigurer extends org.apache.camel.su
     private static final Map<String, Object> ALL_OPTIONS;
     static {
         Map<String, Object> map = new CaseInsensitiveMap();
+        map.put("ActivityEnabled", boolean.class);
         map.put("ActivitySize", int.class);
         map.put("BacklogSize", int.class);
         map.put("BodyIncludeFiles", boolean.class);
@@ -44,6 +45,8 @@ public class TracerConfigurationPropertiesConfigurer extends org.apache.camel.su
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
         org.apache.camel.main.TracerConfigurationProperties target = (org.apache.camel.main.TracerConfigurationProperties) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
+        case "activityenabled":
+        case "activityEnabled": target.setActivityEnabled(property(camelContext, boolean.class, value)); return true;
         case "activitysize":
         case "activitySize": target.setActivitySize(property(camelContext, int.class, value)); return true;
         case "backlogsize":
@@ -84,6 +87,8 @@ public class TracerConfigurationPropertiesConfigurer extends org.apache.camel.su
     @Override
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
+        case "activityenabled":
+        case "activityEnabled": return boolean.class;
         case "activitysize":
         case "activitySize": return int.class;
         case "backlogsize":
@@ -120,6 +125,8 @@ public class TracerConfigurationPropertiesConfigurer extends org.apache.camel.su
     public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
         org.apache.camel.main.TracerConfigurationProperties target = (org.apache.camel.main.TracerConfigurationProperties) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
+        case "activityenabled":
+        case "activityEnabled": return target.isActivityEnabled();
         case "activitysize":
         case "activitySize": return target.getActivitySize();
         case "backlogsize":
diff --git a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index 9c5e7a7718e5..996b4d992e3c 100644
--- a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++ b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -483,6 +483,7 @@
     { "name": "camel.threadpool.poolSize", "required": false, "description": "Sets the default core pool size (threads to keep minimum in pool)", "sourceType": "org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "integer", "javaType": "java.lang.Integer", "secret": false },
     { "name": "camel.threadpool.rejectedPolicy", "required": false, "description": "Sets the default handler for tasks which cannot be executed by the thread pool.", "sourceType": "org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "enum", "javaType": "org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy", "secret": false, "enum": [ "Abort", "CallerRuns", "DiscardOldest", "Discard" ] },
     { "name": "camel.threadpool.timeUnit", "required": false, "description": "Sets the default time unit used for keep alive time", "sourceType": "org.apache.camel.main.ThreadPoolConfigurationProperties", "type": "object", "javaType": "java.util.concurrent.TimeUnit", "secret": false },
+    { "name": "camel.trace.activityEnabled", "required": false, "description": "Whether activity tracking is enabled. When enabled, the backlog tracer will capture activity data that can be enriched with additional details from tracing (such as span decorator attributes).", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": false, "secret": false },
     { "name": "camel.trace.activitySize", "required": false, "description": "Defines how many completed exchange summaries to keep in the activity queue (should be between 1 - 1000). The activity queue captures lightweight metadata (no body or headers) each time an exchange completes a route, providing a rolling window of recent exchange activity.", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "integer", "javaType": "int", "defaultValue": 100, "secret": false },
     { "name": "camel.trace.backlogSize", "required": false, "description": "Defines how many of the last messages to keep in the tracer (should be between 1 - 1000).", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "integer", "javaType": "int", "defaultValue": 100, "secret": false },
     { "name": "camel.trace.bodyIncludeFiles", "required": false, "description": "Whether to include the message body of file based messages. The overhead is that the file content has to be read from the file.", "sourceType": "org.apache.camel.main.TracerConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true, "secret": false },
diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc
index f19111d9f174..684b463909f9 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -282,11 +282,12 @@ The camel.debug supports 15 options, which are listed below.
 
 
 === Camel Tracer configurations
-The camel.trace supports 15 options, which are listed below.
+The camel.trace supports 16 options, which are listed below.
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
+| *camel.trace.activityEnabled* | Whether activity tracking is enabled. When enabled, the backlog tracer will capture activity data that can be enriched with additional details from tracing (such as span decorator attributes). | false | boolean
 | *camel.trace.activitySize* | Defines how many completed exchange summaries to keep in the activity queue (should be between 1 - 1000). The activity queue captures lightweight metadata (no body or headers) each time an exchange completes a route, providing a rolling window of recent exchange activity. | 100 | int
 | *camel.trace.backlogSize* | Defines how many of the last messages to keep in the tracer (should be between 1 - 1000). | 100 | int
 | *camel.trace.bodyIncludeFiles* | Whether to include the message body of file based messages. The overhead is that the file content has to be read from the file. | true | boolean
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index 26ce5b2e0bb7..977fdeafce89 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -2504,6 +2504,7 @@ public abstract class BaseMainSupport extends BaseService {
         tracer.setStandby(config.isStandby());
         tracer.setBacklogSize(config.getBacklogSize());
         tracer.setActivitySize(config.getActivitySize());
+        tracer.setActivityEnabled(config.isActivityEnabled());
         tracer.setRemoveOnDump(config.isRemoveOnDump());
         tracer.setBodyMaxChars(config.getBodyMaxChars());
         tracer.setBodyIncludeStreams(config.isBodyIncludeStreams());
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java
index 6abe909806b5..209d7595328d 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java
@@ -54,6 +54,8 @@ public class ProfileConfigurer {
             if (!enabled) {
                 config.tracerConfig().withStandby(true);
             }
+            // enable activity tracking so backlog tracer captures enriched data
+            config.tracerConfig().withActivityEnabled(true);
             // enable error registry to capture routing errors
             config.errorRegistryConfig().withEnabled(true);
             // dev profile allows insecure:dev options by default since those features
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/TracerConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/TracerConfigurationProperties.java
index de5e6939c335..7f92e10dc413 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/TracerConfigurationProperties.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/TracerConfigurationProperties.java
@@ -32,6 +32,8 @@ public class TracerConfigurationProperties implements BootstrapCloseable {
     private boolean enabled;
     @Metadata
     private boolean standby;
+    @Metadata
+    private boolean activityEnabled;
     @Metadata(label = "advanced", defaultValue = "100")
     private int backlogSize = 100;
     @Metadata(label = "advanced", defaultValue = "100")
@@ -95,6 +97,18 @@ public class TracerConfigurationProperties implements BootstrapCloseable {
         this.standby = standby;
     }
 
+    public boolean isActivityEnabled() {
+        return activityEnabled;
+    }
+
+    /**
+     * Whether activity tracking is enabled. When enabled, the backlog tracer will capture activity data that can be
+     * enriched with additional details from tracing (such as span decorator attributes).
+     */
+    public void setActivityEnabled(boolean activityEnabled) {
+        this.activityEnabled = activityEnabled;
+    }
+
     public int getBacklogSize() {
         return backlogSize;
     }
@@ -260,6 +274,14 @@ public class TracerConfigurationProperties implements BootstrapCloseable {
         return this;
     }
 
+    /**
+     * Whether activity tracking is enabled.
+     */
+    public TracerConfigurationProperties withActivityEnabled(boolean activityEnabled) {
+        this.activityEnabled = activityEnabled;
+        return this;
+    }
+
     /**
      * Defines how many of the last messages to keep in the tracer (should be between 1 - 1000).
      */
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
index 2e63926b8bd7..f3d8364fdbd7 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
@@ -39,6 +39,12 @@ public interface ManagedBacklogTracerMBean {
     @ManagedAttribute(description = "Is tracing enabled")
     void setEnabled(boolean enabled);
 
+    @ManagedAttribute(description = "Whether activity tracking is enabled")
+    boolean isActivityEnabled();
+
+    @ManagedAttribute(description = "Whether activity tracking is enabled")
+    void setActivityEnabled(boolean activityEnabled);
+
     @ManagedAttribute(description = "Number of maximum traced messages in total to keep in the backlog (FIFO queue)")
     int getBacklogSize();
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
index bd449b0d4134..619f9bb30f0c 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
@@ -76,6 +76,16 @@ public class ManagedBacklogTracer implements ManagedBacklogTracerMBean {
         return backlogTracer.isEnabled();
     }
 
+    @Override
+    public boolean isActivityEnabled() {
+        return backlogTracer.isActivityEnabled();
+    }
+
+    @Override
+    public void setActivityEnabled(boolean activityEnabled) {
+        backlogTracer.setActivityEnabled(activityEnabled);
+    }
+
     @Override
     public int getBacklogSize() {
         return backlogTracer.getBacklogSize();


(camel) 02/02: CAMEL-24003: Test activityEnabled JMX attribute in BacklogTracerActivityTest

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch feature/CAMEL-24003-backlog-tracer-activity-queue
in repository https://gitbox.apache.org/repos/asf/camel.git

commit b76ad743e09f9e006d11ce4e0d46cb87ed29a9e2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jul 12 09:12:01 2026 +0200

    CAMEL-24003: Test activityEnabled JMX attribute in BacklogTracerActivityTest
    
    Co-Authored-By: Claude Opus 4.6 <no...@anthropic.com>
    Signed-off-by: Claus Ibsen <cl...@gmail.com>
---
 .../org/apache/camel/management/BacklogTracerActivityTest.java    | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerActivityTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerActivityTest.java
index b245b4470829..4f90906de9bc 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerActivityTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerActivityTest.java
@@ -43,6 +43,14 @@ public class BacklogTracerActivityTest extends ManagementTestSupport {
         assertNotNull(on);
         assertTrue(mbeanServer.isRegistered(on));
 
+        Boolean activityEnabled = (Boolean) mbeanServer.getAttribute(on, "ActivityEnabled");
+        assertFalse(activityEnabled, "Activity should be disabled by default (no dev profile)");
+
+        // enable activity via JMX
+        mbeanServer.setAttribute(on, new Attribute("ActivityEnabled", true));
+        activityEnabled = (Boolean) mbeanServer.getAttribute(on, "ActivityEnabled");
+        assertTrue(activityEnabled, "Activity should be enabled after setting via JMX");
+
         Integer activitySize = (Integer) mbeanServer.getAttribute(on, "ActivitySize");
         assertEquals(100, activitySize.intValue());