Veto the MetricDecorator is the metrics are not enabled

This avoids a depending on metrics directly.
This commit is contained in:
Clement Escoffier
2020-02-17 15:27:52 +01:00
parent 445b7c6557
commit 35f8c8fe6d
3 changed files with 25 additions and 9 deletions

View File

@@ -10,6 +10,7 @@ import io.smallrye.reactive.messaging.annotations.Channel;
import io.smallrye.reactive.messaging.annotations.Emitter; import io.smallrye.reactive.messaging.annotations.Emitter;
import io.smallrye.reactive.messaging.annotations.Merge; import io.smallrye.reactive.messaging.annotations.Merge;
import io.smallrye.reactive.messaging.annotations.OnOverflow; import io.smallrye.reactive.messaging.annotations.OnOverflow;
import io.smallrye.reactive.messaging.metrics.MetricDecorator;
public final class DotNames { public final class DotNames {
@@ -27,6 +28,8 @@ public final class DotNames {
static final DotName MERGE = DotName.createSimple(Merge.class.getName()); static final DotName MERGE = DotName.createSimple(Merge.class.getName());
static final DotName BROADCAST = DotName.createSimple(Broadcast.class.getName()); static final DotName BROADCAST = DotName.createSimple(Broadcast.class.getName());
static final DotName METRIC_DECORATOR = DotName.createSimple(MetricDecorator.class.getName());
private DotNames() { private DotNames() {
} }

View File

@@ -10,6 +10,7 @@ import java.util.Map;
import java.util.Optional; import java.util.Optional;
import javax.enterprise.context.Dependent; import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Vetoed;
import javax.enterprise.inject.spi.DeploymentException; import javax.enterprise.inject.spi.DeploymentException;
import org.eclipse.microprofile.config.Config; import org.eclipse.microprofile.config.Config;
@@ -61,7 +62,6 @@ import io.quarkus.smallrye.reactivemessaging.runtime.ReactiveMessagingConfigurat
import io.quarkus.smallrye.reactivemessaging.runtime.SmallRyeReactiveMessagingLifecycle; import io.quarkus.smallrye.reactivemessaging.runtime.SmallRyeReactiveMessagingLifecycle;
import io.quarkus.smallrye.reactivemessaging.runtime.SmallRyeReactiveMessagingRecorder; import io.quarkus.smallrye.reactivemessaging.runtime.SmallRyeReactiveMessagingRecorder;
import io.smallrye.reactive.messaging.Invoker; import io.smallrye.reactive.messaging.Invoker;
import io.smallrye.reactive.messaging.metrics.MetricDecorator;
/** /**
* @author Martin Kouba * @author Martin Kouba
@@ -236,10 +236,27 @@ public class SmallRyeReactiveMessagingProcessor {
} }
@BuildStep @BuildStep
public void enableMetrics(Capabilities capabilities, ReactiveMessagingConfiguration configuration, public void enableMetrics(BuildProducer<AnnotationsTransformerBuildItem> transformers,
BuildProducer<AdditionalBeanBuildItem> beans) { Capabilities capabilities, ReactiveMessagingConfiguration configuration) {
if (capabilities.isCapabilityPresent(Capabilities.METRICS) && configuration.metricsEnabled) { boolean isMetricEnabled = capabilities.isCapabilityPresent(Capabilities.METRICS) && configuration.metricsEnabled;
beans.produce(new AdditionalBeanBuildItem(MetricDecorator.class.getName())); if (!isMetricEnabled) {
LOGGER.info("Metric is disabled - vetoing the MetricDecorator");
// We veto the Metric Decorator
AnnotationsTransformerBuildItem veto = new AnnotationsTransformerBuildItem(new AnnotationsTransformer() {
@Override
public boolean appliesTo(AnnotationTarget.Kind kind) {
return kind == org.jboss.jandex.AnnotationTarget.Kind.CLASS;
}
@Override
public void transform(AnnotationsTransformer.TransformationContext ctx) {
if (ctx.isClass() && ctx.getTarget().asClass().name().equals(
io.quarkus.smallrye.reactivemessaging.deployment.DotNames.METRIC_DECORATOR)) {
ctx.transform().add(Vetoed.class).done();
}
}
});
transformers.produce(veto);
} }
} }

View File

@@ -51,9 +51,5 @@
<artifactId>microprofile-reactive-messaging-tck</artifactId> <artifactId>microprofile-reactive-messaging-tck</artifactId>
<version>${microprofile-reactive-messaging-api.version}</version> <version>${microprofile-reactive-messaging-api.version}</version>
</dependency> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-metrics</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>