This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 9685546e16e7870e0dc5aea0188ebdd6cab7cbd8 Author: Claus Ibsen <[email protected]> AuthorDate: Mon Jun 12 10:39:14 2023 +0200 CAMEL-18597: ThrottlingExceptionRoutePolicy should expose exceptions type names in JMX --- .../mbean/ManagedThrottlingExceptionRoutePolicyMBean.java | 4 ++++ .../mbean/ManagedThrottlingExceptionRoutePolicy.java | 13 +++++++++++++ .../ManagedThrottlingExceptionRoutePolicyTest.java | 13 +++++++++++-- .../camel/throttling/ThrottlingExceptionRoutePolicy.java | 4 ++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java index b0acd368691..f6899cf5ea4 100644 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java +++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java @@ -21,6 +21,9 @@ import org.apache.camel.api.management.ManagedOperation; public interface ManagedThrottlingExceptionRoutePolicyMBean extends ManagedServiceMBean { + @ManagedAttribute(description = "The class of the exception to throttle") + String[] getExceptionTypes(); + @ManagedAttribute(description = "How long to wait before moving open circuit to half open") Long getHalfOpenAfter(); @@ -53,4 +56,5 @@ public interface ManagedThrottlingExceptionRoutePolicyMBean extends ManagedServi @ManagedAttribute(description = "Number ms since the circuit was opened") Long getOpenAt(); + } diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java index 3fa4cd2ee6a..3cd4cd91f37 100644 --- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java +++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java @@ -16,6 +16,8 @@ */ package org.apache.camel.management.mbean; +import java.util.List; + import org.apache.camel.CamelContext; import org.apache.camel.api.management.ManagedResource; import org.apache.camel.api.management.mbean.ManagedThrottlingExceptionRoutePolicyMBean; @@ -37,6 +39,17 @@ public class ManagedThrottlingExceptionRoutePolicy extends ManagedService return policy; } + @Override + public String[] getExceptionTypes() { + if (policy.getThrottledExceptions() != null) { + List<String> types = policy.getThrottledExceptions().stream().map(Class::getName) + .toList(); + return types.toArray(new String[0]); + } else { + return null; + } + } + @Override public Long getHalfOpenAfter() { return getPolicy().getHalfOpenAfter(); diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedThrottlingExceptionRoutePolicyTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedThrottlingExceptionRoutePolicyTest.java index 2552653ab84..e1f7cf61e5f 100644 --- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedThrottlingExceptionRoutePolicyTest.java +++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedThrottlingExceptionRoutePolicyTest.java @@ -16,6 +16,8 @@ */ package org.apache.camel.management; +import java.io.IOException; +import java.util.List; import java.util.Set; import javax.management.JMX; @@ -84,6 +86,12 @@ public class ManagedThrottlingExceptionRoutePolicyTest extends ManagementTestSup String myState = proxy.currentState(); assertEquals("State closed, failures 0", myState); + // exception types + String[] types = proxy.getExceptionTypes(); + assertEquals(2, types.length); + assertEquals("java.io.IOException", types[0]); + assertEquals("java.lang.UnsupportedOperationException", types[1]); + // the route has no failures Integer val = proxy.getCurrentFailures(); assertEquals(0, val.intValue()); @@ -140,7 +148,8 @@ public class ManagedThrottlingExceptionRoutePolicyTest extends ManagementTestSup @Override protected RouteBuilder createRouteBuilder() throws Exception { - ThrottlingExceptionRoutePolicy policy = new ThrottlingExceptionRoutePolicy(10, 1000, 5000, null); + ThrottlingExceptionRoutePolicy policy = new ThrottlingExceptionRoutePolicy(10, 1000, 5000, + List.of(IOException.class, UnsupportedOperationException.class)); policy.setHalfOpenHandler(new DummyHandler()); return new RouteBuilder() { @@ -161,7 +170,7 @@ public class ManagedThrottlingExceptionRoutePolicyTest extends ManagementTestSup public void process(Exchange exchange) throws Exception { // need to sleep a little to cause last failure to be slow Thread.sleep(50); - throw new RuntimeException("boom!"); + throw new IOException("boom!"); } } diff --git a/core/camel-support/src/main/java/org/apache/camel/throttling/ThrottlingExceptionRoutePolicy.java b/core/camel-support/src/main/java/org/apache/camel/throttling/ThrottlingExceptionRoutePolicy.java index e35d833d139..4f1b7f8ed5a 100644 --- a/core/camel-support/src/main/java/org/apache/camel/throttling/ThrottlingExceptionRoutePolicy.java +++ b/core/camel-support/src/main/java/org/apache/camel/throttling/ThrottlingExceptionRoutePolicy.java @@ -100,6 +100,10 @@ public class ThrottlingExceptionRoutePolicy extends RoutePolicySupport implement return camelContext; } + public List<Class<?>> getThrottledExceptions() { + return throttledExceptions; + } + @Override public void onInit(Route route) { LOG.debug("Initializing ThrottlingExceptionRoutePolicy route policy");
