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 2022/08/22 17:10:43 UTC

[camel] 04/05: CAMEL-18406: camel-jbang - Status command

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 8ef50d8be3b3388cebbe31a0e2c46a1614bfc202
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 22 16:16:12 2022 +0200

    CAMEL-18406: camel-jbang - Status command
---
 dsl/camel-jbang/camel-jbang-core/pom.xml           |  5 ++
 .../jbang/core/commands/process/CamelStatus.java   | 59 +++++++++++++++-------
 2 files changed, 47 insertions(+), 17 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/pom.xml b/dsl/camel-jbang/camel-jbang-core/pom.xml
index 84de066a0fe..f5db9bed853 100644
--- a/dsl/camel-jbang/camel-jbang-core/pom.xml
+++ b/dsl/camel-jbang/camel-jbang-core/pom.xml
@@ -67,6 +67,11 @@
             <groupId>info.picocli</groupId>
             <artifactId>picocli</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.freva</groupId>
+            <artifactId>ascii-table</artifactId>
+            <version>1.3.0</version>
+        </dependency>
 
         <!-- jolokia -->
         <dependency>
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 fbfa79610b6..7b4dcabe831 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
@@ -18,10 +18,14 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
+import com.github.freva.asciitable.AsciiTable;
+import com.github.freva.asciitable.Column;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -34,8 +38,8 @@ import picocli.CommandLine.Command;
 @Command(name = "status", description = "List status of the running Camel integrations")
 public class CamelStatus extends ProcessBaseCommand {
 
-    @CommandLine.Option(names = { "--sort" },
-                        description = "Sort by pid, name or age", defaultValue = "pid")
+    @CommandLine.Option(names = {"--sort"},
+            description = "Sort by pid, name or age", defaultValue = "pid")
     String sort;
 
     public CamelStatus(CamelJBangMain main) {
@@ -44,6 +48,8 @@ public class CamelStatus extends ProcessBaseCommand {
 
     @Override
     public Integer call() throws Exception {
+        List<Row> rows = new ArrayList<>();
+
         ProcessHandle.allProcesses()
                 .sorted((o1, o2) -> {
                     switch (sort) {
@@ -59,28 +65,37 @@ public class CamelStatus extends ProcessBaseCommand {
                     }
                 })
                 .forEach(ph -> {
-                    String name = extractName(ph);
-                    if (ObjectHelper.isNotEmpty(name)) {
-                        String ago = TimeUtils.printSince(extractSince(ph));
+                    Row row = new Row();
+                    row.name = extractName(ph);
+                    if (ObjectHelper.isNotEmpty(row.name)) {
+                        row.pid = "" + ph.pid();
+                        row.ago = TimeUtils.printSince(extractSince(ph));
                         JsonObject status = loadStatus(ph.pid());
                         if (status != null) {
-                            String state = status.getString("state").toLowerCase(Locale.ROOT);
+                            row.state = status.getString("state").toLowerCase(Locale.ROOT);
                             Map<String, ?> stats = status.getMap("statistics");
                             if (stats != null) {
-                                BigDecimal total = (BigDecimal) stats.get("exchangesTotal");
-                                BigDecimal inflight = (BigDecimal) stats.get("exchangesInflight");
-                                BigDecimal failed = (BigDecimal) stats.get("exchangesFailed");
-                                System.out.printf("%s camel run %s %s (age: %s, total: %s, inflight: %s, failed: %s)%n",
-                                        ph.pid(), name, state, ago, total, inflight, failed);
-                            } else {
-                                System.out.printf("%s camel run %s %s (age: %s)%n",
-                                        ph.pid(), name, state, ago);
+                                row.total = stats.get("exchangesTotal").toString();
+                                row.inflight = stats.get("exchangesInflight").toString();
+                                row.failed = stats.get("exchangesFailed").toString();
                             }
-                        } else {
-                            System.out.println(ph.pid() + " camel run " + name + " (age: " + ago + ")");
                         }
+                        rows.add(row);
                     }
                 });
+
+        if (!rows.isEmpty()) {
+            System.out.println(AsciiTable.getTable(AsciiTable.BASIC_ASCII_NO_DATA_SEPARATORS, rows, Arrays.asList(
+                    new Column().header("PID").with(r -> r.pid),
+                    new Column().header("Name").maxColumnWidth(30).with(r -> r.name),
+                    new Column().header("State").with(r -> r.state),
+                    new Column().header("Age").with(r -> r.ago),
+                    new Column().header("Total #").with(r -> r.total),
+                    new Column().header("Failed #").with(r -> r.failed),
+                    new Column().header("Inflight #").with(r -> r.inflight)
+            )));
+        }
+
         return 0;
     }
 
@@ -99,4 +114,14 @@ public class CamelStatus extends ProcessBaseCommand {
         return null;
     }
 
+    private static class Row {
+        String pid;
+        String name;
+        String ago;
+        String state;
+        String total;
+        String failed;
+        String inflight;
+    }
+
 }