Divide the MSB source codes into two repos
[msb/apigateway.git] / apiroute / apiroute-service / src / main / java / org / onap / msb / apiroute / health / ConsulLinkHealthCheck.java
diff --git a/apiroute/apiroute-service/src/main/java/org/onap/msb/apiroute/health/ConsulLinkHealthCheck.java b/apiroute/apiroute-service/src/main/java/org/onap/msb/apiroute/health/ConsulLinkHealthCheck.java
new file mode 100644 (file)
index 0000000..916d2f8
--- /dev/null
@@ -0,0 +1,132 @@
+package org.onap.msb.apiroute.health;
+
+import org.apache.commons.lang3.StringUtils;
+import org.onap.msb.apiroute.ApiRouteApp;
+import org.onap.msb.apiroute.wrapper.InitRouteServiceWrapper;
+import org.onap.msb.apiroute.wrapper.util.ConfigUtil;
+import org.onap.msb.apiroute.wrapper.util.HttpClientUtil;
+import org.onap.msb.apiroute.wrapper.util.HttpGetResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.codahale.metrics.health.HealthCheck;
+
+public class ConsulLinkHealthCheck extends HealthCheck implements Runnable {
+
+       private static final Logger LOGGER = LoggerFactory
+                       .getLogger(ConsulLinkHealthCheck.class);
+
+       private final static String CONSUL_IP_ENV = ConfigUtil.getInstance().getConsul_ip();
+
+       private static int failedLoopCheckNum = 12;
+       private static int failedTimer = 5 * 1000;
+
+       private static int normalTimer = 20 * 1000;
+       private static Result result = Result.healthy();
+
+       private String CHECK_IP = "127.0.0.1";
+       private String CHECK_PORT = "8500";
+       private String CHECK_URL = "http://" + CHECK_IP + ":" + CHECK_PORT
+                       + "/v1/status/leader";
+
+       public static Result getResult() {
+               return result;
+       }
+
+       @Override
+       protected Result check() {
+               // TODO Auto-generated method stub
+
+               if (!StringUtils.isBlank(CONSUL_IP_ENV)) {
+                       CHECK_IP = CONSUL_IP_ENV;
+                       CHECK_URL = "http://" + CHECK_IP + ":" + CHECK_PORT
+                                       + "/v1/status/leader";
+
+                       if (LOGGER.isDebugEnabled()) {
+                               LOGGER.debug("check consul URL:" + CHECK_URL);
+                       }
+
+                       try {
+
+                               HttpGetResult result = HttpClientUtil
+                                               .httpGetStatusAndBody(CHECK_URL);
+
+                               //response format:"127.0.0.1:8300"
+                               if (result.getStatusCode() == 200 && result.getBody() != null
+                                               && result.getBody().contains(":8300")) {
+                                       return Result.healthy();
+                               } else {
+                                       return Result.unhealthy("check consul link " + CHECK_URL
+                                                       + " fail:" + result.getStatusCode()+":"+result.getBody());
+                               }
+
+                       } catch (Exception e) {
+                               LOGGER.warn(
+                                               "ConsulLinkHealthCheck:" + CHECK_URL + " execption", e);
+                               return Result.unhealthy("check consul link " + CHECK_URL
+                                               + " exception:{}");
+                       }
+
+               }
+
+               return Result.healthy();
+       }
+
+       @Override
+       public void run() {
+               // TODO Auto-generated method stub
+               while (true) {
+
+                       if (LOGGER.isDebugEnabled()) {
+                               LOGGER.debug("consul link check starttime:"
+                                               + System.currentTimeMillis());
+                       }
+
+                       result = checkWithPolicy();
+
+                       if (LOGGER.isDebugEnabled()) {
+                               LOGGER.debug("consul link check result:" + result.isHealthy()
+                                               + " message:" + result.getMessage());
+
+                               LOGGER.debug("consul link check endtime:"
+                                               + System.currentTimeMillis());
+                       }
+
+                       try {
+                               Thread.sleep(normalTimer);
+                       } catch (InterruptedException e) {
+                               // TODO Auto-generated catch block
+                               LOGGER.warn("loop check consul,thread sleep excepiton", e);
+                       }
+               }
+       }
+
+       private Result checkWithPolicy() {
+               int failedNum = 0;
+               Result temp = Result.healthy();
+
+               do {
+                       // check again
+                       temp = check();
+
+                       // healthy break;
+                       if (temp.isHealthy()) {
+                               break;
+                       }
+
+                       // unhealthy go on
+                       failedNum++;
+                       
+                       try {
+                               Thread.sleep(failedTimer);
+                       } catch (InterruptedException e) {
+                               // TODO Auto-generated catch block
+                               LOGGER.warn("loop check consul,thread sleep excepiton", e);
+                       }
+                       
+               } while (failedNum <= failedLoopCheckNum);
+
+               return temp;
+       }
+       
+}