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);
});
}