You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2026/05/08 07:11:17 UTC
(camel) 05/06: chore(components): opentelemetry2 core processors
This is an automated email from the ASF dual-hosted git repository.
squakez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 825996add64af42bad224aa8514666052f366c4c
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu May 7 10:32:59 2026 +0200
chore(components): opentelemetry2 core processors
Ref CAMEL-23432
---
.../OpenTelemetryTracerConfigurer.java | 6 ++
.../src/main/docs/opentelemetry2.adoc | 4 +-
.../apache/camel/opentelemetry2/AsyncCXFTest.java | 1 +
.../camel/opentelemetry2/AsyncDirectTest.java | 1 +
.../org/apache/camel/opentelemetry2/AsyncTest.java | 1 +
.../camel/opentelemetry2/AsyncWiretapTest.java | 1 +
.../camel/opentelemetry2/MDCHeadersTraceTest.java | 1 +
.../opentelemetry2/OpenTelemetryTracerTest.java | 1 +
...nTelemetryTracerTest.java => SpanBeanTest.java} | 101 ++++++++++++---------
.../apache/camel/opentelemetry2/SpanKindTest.java | 1 +
.../SpanPropagationDownstreamTest.java | 1 +
.../SpanPropagationUpstreamTest.java | 1 +
12 files changed, 76 insertions(+), 44 deletions(-)
diff --git a/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java b/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
index cc561a6e9841..61762fd7d712 100644
--- a/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
+++ b/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
@@ -25,6 +25,8 @@ public class OpenTelemetryTracerConfigurer extends org.apache.camel.support.comp
switch (ignoreCase ? name.toLowerCase() : name) {
case "camelcontext":
case "camelContext": target.setCamelContext(property(camelContext, org.apache.camel.CamelContext.class, value)); return true;
+ case "disablecoreprocessors":
+ case "disableCoreProcessors": target.setDisableCoreProcessors(property(camelContext, boolean.class, value)); return true;
case "excludepatterns":
case "excludePatterns": target.setExcludePatterns(property(camelContext, java.lang.String.class, value)); return true;
case "spanlifecyclemanager":
@@ -42,6 +44,8 @@ public class OpenTelemetryTracerConfigurer extends org.apache.camel.support.comp
switch (ignoreCase ? name.toLowerCase() : name) {
case "camelcontext":
case "camelContext": return org.apache.camel.CamelContext.class;
+ case "disablecoreprocessors":
+ case "disableCoreProcessors": return boolean.class;
case "excludepatterns":
case "excludePatterns": return java.lang.String.class;
case "spanlifecyclemanager":
@@ -60,6 +64,8 @@ public class OpenTelemetryTracerConfigurer extends org.apache.camel.support.comp
switch (ignoreCase ? name.toLowerCase() : name) {
case "camelcontext":
case "camelContext": return target.getCamelContext();
+ case "disablecoreprocessors":
+ case "disableCoreProcessors": return target.isDisableCoreProcessors();
case "excludepatterns":
case "excludePatterns": return target.getExcludePatterns();
case "spanlifecyclemanager":
diff --git a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
index 5c06dd31bb50..e443cebd3e83 100644
--- a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
+++ b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
@@ -24,8 +24,10 @@ The configuration properties for the OpenTelemetry2 tracer are:
[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
| Option | Default | Description
+|`enabled`| false | Turn the tracing on/off.
+|`traceProcessors`| false | Trace inner custom processors (i.e., any `process` configured in the route).
+|`disableCoreProcessors`| false | Disable any inner core processors (any core DSL processor provided in the route, for example `bean`, `log`, ...).
| `excludePatterns` | | A comma-separated list of patterns (e.g., `log*,direct*,setBody*`) to exclude from tracing. Spans matching these patterns will be disabled.
-| `traceProcessors` | `false` | If set to `true`, Camel creates OpenTelemetry Spans for each processor in your routes. You can use `excludePatterns` to filter which processors are traced.
| `traceHeadersInclusion`| `false` | If set to `true`, adds the generated telemetry `CAMEL_TRACE_ID` and `CAMEL_SPAN_ID` Exchange headers.
|=======================================================================
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
index 278fddd9076f..59a5e5168d03 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
@@ -50,6 +50,7 @@ public class AsyncCXFTest extends OpenTelemetryTracerTestSupport {
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
index 4b010c617e1e..4d29fbb89ad1 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
@@ -42,6 +42,7 @@ public class AsyncDirectTest extends OpenTelemetryTracerTestSupport {
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
index 546ef24c226e..e73af302fe8f 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
@@ -46,6 +46,7 @@ public class AsyncTest extends OpenTelemetryTracerTestSupport {
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
index 6b1ced29627e..81075b3b82d4 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
@@ -47,6 +47,7 @@ public class AsyncWiretapTest extends OpenTelemetryTracerTestSupport {
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
index 0eab0a484a07..5d6cc8a46045 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
@@ -40,6 +40,7 @@ public class MDCHeadersTraceTest extends OpenTelemetryTracerTestSupport {
tst.setTraceHeadersInclusion(true);
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);
return context;
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
index 3b4118656f63..471151678ca4 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
@@ -43,6 +43,7 @@ public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
similarity index 52%
copy from components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
copy to components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
index 3b4118656f63..a785de244f28 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
@@ -21,10 +21,13 @@ import java.util.List;
import java.util.Map;
import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.sdk.trace.data.SpanData;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.opentelemetry2.CamelOpenTelemetryExtension.OtelTrace;
@@ -33,15 +36,16 @@ import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
+public class SpanBeanTest extends OpenTelemetryTracerTestSupport {
+
+ Tracer tracer = otelExtension.getOpenTelemetry().getTracer("spanInjection");
@Override
protected CamelContext createCamelContext() throws Exception {
OpenTelemetryTracer tst = new OpenTelemetryTracer();
- tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
+ tst.setTracer(tracer);
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
@@ -51,68 +55,59 @@ public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
@Test
void testRouteSingleRequest() throws IOException {
- Exchange result = template.request("direct:start", null);
- // Make sure the trace is propagated downstream
- assertNotNull(result.getIn().getHeader("traceparent"));
+ template.sendBody("direct:start", "my-body");
Map<String, OtelTrace> traces = otelExtension.getTraces();
assertEquals(1, traces.size());
- checkTrace(traces.values().iterator().next(), null);
- }
-
- @Test
- void testRouteMultipleRequests() throws IOException {
- for (int i = 1; i <= 10; i++) {
- context.createProducerTemplate().sendBody("direct:start", "Hello!");
- }
- Map<String, OtelTrace> traces = otelExtension.getTraces();
- // Each trace should have a unique trace id. It is enough to assert that
- // the number of elements in the map is the same of the requests to prove
- // all traces have been generated uniquely.
- assertEquals(10, traces.size());
- // Each trace should have the same structure
- for (OtelTrace trace : traces.values()) {
- checkTrace(trace, "Hello!");
- }
-
+ checkTrace(traces.values().iterator().next());
}
- private void checkTrace(OtelTrace trace, String expectedBody) {
+ private void checkTrace(OtelTrace trace) {
List<SpanData> spans = trace.getSpans();
- assertEquals(3, spans.size());
+ assertEquals(7, spans.size());
SpanData testProducer = spans.get(0);
SpanData direct = spans.get(1);
- SpanData log = spans.get(2);
+ SpanData innerLog = spans.get(2);
+ SpanData beanProcessor = spans.get(3);
+ SpanData beanMethod = spans.get(4);
+ SpanData log = spans.get(5);
+ SpanData innerToLog = spans.get(6);
// Validate span completion
assertTrue(testProducer.hasEnded());
assertTrue(direct.hasEnded());
+ assertTrue(innerLog.hasEnded());
+ assertTrue(beanProcessor.hasEnded());
+ assertTrue(beanMethod.hasEnded());
assertTrue(log.hasEnded());
+ assertTrue(innerToLog.hasEnded());
// Validate same trace
assertEquals(testProducer.getSpanContext().getTraceId(), direct.getSpanContext().getTraceId());
- assertEquals(direct.getSpanContext().getTraceId(), log.getSpanContext().getTraceId());
+ assertEquals(testProducer.getSpanContext().getTraceId(), innerLog.getSpanContext().getTraceId());
+ assertEquals(testProducer.getSpanContext().getTraceId(), beanProcessor.getSpanContext().getTraceId());
+ assertEquals(testProducer.getSpanContext().getTraceId(), beanMethod.getSpanContext().getTraceId());
+ assertEquals(testProducer.getSpanContext().getTraceId(), log.getSpanContext().getTraceId());
+ assertEquals(testProducer.getSpanContext().getTraceId(), innerToLog.getSpanContext().getTraceId());
+
+ // Validate operations
+ assertEquals(Op.EVENT_RECEIVED.toString(), direct.getAttributes().get(AttributeKey.stringKey("op")));
+ assertEquals(Op.EVENT_PROCESS.toString(), beanProcessor.getAttributes().get(AttributeKey.stringKey("op")));
// Validate hierarchy
assertFalse(testProducer.getParentSpanContext().isValid());
+
assertEquals(testProducer.getSpanContext().getSpanId(), direct.getParentSpanContext().getSpanId());
+ assertEquals(direct.getSpanContext().getSpanId(), innerLog.getParentSpanContext().getSpanId());
+ assertEquals(direct.getSpanContext().getSpanId(), beanProcessor.getParentSpanContext().getSpanId());
+ assertEquals(beanProcessor.getSpanContext().getSpanId(), beanMethod.getParentSpanContext().getSpanId());
assertEquals(direct.getSpanContext().getSpanId(), log.getParentSpanContext().getSpanId());
-
- // Validate operations
- assertEquals(Op.EVENT_SENT.toString(), testProducer.getAttributes().get(AttributeKey.stringKey("op")));
- assertEquals(Op.EVENT_RECEIVED.toString(), direct.getAttributes().get(AttributeKey.stringKey("op")));
+ assertEquals(log.getSpanContext().getSpanId(), innerToLog.getParentSpanContext().getSpanId());
// Validate message logging
- assertEquals("A message", direct.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
- if (expectedBody == null) {
- assertEquals(
- "Exchange[ExchangePattern: InOut, BodyType: null, Body: [Body is null]]",
- log.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
- } else {
- assertEquals(
- "Exchange[ExchangePattern: InOnly, BodyType: String, Body: " + expectedBody + "]",
- log.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
- }
-
+ assertEquals("A message", innerLog.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
+ assertEquals(
+ "Exchange[ExchangePattern: InOnly, BodyType: String, Body: my-body]",
+ innerToLog.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
}
@Override
@@ -120,12 +115,32 @@ public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
return new RouteBuilder() {
@Override
public void configure() {
+ MyBean myBean = new MyBean();
+ this.getCamelContext().getRegistry().bind("myBean", myBean);
+
from("direct:start")
.routeId("start")
.log("A message")
+ .bean(MyBean.class)
+ .process(new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ // noop
+ }
+ })
.to("log:info");
}
};
}
+ class MyBean {
+ // NOTE: the commented annotation below would work only when an agent or a runtime framework (quarkus or spring)
+ // is available. We simulate it creating the Span by hand instead.
+ //@WithSpan
+ public void helloWorld() {
+ Span mySpan = tracer.spanBuilder("helloworld").startSpan();
+ // Do the work here
+ mySpan.end();
+ }
+ }
}
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
index 41e0d021d6d5..7746b7515bd3 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
@@ -45,6 +45,7 @@ public class SpanKindTest extends OpenTelemetryTracerTestSupport {
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("spanKindTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
// Register mock HTTP component for testing
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
index 0c28617a1ffc..1d99a67bf4d6 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
@@ -32,6 +32,7 @@ public class SpanPropagationDownstreamTest extends OpenTelemetryTracerTestSuppor
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
index 3938d39a3662..16d474d1da70 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
@@ -38,6 +38,7 @@ public class SpanPropagationUpstreamTest extends OpenTelemetryTracerTestSupport
OpenTelemetryTracer tst = new OpenTelemetryTracer();
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+ tst.setDisableCoreProcessors(true);
CamelContext context = super.createCamelContext();
CamelContextAware.trySetCamelContext(tst, context);
tst.init(context);