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");
}