From d20f2adc9a6c77f7b9b21113ea9758c81483de3a Mon Sep 17 00:00:00 2001 From: xstefank Date: Sat, 4 May 2019 19:50:21 +0200 Subject: [PATCH 1/2] Rename outcome and state to status --- .../io/smallrye/health/SmallRyeHealth.java | 2 +- .../health/SmallRyeHealthReporter.java | 14 +++---- .../health/SmallRyeHealthReporterTest.java | 40 +++++++++---------- pom.xml | 2 +- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java b/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java index aee8208e..5d78db25 100644 --- a/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java +++ b/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java @@ -14,7 +14,7 @@ public JsonObject getPayload() { return payload; } public boolean isDown() { - return HealthCheckResponse.State.DOWN.toString().equals(payload.getString("outcome")); + return HealthCheckResponse.State.DOWN.toString().equals(payload.getString("status")); } } diff --git a/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java b/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java index 673b8175..01ff3695 100644 --- a/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java +++ b/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java @@ -78,16 +78,16 @@ public void reportHealth(OutputStream out, SmallRyeHealth health) { public SmallRyeHealth getHealth() { JsonArrayBuilder results = Json.createArrayBuilder(); - HealthCheckResponse.State outcome = HealthCheckResponse.State.UP; + HealthCheckResponse.State status = HealthCheckResponse.State.UP; if (checks != null) { for (HealthCheck check : checks) { - outcome = fillCheck(check, results, outcome); + status = fillCheck(check, results, status); } } if (!additionalChecks.isEmpty()) { for (HealthCheck check : additionalChecks) { - outcome = fillCheck(check, results, outcome); + status = fillCheck(check, results, status); } } @@ -95,7 +95,7 @@ public SmallRyeHealth getHealth() { JsonArray checkResults = results.build(); - builder.add("outcome", checkResults.isEmpty() ? emptyChecksOutcome : outcome.toString()); + builder.add("status", checkResults.isEmpty() ? emptyChecksOutcome : status.toString()); builder.add("checks", checkResults); return new SmallRyeHealth(builder.build()); @@ -108,8 +108,8 @@ private HealthCheckResponse.State fillCheck(HealthCheck check, JsonArrayBuilder JsonObject each = jsonObject(check); results.add(each); if (globalOutcome == HealthCheckResponse.State.UP) { - String state = each.getString("state"); - if (state.equals("DOWN")) { + String status = each.getString("status"); + if (status.equals("DOWN")) { return HealthCheckResponse.State.DOWN; } } @@ -145,7 +145,7 @@ private JsonObject jsonObject(HealthCheck check) { private JsonObject jsonObject(HealthCheckResponse response) { JsonObjectBuilder builder = Json.createObjectBuilder(); builder.add("name", response.getName()); - builder.add("state", response.getState().toString()); + builder.add("status", response.getState().toString()); response.getData().ifPresent(d -> { JsonObjectBuilder data = Json.createObjectBuilder(); for (Map.Entry entry : d.entrySet()) { diff --git a/implementation/src/test/java/io/smallrye/health/SmallRyeHealthReporterTest.java b/implementation/src/test/java/io/smallrye/health/SmallRyeHealthReporterTest.java index 2b066843..6215fb6c 100644 --- a/implementation/src/test/java/io/smallrye/health/SmallRyeHealthReporterTest.java +++ b/implementation/src/test/java/io/smallrye/health/SmallRyeHealthReporterTest.java @@ -49,7 +49,7 @@ public void testDefaultGetHealth() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(false)); - assertThat(health.getPayload().getString("outcome"), is("UP")); + assertThat(health.getPayload().getString("status"), is("UP")); assertThat(health.getPayload().getJsonArray("checks"), is(empty())); } @@ -60,7 +60,7 @@ public void testGetHealthWithEmptyChecksOutcomeDown() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(true)); - assertThat(health.getPayload().getString("outcome"), is("DOWN")); + assertThat(health.getPayload().getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks"), is(empty())); } @@ -71,9 +71,9 @@ public void testGetHealthWithFailingCheckAndStyleDefault() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(true)); - assertThat(health.getPayload().getString("outcome"), is("DOWN")); + assertThat(health.getPayload().getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("name"), is(FailingHealthCheck.class.getName())); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getJsonObject("data").getString("rootCause"), is("this health check has failed")); } @@ -85,9 +85,9 @@ public void testGetHealthWithFailingCheckAndStyleNone() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(true)); - assertThat(health.getPayload().getString("outcome"), is("DOWN")); + assertThat(health.getPayload().getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("name"), is(FailingHealthCheck.class.getName())); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getJsonObject("data"), is(nullValue())); } @@ -99,9 +99,9 @@ public void testGetHealthWithFailingCheckAndStyleStackTrace() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(true)); - assertThat(health.getPayload().getString("outcome"), is("DOWN")); + assertThat(health.getPayload().getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("name"), is(FailingHealthCheck.class.getName())); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getJsonObject("data").getString("stackTrace"), is(notNullValue())); } @@ -114,14 +114,14 @@ public void testGetHealthWithMixedChecksAndStyleDefault() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(true)); - assertThat(health.getPayload().getString("outcome"), is("DOWN")); + assertThat(health.getPayload().getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("name"), is("up")); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("state"), is("UP")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("status"), is("UP")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("name"), is(FailingHealthCheck.class.getName())); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getJsonObject("data").getString("rootCause"), is("this health check has failed")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("name"), is("down")); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("status"), is("DOWN")); } @Test @@ -134,14 +134,14 @@ public void testGetHealthWithMixedChecksAndStyleNone() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(true)); - assertThat(health.getPayload().getString("outcome"), is("DOWN")); + assertThat(health.getPayload().getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("name"), is("up")); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("state"), is("UP")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("status"), is("UP")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("name"), is(FailingHealthCheck.class.getName())); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getJsonObject("data"), is(nullValue())); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("name"), is("down")); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("status"), is("DOWN")); } @Test @@ -154,13 +154,13 @@ public void testGetHealthWithMixedChecksAndStyleStackTrace() { SmallRyeHealth health = reporter.getHealth(); assertThat(health.isDown(), is(true)); - assertThat(health.getPayload().getString("outcome"), is("DOWN")); + assertThat(health.getPayload().getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("name"), is("up")); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("state"), is("UP")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(0).getString("status"), is("UP")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("name"), is(FailingHealthCheck.class.getName())); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getString("status"), is("DOWN")); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(1).getJsonObject("data").getString("stackTrace"), is(notNullValue())); assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("name"), is("down")); - assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("state"), is("DOWN")); + assertThat(health.getPayload().getJsonArray("checks").getJsonObject(2).getString("status"), is("DOWN")); } } diff --git a/pom.xml b/pom.xml index a5a9870f..4b4abcaf 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ 1.6.0 1.3 - 1.0 + 2.0-SNAPSHOT 7.0 2.0 4.11 From a425f29864ffc6fd39bed97007bebcc123bae8f3 Mon Sep 17 00:00:00 2001 From: xstefank Date: Sat, 4 May 2019 20:39:03 +0200 Subject: [PATCH 2/2] Update to MP Health 2.0-RC1 --- .../io/smallrye/health/SmallRyeHealth.java | 4 ++ .../health/SmallRyeHealthReporter.java | 46 ++++++++++++++++--- pom.xml | 2 +- .../health/SmallRyeHealthServlet.java | 5 +- .../health/SmallRyeLivenessServlet.java | 29 ++++++++++++ .../health/SmallRyeReadinessServlet.java | 29 ++++++++++++ 6 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 tck/src/main/java/io/smallrye/health/SmallRyeLivenessServlet.java create mode 100644 tck/src/main/java/io/smallrye/health/SmallRyeReadinessServlet.java diff --git a/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java b/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java index 5d78db25..d29fd1ec 100644 --- a/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java +++ b/implementation/src/main/java/io/smallrye/health/SmallRyeHealth.java @@ -6,13 +6,17 @@ public class SmallRyeHealth { + private JsonObject payload; + public SmallRyeHealth(JsonObject payload) { this.payload = payload; } + public JsonObject getPayload() { return payload; } + public boolean isDown() { return HealthCheckResponse.State.DOWN.toString().equals(payload.getString("status")); } diff --git a/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java b/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java index 01ff3695..367e1e55 100644 --- a/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java +++ b/implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java @@ -25,6 +25,8 @@ import org.eclipse.microprofile.health.HealthCheck; import org.eclipse.microprofile.health.HealthCheckResponse; import org.eclipse.microprofile.health.HealthCheckResponseBuilder; +import org.eclipse.microprofile.health.Liveness; +import org.eclipse.microprofile.health.Readiness; import org.jboss.logging.Logger; @@ -43,7 +45,15 @@ public class SmallRyeHealthReporter { */ @Inject @Health - Instance checks; + Instance healthChecks; + + @Inject + @Liveness + Instance livenessChecks; + + @Inject + @Readiness + Instance readinessChecks; @Inject @ConfigProperty(name = "io.smallrye.health.uncheckedExceptionDataStyle", defaultValue = ROOT_CAUSE) @@ -75,20 +85,32 @@ public void reportHealth(OutputStream out, SmallRyeHealth health) { writer.writeObject(health.getPayload()); writer.close(); } - + public SmallRyeHealth getHealth() { + return getHealth(healthChecks, livenessChecks, readinessChecks); + } + + public SmallRyeHealth getLiveness() { + return getHealth(livenessChecks); + } + + public SmallRyeHealth getReadiness() { + return getHealth(readinessChecks); + } + + @SafeVarargs + private final SmallRyeHealth getHealth(Instance... checks) { JsonArrayBuilder results = Json.createArrayBuilder(); HealthCheckResponse.State status = HealthCheckResponse.State.UP; if (checks != null) { - for (HealthCheck check : checks) { - status = fillCheck(check, results, status); + for (Instance instance : checks) { + status = processChecks(instance, results, status); } } + if (!additionalChecks.isEmpty()) { - for (HealthCheck check : additionalChecks) { - status = fillCheck(check, results, status); - } + status = processChecks(additionalChecks, results, status); } JsonObjectBuilder builder = Json.createObjectBuilder(); @@ -101,6 +123,16 @@ public SmallRyeHealth getHealth() { return new SmallRyeHealth(builder.build()); } + private HealthCheckResponse.State processChecks(Iterable checks, JsonArrayBuilder results, HealthCheckResponse.State status) { + if (checks != null) { + for (HealthCheck check : checks) { + status = fillCheck(check, results, status); + } + } + + return status; + } + private HealthCheckResponse.State fillCheck(HealthCheck check, JsonArrayBuilder results, HealthCheckResponse.State globalOutcome) { if (check == null) { return globalOutcome; diff --git a/pom.xml b/pom.xml index 4b4abcaf..ed4f3c77 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ 1.6.0 1.3 - 2.0-SNAPSHOT + 2.0-RC1 7.0 2.0 4.11 diff --git a/tck/src/main/java/io/smallrye/health/SmallRyeHealthServlet.java b/tck/src/main/java/io/smallrye/health/SmallRyeHealthServlet.java index f177605d..92068eff 100644 --- a/tck/src/main/java/io/smallrye/health/SmallRyeHealthServlet.java +++ b/tck/src/main/java/io/smallrye/health/SmallRyeHealthServlet.java @@ -3,7 +3,6 @@ import java.io.IOException; import javax.inject.Inject; -import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -11,11 +10,11 @@ @SuppressWarnings("serial") -@WebServlet(name = "SmallRyeHealthServlet", urlPatterns = "/*") +@WebServlet(name = "SmallRyeHealthServlet", urlPatterns = "/health") public class SmallRyeHealthServlet extends HttpServlet { @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { SmallRyeHealth health = reporter.getHealth(); if (health.isDown()) { diff --git a/tck/src/main/java/io/smallrye/health/SmallRyeLivenessServlet.java b/tck/src/main/java/io/smallrye/health/SmallRyeLivenessServlet.java new file mode 100644 index 00000000..55325f5c --- /dev/null +++ b/tck/src/main/java/io/smallrye/health/SmallRyeLivenessServlet.java @@ -0,0 +1,29 @@ +package io.smallrye.health; + +import javax.inject.Inject; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + + +@SuppressWarnings("serial") +@WebServlet(name = "SmallRyeLivenessServlet", urlPatterns = "/health/live") +public class SmallRyeLivenessServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + + SmallRyeHealth health = reporter.getLiveness(); + if (health.isDown()) { + resp.setStatus(503); + } + reporter.reportHealth(resp.getOutputStream(), health); + } + + @Inject + private SmallRyeHealthReporter reporter; +} + + diff --git a/tck/src/main/java/io/smallrye/health/SmallRyeReadinessServlet.java b/tck/src/main/java/io/smallrye/health/SmallRyeReadinessServlet.java new file mode 100644 index 00000000..a26f2542 --- /dev/null +++ b/tck/src/main/java/io/smallrye/health/SmallRyeReadinessServlet.java @@ -0,0 +1,29 @@ +package io.smallrye.health; + +import javax.inject.Inject; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + + +@SuppressWarnings("serial") +@WebServlet(name = "SmallRyeReadinessServlet", urlPatterns = "/health/ready") +public class SmallRyeReadinessServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + + SmallRyeHealth health = reporter.getReadiness(); + if (health.isDown()) { + resp.setStatus(503); + } + reporter.reportHealth(resp.getOutputStream(), health); + } + + @Inject + private SmallRyeHealthReporter reporter; +} + +