diff --git a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/OpenTelemetrySdkBuildItem.java b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/OpenTelemetrySdkBuildItem.java index 86c0ccdd3aa63..b1770c4a496db 100644 --- a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/OpenTelemetrySdkBuildItem.java +++ b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/OpenTelemetrySdkBuildItem.java @@ -7,10 +7,39 @@ public final class OpenTelemetrySdkBuildItem extends SimpleBuildItem { + private final boolean tracingBuildTimeEnabled; + private final boolean metricsBuildTimeEnabled; + private final boolean loggingBuildTimeEnabled; + private final RuntimeValue runtimeEnabled; - public OpenTelemetrySdkBuildItem(RuntimeValue sdkEnabled) { - this.runtimeEnabled = sdkEnabled; + public OpenTelemetrySdkBuildItem(boolean tracingBuildTimeEnabled, boolean metricsBuildTimeEnabled, + boolean loggingBuildTimeEnabled, RuntimeValue runtimeEnabled) { + this.tracingBuildTimeEnabled = tracingBuildTimeEnabled; + this.metricsBuildTimeEnabled = metricsBuildTimeEnabled; + this.loggingBuildTimeEnabled = loggingBuildTimeEnabled; + this.runtimeEnabled = runtimeEnabled; + } + + /** + * @return {@code true} if OpenTelemetry Tracing is enabled at build time + */ + public boolean isTracingBuildTimeEnabled() { + return tracingBuildTimeEnabled; + } + + /** + * @return {@code true} if OpenTelemetry Metrics is enabled at build time + */ + public boolean isMetricsBuildTimeEnabled() { + return metricsBuildTimeEnabled; + } + + /** + * @return {@code true} if OpenTelemetry Logging is enabled at build time + */ + public boolean isLoggingBuildTimeEnabled() { + return loggingBuildTimeEnabled; } /** diff --git a/extensions/opentelemetry/deployment/src/main/java/io/quarkus/opentelemetry/deployment/OpenTelemetryProcessor.java b/extensions/opentelemetry/deployment/src/main/java/io/quarkus/opentelemetry/deployment/OpenTelemetryProcessor.java index a5d0124fa9172..35969342b0230 100644 --- a/extensions/opentelemetry/deployment/src/main/java/io/quarkus/opentelemetry/deployment/OpenTelemetryProcessor.java +++ b/extensions/opentelemetry/deployment/src/main/java/io/quarkus/opentelemetry/deployment/OpenTelemetryProcessor.java @@ -108,6 +108,7 @@ AdditionalBeanBuildItem ensureProducerIsRetained() { @Record(ExecutionTime.RUNTIME_INIT) void openTelemetryBean(OpenTelemetryRecorder recorder, OTelRuntimeConfig oTelRuntimeConfig, + OTelBuildConfig oTelBuildConfig, BuildProducer syntheticProducer, BuildProducer openTelemetrySdkBuildItemBuildProducer) { syntheticProducer.produce(SyntheticBeanBuildItem.configure(OpenTelemetry.class) @@ -126,8 +127,21 @@ void openTelemetryBean(OpenTelemetryRecorder recorder, .destroyer(OpenTelemetryDestroyer.class) .done()); - openTelemetrySdkBuildItemBuildProducer.produce( - new OpenTelemetrySdkBuildItem(recorder.isOtelSdkEnabled(oTelRuntimeConfig))); + // same as `TracerEnabled` + boolean tracingEnabled = oTelBuildConfig.traces().enabled() + .map(it -> it && oTelBuildConfig.enabled()) + .orElseGet(oTelBuildConfig::enabled); + // same as `MetricProcessor.MetricEnabled` + boolean metricsEnabled = oTelBuildConfig.metrics().enabled() + .map(it -> it && oTelBuildConfig.enabled()) + .orElseGet(oTelBuildConfig::enabled); + // same as `LogHandlerProcessor.LogsEnabled` + boolean loggingEnabled = oTelBuildConfig.logs().enabled() + .map(it -> it && oTelBuildConfig.enabled()) + .orElseGet(oTelBuildConfig::enabled); + + openTelemetrySdkBuildItemBuildProducer.produce(new OpenTelemetrySdkBuildItem( + tracingEnabled, metricsEnabled, loggingEnabled, recorder.isOtelSdkEnabled(oTelRuntimeConfig))); } @BuildStep diff --git a/extensions/smallrye-fault-tolerance/deployment/src/main/java/io/quarkus/smallrye/faulttolerance/deployment/SmallRyeFaultToleranceProcessor.java b/extensions/smallrye-fault-tolerance/deployment/src/main/java/io/quarkus/smallrye/faulttolerance/deployment/SmallRyeFaultToleranceProcessor.java index c0b10c61f8b3c..6a882ff7004d7 100644 --- a/extensions/smallrye-fault-tolerance/deployment/src/main/java/io/quarkus/smallrye/faulttolerance/deployment/SmallRyeFaultToleranceProcessor.java +++ b/extensions/smallrye-fault-tolerance/deployment/src/main/java/io/quarkus/smallrye/faulttolerance/deployment/SmallRyeFaultToleranceProcessor.java @@ -26,6 +26,7 @@ import io.quarkus.arc.deployment.AnnotationsTransformerBuildItem; import io.quarkus.arc.deployment.BeanArchiveIndexBuildItem; import io.quarkus.arc.deployment.BeanDefiningAnnotationBuildItem; +import io.quarkus.arc.deployment.OpenTelemetrySdkBuildItem; import io.quarkus.arc.deployment.ValidationPhaseBuildItem; import io.quarkus.arc.processor.AnnotationStore; import io.quarkus.arc.processor.AnnotationsTransformer; @@ -85,6 +86,7 @@ public void build(BuildProducer annotationsTran BuildProducer serviceProvider, BuildProducer additionalBda, Optional metricsCapability, + Optional openTelemetrySdk, BuildProducer systemProperty, CombinedIndexBuildItem combinedIndexBuildItem, BuildProducer reflectiveClass, @@ -177,14 +179,24 @@ public void transform(TransformationContext context) { SpecCompatibility.class, Enablement.class); - if (metricsCapability.isEmpty()) { - builder.addBeanClass("io.smallrye.faulttolerance.metrics.NoopProvider"); - } else if (metricsCapability.get().metricsSupported(MetricsFactory.MP_METRICS)) { + int metricsProviders = 0; + if (metricsCapability.isPresent() && metricsCapability.get().metricsSupported(MetricsFactory.MP_METRICS)) { builder.addBeanClass("io.smallrye.faulttolerance.metrics.MicroProfileMetricsProvider"); - } else if (metricsCapability.get().metricsSupported(MetricsFactory.MICROMETER)) { + metricsProviders++; + } else if (metricsCapability.isPresent() && metricsCapability.get().metricsSupported(MetricsFactory.MICROMETER)) { builder.addBeanClass("io.smallrye.faulttolerance.metrics.MicrometerProvider"); + metricsProviders++; + } + if (openTelemetrySdk.map(OpenTelemetrySdkBuildItem::isMetricsBuildTimeEnabled).orElse(false)) { + builder.addBeanClass("io.smallrye.faulttolerance.metrics.OpenTelemetryProvider"); + metricsProviders++; + } + + if (metricsProviders == 0) { + builder.addBeanClass("io.smallrye.faulttolerance.metrics.NoopProvider"); + } else if (metricsProviders > 1) { + builder.addBeanClass("io.smallrye.faulttolerance.metrics.CompoundMetricsProvider"); } - // TODO support for OpenTelemetry Metrics -- not present in Quarkus yet beans.produce(builder.build()); diff --git a/tcks/microprofile-fault-tolerance/pom.xml b/tcks/microprofile-fault-tolerance/pom.xml index 3ee3d75230cc8..6be52b015c476 100644 --- a/tcks/microprofile-fault-tolerance/pom.xml +++ b/tcks/microprofile-fault-tolerance/pom.xml @@ -26,6 +26,7 @@ false true + true @@ -35,16 +36,8 @@ false - - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.AllAnnotationTelemetryTest - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.BulkheadTelemetryTest + org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.CircuitBreakerTelemetryTest - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.ClashingNameTelemetryTest - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.ClassLevelTelemetryTest - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.FallbackTelemetryTest - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.FaultToleranceDisabledTelemetryTest - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.RetryTelemetryTest - org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.TimeoutTelemetryTest org.eclipse.microprofile.fault.tolerance.tck.interceptor.xmlInterceptorEnabling.FaultToleranceInterceptorEnableByXmlTest @@ -65,6 +58,10 @@ io.quarkus quarkus-smallrye-metrics + + io.quarkus + quarkus-opentelemetry + org.eclipse.microprofile.fault-tolerance microprofile-fault-tolerance-tck @@ -98,6 +95,19 @@ + + io.quarkus + quarkus-opentelemetry-deployment + ${project.version} + pom + test + + + * + * + + +