This is an automated email from the ASF dual-hosted git repository.

xiangfu pushed a commit to branch adding-controller-healthcheck-endpoint
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git

commit bd3e06f7fbd8ba56cd84bea8eacea89e7ea58c2b
Author: Xiang Fu <fx19880...@gmail.com>
AuthorDate: Tue Aug 11 14:40:52 2020 -0700

    Adding controller health check endpoint
---
 .../apache/pinot/common/metrics/ControllerMeter.java   |  2 ++
 .../api/resources/PinotControllerHealthCheck.java      | 18 +++++++++++++++---
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerMeter.java
 
b/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerMeter.java
index 39ea8db..1e7fc46 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerMeter.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerMeter.java
@@ -26,6 +26,8 @@ import org.apache.pinot.common.Utils;
  */
 public enum ControllerMeter implements AbstractMetrics.Meter {
   HELIX_ZOOKEEPER_RECONNECTS("reconnects", true),
+  HEALTHCHECK_OK_CALLS("healthcheck", true),
+  HEALTHCHECK_BAD_CALLS("healthcheck", true),
   CONTROLLER_INSTANCE_POST_ERROR("InstancePostError", true),
   CONTROLLER_INSTANCE_DELETE_ERROR("InstanceDeleteError", true),
   CONTROLLER_SEGMENT_UPLOAD_ERROR("SegmentUploadError", true),
diff --git 
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotControllerHealthCheck.java
 
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotControllerHealthCheck.java
index 5876b3e..d844989 100644
--- 
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotControllerHealthCheck.java
+++ 
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotControllerHealthCheck.java
@@ -26,8 +26,13 @@ import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
 import org.apache.commons.lang.StringUtils;
+import org.apache.pinot.common.metrics.ControllerMeter;
+import org.apache.pinot.common.metrics.ControllerMetrics;
+import org.apache.pinot.common.utils.ServiceStatus;
 import org.apache.pinot.controller.ControllerConf;
 
 
@@ -38,6 +43,9 @@ public class PinotControllerHealthCheck {
   @Inject
   ControllerConf controllerConf;
 
+  @Inject
+  private ControllerMetrics controllerMetrics;
+
   @GET
   @Path("pinot-controller/admin")
   @ApiOperation(value = "Check controller health")
@@ -56,9 +64,13 @@ public class PinotControllerHealthCheck {
   @ApiResponses(value = {@ApiResponse(code = 200, message = "Good")})
   @Produces(MediaType.TEXT_PLAIN)
   public String checkHealth() {
-    if (StringUtils.isNotBlank(controllerConf.generateVipUrl())) {
-      return "GOOD";
+    ServiceStatus.Status status = ServiceStatus.getServiceStatus();
+    if (status == ServiceStatus.Status.GOOD) {
+      
controllerMetrics.addMeteredGlobalValue(ControllerMeter.HEALTHCHECK_OK_CALLS, 
1);
+      return "OK";
     }
-    return "";
+    
controllerMetrics.addMeteredGlobalValue(ControllerMeter.HEALTHCHECK_BAD_CALLS, 
1);
+    throw new WebApplicationException(String.format("Pinot broker status is 
%s", status),
+        Response.Status.SERVICE_UNAVAILABLE);
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to