diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/modules/DefaultHealthcheckPluginRegistry.java b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/DefaultHealthcheckPluginRegistry.java
new file mode 100644
index 0000000..a56baf9
--- /dev/null
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/DefaultHealthcheckPluginRegistry.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 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.billing.server.modules;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.killbill.billing.osgi.api.Healthcheck;
+import org.killbill.billing.osgi.api.OSGIServiceDescriptor;
+import org.killbill.billing.osgi.api.OSGIServiceRegistration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultHealthcheckPluginRegistry implements OSGIServiceRegistration<Healthcheck> {
+
+ private static final Logger log = LoggerFactory.getLogger(DefaultHealthcheckPluginRegistry.class);
+
+ private final Map<String, Healthcheck> pluginsByName = new ConcurrentHashMap<String, Healthcheck>();
+
+ @Override
+ public void registerService(final OSGIServiceDescriptor desc, final Healthcheck healthcheck) {
+ log.info("Registering service='{}'", desc.getRegistrationName());
+ pluginsByName.put(desc.getRegistrationName(), healthcheck);
+ }
+
+ @Override
+ public void unregisterService(final String serviceName) {
+ log.info("Unregistering service='{}'", serviceName);
+ pluginsByName.remove(serviceName);
+ }
+
+ @Override
+ public Healthcheck getServiceForName(final String name) {
+ if (name == null) {
+ throw new IllegalArgumentException("Null healthcheck name");
+ }
+ return pluginsByName.get(name);
+ }
+
+ @Override
+ public Set<String> getAllServices() {
+ return pluginsByName.keySet();
+ }
+
+ @Override
+ public Class<Healthcheck> getServiceType() {
+ return Healthcheck.class;
+ }
+}
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
index 5d43a8f..f43a948 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
@@ -54,6 +54,8 @@ import org.killbill.billing.jaxrs.resources.TransactionResource;
import org.killbill.billing.jaxrs.resources.UsageResource;
import org.killbill.billing.jaxrs.util.KillbillEventHandler;
import org.killbill.billing.junction.glue.DefaultJunctionModule;
+import org.killbill.billing.osgi.api.Healthcheck;
+import org.killbill.billing.osgi.api.OSGIServiceRegistration;
import org.killbill.billing.overdue.glue.DefaultOverdueModule;
import org.killbill.billing.payment.glue.PaymentModule;
import org.killbill.billing.platform.api.KillbillConfigSource;
@@ -94,6 +96,7 @@ import org.skife.jdbi.v2.ResultSetMapperFactory;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
import ch.qos.logback.classic.helpers.MDCInsertingServletFilter;
+import com.google.inject.TypeLiteral;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
@@ -114,6 +117,8 @@ public class KillbillServerModule extends KillbillPlatformModule {
configureResources();
configureFilters();
configurePushNotification();
+
+ bind(new TypeLiteral<OSGIServiceRegistration<Healthcheck>>() {}).to(DefaultHealthcheckPluginRegistry.class).asEagerSingleton();
}
@Override