package io.dropwizard.metrics.jersey2; import io.dropwizard.metrics.MetricRegistry; import io.dropwizard.metrics.SharedMetricRegistries; import javax.ws.rs.core.Feature; import javax.ws.rs.core.FeatureContext; /** * A {@link Feature} which registers a {@link InstrumentedResourceMethodApplicationListener} * for recording request events. */ public class MetricsFeature implements Feature { private final MetricRegistry registry; public MetricsFeature(MetricRegistry registry) { this.registry = registry; } public MetricsFeature(String registryName) { this(SharedMetricRegistries.getOrCreate(registryName)); } /** * A call-back method called when the feature is to be enabled in a given * runtime configuration scope. * <p/> * The responsibility of the feature is to properly update the supplied runtime configuration context * and return {@code true} if the feature was successfully enabled or {@code false} otherwise. * <p> * Note that under some circumstances the feature may decide not to enable itself, which * is indicated by returning {@code false}. In such case the configuration context does * not add the feature to the collection of enabled features and a subsequent call to * {@link javax.ws.rs.core.Configuration#isEnabled(javax.ws.rs.core.Feature)} or * {@link javax.ws.rs.core.Configuration#isEnabled(Class)} method * would return {@code false}. * </p> * * @param context configurable context in which the feature should be enabled. * @return {@code true} if the feature was successfully enabled, {@code false} * otherwise. */ @Override public boolean configure(FeatureContext context) { context.register(new InstrumentedResourceMethodApplicationListener(registry)); return true; } }