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

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


The following commit(s) were added to refs/heads/main by this push:
     new cd54c4dae8 Fixes #8871. Support BacklogTracer activityEnabled and 
activitySize options
cd54c4dae8 is described below

commit cd54c4dae8c44c67edd4e29da1f5421ca8a25eb0
Author: James Netherton <[email protected]>
AuthorDate: Thu Aug 13 07:03:08 2026 +0100

    Fixes #8871. Support BacklogTracer activityEnabled and activitySize options
    
    Add quarkus.camel.trace.activity-enabled and 
quarkus.camel.trace.activity-size
    configuration properties to the deprecated TraceConfig in CamelConfig, 
matching
    the defaults from Camel's TracerConfigurationProperties (false and 100 
respectively).
    
    Wire the new options in CamelContextRecorder.createBacklogTracerCustomizer 
with a
    fallback: the standard camel.trace.activity-enabled / 
camel.trace.activity-size
    properties (handled natively by camel-main) take precedence, and the
    quarkus.camel.trace.* equivalents are used when the camel-main properties 
are absent.
    
    Co-authored-by: Bob <[email protected]>
---
 .../ROOT/pages/reference/extensions/core.adoc      | 14 ++++++++
 ...> CamelTraceActivityCamelMainFallbackTest.java} | 39 +++++-----------------
 ...lTraceTest.java => CamelTraceActivityTest.java} | 39 +++++-----------------
 .../camel/quarkus/core/runtime/CamelTraceTest.java | 30 ++++-------------
 .../org/apache/camel/quarkus/core/CamelConfig.java | 18 ++++++++++
 .../camel/quarkus/core/CamelContextRecorder.java   | 12 +++++++
 6 files changed, 66 insertions(+), 86 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/core.adoc 
b/docs/modules/ROOT/pages/reference/extensions/core.adoc
index a55cb291d9..377bfd7ada 100644
--- a/docs/modules/ROOT/pages/reference/extensions/core.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/core.adoc
@@ -481,6 +481,20 @@ Filter for tracing messages.
 | `string`
 | 
 
+a|icon:lock[title=Fixed at build time] 
[[quarkus-camel-trace-activity-enabled]]`link:#quarkus-camel-trace-activity-enabled[quarkus.camel.trace.activity-enabled]`
+
+Whether activity tracking is enabled. Activity tracking captures a rolling 
window of completed exchange
+summaries with enriched span decorator attributes (e.g. Kafka topic, HTTP 
method, SQL query).
+| `boolean`
+| `false`
+
+a|icon:lock[title=Fixed at build time] 
[[quarkus-camel-trace-activity-size]]`link:#quarkus-camel-trace-activity-size[quarkus.camel.trace.activity-size]`
+
+The maximum number of completed exchange summaries to keep in the activity 
queue. The valid range is 1 to
+1000.
+| `int`
+| `100`
+
 a|icon:lock[title=Fixed at build time] 
[[quarkus-camel-type-converter-statistics-enabled]]`link:#quarkus-camel-type-converter-statistics-enabled[quarkus.camel.type-converter.statistics-enabled]`
 
 Whether type converter statistics are enabled. By default, type converter 
utilization statistics are disabled. Note
diff --git 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceActivityCamelMainFallbackTest.java
similarity index 62%
copy from 
extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
copy to 
extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceActivityCamelMainFallbackTest.java
index 4e60816173..5650b00a26 100644
--- 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
+++ 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceActivityCamelMainFallbackTest.java
@@ -19,14 +19,12 @@ package org.apache.camel.quarkus.core.runtime;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.util.Map;
 import java.util.Properties;
 
 import io.quarkus.test.QuarkusUnitTest;
 import jakarta.inject.Inject;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.debugger.BacklogTracer;
-import org.apache.camel.spi.Registry;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -36,24 +34,22 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class CamelTraceTest {
+class CamelTraceActivityCamelMainFallbackTest {
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addAsResource(applicationProperties(), 
"application.properties"));
 
-    @Inject
-    Registry registry;
-
     @Inject
     CamelContext camelContext;
 
-    public static Asset applicationProperties() {
+    static Asset applicationProperties() {
         Writer writer = new StringWriter();
 
         Properties props = new Properties();
         props.setProperty("quarkus.camel.trace.enabled", "true");
-        props.setProperty("quarkus.camel.trace.backlog-size", "100");
+        props.setProperty("camel.trace.activity-enabled", "true");
+        props.setProperty("camel.trace.activity-size", "300");
 
         try {
             props.store(writer, "");
@@ -65,30 +61,11 @@ public class CamelTraceTest {
     }
 
     @Test
-    public void testTraceConfiguration() {
-        BacklogTracer tracer = getBacklogTracer(camelContext);
+    void testTraceActivityConfigurationViaCamelMainFallback() {
+        BacklogTracer tracer = 
camelContext.getCamelContextExtension().getContextPlugin(BacklogTracer.class);
 
-        assertThat(camelContext.isBacklogTracing()).isTrue();
-        assertThat(camelContext.isBacklogTracingStandby()).isFalse();
-        assertThat(camelContext.isBacklogTracingTemplates()).isFalse();
         assertThat(tracer).isNotNull();
-        assertThat(tracer.getBacklogSize()).isEqualTo(100);
-        assertThat(tracer.getTracePattern()).isNull();
-        assertThat(tracer.getTraceFilter()).isNull();
-    }
-
-    private BacklogTracer getBacklogTracer(CamelContext camelContext) {
-        BacklogTracer tracer = null;
-        if (registry != null) {
-            // lookup in registry
-            Map<String, BacklogTracer> map = 
registry.findByTypeWithName(BacklogTracer.class);
-            if (map.size() == 1) {
-                tracer = map.values().iterator().next();
-            }
-        }
-        if (tracer == null) {
-            tracer = 
camelContext.getCamelContextExtension().getContextPlugin(BacklogTracer.class);
-        }
-        return tracer;
+        assertThat(tracer.isActivityEnabled()).isTrue();
+        assertThat(tracer.getActivitySize()).isEqualTo(300);
     }
 }
diff --git 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceActivityTest.java
similarity index 62%
copy from 
extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
copy to 
extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceActivityTest.java
index 4e60816173..bd380c7466 100644
--- 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
+++ 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceActivityTest.java
@@ -19,14 +19,12 @@ package org.apache.camel.quarkus.core.runtime;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.util.Map;
 import java.util.Properties;
 
 import io.quarkus.test.QuarkusUnitTest;
 import jakarta.inject.Inject;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.debugger.BacklogTracer;
-import org.apache.camel.spi.Registry;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -36,24 +34,22 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class CamelTraceTest {
+class CamelTraceActivityTest {
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addAsResource(applicationProperties(), 
"application.properties"));
 
-    @Inject
-    Registry registry;
-
     @Inject
     CamelContext camelContext;
 
-    public static Asset applicationProperties() {
+    static Asset applicationProperties() {
         Writer writer = new StringWriter();
 
         Properties props = new Properties();
         props.setProperty("quarkus.camel.trace.enabled", "true");
-        props.setProperty("quarkus.camel.trace.backlog-size", "100");
+        props.setProperty("quarkus.camel.trace.activity-enabled", "true");
+        props.setProperty("quarkus.camel.trace.activity-size", "200");
 
         try {
             props.store(writer, "");
@@ -65,30 +61,11 @@ public class CamelTraceTest {
     }
 
     @Test
-    public void testTraceConfiguration() {
-        BacklogTracer tracer = getBacklogTracer(camelContext);
+    void testTraceActivityConfiguration() {
+        BacklogTracer tracer = 
camelContext.getCamelContextExtension().getContextPlugin(BacklogTracer.class);
 
-        assertThat(camelContext.isBacklogTracing()).isTrue();
-        assertThat(camelContext.isBacklogTracingStandby()).isFalse();
-        assertThat(camelContext.isBacklogTracingTemplates()).isFalse();
         assertThat(tracer).isNotNull();
-        assertThat(tracer.getBacklogSize()).isEqualTo(100);
-        assertThat(tracer.getTracePattern()).isNull();
-        assertThat(tracer.getTraceFilter()).isNull();
-    }
-
-    private BacklogTracer getBacklogTracer(CamelContext camelContext) {
-        BacklogTracer tracer = null;
-        if (registry != null) {
-            // lookup in registry
-            Map<String, BacklogTracer> map = 
registry.findByTypeWithName(BacklogTracer.class);
-            if (map.size() == 1) {
-                tracer = map.values().iterator().next();
-            }
-        }
-        if (tracer == null) {
-            tracer = 
camelContext.getCamelContextExtension().getContextPlugin(BacklogTracer.class);
-        }
-        return tracer;
+        assertThat(tracer.isActivityEnabled()).isTrue();
+        assertThat(tracer.getActivitySize()).isEqualTo(200);
     }
 }
diff --git 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
index 4e60816173..b10fecbf6e 100644
--- 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
+++ 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelTraceTest.java
@@ -19,14 +19,12 @@ package org.apache.camel.quarkus.core.runtime;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.util.Map;
 import java.util.Properties;
 
 import io.quarkus.test.QuarkusUnitTest;
 import jakarta.inject.Inject;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.debugger.BacklogTracer;
-import org.apache.camel.spi.Registry;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -36,19 +34,16 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class CamelTraceTest {
+class CamelTraceTest {
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addAsResource(applicationProperties(), 
"application.properties"));
 
-    @Inject
-    Registry registry;
-
     @Inject
     CamelContext camelContext;
 
-    public static Asset applicationProperties() {
+    static Asset applicationProperties() {
         Writer writer = new StringWriter();
 
         Properties props = new Properties();
@@ -65,8 +60,8 @@ public class CamelTraceTest {
     }
 
     @Test
-    public void testTraceConfiguration() {
-        BacklogTracer tracer = getBacklogTracer(camelContext);
+    void testTraceConfiguration() {
+        BacklogTracer tracer = 
camelContext.getCamelContextExtension().getContextPlugin(BacklogTracer.class);
 
         assertThat(camelContext.isBacklogTracing()).isTrue();
         assertThat(camelContext.isBacklogTracingStandby()).isFalse();
@@ -75,20 +70,7 @@ public class CamelTraceTest {
         assertThat(tracer.getBacklogSize()).isEqualTo(100);
         assertThat(tracer.getTracePattern()).isNull();
         assertThat(tracer.getTraceFilter()).isNull();
-    }
-
-    private BacklogTracer getBacklogTracer(CamelContext camelContext) {
-        BacklogTracer tracer = null;
-        if (registry != null) {
-            // lookup in registry
-            Map<String, BacklogTracer> map = 
registry.findByTypeWithName(BacklogTracer.class);
-            if (map.size() == 1) {
-                tracer = map.values().iterator().next();
-            }
-        }
-        if (tracer == null) {
-            tracer = 
camelContext.getCamelContextExtension().getContextPlugin(BacklogTracer.class);
-        }
-        return tracer;
+        assertThat(tracer.isActivityEnabled()).isFalse();
+        assertThat(tracer.getActivitySize()).isEqualTo(100);
     }
 }
diff --git 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
index dde71a48ad..c278b8d7bf 100644
--- 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
+++ 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
@@ -550,6 +550,24 @@ public interface CamelConfig {
          * @asciidoclet
          */
         Optional<String> traceFilter();
+
+        /**
+         * Whether activity tracking is enabled. Activity tracking captures a 
rolling window of completed exchange
+         * summaries with enriched span decorator attributes (e.g. Kafka 
topic, HTTP method, SQL query).
+         *
+         * @asciidoclet
+         */
+        @WithDefault("false")
+        boolean activityEnabled();
+
+        /**
+         * The maximum number of completed exchange summaries to keep in the 
activity queue. The valid range is 1 to
+         * 1000.
+         *
+         * @asciidoclet
+         */
+        @WithDefault("100")
+        int activitySize();
     }
 
     /**
diff --git 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
index 47f27199f4..e544ee4e9a 100644
--- 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
+++ 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
@@ -160,6 +160,18 @@ public class CamelContextRecorder {
             tracer.setTracePattern(trace.tracePattern().orElse(null));
             tracer.setTraceFilter(trace.traceFilter().orElse(null));
 
+            // activityEnabled: prefer quarkus.camel.trace.activity-enabled, 
fall back to camel.trace.activity-enabled
+            boolean activityEnabled = ConfigProvider.getConfig()
+                    .getOptionalValue("camel.trace.activity-enabled", 
Boolean.class)
+                    .orElse(trace.activityEnabled());
+            tracer.setActivityEnabled(activityEnabled);
+
+            // activitySize: prefer quarkus.camel.trace.activity-size, fall 
back to camel.trace.activity-size
+            int activitySize = ConfigProvider.getConfig()
+                    .getOptionalValue("camel.trace.activity-size", 
Integer.class)
+                    .orElse(trace.activitySize());
+            tracer.setActivitySize(activitySize);
+
             
context.getCamelContextExtension().addContextPlugin(BacklogTracer.class, 
tracer);
         });
     }

Reply via email to