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

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


The following commit(s) were added to refs/heads/master by this push:
     new db48107  Adding controller healthcheck endpoint: /health (#5846)
db48107 is described below

commit db48107e1e13e26f91da038ca8c2c2174b1ac5b3
Author: Xiang Fu <fx19880...@gmail.com>
AuthorDate: Tue Aug 11 17:06:24 2020 -0700

    Adding controller healthcheck endpoint: /health (#5846)
    
    * Adding /health endpoint in pinot controller
    
    * Adding controller health check endpoint
---
 .../pinot/common/metrics/ControllerMeter.java      |  2 ++
 .../api/resources/PinotControllerHealthCheck.java  | 26 +++++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

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 7370085..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,15 +43,34 @@ public class PinotControllerHealthCheck {
   @Inject
   ControllerConf controllerConf;
 
+  @Inject
+  private ControllerMetrics controllerMetrics;
+
   @GET
   @Path("pinot-controller/admin")
   @ApiOperation(value = "Check controller health")
   @ApiResponses(value = {@ApiResponse(code = 200, message = "Good")})
   @Produces(MediaType.TEXT_PLAIN)
-  public String checkHealth() {
+  public String checkHealthLegacy() {
     if (StringUtils.isNotBlank(controllerConf.generateVipUrl())) {
       return "GOOD";
     }
     return "";
   }
+
+  @GET
+  @Path("health")
+  @ApiOperation(value = "Check controller health")
+  @ApiResponses(value = {@ApiResponse(code = 200, message = "Good")})
+  @Produces(MediaType.TEXT_PLAIN)
+  public String checkHealth() {
+    ServiceStatus.Status status = ServiceStatus.getServiceStatus();
+    if (status == ServiceStatus.Status.GOOD) {
+      
controllerMetrics.addMeteredGlobalValue(ControllerMeter.HEALTHCHECK_OK_CALLS, 
1);
+      return "OK";
+    }
+    
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