
com.yammer.metrics.reporting.guice.MetricsServletModule Maven / Gradle / Ivy
package com.yammer.metrics.reporting.guice;
import org.codehaus.jackson.JsonFactory;
import com.google.inject.name.Names;
import com.google.inject.servlet.ServletModule;
import com.yammer.metrics.reporting.MetricsServlet;
/**
* A guice servlet module that registers the {@link MetricsServlet} via guice and also configures all
* healthchecks bound via guice to it.
*
* To use, install this module in your servlet module (or add as a separate module), and bind the health checks
* via a multi binder:
*
* {@code
* install(new MetricsServletModule());
*
* Multibinder healthChecksBinder = Multibinder.newSetBinder(binder(), HealthCheck.class);
*
* healthChecksBinder.addBinding().to(MyCoolHealthCheck.class);
* healthChecksBinder.addBinding().to(MyOtherCoolHealthCheck.class);
* }
*
* The module offers the same overloaded constructors to specifiy a custom {@link JsonFactory} and the uris
* for the healthcheck, metrics, etc. E.g.
*
* {@code
* install(new MetricsServletModule("/1.0/healthcheck", "/1.0/metrics", "/1.0/ping", "/1.0/threads"));
* }
*
* In order to use this module, you need the guice-servlet
and guice-multibindings
* dependencies in addition to the normal guice
dependency:
*
* {@code
*
* com.google.inject
* guice
* 3.0
*
*
* com.google.inject.extensions
* guice-servlet
* 3.0
*
*
* com.google.inject.extensions
* guice-multibindings
* 3.0
*
* }
*
*/
public class MetricsServletModule extends ServletModule {
private final JsonFactory jsonFactory;
private final String healthcheckUri;
private final String metricsUri;
private final String pingUri;
private final String threadsUri;
public MetricsServletModule() {
this(null, MetricsServlet.HEALTHCHECK_URI, MetricsServlet.METRICS_URI, MetricsServlet.PING_URI, MetricsServlet.THREADS_URI);
}
public MetricsServletModule(JsonFactory jsonFactory) {
this(jsonFactory, MetricsServlet.HEALTHCHECK_URI, MetricsServlet.METRICS_URI, MetricsServlet.PING_URI, MetricsServlet.THREADS_URI);
}
public MetricsServletModule(String healthcheckUri, String metricsUri, String pingUri, String threadsUri) {
this(null, healthcheckUri, metricsUri, pingUri, threadsUri);
}
public MetricsServletModule(JsonFactory jsonFactory, String healthcheckUri, String metricsUri, String pingUri, String threadsUri) {
this.jsonFactory = jsonFactory;
this.healthcheckUri = healthcheckUri;
this.metricsUri = metricsUri;
this.pingUri = pingUri;
this.threadsUri = threadsUri;
}
@Override
protected void configureServlets() {
if (jsonFactory != null) {
bind(JsonFactory.class).annotatedWith(Names.named("MetricsServlet.JSON_FACTORY")).toInstance(jsonFactory);
}
bind(String.class).annotatedWith(Names.named("MetricsServlet.HEALTHCHECK_URI")).toInstance(healthcheckUri);
bind(String.class).annotatedWith(Names.named("MetricsServlet.METRICS_URI")).toInstance(metricsUri);
bind(String.class).annotatedWith(Names.named("MetricsServlet.PING_URI")).toInstance(pingUri);
bind(String.class).annotatedWith(Names.named("MetricsServlet.THREADS_URI")).toInstance(threadsUri);
bind(MetricsServlet.class).toProvider(MetricsServletProvider.class).asEagerSingleton();
serve(healthcheckUri, metricsUri, pingUri, threadsUri).with(MetricsServlet.class);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy