Skip to content

Commit bff6ca9

Browse files
committed
SmallRye Fault Tolerance: add support for OpenTelemetry Metrics
One TCK test remains excluded, because it has a bug [1]. [1] microprofile/microprofile-fault-tolerance#655
1 parent db7df2e commit bff6ca9

File tree

2 files changed

+36
-14
lines changed

2 files changed

+36
-14
lines changed

extensions/smallrye-fault-tolerance/deployment/src/main/java/io/quarkus/smallrye/faulttolerance/deployment/SmallRyeFaultToleranceProcessor.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.quarkus.arc.deployment.AnnotationsTransformerBuildItem;
2727
import io.quarkus.arc.deployment.BeanArchiveIndexBuildItem;
2828
import io.quarkus.arc.deployment.BeanDefiningAnnotationBuildItem;
29+
import io.quarkus.arc.deployment.OpenTelemetrySdkBuildItem;
2930
import io.quarkus.arc.deployment.ValidationPhaseBuildItem;
3031
import io.quarkus.arc.processor.AnnotationStore;
3132
import io.quarkus.arc.processor.AnnotationsTransformer;
@@ -85,6 +86,7 @@ public void build(BuildProducer<AnnotationsTransformerBuildItem> annotationsTran
8586
BuildProducer<ServiceProviderBuildItem> serviceProvider,
8687
BuildProducer<BeanDefiningAnnotationBuildItem> additionalBda,
8788
Optional<MetricsCapabilityBuildItem> metricsCapability,
89+
Optional<OpenTelemetrySdkBuildItem> openTelemetrySdk,
8890
BuildProducer<SystemPropertyBuildItem> systemProperty,
8991
CombinedIndexBuildItem combinedIndexBuildItem,
9092
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
@@ -177,14 +179,24 @@ public void transform(TransformationContext context) {
177179
SpecCompatibility.class,
178180
Enablement.class);
179181

180-
if (metricsCapability.isEmpty()) {
181-
builder.addBeanClass("io.smallrye.faulttolerance.metrics.NoopProvider");
182-
} else if (metricsCapability.get().metricsSupported(MetricsFactory.MP_METRICS)) {
182+
int metricsProviders = 0;
183+
if (metricsCapability.isPresent() && metricsCapability.get().metricsSupported(MetricsFactory.MP_METRICS)) {
183184
builder.addBeanClass("io.smallrye.faulttolerance.metrics.MicroProfileMetricsProvider");
184-
} else if (metricsCapability.get().metricsSupported(MetricsFactory.MICROMETER)) {
185+
metricsProviders++;
186+
} else if (metricsCapability.isPresent() && metricsCapability.get().metricsSupported(MetricsFactory.MICROMETER)) {
185187
builder.addBeanClass("io.smallrye.faulttolerance.metrics.MicrometerProvider");
188+
metricsProviders++;
189+
}
190+
if (openTelemetrySdk.isPresent()) {
191+
builder.addBeanClass("io.smallrye.faulttolerance.metrics.OpenTelemetryProvider");
192+
metricsProviders++;
193+
}
194+
195+
if (metricsProviders == 0) {
196+
builder.addBeanClass("io.smallrye.faulttolerance.metrics.NoopProvider");
197+
} else if (metricsProviders > 1) {
198+
builder.addBeanClass("io.smallrye.faulttolerance.metrics.CompoundMetricsProvider");
186199
}
187-
// TODO support for OpenTelemetry Metrics -- not present in Quarkus yet
188200

189201
beans.produce(builder.build());
190202

tcks/microprofile-fault-tolerance/pom.xml

+19-9
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<!-- Disable quarkus optimization -->
2727
<quarkus.arc.remove-unused-beans>false</quarkus.arc.remove-unused-beans>
2828
<smallrye.faulttolerance.mp-compatibility>true</smallrye.faulttolerance.mp-compatibility>
29+
<quarkus.otel.metrics.enabled>true</quarkus.otel.metrics.enabled>
2930
</systemPropertyVariables>
3031
<!-- This workaround allows us to run a single test using
3132
the "test" system property -->
@@ -35,16 +36,8 @@
3536
</dependenciesToScan>
3637
<reuseForks>false</reuseForks>
3738
<excludes>
38-
<!-- Quarkus doesn't implement OpenTelemetry Metrics yet -->
39-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.AllAnnotationTelemetryTest</exclude>
40-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.BulkheadTelemetryTest</exclude>
39+
<!-- https://github.com/microprofile/microprofile-fault-tolerance/pull/655 -->
4140
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.CircuitBreakerTelemetryTest</exclude>
42-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.ClashingNameTelemetryTest</exclude>
43-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.ClassLevelTelemetryTest</exclude>
44-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.FallbackTelemetryTest</exclude>
45-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.FaultToleranceDisabledTelemetryTest</exclude>
46-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.RetryTelemetryTest</exclude>
47-
<exclude>org.eclipse.microprofile.fault.tolerance.tck.telemetryMetrics.TimeoutTelemetryTest</exclude>
4841
<!-- We do not support enablement via beans.xml -->
4942
<exclude>org.eclipse.microprofile.fault.tolerance.tck.interceptor.xmlInterceptorEnabling.FaultToleranceInterceptorEnableByXmlTest</exclude>
5043
</excludes>
@@ -65,6 +58,10 @@
6558
<groupId>io.quarkus</groupId>
6659
<artifactId>quarkus-smallrye-metrics</artifactId>
6760
</dependency>
61+
<dependency>
62+
<groupId>io.quarkus</groupId>
63+
<artifactId>quarkus-opentelemetry</artifactId>
64+
</dependency>
6865
<dependency>
6966
<groupId>org.eclipse.microprofile.fault-tolerance</groupId>
7067
<artifactId>microprofile-fault-tolerance-tck</artifactId>
@@ -98,6 +95,19 @@
9895
</exclusion>
9996
</exclusions>
10097
</dependency>
98+
<dependency>
99+
<groupId>io.quarkus</groupId>
100+
<artifactId>quarkus-opentelemetry-deployment</artifactId>
101+
<version>${project.version}</version>
102+
<type>pom</type>
103+
<scope>test</scope>
104+
<exclusions>
105+
<exclusion>
106+
<groupId>*</groupId>
107+
<artifactId>*</artifactId>
108+
</exclusion>
109+
</exclusions>
110+
</dependency>
101111
</dependencies>
102112

103113
</project>

0 commit comments

Comments
 (0)