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 fab6255085 Make Camel Tracer beans unremovable
fab6255085 is described below

commit fab62550859c07c2fc3878d072d8cf09dd1b9e2b
Author: James Netherton <jamesnether...@gmail.com>
AuthorDate: Wed Oct 2 11:49:46 2024 +0100

    Make Camel Tracer beans unremovable
    
    Fixes #6575
---
 .../deployment/OpenTelemetryProcessor.java         | 11 +++-
 .../deployment/OpenTelemetryCustomTracerTest.java  | 58 ++++++++++++++++++++++
 2 files changed, 68 insertions(+), 1 deletion(-)

diff --git 
a/extensions/opentelemetry/deployment/src/main/java/org/apache/camel/quarkus/component/opentelemetry/deployment/OpenTelemetryProcessor.java
 
b/extensions/opentelemetry/deployment/src/main/java/org/apache/camel/quarkus/component/opentelemetry/deployment/OpenTelemetryProcessor.java
index 1040841541..dbf490541a 100644
--- 
a/extensions/opentelemetry/deployment/src/main/java/org/apache/camel/quarkus/component/opentelemetry/deployment/OpenTelemetryProcessor.java
+++ 
b/extensions/opentelemetry/deployment/src/main/java/org/apache/camel/quarkus/component/opentelemetry/deployment/OpenTelemetryProcessor.java
@@ -17,11 +17,15 @@
 package org.apache.camel.quarkus.component.opentelemetry.deployment;
 
 import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
+import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
 import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.BuildSteps;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 import io.quarkus.opentelemetry.deployment.tracing.TracerEnabled;
 import 
org.apache.camel.quarkus.component.opentelemetry.OpenTelemetryTracerProducer;
+import org.apache.camel.tracing.Tracer;
 
+@BuildSteps(onlyIf = TracerEnabled.class)
 class OpenTelemetryProcessor {
 
     private static final String FEATURE = "camel-opentelemetry";
@@ -31,11 +35,16 @@ class OpenTelemetryProcessor {
         return new FeatureBuildItem(FEATURE);
     }
 
-    @BuildStep(onlyIf = TracerEnabled.class)
+    @BuildStep
     AdditionalBeanBuildItem openTelemetryTracerProducerBean() {
         return AdditionalBeanBuildItem.builder()
                 .setUnremovable()
                 .addBeanClass(OpenTelemetryTracerProducer.class)
                 .build();
     }
+
+    @BuildStep
+    UnremovableBeanBuildItem camelTracerUnremovableBean() {
+        return UnremovableBeanBuildItem.beanTypes(Tracer.class);
+    }
 }
diff --git 
a/extensions/opentelemetry/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry/deployment/OpenTelemetryCustomTracerTest.java
 
b/extensions/opentelemetry/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry/deployment/OpenTelemetryCustomTracerTest.java
new file mode 100644
index 0000000000..1ff76cdba1
--- /dev/null
+++ 
b/extensions/opentelemetry/deployment/src/test/java/org/apache/camel/quarkus/component/opentelemetry/deployment/OpenTelemetryCustomTracerTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.quarkus.component.opentelemetry.deployment;
+
+import java.util.Set;
+
+import io.quarkus.test.QuarkusUnitTest;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
+import org.apache.camel.CamelContext;
+import org.apache.camel.opentelemetry.OpenTelemetryTracer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+
+class OpenTelemetryCustomTracerTest {
+    private static final String TRACER_NAME = "my-custom-tracer";
+
+    @RegisterExtension
+    static final QuarkusUnitTest CONFIG = new 
QuarkusUnitTest().withEmptyApplication();
+
+    @Inject
+    CamelContext context;
+
+    @Test
+    void customOpenTelemetryTracer() {
+        Set<OpenTelemetryTracer> tracers = 
context.getRegistry().findByType(OpenTelemetryTracer.class);
+        assertEquals(1, tracers.size());
+
+        OpenTelemetryTracer tracer = tracers.iterator().next();
+        assertInstanceOf(CustomOpenTelemetryTracer.class, tracer);
+        assertEquals(TRACER_NAME, tracer.getInstrumentationName());
+    }
+
+    @Singleton
+    public static final class CustomOpenTelemetryTracer extends 
OpenTelemetryTracer {
+        @Override
+        public String getInstrumentationName() {
+            return TRACER_NAME;
+        }
+    }
+}

Reply via email to