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() {

Reply via email to