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
The following commit(s) were added to refs/heads/master by this push: new 0cbf845 camel-health - Allow to enable/disable checks via JMX 0cbf845 is described below commit 0cbf8455cffc39c4cfbf1fb6fece23c96439e96a Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri May 29 14:03:18 2020 +0200 camel-health - Allow to enable/disable checks via JMX --- .../management/mbean/ManagedCamelHealthMBean.java | 7 ++++ .../camel/management/mbean/ManagedCamelHealth.java | 10 +++++ .../camel/management/ManagedHealthCheckTest.java | 43 ++++++++++++++++++++++ 3 files changed, 60 insertions(+) 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 ced4a00..54a5a2b 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 @@ -39,4 +39,11 @@ public interface ManagedCamelHealthMBean { @ManagedOperation(description = "Invoke an Health Check by ID") String invoke(String id); + + @ManagedOperation(description = "Enables an Health Check by ID") + void enableById(String id); + + @ManagedOperation(description = "Disables an Health Check by ID") + void disableById(String id); + } 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 0959292..227e372 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 @@ -115,4 +115,14 @@ public class ManagedCamelHealth implements ManagedCamelHealthMBean { return result.map(r -> r.getState().name()).orElse(HealthCheck.State.UNKNOWN.name()); } + + @Override + public void enableById(String id) { + healthCheckRegistry.getCheck(id).ifPresent(h -> h.getConfiguration().setEnabled(true)); + } + + @Override + public void disableById(String id) { + healthCheckRegistry.getCheck(id).ifPresent(h -> h.getConfiguration().setEnabled(false)); + } } 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 445c6d7..873b052 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 @@ -20,10 +20,13 @@ import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.openmbean.TabularData; import java.util.Collection; +import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.health.HealthCheckRegistry; +import org.apache.camel.health.HealthCheckResultBuilder; +import org.apache.camel.impl.health.AbstractHealthCheck; import org.apache.camel.impl.health.DefaultHealthCheckRegistry; import org.junit.Test; @@ -70,6 +73,46 @@ public class ManagedHealthCheckTest extends ManagementTestSupport { assertEquals("context", ids.iterator().next()); } + @Test + public void testHealthCheckDisableById() throws Exception { + // JMX tests dont work well on AIX CI servers (hangs them) + if (isPlatform("aix")) { + return; + } + + getMockEndpoint("mock:result").expectedMessageCount(1); + template.sendBody("direct:start", "Hello World"); + assertMockEndpointsSatisfied(); + + context.getExtension(HealthCheckRegistry.class).register(new AbstractHealthCheck("custom", "myCheck") { + @Override + protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) { + // make it always down + builder.down(); + } + }); + + MBeanServer mbeanServer = getMBeanServer(); + ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=health,name=DefaultHealthCheck"); + assertTrue(mbeanServer.isRegistered(on)); + + Boolean up = (Boolean) mbeanServer.getAttribute(on, "Healthy"); + assertFalse(up); + + Collection<String> ids = (Collection) mbeanServer.invoke(on, "getHealthChecksIDs", null, null); + assertEquals(2, ids.size()); + + mbeanServer.invoke(on, "disableById", new Object[]{"myCheck"}, new String[]{"java.lang.String"}); + + up = (Boolean) mbeanServer.getAttribute(on, "Healthy"); + assertTrue(up); + + mbeanServer.invoke(on, "enableById", new Object[]{"myCheck"}, new String[]{"java.lang.String"}); + + up = (Boolean) mbeanServer.getAttribute(on, "Healthy"); + assertFalse(up); + } + @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() {