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