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 28b03c251f5 CAMEL-22375: API on CamelContext to get current route 
ids/group names
28b03c251f5 is described below

commit 28b03c251f5b2b6a2806d8e6f6df5ed3ec2c7059
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Aug 27 15:55:13 2025 +0200

    CAMEL-22375: API on CamelContext to get current route ids/group names
---
 .../main/java/org/apache/camel/CamelContext.java   | 14 ++++++++
 .../camel/impl/engine/AbstractCamelContext.java    | 40 +++++++++++++++++++++-
 .../camel/impl/console/ContextDevConsole.java      |  9 +++++
 .../management/mbean/ManagedCamelContextMBean.java |  6 ++++
 .../management/mbean/ManagedCamelContext.java      | 10 ++++++
 .../camel/management/ManagedCamelContextTest.java  | 26 ++++++++++++--
 6 files changed, 101 insertions(+), 4 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 91d185cf062..6db7888cd98 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
@@ -508,6 +508,20 @@ public interface CamelContext extends 
CamelContextLifecycle, RuntimeConfiguratio
      */
     List<Route> getRoutes();
 
+    /**
+     * Returns all the ids of all the routes (sorted)
+     *
+     * @return ids of all the current routes
+     */
+    Set<String> getRouteIds();
+
+    /**
+     * Returns all the names of the route groups (sorted). Is empty if groups 
are not assigned to any routes
+     *
+     * @return names of all the current route groups (is empty if groups are 
not assigned to any routes)
+     */
+    Set<String> getRouteGroupIds();
+
     /**
      * To get all the routes that matches the filter.
      *
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 89c8ae73411..33fe1ee6bbf 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
@@ -968,6 +968,44 @@ public abstract class AbstractCamelContext extends 
BaseService
         }
     }
 
+    @Override
+    public Set<String> getRouteIds() {
+        if (routes.isEmpty()) {
+            return Collections.emptySet();
+        } else {
+            routesLock.lock();
+            try {
+                Set<String> answer = new TreeSet<>();
+                for (Route route : routes) {
+                    answer.add(route.getRouteId());
+                }
+                return answer;
+            } finally {
+                routesLock.unlock();
+            }
+        }
+    }
+
+    @Override
+    public Set<String> getRouteGroupIds() {
+        if (routes.isEmpty()) {
+            return Collections.emptySet();
+        } else {
+            routesLock.lock();
+            try {
+                Set<String> answer = new TreeSet<>();
+                for (Route route : routes) {
+                    if (route.getGroup() != null) {
+                        answer.add(route.getGroup());
+                    }
+                }
+                return answer;
+            } finally {
+                routesLock.unlock();
+            }
+        }
+    }
+
     @Override
     public List<Route> getRoutes(Predicate<Route> filter) {
         routesLock.lock();
@@ -987,7 +1025,7 @@ public abstract class AbstractCamelContext extends 
BaseService
     @Override
     public List<Route> getRoutesByGroup(String groupId) {
         if (groupId == null) {
-            return Collections.EMPTY_LIST;
+            return Collections.emptyList();
         }
         return getRoutes(f -> groupId.equals(f.getGroup()));
     }
diff --git 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
index 9f6b5ae2d67..5ec5f20a0dc 100644
--- 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
+++ 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
@@ -59,6 +59,10 @@ public class ContextDevConsole extends AbstractDevConsole {
         if (mcc != null) {
             ManagedCamelContextMBean mb = mcc.getManagedCamelContext();
             if (mb != null) {
+                int total = mb.getTotalRoutes();
+                int started = mb.getStartedRoutes();
+                sb.append(String.format("\n    Routes: %s (started: %s)", 
total, started));
+
                 int reloaded = 0;
                 int reloadedFailed = 0;
                 Set<ReloadStrategy> rs = 
getCamelContext().hasServices(ReloadStrategy.class);
@@ -136,6 +140,11 @@ public class ContextDevConsole extends AbstractDevConsole {
             if (mb != null) {
                 JsonObject stats = new JsonObject();
 
+                int total = mb.getTotalRoutes();
+                int started = mb.getStartedRoutes();
+                stats.put("routesTotal", total);
+                stats.put("routesStarted", started);
+
                 String load1 = getLoad1(mb);
                 String load5 = getLoad5(mb);
                 String load15 = getLoad15(mb);
diff --git 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
index d7670630d20..c23394bbd76 100644
--- 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
+++ 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
@@ -297,4 +297,10 @@ public interface ManagedCamelContextMBean extends 
ManagedPerformanceCounterMBean
     @ManagedOperation(description = "The names of the data formats currently 
registered")
     Set<String> dataFormatNames() throws Exception;
 
+    @ManagedOperation(description = "Current ids of all the routes")
+    Set<String> routeIds();
+
+    @ManagedOperation(description = "Current route group names of all the 
routes (is empty if there are no route groups assigned)")
+    Set<String> routeGroups();
+
 }
diff --git 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index ceae33189a5..3ba1d21bdf8 100644
--- 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -962,6 +962,16 @@ public class ManagedCamelContext extends 
ManagedPerformanceCounter implements Ti
         return context.getDataFormatNames();
     }
 
+    @Override
+    public Set<String> routeIds() {
+        return context.getRouteIds();
+    }
+
+    @Override
+    public Set<String> routeGroups() {
+        return context.getRouteGroupIds();
+    }
+
     /**
      * Used for sorting the processor mbeans accordingly to their index.
      */
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 f529f60dfae..86ebfc32627 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
@@ -267,18 +267,38 @@ public class ManagedCamelContextTest extends 
ManagementTestSupport {
         Assertions.assertTrue(names.contains("reverse"));
     }
 
+    @Test
+    public void testRouteIdAndGroup() throws Exception {
+        context.getRegistry().bind("reverse", new 
RefDataFormatTest.MyReverseDataFormat());
+        DataFormat df = context.resolveDataFormat("reverse");
+        assertNotNull(df);
+
+        MBeanServer mbeanServer = getMBeanServer();
+        ObjectName on = getContextObjectName();
+
+        Set<String> names = (Set<String>) mbeanServer.invoke(on, "routeIds", 
null, null);
+        Assertions.assertEquals(3, names.size());
+        Assertions.assertTrue(names.contains("aaa"));
+        Assertions.assertTrue(names.contains("bbb"));
+        Assertions.assertTrue(names.contains("ccc"));
+
+        names = (Set<String>) mbeanServer.invoke(on, "routeGroups", null, 
null);
+        Assertions.assertEquals(1, names.size());
+        Assertions.assertTrue(names.contains("cheese"));
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:start").group("cheese")
+                from("direct:start").group("cheese").routeId("aaa")
                         .delay(10)
                         .to("mock:result");
 
-                from("direct:bar").to("mock:bar");
+                from("direct:bar").to("mock:bar").routeId("bbb");
 
-                from("direct:foo").group("cheese")
+                from("direct:foo").group("cheese").routeId("ccc")
                         .delay(10)
                         .transform(constant("Bye World")).id("myTransform");
             }

Reply via email to