Allow to disable health check endpoint

Administrators of sites that implement health check in a different way
may want to disable it in this plugin.

Change-Id: I9417d605678216b17d8a5cf84c12e34424e2aef1
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
index e1b37ab..32e49af 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
@@ -84,6 +84,11 @@
   // common parameters to cache, event index and websession sections
   static final String SYNCHRONIZE_KEY = "synchronize";
 
+  // health check section
+  static final String HEALTH_CHECK_SECTION = "healthCheck";
+  static final String ENABLE_KEY = "enable";
+  static final boolean DEFAULT_HEALTH_CHECK_ENABLED = true;
+
   // websession section
   static final String WEBSESSION_SECTION = "websession";
   static final String CLEANUP_INTERVAL_KEY = "cleanupInterval";
@@ -110,6 +115,7 @@
   private final Websession websession;
   private PeerInfoStatic peerInfoStatic;
   private PeerInfoJGroups peerInfoJGroups;
+  private HealthCheck healthCheck;
 
   public enum PeerInfoStrategy {
     JGROUPS,
@@ -138,6 +144,7 @@
     event = new Event(cfg);
     index = new Index(cfg);
     websession = new Websession(cfg);
+    healthCheck = new HealthCheck(cfg);
   }
 
   public Main main() {
@@ -180,6 +187,10 @@
     return websession;
   }
 
+  public HealthCheck healthCheck() {
+    return healthCheck;
+  }
+
   private static int getInt(Config cfg, String section, String name, int defaultValue) {
     try {
       return cfg.getInt(section, name, defaultValue);
@@ -403,4 +414,16 @@
       return cleanupInterval;
     }
   }
+
+  public static class HealthCheck {
+    private final boolean enabled;
+
+    private HealthCheck(Config cfg) {
+      enabled = cfg.getBoolean(HEALTH_CHECK_SECTION, ENABLE_KEY, DEFAULT_HEALTH_CHECK_ENABLED);
+    }
+
+    public boolean enabled() {
+      return enabled;
+    }
+  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/HttpModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/HttpModule.java
index 204a206..3209b1b 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/HttpModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/HttpModule.java
@@ -31,7 +31,9 @@
   @Override
   protected void configureServlets() {
     install(new RestForwarderServletModule());
-    install(new HealthServletModule());
+    if (config.healthCheck().enabled()) {
+      install(new HealthServletModule());
+    }
     if (config.websession().synchronize()) {
       install(new FileBasedWebsessionModule());
     }
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 42ce673..2289c83 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -30,6 +30,8 @@
 [http]
 :  user = username
 :  password = password
+[healthcheck]
+:  enable = true
 
 main.sharedDirectory
 :   Path to a directory accessible from both master instances.
@@ -152,3 +154,6 @@
 * y, year, years (`1 year` is treated as `365 days`)
 If a time unit suffix is not specified, `hours` is assumed.
 Defaults to 24 hours.
+
+healthcheck.enable
+:   Whether to enable the health check endpoint. Defaults to 'true'.
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
index e9b39c7..42102c7 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
@@ -20,6 +20,7 @@
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.CONNECTION_TIMEOUT_KEY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_CLEANUP_INTERVAL_MS;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_CLUSTER_NAME;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_HEALTH_CHECK_ENABLED;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_MAX_TRIES;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_PEER_INFO_STRATEGY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_RETRY_INTERVAL;
@@ -27,7 +28,9 @@
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_SYNCHRONIZE;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_THREAD_POOL_SIZE;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_TIMEOUT_MS;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.ENABLE_KEY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.EVENT_SECTION;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.HEALTH_CHECK_SECTION;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.HTTP_SECTION;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.INDEX_SECTION;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.JGROUPS_SECTION;
@@ -533,4 +536,12 @@
       assertThat(matcher.matches(cache)).isFalse();
     }
   }
+
+  @Test
+  public void testHealthCheckEnabled() throws Exception {
+    when(configMock.getBoolean(HEALTH_CHECK_SECTION, ENABLE_KEY, DEFAULT_HEALTH_CHECK_ENABLED))
+        .thenReturn(false);
+    initializeConfiguration();
+    assertThat(configuration.healthCheck().enabled()).isFalse();
+  }
 }