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

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

commit 307c621399ac4ef5de1bfca0ccf8f331f21b04a4
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Tue May 26 09:16:11 2026 +0200

    feat(extensions): support telemetry include processor field
    
    Ref https://github.com/apache/camel/pull/23500
    
    Co-Authored-By: James Netherton <[email protected]>
---
 .../pages/reference/extensions/opentelemetry2.adoc |  7 ++++
 .../pages/reference/extensions/telemetry-dev.adoc  |  7 ++++
 .../deployment/Opentelemetry2Test.java             |  3 ++
 extensions/opentelemetry2/runtime/pom.xml          |  5 +++
 .../graal/OpenTelemetryTracerSubstitutions.java    | 41 ++++++++++++++++++++++
 .../opentelemetry2/CamelOpenTelemetry2Config.java  |  8 +++++
 .../OpenTelemetry2TracerProducer.java              |  1 +
 .../telemetry/dev/CamelTelemetryDevConfig.java     |  8 +++++
 .../telemetry/dev/TelemetryDevTracerProducer.java  |  4 +++
 .../opentelemetry2/it/Opentelemetry2Test.java      | 19 +++++-----
 10 files changed, 94 insertions(+), 9 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc 
b/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc
index da7d5d96c9..4adb5723e4 100644
--- a/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/opentelemetry2.adoc
@@ -136,6 +136,13 @@ pattern can take the following forms:
 | `string`
 | 
 
+a| 
[[quarkus-camel-opentelemetry2-include-patterns]]`link:#quarkus-camel-opentelemetry2-include-patterns[quarkus.camel.opentelemetry2.include-patterns]`
+
+Sets include pattern(s) that will explicitly enable tracing for Camel 
processors that matches the pattern.
+Multiple patterns can be separated by comma. All processors included by 
default if nothing is specified.
+| `string`
+| 
+
 a| 
[[quarkus-camel-opentelemetry2-trace-processors]]`link:#quarkus-camel-opentelemetry2-trace-processors[quarkus.camel.opentelemetry2.trace-processors]`
 
 Sets whether to create new telemetry spans for each Camel custom Processor. 
Use the excludePatterns property to
diff --git a/docs/modules/ROOT/pages/reference/extensions/telemetry-dev.adoc 
b/docs/modules/ROOT/pages/reference/extensions/telemetry-dev.adoc
index b7ec28941c..cc8bef3020 100644
--- a/docs/modules/ROOT/pages/reference/extensions/telemetry-dev.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/telemetry-dev.adoc
@@ -65,6 +65,13 @@ pattern can take the following forms:
 | `string`
 | 
 
+a| 
[[quarkus-camel-telemetrydev-include-patterns]]`link:#quarkus-camel-telemetrydev-include-patterns[quarkus.camel.telemetryDev.include-patterns]`
+
+Sets include pattern(s) that will explicitly enable tracing for Camel 
processors that matches the pattern.
+Multiple patterns can be separated by comma. All processors included by 
default if nothing is specified.
+| `string`
+| 
+
 a| 
[[quarkus-camel-telemetrydev-trace-processors]]`link:#quarkus-camel-telemetrydev-trace-processors[quarkus.camel.telemetryDev.trace-processors]`
 
 Sets whether to create new telemetry spans for each Camel custom Processor. 
Use the excludePatterns property to
diff --git 
a/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
 
b/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
index b11feb3c54..8962e701bf 100644
--- 
a/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
+++ 
b/extensions/opentelemetry2/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/deployment/Opentelemetry2Test.java
@@ -34,10 +34,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class Opentelemetry2Test {
 
+    private static final String INCLUDE_PATTERNS = 
"netty-http:*,netty-http:/prefix/.*";
     private static final String EXCLUDE_PATTERNS = 
"platform-http:*,platform-http:/prefix/.*";
 
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+            
.overrideConfigKey("quarkus.camel.opentelemetry2.include-patterns", 
INCLUDE_PATTERNS)
             
.overrideConfigKey("quarkus.camel.opentelemetry2.exclude-patterns", 
EXCLUDE_PATTERNS)
             
.overrideConfigKey("quarkus.camel.opentelemetry2.trace-processors", "true")
             
.overrideConfigKey("quarkus.camel.opentelemetry2.trace-headers-inclusion", 
"true")
@@ -53,6 +55,7 @@ public class Opentelemetry2Test {
 
         OpenTelemetryTracer tracer = tracers.iterator().next();
         assertInstanceOf(OpenTelemetryTracer.class, tracer);
+        assertEquals(INCLUDE_PATTERNS, tracer.getIncludePatterns());
         assertEquals(EXCLUDE_PATTERNS, tracer.getExcludePatterns());
         assertTrue(tracer.isTraceProcessors());
         assertTrue(tracer.isTraceHeadersInclusion());
diff --git a/extensions/opentelemetry2/runtime/pom.xml 
b/extensions/opentelemetry2/runtime/pom.xml
index 379ffdd560..26709cb152 100644
--- a/extensions/opentelemetry2/runtime/pom.xml
+++ b/extensions/opentelemetry2/runtime/pom.xml
@@ -58,6 +58,11 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-opentelemetry2</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.graalvm.sdk</groupId>
+            <artifactId>nativeimage</artifactId>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/opentelemetry2/graal/OpenTelemetryTracerSubstitutions.java
 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/opentelemetry2/graal/OpenTelemetryTracerSubstitutions.java
new file mode 100644
index 0000000000..0a61229d57
--- /dev/null
+++ 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/opentelemetry2/graal/OpenTelemetryTracerSubstitutions.java
@@ -0,0 +1,41 @@
+/*
+ * 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.opentelemetry2.graal;
+
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+import org.apache.camel.opentelemetry2.OpenTelemetryTracer;
+
+/**
+ * Disables native-unfriendly code meant for Camel JBang dev mode.
+ * The initDevSpanExporter and initOtlpReceiver methods initialize 
development/debugging
+ * features that are not needed in native mode and rely on dynamic features 
unsuitable
+ * for native compilation.
+ */
+@TargetClass(OpenTelemetryTracer.class)
+final class OpenTelemetryTracerSubstitutions {
+
+    @Substitute
+    private void initDevSpanExporter() {
+        // No-op in native mode
+    }
+
+    @Substitute
+    private void initOtlpReceiver() {
+        // No-op in native mode
+    }
+}
diff --git 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
index 4b38327425..5486c03a47 100644
--- 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
+++ 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/CamelOpenTelemetry2Config.java
@@ -40,6 +40,14 @@ public interface CamelOpenTelemetry2Config {
      */
     Optional<String> excludePatterns();
 
+    /**
+     * Sets include pattern(s) that will explicitly enable tracing for Camel 
processors that matches the pattern.
+     * Multiple patterns can be separated by comma. All processors included by 
default if nothing is specified.
+     *
+     * @asciidoclet
+     */
+    Optional<String> includePatterns();
+
     /**
      * Sets whether to create new telemetry spans for each Camel custom 
Processor. Use the excludePatterns property to
      * filter
diff --git 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
index 4d1ed9733c..69e597d64c 100644
--- 
a/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
+++ 
b/extensions/opentelemetry2/runtime/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/OpenTelemetry2TracerProducer.java
@@ -40,6 +40,7 @@ public class OpenTelemetry2TracerProducer {
         if (!oTelRuntimeConfig.sdkDisabled()) {
             OpenTelemetryTracer openTelemetryTracer = new 
OpenTelemetryTracer();
             
config.excludePatterns().ifPresent(openTelemetryTracer::setExcludePatterns);
+            
config.includePatterns().ifPresent(openTelemetryTracer::setIncludePatterns);
             openTelemetryTracer.setTraceProcessors(config.traceProcessors());
             
openTelemetryTracer.setDisableCoreProcessors(config.disableCoreProcessors());
             
openTelemetryTracer.setTraceHeadersInclusion(config.traceHeadersInclusion());
diff --git 
a/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/CamelTelemetryDevConfig.java
 
b/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/CamelTelemetryDevConfig.java
index 66c7bbd304..193f1de9b8 100644
--- 
a/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/CamelTelemetryDevConfig.java
+++ 
b/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/CamelTelemetryDevConfig.java
@@ -41,6 +41,14 @@ public interface CamelTelemetryDevConfig {
      */
     Optional<String> excludePatterns();
 
+    /**
+     * Sets include pattern(s) that will explicitly enable tracing for Camel 
processors that matches the pattern.
+     * Multiple patterns can be separated by comma. All processors included by 
default if nothing is specified.
+     *
+     * @asciidoclet
+     */
+    Optional<String> includePatterns();
+
     /**
      * Sets whether to create new telemetry spans for each Camel custom 
Processor. Use the excludePatterns property to
      * filter
diff --git 
a/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/TelemetryDevTracerProducer.java
 
b/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/TelemetryDevTracerProducer.java
index 186475ac43..60a2b065b4 100644
--- 
a/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/TelemetryDevTracerProducer.java
+++ 
b/extensions/telemetry-dev/runtime/src/main/java/org/apache/camel/quarkus/component/telemetry/dev/TelemetryDevTracerProducer.java
@@ -37,6 +37,10 @@ public class TelemetryDevTracerProducer {
             
telemetryDevTracer.setExcludePatterns(config.excludePatterns().get());
         }
 
+        if (config.includePatterns().isPresent()) {
+            
telemetryDevTracer.setIncludePatterns(config.includePatterns().get());
+        }
+
         if (config.traceProcessors()) {
             telemetryDevTracer.setTraceProcessors(config.traceProcessors());
         }
diff --git 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
index 0b033e0aa3..a900ab63d0 100644
--- 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
+++ 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
@@ -139,7 +139,7 @@ class Opentelemetry2Test {
 
     @Test
     public void testTracedBeanTo() {
-        int spanPerTrace = 6;
+        int spanPerTrace = 5;
         String name = "Camel Quarkus OpenTelemetry";
         RestAssured.get("/opentelemetry2/greet/" + name)
                 .then()
@@ -152,12 +152,13 @@ class Opentelemetry2Test {
         List<Map<String, String>> spans = getSpans();
         assertEquals(spanPerTrace, spans.size());
 
-        // The inner span generated will depend on the "to" processor node
+        // Span 0 and 1 (bean EVENT_SENT and bean method) both have the same 
parent (direct endpoint span)
+        // because bean method's parent is set by OTel context from scope 
wrapper, not the event span
         assertEquals(spans.get(2).get("spanId"), spans.get(0).get("parentId"));
         assertEquals(spans.get(2).get("spanId"), spans.get(1).get("parentId"));
         assertEquals(spans.get(3).get("spanId"), spans.get(2).get("parentId"));
-        assertEquals(SpanKind.INTERNAL.name(), spans.get(4).get("kind"));
-        assertEquals(SpanKind.SERVER.name(), spans.get(5).get("kind"));
+        assertEquals(SpanKind.INTERNAL.name(), spans.get(3).get("kind"));
+        assertEquals(SpanKind.SERVER.name(), spans.get(4).get("kind"));
     }
 
     @Test
@@ -214,7 +215,7 @@ class Opentelemetry2Test {
     @ParameterizedTest
     @ValueSource(strings = { "http", "vertx-http" })
     void testHttpInvocation(String httpComponent) {
-        int spanPerTrace = 10;
+        int spanPerTrace = 9;
         RestAssured.given()
                 .queryParam("httpComponent", httpComponent)
                 .get("/greeting")
@@ -228,20 +229,20 @@ class Opentelemetry2Test {
         assertEquals(spanPerTrace, spans.size());
 
         // Verify root doesn't have parent
-        assertEquals("0000000000000000", spans.get(9).get("parentId"));
+        assertEquals("0000000000000000", spans.get(8).get("parentId"));
         // Verify the span hierarchy
-        assertEquals(spans.get(8).get("parentId"), spans.get(9).get("spanId"));
         assertEquals(spans.get(7).get("parentId"), spans.get(8).get("spanId"));
+        assertEquals(spans.get(6).get("parentId"), spans.get(7).get("spanId"));
         // Last two spans have the same parent
         // For /greeting there is no existing tracing in progress. For 
/greeting-provider there is, so its related to the trace propagation
         assertEquals(spans.get(1).get("parentId"), spans.get(2).get("spanId"));
         assertEquals(spans.get(0).get("parentId"), spans.get(2).get("spanId"));
 
-        assertEquals(SpanKind.SERVER.name(), spans.get(9).get("kind"));
+        assertEquals(SpanKind.SERVER.name(), spans.get(8).get("kind"));
         assertEquals(SpanKind.SERVER.name(), spans.get(2).get("kind"));
 
         assertEquals(SpanKind.SERVER.name(), spans.get(3).get("kind"));
         assertEquals(SpanKind.CLIENT.name(), spans.get(4).get("kind"));
-        assertEquals(SpanKind.SERVER.name(), spans.get(8).get("kind"));
+        assertEquals(SpanKind.SERVER.name(), spans.get(7).get("kind"));
     }
 }

Reply via email to