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