From 05b7731959ed41bc082302f03e5c1e6d3860128a Mon Sep 17 00:00:00 2001 From: reshmabidikar Date: Fri, 9 May 2025 10:17:40 +0530 Subject: [PATCH 1/3] Test HealthCheck --- .idea/misc.xml | 1 + pom.xml | 2 +- .../helloworld/HelloWorldActivator.java | 21 ++++++++++++++++--- .../plugin/helloworld/HelloWorldListener.java | 18 ++++++++++++++-- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index c1d5038..8dc5c6c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,6 @@ + diff --git a/pom.xml b/pom.xml index 63177f5..d9f9b95 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ org.kill-bill.billing killbill-oss-parent - 0.146.30 + 0.146.51-SNAPSHOT org.kill-bill.billing.plugin.java hello-world-plugin diff --git a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java index 1f3ca97..4db2a53 100644 --- a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java +++ b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java @@ -25,6 +25,7 @@ import javax.servlet.Servlet; import javax.servlet.http.HttpServlet; +import org.killbill.billing.invoice.plugin.api.InvoiceFormatterFactory; import org.killbill.billing.invoice.plugin.api.InvoicePluginApi; import org.killbill.billing.osgi.api.Healthcheck; import org.killbill.billing.osgi.api.OSGIPluginProperties; @@ -36,9 +37,12 @@ import org.killbill.billing.plugin.core.config.PluginEnvironmentConfig; import org.killbill.billing.plugin.core.resources.jooby.PluginApp; import org.killbill.billing.plugin.core.resources.jooby.PluginAppBuilder; +import org.killbill.commons.health.api.HealthCheckRegistry; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; import org.osgi.util.tracker.ServiceTracker; -import org.killbill.billing.invoice.plugin.api.InvoiceFormatterFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class HelloWorldActivator extends KillbillActivatorBase { @@ -48,16 +52,26 @@ public class HelloWorldActivator extends KillbillActivatorBase { // public static final String PLUGIN_NAME = "hello-world-plugin"; + private static final Logger logger = LoggerFactory.getLogger(HelloWorldActivator.class); + private HelloWorldConfigurationHandler helloWorldConfigurationHandler; private OSGIKillbillEventDispatcher.OSGIKillbillEventHandler killbillEventHandler; private MetricsGeneratorExample metricsGenerator; private ServiceTracker invoiceFormatterTracker; + private HealthCheckRegistry healthCheckRegistry; + @Override public void start(final BundleContext context) throws Exception { super.start(context); - + final ServiceReference reference = context.getServiceReference(HealthCheckRegistry.class); + if (reference != null) { + final HealthCheckRegistry healthCheckRegistry = context.getService(reference); + if (healthCheckRegistry != null) { + this.healthCheckRegistry = healthCheckRegistry; + } + } final String region = PluginEnvironmentConfig.getRegion(configProperties.getProperties()); // Register an event listener for plugin configuration (optional) @@ -72,7 +86,7 @@ public void start(final BundleContext context) throws Exception { // Register an event listener (optional) - killbillEventHandler = new HelloWorldListener(killbillAPI, invoiceFormatterTracker, configProperties.getProperties()); + killbillEventHandler = new HelloWorldListener(killbillAPI, invoiceFormatterTracker, healthCheckRegistry, configProperties.getProperties()); // As an example, this plugin registers a PaymentPluginApi (this could be // changed to any other plugin api) @@ -99,6 +113,7 @@ public void start(final BundleContext context) throws Exception { registerServlet(context, httpServlet); registerHandlers(); + // HealthCheck aviateHealthCheck = hea } @Override diff --git a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java index fe2864a..4ec4b76 100644 --- a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java +++ b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java @@ -22,8 +22,8 @@ import java.util.List; import java.util.Locale; import java.util.Properties; +import java.util.Set; -import org.joda.time.LocalDate; import org.killbill.billing.account.api.Account; import org.killbill.billing.account.api.AccountApiException; import org.killbill.billing.invoice.api.Invoice; @@ -36,6 +36,8 @@ import org.killbill.billing.osgi.libs.killbill.OSGIKillbillEventDispatcher; import org.killbill.billing.plugin.api.PluginTenantContext; import org.killbill.billing.util.callcontext.TenantContext; +import org.killbill.commons.health.api.HealthCheckRegistry; +import org.killbill.commons.health.api.Result; import org.osgi.util.tracker.ServiceTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,9 +52,12 @@ public class HelloWorldListener implements OSGIKillbillEventDispatcher.OSGIKillb private final Properties configProperties; - public HelloWorldListener(final OSGIKillbillAPI killbillAPI, final ServiceTracker invoiceFormatterTracker, Properties configProperties) { + private final HealthCheckRegistry healthCheckRegistry; + + public HelloWorldListener(final OSGIKillbillAPI killbillAPI, final ServiceTracker invoiceFormatterTracker, final HealthCheckRegistry healthCheckRegistry, final Properties configProperties) { this.osgiKillbillAPI = killbillAPI; this.invoiceFormatterTracker = invoiceFormatterTracker; + this.healthCheckRegistry = healthCheckRegistry; this.configProperties = configProperties; } @@ -66,6 +71,7 @@ public void handleKillbillEvent(final ExtBusEvent killbillEvent) { killbillEvent.getObjectType()); final TenantContext context = new PluginTenantContext(killbillEvent.getAccountId(), killbillEvent.getTenantId()); + // HealthCheck aviateHealthCheck = hea switch (killbillEvent.getEventType()) { // // Handle ACCOUNT_CREATION and ACCOUNT_CHANGE only for demo purpose and just print the account @@ -78,6 +84,14 @@ public void handleKillbillEvent(final ExtBusEvent killbillEvent) { } catch (final AccountApiException e) { logger.warn("Unable to find account", e); } + final Set names = healthCheckRegistry.getNames(); + logger.info("names {}", names); + Result result = healthCheckRegistry.runHealthCheck("org.killbill.billing.server.healthchecks.KillbillHealthcheck"); + logger.info("KB healthcheck result: {}", result.isHealthy()); + result = healthCheckRegistry.runHealthCheck("org.killbill.billing.server.healthchecks.KillbillPluginsHealthcheck"); + logger.info("Plugins healthcheck result: {}", result.isHealthy()); + result = healthCheckRegistry.runHealthCheck("com.killbill.billing.plugin.aviate.AviateHealthCheck"); //This line fails + logger.info("Aviate healthcheck result: {}", result.isHealthy()); break; case INVOICE_CREATION: From 9f4c94a11b5490d557d5eac34246c6e3b7e9a82c Mon Sep 17 00:00:00 2001 From: reshmabidikar Date: Mon, 26 May 2025 17:48:02 +0530 Subject: [PATCH 2/3] Test Plugin HealthCheck --- .../plugin/helloworld/HelloWorldListener.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java index 4ec4b76..87fdf18 100644 --- a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java +++ b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldListener.java @@ -21,11 +21,17 @@ import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import java.util.Set; +import java.util.UUID; import org.killbill.billing.account.api.Account; import org.killbill.billing.account.api.AccountApiException; +import org.killbill.billing.entitlement.api.Subscription; +import org.killbill.billing.entitlement.api.SubscriptionApiException; +import org.killbill.billing.entitlement.api.SubscriptionEvent; import org.killbill.billing.invoice.api.Invoice; import org.killbill.billing.invoice.api.InvoiceItem; import org.killbill.billing.invoice.api.formatters.InvoiceFormatter; @@ -90,9 +96,21 @@ public void handleKillbillEvent(final ExtBusEvent killbillEvent) { logger.info("KB healthcheck result: {}", result.isHealthy()); result = healthCheckRegistry.runHealthCheck("org.killbill.billing.server.healthchecks.KillbillPluginsHealthcheck"); logger.info("Plugins healthcheck result: {}", result.isHealthy()); - result = healthCheckRegistry.runHealthCheck("com.killbill.billing.plugin.aviate.AviateHealthCheck"); //This line fails - logger.info("Aviate healthcheck result: {}", result.isHealthy()); + Map pluginHealthDetails = result.getDetails(); + for(Entry entry: pluginHealthDetails.entrySet()) { + String pluginKey = entry.getKey(); + Map pluginDetails = (Map)entry.getValue(); + logger.info("Plugin {}, Details {}", entry.getKey(), entry.getValue()); + } break; + case SUBSCRIPTION_CREATION: + try { + Subscription subscription = osgiKillbillAPI.getSubscriptionApi().getSubscriptionForEntitlementId(killbillEvent.getObjectId(), true, context); + List events = subscription.getSubscriptionEvents(); + logger.info("events:"+events); + } catch (SubscriptionApiException e) { + throw new RuntimeException(e); + } case INVOICE_CREATION: final Account account; From afae51f6fb09c55adf52db32503f0149993450f5 Mon Sep 17 00:00:00 2001 From: reshmabidikar Date: Tue, 3 Jun 2025 09:31:33 +0530 Subject: [PATCH 3/3] Use HealthCheckRegistry from KillBillActivatorBase --- .../billing/plugin/helloworld/HelloWorldActivator.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java index 4db2a53..4ecaa5e 100644 --- a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java +++ b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java @@ -60,18 +60,10 @@ public class HelloWorldActivator extends KillbillActivatorBase { private ServiceTracker invoiceFormatterTracker; - private HealthCheckRegistry healthCheckRegistry; @Override public void start(final BundleContext context) throws Exception { super.start(context); - final ServiceReference reference = context.getServiceReference(HealthCheckRegistry.class); - if (reference != null) { - final HealthCheckRegistry healthCheckRegistry = context.getService(reference); - if (healthCheckRegistry != null) { - this.healthCheckRegistry = healthCheckRegistry; - } - } final String region = PluginEnvironmentConfig.getRegion(configProperties.getProperties()); // Register an event listener for plugin configuration (optional)