All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.killbill.commons.skeleton.modules.AdminServletModule Maven / Gradle / Ivy

/*
 * Copyright 2010-2014 Ning, Inc.
 * Copyright 2014-2020 Groupon, Inc
 * Copyright 2020-2020 Equinix, Inc
 * Copyright 2014-2020 The Billing Project, LLC
 *
 * The Billing Project licenses this file to you under the Apache License, version 2.0
 * (the "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at:
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package org.killbill.commons.skeleton.modules;

import java.util.HashMap;
import java.util.Map;

import com.codahale.metrics.servlets.AdminServlet;
import com.google.inject.servlet.ServletModule;

/**
 * A guice servlet module that registers the {@link AdminServlet} 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: *

 * install(new AdminServletModule());
 *
 * Multibinder<HealthCheck> healthChecksBinder = Multibinder.newSetBinder(binder(), HealthCheck.class);
 *
 * healthChecksBinder.addBinding().to(MyCoolHealthCheck.class);
 * healthChecksBinder.addBinding().to(MyOtherCoolHealthCheck.class);
 * 
 * 
* The module offers the same overloaded constructors to specify the uris for the healthcheck, metrics, etc. E.g. *
 * install(new AdminServletModule("/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
 * 
 * }
 * 
*

* Inspired from https://github.com/palominolabs/metrics-guice-servlet */ public class AdminServletModule extends ServletModule { private final String healthcheckUri; private final String metricsUri; private final String pingUri; private final String threadsUri; public AdminServletModule() { this(AdminServlet.DEFAULT_HEALTHCHECK_URI, AdminServlet.DEFAULT_METRICS_URI, AdminServlet.DEFAULT_PING_URI, AdminServlet.DEFAULT_THREADS_URI); } public AdminServletModule(final String healthcheckUri, final String metricsUri, final String pingUri, final String threadsUri) { this.healthcheckUri = healthcheckUri; this.metricsUri = metricsUri; this.pingUri = pingUri; this.threadsUri = threadsUri; } @Override protected void configureServlets() { bind(AdminServlet.class).asEagerSingleton(); final Map initParams = new HashMap(); initParams.put("metrics-uri", metricsUri); initParams.put("ping-uri", pingUri); initParams.put("threads-uri", threadsUri); initParams.put("healthcheck-uri", healthcheckUri); serve(healthcheckUri, metricsUri, pingUri, threadsUri).with(AdminServlet.class, initParams); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy