You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/06/03 08:58:19 UTC
[camel] branch master updated (bcc16c8 -> dfef6ce)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.
from bcc16c8 Sync Properties
new 0bf1b7d CAMEL-15139: camel-health - Add API for readiness/liveness
new 4210d7e CAMEL-15139: camel-health - Add API for readiness/liveness
new 5611dda CAMEL-15139: camel-health - Add API for readiness/liveness
new dfef6ce CAMEL-15139: camel-health - Add API for readiness/liveness
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../AbstractCamelMicroProfileHealthCheck.java | 24 ++--
.../AbstractCamelMicroProfileLivenessCheck.java | 18 ++-
.../AbstractCamelMicroProfileReadinessCheck.java | 18 +--
.../health/CamelMicroProfileContextCheck.java | 6 +-
.../health/CamelMicroProfileLivenessCheck.java | 5 +-
.../health/CamelMicroProfileReadinessCheck.java | 5 +-
.../health/CamelMicroProfileHealthCheckTest.java | 6 +-
.../java/org/apache/camel/health/HealthCheck.java | 14 +++
.../org/apache/camel/health/HealthCheckHelper.java | 23 ++++
.../camel/impl/health/ContextHealthCheck.java | 6 +
.../apache/camel/impl/health/RouteHealthCheck.java | 6 +
.../health/DefaultHealthCheckRegistryTest.java | 1 -
.../impl/health/ReadinessAndLivenessTest.java | 126 +++++++++++++++++++++
.../api/management/mbean/CamelOpenMBeanTypes.java | 6 +-
.../management/mbean/ManagedCamelHealthMBean.java | 8 +-
.../camel/management/mbean/ManagedCamelHealth.java | 26 +++++
.../camel/management/ManagedHealthCheckTest.java | 4 +
.../modules/ROOT/pages/health-check.adoc | 25 +++-
18 files changed, 286 insertions(+), 41 deletions(-)
create mode 100644 core/camel-health/src/test/java/org/apache/camel/impl/health/ReadinessAndLivenessTest.java
[camel] 01/04: CAMEL-15139: camel-health - Add API for
readiness/liveness
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0bf1b7db09f85eb61f84c6647138b584e8542241
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jun 3 10:12:17 2020 +0200
CAMEL-15139: camel-health - Add API for readiness/liveness
---
.../java/org/apache/camel/health/HealthCheck.java | 14 +++
.../org/apache/camel/health/HealthCheckHelper.java | 14 +++
.../camel/impl/health/ContextHealthCheck.java | 6 +
.../apache/camel/impl/health/RouteHealthCheck.java | 6 +
.../health/DefaultHealthCheckRegistryTest.java | 1 -
.../impl/health/ReadinessAndLivenessTest.java | 126 +++++++++++++++++++++
.../api/management/mbean/CamelOpenMBeanTypes.java | 6 +-
.../management/mbean/ManagedCamelHealthMBean.java | 8 +-
.../camel/management/mbean/ManagedCamelHealth.java | 26 +++++
.../camel/management/ManagedHealthCheckTest.java | 4 +
10 files changed, 206 insertions(+), 5 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java
index d98dc01..a1841f4 100644
--- a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java
+++ b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheck.java
@@ -48,6 +48,20 @@ public interface HealthCheck extends HasGroup, HasId, Ordered {
}
/**
+ * Whether this health check can be used for readiness checks
+ */
+ default boolean isReadiness() {
+ return true;
+ }
+
+ /**
+ * Whether this health check can be used for liveness checks
+ */
+ default boolean isLiveness() {
+ return true;
+ }
+
+ /**
* Return the configuration associated with this {@link HealthCheck}.
*/
HealthCheckConfiguration getConfiguration();
diff --git a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
index ac26898..e4290f5 100644
--- a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
+++ b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
@@ -53,6 +53,20 @@ public final class HealthCheckHelper {
}
/**
+ * Invokes the readiness checks and returns a collection of results.
+ */
+ public static Collection<HealthCheck.Result> invokeReadiness(CamelContext camelContext) {
+ return invoke(camelContext, check -> Collections.emptyMap(), check -> !check.isReadiness());
+ }
+
+ /**
+ * Invokes the liveness checks and returns a collection of results.
+ */
+ public static Collection<HealthCheck.Result> invokeLiveness(CamelContext camelContext) {
+ return invoke(camelContext, check -> Collections.emptyMap(), check -> !check.isLiveness());
+ }
+
+ /**
* Invokes the checks and returns a collection of results.
*/
public static Collection<HealthCheck.Result> invoke(
diff --git a/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java b/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java
index 52b26fe..5709327 100644
--- a/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java
+++ b/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java
@@ -46,6 +46,12 @@ public final class ContextHealthCheck extends AbstractHealthCheck implements Cam
}
@Override
+ public boolean isLiveness() {
+ // this check is only for readiness
+ return false;
+ }
+
+ @Override
protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
builder.unknown();
diff --git a/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java b/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java
index 06f09b3..0362b05 100644
--- a/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java
+++ b/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java
@@ -36,6 +36,12 @@ public class RouteHealthCheck extends AbstractHealthCheck {
}
@Override
+ public boolean isLiveness() {
+ // this check is only for readiness
+ return false;
+ }
+
+ @Override
protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
if (route.getId() != null) {
final CamelContext context = route.getCamelContext();
diff --git a/core/camel-health/src/test/java/org/apache/camel/impl/health/DefaultHealthCheckRegistryTest.java b/core/camel-health/src/test/java/org/apache/camel/impl/health/DefaultHealthCheckRegistryTest.java
index 0aa4914..ff25a59 100644
--- a/core/camel-health/src/test/java/org/apache/camel/impl/health/DefaultHealthCheckRegistryTest.java
+++ b/core/camel-health/src/test/java/org/apache/camel/impl/health/DefaultHealthCheckRegistryTest.java
@@ -201,7 +201,6 @@ public class DefaultHealthCheckRegistryTest {
protected MyHealthCheck(String group, String id) {
super(group, id);
- getConfiguration().setEnabled(true);
}
@Override
diff --git a/core/camel-health/src/test/java/org/apache/camel/impl/health/ReadinessAndLivenessTest.java b/core/camel-health/src/test/java/org/apache/camel/impl/health/ReadinessAndLivenessTest.java
new file mode 100644
index 0000000..836bd1b
--- /dev/null
+++ b/core/camel-health/src/test/java/org/apache/camel/impl/health/ReadinessAndLivenessTest.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.health;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.health.HealthCheck;
+import org.apache.camel.health.HealthCheckHelper;
+import org.apache.camel.health.HealthCheckRegistry;
+import org.apache.camel.health.HealthCheckResultBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ReadinessAndLivenessTest {
+
+ @Test
+ public void testLiveAndReady() throws Exception {
+ CamelContext context = new DefaultCamelContext();
+
+ HealthCheckRegistry registry = new DefaultHealthCheckRegistry();
+ registry.setCamelContext(context);
+
+ context.getRegistry().bind("check1", new MyReadyCheck("G1", "1"));
+ context.getRegistry().bind("check2", new MyLiveCheck("G1", "2"));
+
+ context.start();
+ registry.start();
+
+ List<HealthCheck> checks = registry.stream().collect(Collectors.toList());
+ Assert.assertEquals(2, checks.size());
+
+ Collection<HealthCheck.Result> results = HealthCheckHelper.invokeReadiness(context);
+ Assert.assertEquals(1, results.size());
+ HealthCheck.Result result = results.iterator().next();
+ Assert.assertEquals(HealthCheck.State.UP, result.getState());
+ Assert.assertFalse(result.getCheck().isLiveness());
+ Assert.assertTrue(result.getCheck().isReadiness());
+ Assert.assertTrue(result.getCheck() instanceof MyReadyCheck);
+
+ results = HealthCheckHelper.invokeLiveness(context);
+ Assert.assertEquals(1, results.size());
+ result = results.iterator().next();
+ Assert.assertEquals(HealthCheck.State.DOWN, result.getState());
+ Assert.assertTrue(result.getCheck().isLiveness());
+ Assert.assertFalse(result.getCheck().isReadiness());
+ Assert.assertTrue(result.getCheck() instanceof MyLiveCheck);
+ }
+
+ private class MyReadyCheck extends AbstractHealthCheck implements CamelContextAware {
+
+ private CamelContext context;
+
+ protected MyReadyCheck(String group, String id) {
+ super(group, id);
+ }
+
+ @Override
+ public boolean isLiveness() {
+ return false;
+ }
+
+ @Override
+ public void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
+ builder.up();
+ }
+
+ @Override
+ public void setCamelContext(CamelContext camelContext) {
+ this.context = camelContext;
+ }
+
+ @Override
+ public CamelContext getCamelContext() {
+ return context;
+ }
+ }
+
+ private class MyLiveCheck extends AbstractHealthCheck implements CamelContextAware {
+
+ private CamelContext context;
+
+ protected MyLiveCheck(String group, String id) {
+ super(group, id);
+ }
+
+ @Override
+ public boolean isReadiness() {
+ return false;
+ }
+
+ @Override
+ public void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
+ builder.down();
+ }
+
+ @Override
+ public void setCamelContext(CamelContext camelContext) {
+ this.context = camelContext;
+ }
+
+ @Override
+ public CamelContext getCamelContext() {
+ return context;
+ }
+ }
+}
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
index 192d2c9..f3ffcc8 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
@@ -191,9 +191,9 @@ public final class CamelOpenMBeanTypes {
public static CompositeType camelHealthDetailsCompositeType() throws OpenDataException {
return new CompositeType("healthDetails", "Health Details",
- new String[]{"id", "group", "state", "enabled", "interval", "failureThreshold"},
- new String[]{"ID", "Group", "State", "Enabled", "Interval", "Failure Threshold"},
- new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.BOOLEAN, SimpleType.LONG, SimpleType.INTEGER});
+ new String[]{"id", "group", "state", "enabled", "readiness", "liveness", "interval", "failureThreshold"},
+ new String[]{"ID", "Group", "State", "Enabled", "Readiness", "Liveness", "Interval", "Failure Threshold"},
+ new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.BOOLEAN, SimpleType.BOOLEAN, SimpleType.BOOLEAN, SimpleType.LONG, SimpleType.INTEGER});
}
public static TabularType camelHealthDetailsTabularType() throws OpenDataException {
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelHealthMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelHealthMBean.java
index 54a5a2b..2388fe4 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelHealthMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelHealthMBean.java
@@ -28,9 +28,15 @@ public interface ManagedCamelHealthMBean {
@ManagedAttribute(description = "Whether Health Check is enabled globally")
boolean isEnabled();
- @ManagedAttribute(description = "Application Health")
+ @ManagedAttribute(description = "Application Health (all checks)")
boolean isHealthy();
+ @ManagedAttribute(description = "Application Health (only readiness checks)")
+ boolean isHealthyReadiness();
+
+ @ManagedAttribute(description = "Application Health (only liveness checks)")
+ boolean isHealthyLiveness();
+
@ManagedAttribute(description = "Registered Health Checks IDs")
Collection<String> getHealthChecksIDs();
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java
index a4244bd..f8f14d7 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java
@@ -70,6 +70,28 @@ public class ManagedCamelHealth implements ManagedCamelHealthMBean {
}
@Override
+ public boolean isHealthyReadiness() {
+ for (HealthCheck.Result result : HealthCheckHelper.invokeReadiness(context)) {
+ if (result.getState() == HealthCheck.State.DOWN) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean isHealthyLiveness() {
+ for (HealthCheck.Result result : HealthCheckHelper.invokeLiveness(context)) {
+ if (result.getState() == HealthCheck.State.DOWN) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
public Collection<String> getHealthChecksIDs() {
return healthCheckRegistry.getCheckIDs();
}
@@ -88,6 +110,8 @@ public class ManagedCamelHealth implements ManagedCamelHealthMBean {
"group",
"state",
"enabled",
+ "readiness",
+ "liveness",
"interval",
"failureThreshold"
},
@@ -96,6 +120,8 @@ public class ManagedCamelHealth implements ManagedCamelHealthMBean {
result.getCheck().getGroup(),
result.getState().name(),
result.getCheck().getConfiguration().isEnabled(),
+ result.getCheck().isReadiness(),
+ result.getCheck().isLiveness(),
result.getCheck().getConfiguration().getInterval(),
result.getCheck().getConfiguration().getFailureThreshold()
}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedHealthCheckTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedHealthCheckTest.java
index 0bdbe56..059ca9b 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedHealthCheckTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedHealthCheckTest.java
@@ -64,6 +64,10 @@ public class ManagedHealthCheckTest extends ManagementTestSupport {
Boolean up = (Boolean) mbeanServer.getAttribute(on, "Healthy");
assertTrue(up);
+ up = (Boolean) mbeanServer.getAttribute(on, "HealthyReadiness");
+ assertTrue(up);
+ up = (Boolean) mbeanServer.getAttribute(on, "HealthyLiveness");
+ assertTrue(up);
TabularData data = (TabularData) mbeanServer.invoke(on, "details", null, null);
assertEquals(1, data.size());
[camel] 04/04: CAMEL-15139: camel-health - Add API for
readiness/liveness
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit dfef6cedd06d7cd1f1b4083a49f6bf31723461d4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jun 3 10:57:48 2020 +0200
CAMEL-15139: camel-health - Add API for readiness/liveness
---
.../microprofile/health/AbstractCamelMicroProfileHealthCheck.java | 8 +++-----
.../microprofile/health/CamelMicroProfileHealthCheckTest.java | 6 +++---
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
index 0c3affd..bddb3e6 100644
--- a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
+++ b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
@@ -44,19 +44,17 @@ public abstract class AbstractCamelMicroProfileHealthCheck implements HealthChec
public HealthCheckResponse call() {
final HealthCheckResponseBuilder builder = HealthCheckResponse.builder();
builder.name(getHealthCheckName());
+ builder.up();
if (camelContext != null) {
Collection<Result> results = HealthCheckHelper.invoke(camelContext,
(HealthCheckFilter) check ->
// skip context as we have our own context check
check.getId().equals("context")
- // or that its either supposed to be only a livness or readness and the Camel health check is not
+ // or that its either supposed to be only a liveness or readiness and the Camel health check is not
|| (isLiveness() && !check.isLiveness() || isReadiness() && !check.isReadiness()));
- if (!results.isEmpty()) {
- builder.up();
- }
- for (Result result: results) {
+ for (Result result : results) {
Map<String, Object> details = result.getDetails();
boolean enabled = true;
diff --git a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
index c40f342..8781344 100644
--- a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
+++ b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
@@ -216,16 +216,16 @@ public class CamelMicroProfileHealthCheckTest extends CamelMicroProfileHealthTes
SmallRyeHealth health = reporter.getHealth();
JsonObject healthObject = getHealthJson(health);
- assertEquals(State.DOWN.name(), healthObject.getString("status"));
+ assertEquals(State.UP.name(), healthObject.getString("status"));
JsonArray checks = healthObject.getJsonArray("checks");
assertEquals(2, checks.size());
- assertHealthCheckOutput("camel-readiness-checks", State.DOWN, checks.getJsonObject(0), jsonObject -> {
+ assertHealthCheckOutput("camel-readiness-checks", State.UP, checks.getJsonObject(0), jsonObject -> {
assertNull(jsonObject);
});
- assertHealthCheckOutput("camel-liveness-checks", State.DOWN, checks.getJsonObject(1), jsonObject -> {
+ assertHealthCheckOutput("camel-liveness-checks", State.UP, checks.getJsonObject(1), jsonObject -> {
assertNull(jsonObject);
});
}
[camel] 03/04: CAMEL-15139: camel-health - Add API for
readiness/liveness
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5611dda3bdbad5b42a5959e27dc2f9046ca6345f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jun 3 10:43:50 2020 +0200
CAMEL-15139: camel-health - Add API for readiness/liveness
---
.../org/apache/camel/health/HealthCheckHelper.java | 9 ++++++++
.../modules/ROOT/pages/health-check.adoc | 25 +++++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
index e4290f5..f81e8dd 100644
--- a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
+++ b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
@@ -29,6 +29,15 @@ import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * Helper for invoking {@link HealthCheck}'s.
+ *
+ * The helper will lookup the {@link HealthCheckRegistry} from {@link CamelContext} and gather
+ * all the registered {@link HealthCheck}s and invoke them and gather their responses.
+ *
+ * The helper allows to filter out unwanted health checks using {@link HealthCheckFilter} or
+ * to invoke only readiness or liveness checks.
+ */
public final class HealthCheckHelper {
private static final Logger LOGGER = LoggerFactory.getLogger(HealthCheckHelper.class);
diff --git a/docs/user-manual/modules/ROOT/pages/health-check.adoc b/docs/user-manual/modules/ROOT/pages/health-check.adoc
index 72e9f35..dc1022a 100644
--- a/docs/user-manual/modules/ROOT/pages/health-check.adoc
+++ b/docs/user-manual/modules/ROOT/pages/health-check.adoc
@@ -27,6 +27,21 @@ With the prefix `-health-check` or `-health-check-repository`. When looking up o
For example `context-health-check` is the ID but can also be used by its shorthand `context`.
+== Readiness and Liveness
+
+A health check is by default useable for both readiness and liveness checks.
+
+To specify a custom health check as only useable for liveness checks,
+you would need to turn off readiness, by overriding the `isReadiness` method and return `false`.
+
+[source,java]
+----
+ @Override
+ public boolean isLiveness() {
+ return false;
+ }
+----
+
== Health Check configuration
The `HealthCheckConfiguration` has the following options:
@@ -98,6 +113,14 @@ This MBean allows at runtime to manage health-checks where you can enable and di
As well have the latest status whether the overall health check is healthy or not.
The MBean also allows invoking health checks based on IDs (or all of them).
+== Invoking health checks
+
+You can invoke the health checks from Java by using the `org.apache.camel.health.HealthCheckHelper` which has APIs
+to easily invoke all the health checks and gather their results, or filter out unwanated checkes, or invoke only
+the readiness or liveness checks.
+
+The health checks can also be invoked from JMX.
+
== Writing a custom check:
There are a limited number of health checks provided by Camel out of the box, so you may need to write your own check which you can do by implementing the _HealthCheck_ interface or by extending _AbstractHealthCheck_ which provides some useful methods:
@@ -127,7 +150,7 @@ public final class MyHealthCheck extends AbstractHealthCheck {
}
----
-You can now make _MyHealthCheck_ available to camel by adding an instance to the application context (Spring, Blueprint) or directly to the registry.
+You can now make _MyHealthCheck_ available to Camel by adding an instance to the application context (Spring, Blueprint) or directly to the registry.
The example `camel-example-main-health` has a custom health check.
== Examples
[camel] 02/04: CAMEL-15139: camel-health - Add API for
readiness/liveness
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 4210d7efd1f31507d610289ca38a79af7200bd4c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jun 3 10:28:22 2020 +0200
CAMEL-15139: camel-health - Add API for readiness/liveness
---
.../health/AbstractCamelMicroProfileHealthCheck.java | 18 ++++++++++++++----
.../health/AbstractCamelMicroProfileLivenessCheck.java | 18 +++++++++++++-----
.../AbstractCamelMicroProfileReadinessCheck.java | 18 ++++++++++--------
.../health/CamelMicroProfileContextCheck.java | 6 +-----
.../health/CamelMicroProfileLivenessCheck.java | 5 ++---
.../health/CamelMicroProfileReadinessCheck.java | 5 ++---
6 files changed, 42 insertions(+), 28 deletions(-)
diff --git a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
index fcdd558..0c3affd 100644
--- a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
+++ b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
@@ -49,7 +49,9 @@ public abstract class AbstractCamelMicroProfileHealthCheck implements HealthChec
Collection<Result> results = HealthCheckHelper.invoke(camelContext,
(HealthCheckFilter) check ->
// skip context as we have our own context check
- check.getId().equals("context") || check.getGroup() != null && check.getGroup().equals(getHealthGroupFilterExclude()));
+ check.getId().equals("context")
+ // or that its either supposed to be only a livness or readness and the Camel health check is not
+ || (isLiveness() && !check.isLiveness() || isReadiness() && !check.isReadiness()));
if (!results.isEmpty()) {
builder.up();
}
@@ -85,10 +87,18 @@ public abstract class AbstractCamelMicroProfileHealthCheck implements HealthChec
}
/**
- * Gets the name of a specific health group to exclude when invoking a Camel HealthCheck
- * @return the health group to exclude
+ * Whether this health check can be used for readiness checks
*/
- abstract String getHealthGroupFilterExclude();
+ public boolean isReadiness() {
+ return true;
+ }
+
+ /**
+ * Whether this health check can be used for liveness checks
+ */
+ public boolean isLiveness() {
+ return true;
+ }
/**
* Gets the name of the health check which will be used as a heading for the associated checks.
diff --git a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileLivenessCheck.java b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileLivenessCheck.java
index a971496..d868985 100644
--- a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileLivenessCheck.java
+++ b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileLivenessCheck.java
@@ -25,13 +25,21 @@ import org.apache.camel.impl.health.AbstractHealthCheck;
*/
public abstract class AbstractCamelMicroProfileLivenessCheck extends AbstractHealthCheck {
- public static final String HEALTH_GROUP_LIVENESS = "camel.health.liveness";
-
public AbstractCamelMicroProfileLivenessCheck(String id) {
- super(HEALTH_GROUP_LIVENESS, id);
+ super("camel", id);
+ }
+
+ protected AbstractCamelMicroProfileLivenessCheck(String group, String id) {
+ super(group, id);
}
- public AbstractCamelMicroProfileLivenessCheck(String id, Map<String, Object> meta) {
- super(HEALTH_GROUP_LIVENESS, id, meta);
+ protected AbstractCamelMicroProfileLivenessCheck(String group, String id, Map<String, Object> meta) {
+ super(group, id, meta);
}
+
+ @Override
+ public boolean isReadiness() {
+ return false;
+ }
+
}
diff --git a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileReadinessCheck.java b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileReadinessCheck.java
index c9a91a1..33a12f4 100644
--- a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileReadinessCheck.java
+++ b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileReadinessCheck.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.microprofile.health;
-import java.util.Map;
-
import org.apache.camel.impl.health.AbstractHealthCheck;
/**
@@ -25,13 +23,17 @@ import org.apache.camel.impl.health.AbstractHealthCheck;
*/
public abstract class AbstractCamelMicroProfileReadinessCheck extends AbstractHealthCheck {
- public static final String HEALTH_GROUP_READINESS = "camel.health.readiness";
-
public AbstractCamelMicroProfileReadinessCheck(String id) {
- super(HEALTH_GROUP_READINESS, id);
+ super("camel", id);
}
- public AbstractCamelMicroProfileReadinessCheck(String id, Map<String, Object> meta) {
- super(HEALTH_GROUP_READINESS, id, meta);
+ public AbstractCamelMicroProfileReadinessCheck(String group, String id) {
+ super(group, id);
}
-}
+
+ @Override
+ public boolean isLiveness() {
+ return false;
+ }
+
+}
\ No newline at end of file
diff --git a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java
index 77eced5..25e12e8 100644
--- a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java
+++ b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java
@@ -16,10 +16,8 @@
*/
package org.apache.camel.microprofile.health;
-import java.util.Map;
-
-import javax.annotation.PostConstruct;
import javax.inject.Inject;
+import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
@@ -29,14 +27,12 @@ import org.apache.camel.impl.health.ContextHealthCheck;
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;
/**
* A simple health check implementation for checking the status of a CamelContext
*/
@Readiness
-@Liveness
public class CamelMicroProfileContextCheck implements HealthCheck, CamelContextAware {
@Inject
diff --git a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java
index b8025a2..4a8d23a 100644
--- a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java
+++ b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java
@@ -24,9 +24,8 @@ import org.eclipse.microprofile.health.Liveness;
@Liveness
public class CamelMicroProfileLivenessCheck extends AbstractCamelMicroProfileHealthCheck {
- @Override
- String getHealthGroupFilterExclude() {
- return AbstractCamelMicroProfileReadinessCheck.HEALTH_GROUP_READINESS;
+ public boolean isReadiness() {
+ return false;
}
@Override
diff --git a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java
index c497841..c02ee98 100644
--- a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java
+++ b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java
@@ -24,9 +24,8 @@ import org.eclipse.microprofile.health.Readiness;
@Readiness
public class CamelMicroProfileReadinessCheck extends AbstractCamelMicroProfileHealthCheck {
- @Override
- String getHealthGroupFilterExclude() {
- return AbstractCamelMicroProfileLivenessCheck.HEALTH_GROUP_LIVENESS;
+ public boolean isLiveness() {
+ return false;
}
@Override