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;
+ }
+
}