killbill-uncached

server: make startup screen work in multitenant mode Signed-off-by:

3/14/2014 10:28:09 AM

Details

diff --git a/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java b/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
index 8c08e39..87fc64b 100644
--- a/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
+++ b/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
@@ -47,6 +47,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.health.HealthCheck;
 import com.codahale.metrics.health.HealthCheckRegistry;
 import com.codahale.metrics.servlets.HealthCheckServlet;
 import com.codahale.metrics.servlets.MetricsServlet;
@@ -61,6 +62,8 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
 
     private static final Logger logger = LoggerFactory.getLogger(KillbillGuiceListener.class);
 
+    public static final ImmutableList<String> METRICS_SERVLETS_PATHS = ImmutableList.<String>of("/1.0/healthcheck", "/1.0/metrics", "/1.0/ping", "/1.0/threads");
+
     private KillbillServerConfig config;
     private ConfigSource configSource;
     private Injector injector;
@@ -98,7 +101,11 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
         guiceModules = ImmutableList.<Module>of(builder.build(),
                                                 new JaxrsJacksonModule(new ObjectMapper()),
                                                 new JMXModule(KillbillHealthcheck.class, NotificationQueueService.class, PersistentBus.class),
-                                                new StatsModule(KillbillHealthcheck.class),
+                                                new StatsModule(METRICS_SERVLETS_PATHS.get(0),
+                                                                METRICS_SERVLETS_PATHS.get(1),
+                                                                METRICS_SERVLETS_PATHS.get(2),
+                                                                METRICS_SERVLETS_PATHS.get(3),
+                                                                ImmutableList.<Class<? extends HealthCheck>>of(KillbillHealthcheck.class)),
                                                 getModule(event.getServletContext()));
 
         super.contextInitialized(event);
diff --git a/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java b/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java
index f4a3048..6ff2055 100644
--- a/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java
+++ b/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java
@@ -36,6 +36,7 @@ import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
 import org.apache.shiro.realm.Realm;
 import org.killbill.billing.jaxrs.resources.JaxrsResource;
 import org.killbill.billing.server.config.DaoConfig;
+import org.killbill.billing.server.listeners.KillbillGuiceListener;
 import org.killbill.billing.tenant.api.Tenant;
 import org.killbill.billing.tenant.api.TenantApiException;
 import org.killbill.billing.tenant.api.TenantUserApi;
@@ -120,11 +121,16 @@ public class TenantFilter implements Filter {
     private boolean shouldSkipFilter(final ServletRequest request) {
         boolean shouldSkip = false;
 
-        // Chicken - egg problem
         if (request instanceof HttpServletRequest) {
             final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
             final String path = httpServletRequest.getRequestURI();
-            if ("/1.0/kb/tenants".equals(path) && "POST".equals(httpServletRequest.getMethod())) {
+            if (    // Chicken - egg problem
+                    ("/1.0/kb/tenants".equals(path) && "POST".equals(httpServletRequest.getMethod())) ||
+                    // Metrics servlets
+                    (KillbillGuiceListener.METRICS_SERVLETS_PATHS.contains(path) && "GET".equals(httpServletRequest.getMethod())) ||
+                    // Welcome screen, static resources, etc.
+                    (!path.startsWith("/1.0") && "GET".equals(httpServletRequest.getMethod()))
+               ) {
                 shouldSkip = true;
             }
         }