You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2025/08/02 16:41:46 UTC

(camel) 11/13: CAMEL-22310: camel-core - Add route group jbang command

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch jmxgroup
in repository https://gitbox.apache.org/repos/asf/camel.git

commit bc4c1a213c5961482fc5c6f4d0836597de215211
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Aug 2 17:47:20 2025 +0200

    CAMEL-22310: camel-core - Add route group jbang command
---
 .../apache/camel/cli/connector/LocalCliConnector.java | 19 ++++++++++++++++---
 .../jbang/core/commands/action/CamelRouteAction.java  |  5 +++++
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
index 133cfae5ab9..d527061f8a9 100644
--- a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
+++ b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
@@ -34,6 +34,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -801,16 +802,18 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C
         // id is a pattern
         String[] patterns = root.getString("id").split(",");
         boolean all = patterns.length == 1 && "*".equals(patterns[0]);
+        boolean group = root.getBooleanOrDefault("group", false);
         List<String> ids;
         if (all) {
             ids = List.of("*");
         } else {
             // find matching IDs
             ids = camelContext.getRoutes()
-                    .stream().map(Route::getRouteId)
-                    .filter(routeId -> {
+                    .stream().map(r -> group ? r.getGroup() : r.getRouteId())
+                    .filter(Objects::nonNull)
+                    .filter(name -> {
                         for (String p : patterns) {
-                            if (PatternHelper.matchPattern(routeId, p)) {
+                            if (PatternHelper.matchPattern(name, p)) {
                                 return true;
                             }
                         }
@@ -824,12 +827,16 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C
                 if ("start".equals(command)) {
                     if ("*".equals(id)) {
                         camelContext.getRouteController().startAllRoutes();
+                    } else if (group) {
+                        camelContext.getRouteController().startRouteGroup(id);
                     } else {
                         camelContext.getRouteController().startRoute(id);
                     }
                 } else if ("stop".equals(command)) {
                     if ("*".equals(id)) {
                         camelContext.getRouteController().stopAllRoutes();
+                    } else if (group) {
+                        camelContext.getRouteController().stopRouteGroup(id);
                     } else {
                         camelContext.getRouteController().stopRoute(id);
                     }
@@ -838,6 +845,9 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C
                         for (Route r : camelContext.getRoutes()) {
                             camelContext.getRouteController().suspendRoute(r.getRouteId());
                         }
+                    } else if (group) {
+                        // we do not have suspend for a group
+                        camelContext.getRouteController().stopRouteGroup(id);
                     } else {
                         camelContext.getRouteController().suspendRoute(id);
                     }
@@ -846,6 +856,9 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C
                         for (Route r : camelContext.getRoutes()) {
                             camelContext.getRouteController().resumeRoute(r.getRouteId());
                         }
+                    } else if (group) {
+                        // we do not have resume for a group
+                        camelContext.getRouteController().startRouteGroup(id);
                     } else {
                         camelContext.getRouteController().resumeRoute(id);
                     }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteAction.java
index a4122151298..d652a4ab0f9 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteAction.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteAction.java
@@ -33,6 +33,10 @@ public abstract class CamelRouteAction extends ActionBaseCommand {
                         description = "Route ids (multiple ids can be separated by comma)", defaultValue = "*")
     String id = "*";
 
+    @CommandLine.Option(names = { "--group" },
+                        description = "Perform the action on a group of routes")
+    boolean group;
+
     public CamelRouteAction(CamelJBangMain main) {
         super(main);
     }
@@ -44,6 +48,7 @@ public abstract class CamelRouteAction extends ActionBaseCommand {
         for (long pid : pids) {
             JsonObject root = new JsonObject();
             root.put("action", "route");
+            root.put("group", group);
             root.put("id", id);
             Path f = getActionFile(Long.toString(pid));
             onAction(root);