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 303b89a1a1a3433917b0212b44e9c4eed19e11a7
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jan 4 14:00:20 2023 +0100

    CAMEL-18523: camel-jbang - Add watch option
---
 .../core/commands/action/ActionBaseCommand.java    |  1 -
 .../ActionWatchCommand.java}                       | 37 +++++++++++++++-------
 .../jbang/core/commands/action/CamelSourceTop.java |  5 +--
 .../core/commands/action/CamelThreadDump.java      |  5 +--
 .../commands/action/RouteControllerAction.java     |  5 +--
 .../jbang/core/commands/process/CamelStatus.java   |  2 +-
 .../dsl/jbang/core/commands/process/CamelTop.java  |  2 +-
 7 files changed, 37 insertions(+), 20 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java
index 27dc28ae613..ff2f019c13e 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java
@@ -20,7 +20,6 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.regex.Pattern;
 
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionWatchCommand.java
similarity index 54%
copy from 
dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
copy to 
dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionWatchCommand.java
index 26c9e8eb22c..098a6e3386e 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionWatchCommand.java
@@ -14,29 +14,44 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.dsl.jbang.core.commands.process;
+package org.apache.camel.dsl.jbang.core.commands.action;
 
-import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.fusesource.jansi.Ansi;
+import org.fusesource.jansi.AnsiConsole;
 import picocli.CommandLine;
 
[email protected](name = "get",
-                     description = "Get status of Camel integrations (use get 
--help to see sub commands)")
-public class CamelStatus extends CamelCommand {
+abstract class ActionWatchCommand extends ActionBaseCommand {
 
     @CommandLine.Option(names = { "--watch" },
-            description = "Execute periodically and showing output fullscreen")
+                        description = "Execute periodically and showing output 
fullscreen")
     boolean watch;
 
-    public CamelStatus(CamelJBangMain main) {
+    public ActionWatchCommand(CamelJBangMain main) {
         super(main);
     }
 
     @Override
     public Integer call() throws Exception {
-        // default to get the integrations
-        CamelContextStatus cmd = new CamelContextStatus(getMain());
-        cmd.watch = watch;
-        return new CommandLine(cmd).execute();
+        int exit;
+        if (watch) {
+            do {
+                // output command
+                exit = doCall();
+                // use 2-sec delay in watch mode
+                Thread.sleep(2000);
+            } while (exit == 0);
+        } else {
+            exit = doCall();
+        }
+        return exit;
     }
+
+    protected void clearScreen() {
+        AnsiConsole.out().print(Ansi.ansi().eraseScreen());
+        AnsiConsole.out().print(Ansi.ansi().cursor(0, 0));
+    }
+
+    protected abstract Integer doCall() throws Exception;
+
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSourceTop.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSourceTop.java
index 5c6a4215591..bda0bb38c11 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSourceTop.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSourceTop.java
@@ -33,7 +33,7 @@ import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
 @Command(name = "source", description = "List top processors (source) in a 
running Camel integration")
-public class CamelSourceTop extends ActionBaseCommand {
+public class CamelSourceTop extends ActionWatchCommand {
 
     @CommandLine.Parameters(description = "Name or pid of running Camel 
integration", arity = "1")
     String name;
@@ -53,7 +53,7 @@ public class CamelSourceTop extends ActionBaseCommand {
     }
 
     @Override
-    public Integer call() throws Exception {
+    public Integer doCall() throws Exception {
         List<Row> rows = new ArrayList<>();
 
         List<Long> pids = findPids(name);
@@ -140,6 +140,7 @@ public class CamelSourceTop extends ActionBaseCommand {
         // sort rows
         rows.sort(this::sortRow);
 
+        clearScreen();
         if (!rows.isEmpty()) {
             printSource(rows);
         }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelThreadDump.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelThreadDump.java
index e12dbd2dda0..1ee5b4c147f 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelThreadDump.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelThreadDump.java
@@ -38,7 +38,7 @@ import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
 @Command(name = "thread-dump", description = "List threads in a running Camel 
integration")
-public class CamelThreadDump extends ActionBaseCommand {
+public class CamelThreadDump extends ActionWatchCommand {
 
     @CommandLine.Parameters(description = "Name or pid of running Camel 
integration", arity = "1")
     String name;
@@ -66,7 +66,7 @@ public class CamelThreadDump extends ActionBaseCommand {
     }
 
     @Override
-    public Integer call() throws Exception {
+    public Integer doCall() throws Exception {
         List<Row> rows = new ArrayList<>();
 
         List<Long> pids = findPids(name);
@@ -132,6 +132,7 @@ public class CamelThreadDump extends ActionBaseCommand {
         // sort rows
         rows.sort(this::sortRow);
 
+        clearScreen();
         if (!rows.isEmpty()) {
             int total = jo.getInteger("threadCount");
             int peak = jo.getInteger("peakThreadCount");
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
index 5412738ce7e..f5e0a85acfd 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
@@ -39,7 +39,7 @@ import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
 @Command(name = "route-controller", description = "List status of route 
controller in a running Camel integration")
-public class RouteControllerAction extends ActionBaseCommand {
+public class RouteControllerAction extends ActionWatchCommand {
 
     @CommandLine.Parameters(description = "Name or pid of running Camel 
integration", arity = "1")
     String name;
@@ -67,7 +67,7 @@ public class RouteControllerAction extends ActionBaseCommand {
     }
 
     @Override
-    public Integer call() throws Exception {
+    public Integer doCall() throws Exception {
         List<Row> rows = new ArrayList<>();
 
         List<Long> pids = findPids(name);
@@ -134,6 +134,7 @@ public class RouteControllerAction extends 
ActionBaseCommand {
         // sort rows
         rows.sort(this::sortRow);
 
+        clearScreen();
         if (!rows.isEmpty()) {
             if (supervising) {
                 if (header) {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
index 26c9e8eb22c..596cd72c7b8 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
@@ -25,7 +25,7 @@ import picocli.CommandLine;
 public class CamelStatus extends CamelCommand {
 
     @CommandLine.Option(names = { "--watch" },
-            description = "Execute periodically and showing output fullscreen")
+                        description = "Execute periodically and showing output 
fullscreen")
     boolean watch;
 
     public CamelStatus(CamelJBangMain main) {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelTop.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelTop.java
index 6a5fc9c0983..5a3af05e8f3 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelTop.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelTop.java
@@ -25,7 +25,7 @@ import picocli.CommandLine;
 public class CamelTop extends CamelCommand {
 
     @CommandLine.Option(names = { "--watch" },
-            description = "Execute periodically and showing output fullscreen")
+                        description = "Execute periodically and showing output 
fullscreen")
     boolean watch;
 
     public CamelTop(CamelJBangMain main) {

Reply via email to