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) {
