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
The following commit(s) were added to refs/heads/main by this push: new 4a8071924de CAMEL-22126: camel-core - Add API to get routes by group id 4a8071924de is described below commit 4a8071924de8ecf381e1d7c0cac24fec9b9843be Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri May 30 15:51:58 2025 +0200 CAMEL-22126: camel-core - Add API to get routes by group id --- .../main/java/org/apache/camel/CamelContext.java | 17 +++++++++++++++++ .../camel/impl/engine/AbstractCamelContext.java | 21 +++++++++++++++++++++ .../camel/impl/engine/DefaultCamelContextTest.java | 21 +++++++++++++++++++++ .../camel/api/management/ManagedCamelContext.java | 12 ++++++++++-- .../camel/management/ManagedCamelContextImpl.java | 21 +++++++++++++++------ .../camel/management/ManagedCamelContextTest.java | 14 ++++++++++---- 6 files changed, 94 insertions(+), 12 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java index 2911a3f8755..7d41a6766d2 100644 --- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java +++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; import org.apache.camel.clock.EventClock; import org.apache.camel.spi.CamelContextNameStrategy; @@ -507,6 +508,22 @@ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguratio */ List<Route> getRoutes(); + /** + * To get all the routes that matches the filter. + * + * @param filter to filter to include only accepted routes + * @return the routes that matched the filter + */ + List<Route> getRoutes(Predicate<Route> filter); + + /** + * Gets the routes for the given group + * + * @param groupId the id of the group + * @return the routes or an empty list if no routes exists for the given group id + */ + List<Route> getRoutesByGroup(String groupId); + /** * Returns the total number of routes in this CamelContext */ diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index 0adfb36d59d..0fddc3ac0ac 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -963,6 +963,27 @@ public abstract class AbstractCamelContext extends BaseService } } + @Override + public List<Route> getRoutes(Predicate<Route> filter) { + routesLock.lock(); + try { + List<Route> answer = new ArrayList<>(); + for (Route route : getRoutes()) { + if (filter.test(route)) { + answer.add(route); + } + } + return answer; + } finally { + routesLock.unlock(); + } + } + + @Override + public List<Route> getRoutesByGroup(String groupId) { + return getRoutes(f -> groupId.equals(f.getGroup())); + } + @Override public int getRoutesSize() { return routes.size(); diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java index 0d137577311..6f76552dd33 100644 --- a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java @@ -303,6 +303,27 @@ public class DefaultCamelContextTest extends TestSupport { ctx.stop(); } + @Test + public void testGetRouteByFilter() throws Exception { + DefaultCamelContext ctx = new DefaultCamelContext(false); + ctx.disableJMX(); + + ctx.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start").group("cheese").to("mock:result"); + from("direct:start2").group("cheese").to("mock:result2"); + from("direct:start3").to("mock:result3"); + } + }); + ctx.start(); + + assertEquals(2, ctx.getRoutesByGroup("cheese").size()); + assertEquals(1, ctx.getRoutes(f -> f.getGroup() == null).size()); + + ctx.stop(); + } + @Test public void testSuspend() { DefaultCamelContext ctx = new DefaultCamelContext(false); diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java index 02b33095543..1b39eb83538 100644 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java +++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java @@ -16,14 +16,14 @@ */ package org.apache.camel.api.management; +import java.util.List; + import org.apache.camel.api.management.mbean.ManagedCamelContextMBean; import org.apache.camel.api.management.mbean.ManagedConsumerMBean; import org.apache.camel.api.management.mbean.ManagedProcessorMBean; import org.apache.camel.api.management.mbean.ManagedRouteMBean; import org.apache.camel.api.management.mbean.ManagedStepMBean; -import java.util.List; - public interface ManagedCamelContext { /** @@ -88,6 +88,14 @@ public interface ManagedCamelContext { */ List<ManagedRouteMBean> getManagedRoutes(); + /** + * Gets all the managed routes for the given group + * + * @param groupId the group id + * @return the routes or an empty list if no routes exists for the group + */ + List<ManagedRouteMBean> getManagedRoutesByGroup(String groupId); + /** * Gets the managed consumer client api from any of the routes which with the given route id * diff --git a/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java b/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java index 6ce6925fe84..629825f8a84 100644 --- a/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java +++ b/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java @@ -124,6 +124,12 @@ public class ManagedCamelContextImpl implements ManagedCamelContext { @Override public List<ManagedRouteMBean> getManagedRoutes() { + // null group will return all + return getManagedRoutesByGroup(null); + } + + @Override + public List<ManagedRouteMBean> getManagedRoutesByGroup(String groupId) { // jmx must be enabled if (getManagementStrategy().getManagementAgent() == null) { return null; @@ -131,12 +137,15 @@ public class ManagedCamelContextImpl implements ManagedCamelContext { List<ManagedRouteMBean> answer = new ArrayList<>(); for (Route route : camelContext.getRoutes()) { - try { - ObjectName on = getManagementStrategy().getManagementObjectNameStrategy().getObjectNameForRoute(route); - ManagedRouteMBean mr = getManagementStrategy().getManagementAgent().newProxyClient(on, ManagedRouteMBean.class); - answer.add(mr); - } catch (MalformedObjectNameException e) { - throw RuntimeCamelException.wrapRuntimeCamelException(e); + if (groupId == null || groupId.equals(route.getGroup())) { + try { + ObjectName on = getManagementStrategy().getManagementObjectNameStrategy().getObjectNameForRoute(route); + ManagedRouteMBean mr + = getManagementStrategy().getManagementAgent().newProxyClient(on, ManagedRouteMBean.class); + answer.add(mr); + } catch (MalformedObjectNameException e) { + throw RuntimeCamelException.wrapRuntimeCamelException(e); + } } } return answer; diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java index df72f03f8fb..f529f60dfae 100644 --- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java +++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java @@ -71,6 +71,10 @@ public class ManagedCamelContextTest extends ManagementTestSupport { List<ManagedRouteMBean> routes = context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class).getManagedRoutes(); + assertEquals(3, routes.size()); + + routes = context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class) + .getManagedRoutesByGroup("cheese"); assertEquals(2, routes.size()); } @@ -106,10 +110,10 @@ public class ManagedCamelContextTest extends ManagementTestSupport { assertEquals(Boolean.FALSE, logMask); Integer total = (Integer) mbeanServer.getAttribute(on, "TotalRoutes"); - assertEquals(2, total.intValue()); + assertEquals(3, total.intValue()); Integer started = (Integer) mbeanServer.getAttribute(on, "StartedRoutes"); - assertEquals(2, started.intValue()); + assertEquals(3, started.intValue()); // invoke operations MockEndpoint mock = getMockEndpoint("mock:result"); @@ -268,11 +272,13 @@ public class ManagedCamelContextTest extends ManagementTestSupport { return new RouteBuilder() { @Override public void configure() { - from("direct:start") + from("direct:start").group("cheese") .delay(10) .to("mock:result"); - from("direct:foo") + from("direct:bar").to("mock:bar"); + + from("direct:foo").group("cheese") .delay(10) .transform(constant("Bye World")).id("myTransform"); }