This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch CAMEL-23226-consistent-output-format in repository https://gitbox.apache.org/repos/asf/camel.git
commit 520f8b6e477f8ff83507b652ac4236068f659bf2 Author: Guillaume Nodet <[email protected]> AuthorDate: Sat Mar 21 14:00:42 2026 +0100 CAMEL-23226: Add consistent --json output support across camel-jbang commands Co-Authored-By: Claude Opus 4.6 <[email protected]> --- .../core/commands/process/CamelContextStatus.java | 72 +++++++++++++++------- .../core/commands/process/CamelContextTop.java | 54 +++++++++++----- .../jbang/core/commands/process/CamelCount.java | 30 ++++++--- .../commands/process/CamelProcessorStatus.java | 24 ++++++++ .../commands/process/CamelRouteGroupStatus.java | 26 ++++++++ .../core/commands/process/CamelRouteStatus.java | 28 +++++++++ .../jbang/core/commands/process/ListBlocked.java | 38 +++++++++--- .../core/commands/process/ListCircuitBreaker.java | 53 +++++++++++----- .../jbang/core/commands/process/ListConsumer.java | 19 ++++++ .../jbang/core/commands/process/ListEndpoint.java | 17 +++++ .../dsl/jbang/core/commands/process/ListEvent.java | 29 ++++++--- .../jbang/core/commands/process/ListGroovy.java | 39 +++++++++--- .../jbang/core/commands/process/ListHealth.java | 61 +++++++++++------- .../jbang/core/commands/process/ListInflight.java | 46 ++++++++++---- .../core/commands/process/ListInternalTask.java | 51 ++++++++++----- .../dsl/jbang/core/commands/process/ListKafka.java | 64 ++++++++++++------- .../jbang/core/commands/process/ListMetric.java | 62 +++++++++++++------ .../core/commands/process/ListPlatformHttp.java | 30 ++++++--- .../jbang/core/commands/process/ListProcess.java | 4 -- .../jbang/core/commands/process/ListProducer.java | 16 +++++ .../core/commands/process/ListProperties.java | 52 +++++++++++----- .../dsl/jbang/core/commands/process/ListRest.java | 37 ++++++++--- .../jbang/core/commands/process/ListService.java | 54 +++++++++++----- .../core/commands/process/ListTransformer.java | 19 ++++++ .../jbang/core/commands/process/ListVariable.java | 39 ++++++++---- .../dsl/jbang/core/commands/process/ListVault.java | 41 ++++++++---- .../core/commands/process/ProcessWatchCommand.java | 4 ++ 27 files changed, 752 insertions(+), 257 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java index 626facf712ea..e2955e86e36a 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -32,6 +33,7 @@ import org.apache.camel.dsl.jbang.core.common.VersionHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -167,29 +169,53 @@ public class CamelContextStatus extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.camelVersion), - new Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform), - new Column().header("PROFILE").dataAlign(HorizontalAlign.LEFT).with(this::getProfile), - new Column().header("READY").dataAlign(HorizontalAlign.CENTER).with(r -> r.ready), - new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) - .with(this::getStatus), - new Column().header("RELOAD").with(this::getReloaded), - new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age), - new Column().header("ROUTE").with(this::getRoutes), - new Column().header("MSG/S").with(this::getThroughput), - new Column().header("TOTAL").with(this::getTotal), - new Column().header("FAIL").with(this::getFailed), - new Column().header("INFLIGHT").with(this::getInflight), - new Column().header("LAST").with(r -> r.last), - new Column().header("SINCE-LAST").with(this::getSinceLast), - new Column().header("") // empty header as we only show info when there is an error - .headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT) - .maxWidth(70, OverflowBehaviour.NEWLINE) - .with(this::getDescription)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("camelVersion", r.camelVersion); + jo.put("platform", getPlatform(r)); + jo.put("profile", getProfile(r)); + jo.put("ready", r.ready); + jo.put("status", getStatus(r)); + jo.put("reload", getReloaded(r)); + jo.put("age", r.age); + jo.put("route", getRoutes(r)); + jo.put("throughput", getThroughput(r)); + jo.put("total", r.total); + jo.put("failed", r.failed); + jo.put("inflight", r.inflight); + jo.put("last", r.last); + jo.put("sinceLast", getSinceLast(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.camelVersion), + new Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform), + new Column().header("PROFILE").dataAlign(HorizontalAlign.LEFT).with(this::getProfile), + new Column().header("READY").dataAlign(HorizontalAlign.CENTER).with(r -> r.ready), + new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) + .with(this::getStatus), + new Column().header("RELOAD").with(this::getReloaded), + new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age), + new Column().header("ROUTE").with(this::getRoutes), + new Column().header("MSG/S").with(this::getThroughput), + new Column().header("TOTAL").with(this::getTotal), + new Column().header("FAIL").with(this::getFailed), + new Column().header("INFLIGHT").with(this::getInflight), + new Column().header("LAST").with(r -> r.last), + new Column().header("SINCE-LAST").with(this::getSinceLast), + new Column().header("") // empty header as we only show info when there is an error + .headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT) + .maxWidth(70, OverflowBehaviour.NEWLINE) + .with(this::getDescription)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java index 100ff41d3621..4b67469c5ae9 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.dsl.jbang.core.common.VersionHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -144,22 +146,42 @@ public class CamelContextTop extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("JAVA").dataAlign(HorizontalAlign.LEFT).with(this::getJavaVersion), - new Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.camelVersion), - new Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform), - new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) - .with(r -> extractState(r.state)), - new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago), - new Column().header("LOAD").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER) - .with(this::getLoad), - new Column().header("HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getHeapMemory), - new Column().header("NON-HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getNonHeapMemory), - new Column().header("GC").headerAlign(HorizontalAlign.CENTER).with(this::getGC), - new Column().header("THREADS").headerAlign(HorizontalAlign.CENTER).with(this::getThreads)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("javaVersion", getJavaVersion(r)); + jo.put("camelVersion", r.camelVersion); + jo.put("platform", getPlatform(r)); + jo.put("status", extractState(r.state)); + jo.put("age", r.ago); + jo.put("load", getLoad(r)); + jo.put("heap", getHeapMemory(r)); + jo.put("nonHeap", getNonHeapMemory(r)); + jo.put("gc", getGC(r)); + jo.put("threads", getThreads(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("JAVA").dataAlign(HorizontalAlign.LEFT).with(this::getJavaVersion), + new Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.camelVersion), + new Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform), + new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) + .with(r -> extractState(r.state)), + new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago), + new Column().header("LOAD").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER) + .with(this::getLoad), + new Column().header("HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getHeapMemory), + new Column().header("NON-HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getNonHeapMemory), + new Column().header("GC").headerAlign(HorizontalAlign.CENTER).with(this::getGC), + new Column().header("THREADS").headerAlign(HorizontalAlign.CENTER).with(this::getThreads)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java index 16f5ef89a988..6695856f9d75 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.PidNameAgeCompletionCandidates; import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -93,14 +95,26 @@ public class CamelCount extends ProcessWatchCommand { if (!total && !fail) { if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) - .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age), - new Column().header("TOTAL").with(r -> r.total), - new Column().header("FAIL").with(r -> r.failed)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("age", r.age); + jo.put("total", r.total); + jo.put("failed", r.failed); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age), + new Column().header("TOTAL").with(r -> r.total), + new Column().header("FAIL").with(r -> r.failed)))); + } } } else { StringBuilder builder = new StringBuilder(); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java index 44f6d63ffa1a..3b9d8b877aa4 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -302,6 +303,29 @@ public class CamelProcessorStatus extends ProcessWatchCommand { } protected void printTable(List<Row> rows) { + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", getName(r)); + jo.put("routeId", r.routeId); + jo.put("group", r.group); + jo.put("id", getId(r)); + jo.put("processor", r.processor); + jo.put("status", getStatus(r)); + jo.put("total", r.total); + jo.put("failed", r.failed); + jo.put("inflight", r.inflight); + jo.put("mean", r.mean); + jo.put("min", r.min); + jo.put("max", r.max); + jo.put("last", r.last); + jo.put("delta", getDelta(r)); + jo.put("sinceLast", getSinceLast(r)); + return jo; + }).collect(Collectors.toList()))); + return; + } printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(this::getPid), new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java index 0e5228c09d72..705559d0c95e 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -32,6 +33,7 @@ import org.apache.camel.support.PatternHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -202,6 +204,30 @@ public class CamelRouteGroupStatus extends ProcessWatchCommand { } protected void printTable(List<Row> rows) { + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("group", getGroup(r)); + jo.put("routes", r.size); + jo.put("status", r.state); + jo.put("age", r.age); + jo.put("coverage", getCoverage(r)); + jo.put("throughput", getThroughput(r)); + jo.put("total", r.total); + jo.put("failed", r.failed); + jo.put("inflight", r.inflight); + jo.put("mean", r.mean); + jo.put("min", r.min); + jo.put("max", r.max); + jo.put("last", r.last); + jo.put("delta", getDelta(r)); + jo.put("sinceLast", getSinceLast(r)); + return jo; + }).collect(Collectors.toList()))); + return; + } printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java index 84b068964686..0ace6069aedb 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -35,6 +36,7 @@ import org.apache.camel.util.StringHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -257,6 +259,32 @@ public class CamelRouteStatus extends ProcessWatchCommand { } protected void printTable(List<Row> rows, boolean remoteVisible) { + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("routeId", r.routeId); + jo.put("group", r.group); + jo.put("from", r.from); + jo.put("remote", r.remote); + jo.put("status", getStatus(r)); + jo.put("age", r.age); + jo.put("coverage", r.coverage); + jo.put("throughput", getThroughput(r)); + jo.put("total", r.total); + jo.put("failed", r.failed); + jo.put("inflight", r.inflight); + jo.put("mean", r.mean); + jo.put("min", r.min); + jo.put("max", r.max); + jo.put("last", r.last); + jo.put("delta", getDelta(r)); + jo.put("sinceLast", getSinceLast(r)); + return jo; + }).collect(Collectors.toList()))); + return; + } printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java index f4eddc904195..6fb432f00a5f 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -94,16 +96,32 @@ public class ListBlocked extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.exchangeId), - new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.routeId), - new Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.nodeId), - new Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("exchangeId", r.exchangeId); + jo.put("route", r.routeId); + jo.put("id", r.nodeId); + jo.put("duration", getDuration(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.exchangeId), + new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT) + .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.routeId), + new Column().header("ID").dataAlign(HorizontalAlign.LEFT) + .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.nodeId), + new Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java index ed49cd22d09d..e82c941f2753 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -132,22 +134,41 @@ public class ListCircuitBreaker extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> r.component), - new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(r -> r.routeId), - new Column().header("ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.id), - new Column().header("STATE").dataAlign(HorizontalAlign.LEFT).with(r -> r.state), - new Column().header("PENDING").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(this::getPending), - new Column().header("SUCCESS").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(this::getSuccess), - new Column().header("FAIL").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT) - .with(this::getFailure), - new Column().header("REJECT").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(this::getReject)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("component", r.component); + jo.put("route", r.routeId); + jo.put("id", r.id); + jo.put("state", r.state); + jo.put("bufferedCalls", r.bufferedCalls); + jo.put("successfulCalls", r.successfulCalls); + jo.put("failedCalls", r.failedCalls); + jo.put("notPermittedCalls", r.notPermittedCalls); + jo.put("failureRate", r.failureRate); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> r.component), + new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(r -> r.routeId), + new Column().header("ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.id), + new Column().header("STATE").dataAlign(HorizontalAlign.LEFT).with(r -> r.state), + new Column().header("PENDING").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) + .with(this::getPending), + new Column().header("SUCCESS").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) + .with(this::getSuccess), + new Column().header("FAIL").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT) + .with(this::getFailure), + new Column().header("REJECT").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) + .with(this::getReject)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java index 45498ab0d396..5b5ec2a2b501 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -32,6 +33,7 @@ import org.apache.camel.support.PatternHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -167,6 +169,23 @@ public class ListConsumer extends ProcessWatchCommand { } protected void printTable(List<Row> rows) { + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("age", r.age); + jo.put("id", r.id); + jo.put("status", getState(r)); + jo.put("type", getType(r)); + jo.put("inflight", r.inflight); + jo.put("poll", getTotal(r)); + jo.put("sinceLast", getSinceLast(r)); + jo.put("uri", r.uri); + return jo; + }).collect(Collectors.toList()))); + return; + } printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java index e06df90564a9..bb85f9afa337 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.support.PatternHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -161,6 +163,21 @@ public class ListEndpoint extends ProcessWatchCommand { } protected void printTable(List<Row> rows) { + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("age", r.age); + jo.put("direction", r.direction); + jo.put("total", r.total); + jo.put("stub", r.stub); + jo.put("remote", r.remote); + jo.put("uri", r.endpoint); + return jo; + }).collect(Collectors.toList()))); + return; + } printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java index b47115d61729..6bacad5501a3 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -90,13 +92,26 @@ public class ListEvent extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type), - new Column().header("AGE").dataAlign(HorizontalAlign.RIGHT).with(this::getTimestamp), - new Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT).with(r -> r.message)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("type", r.type); + jo.put("age", getTimestamp(r)); + jo.put("message", r.message); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type), + new Column().header("AGE").dataAlign(HorizontalAlign.RIGHT).with(this::getTimestamp), + new Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT).with(r -> r.message)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java index 613e5499bfed..fdc34ae24b4d 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -29,6 +30,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -94,16 +96,33 @@ public class ListGroovy extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("PRELOAD").headerAlign(HorizontalAlign.CENTER).with(r -> "" + r.preloaddCounter), - new Column().header("COMPILE").headerAlign(HorizontalAlign.CENTER).with(r -> "" + r.compiledCounter), - new Column().header("TIME").headerAlign(HorizontalAlign.CENTER).with(this::getTime), - new Column().header("SINCE").headerAlign(HorizontalAlign.CENTER).with(this::getLast), - new Column().header("CLASSES").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT) - .maxWidth(60, OverflowBehaviour.ELLIPSIS_LEFT).with(this::getClasses)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("preload", r.preloaddCounter); + jo.put("compile", r.compiledCounter); + jo.put("time", getTime(r)); + jo.put("since", getLast(r)); + jo.put("classes", getClasses(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("PRELOAD").headerAlign(HorizontalAlign.CENTER) + .with(r -> "" + r.preloaddCounter), + new Column().header("COMPILE").headerAlign(HorizontalAlign.CENTER) + .with(r -> "" + r.compiledCounter), + new Column().header("TIME").headerAlign(HorizontalAlign.CENTER).with(this::getTime), + new Column().header("SINCE").headerAlign(HorizontalAlign.CENTER).with(this::getLast), + new Column().header("CLASSES").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT) + .maxWidth(60, OverflowBehaviour.ELLIPSIS_LEFT).with(this::getClasses)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java index a9d75a60379a..508e04c1aff6 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java @@ -37,6 +37,7 @@ import org.apache.camel.util.StringHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -189,28 +190,44 @@ public class ListHealth extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) - .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago), - new Column().header("ID").dataAlign(HorizontalAlign.LEFT) - .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(this::getId), - new Column().header("RL").minWidth(4).maxWidth(4).with(this::getLR), - new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) - .dataAlign(HorizontalAlign.CENTER) - .with(r -> r.state), - new Column().header("RATE").headerAlign(HorizontalAlign.CENTER) - .dataAlign(HorizontalAlign.RIGHT) - .with(this::getRate), - new Column().header("SINCE").headerAlign(HorizontalAlign.CENTER) - .dataAlign(HorizontalAlign.RIGHT) - .with(this::getSince), - new Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT) - .maxWidth(80, OverflowBehaviour.NEWLINE) - .with(r -> r.message)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("age", r.ago); + jo.put("id", getId(r)); + jo.put("rl", getLR(r)); + jo.put("status", r.state); + jo.put("rate", getRate(r)); + jo.put("since", getSince(r)); + jo.put("message", r.message); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago), + new Column().header("ID").dataAlign(HorizontalAlign.LEFT) + .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(this::getId), + new Column().header("RL").minWidth(4).maxWidth(4).with(this::getLR), + new Column().header("STATUS").headerAlign(HorizontalAlign.CENTER) + .dataAlign(HorizontalAlign.CENTER) + .with(r -> r.state), + new Column().header("RATE").headerAlign(HorizontalAlign.CENTER) + .dataAlign(HorizontalAlign.RIGHT) + .with(this::getRate), + new Column().header("SINCE").headerAlign(HorizontalAlign.CENTER) + .dataAlign(HorizontalAlign.RIGHT) + .with(this::getSince), + new Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT) + .maxWidth(80, OverflowBehaviour.NEWLINE) + .with(r -> r.message)))); + } } if (trace) { var traces diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java index 4f16fbee5a58..bccce5d732fa 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -104,19 +106,37 @@ public class ListInflight extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.exchangeId), - new Column().header("REMOTE").visible(remoteVisible.get()).dataAlign(HorizontalAlign.CENTER) - .with(this::getRemote), - new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.atRouteId), - new Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.nodeId), - new Column().header("ELAPSED").dataAlign(HorizontalAlign.RIGHT).with(this::getElapsed), - new Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("exchangeId", r.exchangeId); + jo.put("remote", r.fromRemoteEndpoint); + jo.put("route", r.atRouteId); + jo.put("id", r.nodeId); + jo.put("elapsed", getElapsed(r)); + jo.put("duration", getDuration(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.exchangeId), + new Column().header("REMOTE").visible(remoteVisible.get()).dataAlign(HorizontalAlign.CENTER) + .with(this::getRemote), + new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT) + .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.atRouteId), + new Column().header("ID").dataAlign(HorizontalAlign.LEFT) + .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.nodeId), + new Column().header("ELAPSED").dataAlign(HorizontalAlign.RIGHT).with(this::getElapsed), + new Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java index aab3db945234..8260ac6afd81 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -97,21 +99,40 @@ public class ListInternalTask extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("TASK").dataAlign(HorizontalAlign.LEFT).with(r -> r.task), - new Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(r -> r.status), - new Column().header("ATTEMPT").dataAlign(HorizontalAlign.LEFT).with(r -> "" + r.attempts), - new Column().header("DELAY").dataAlign(HorizontalAlign.LEFT).with(r -> "" + r.delay), - new Column().header("ELAPSED").dataAlign(HorizontalAlign.LEFT).with(this::getElapsed), - new Column().header("FIRST").dataAlign(HorizontalAlign.LEFT).with(this::getFirst), - new Column().header("LAST").dataAlign(HorizontalAlign.LEFT).with(this::getLast), - new Column().header("NEXT").dataAlign(HorizontalAlign.LEFT).with(this::getNext), - new Column().header("FAILURE").dataAlign(HorizontalAlign.LEFT) - .maxWidth(140, OverflowBehaviour.NEWLINE) - .with(r -> r.error)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("task", r.task); + jo.put("status", r.status); + jo.put("attempts", r.attempts); + jo.put("delay", r.delay); + jo.put("elapsed", getElapsed(r)); + jo.put("first", getFirst(r)); + jo.put("last", getLast(r)); + jo.put("next", getNext(r)); + jo.put("failure", r.error); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("TASK").dataAlign(HorizontalAlign.LEFT).with(r -> r.task), + new Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(r -> r.status), + new Column().header("ATTEMPT").dataAlign(HorizontalAlign.LEFT).with(r -> "" + r.attempts), + new Column().header("DELAY").dataAlign(HorizontalAlign.LEFT).with(r -> "" + r.delay), + new Column().header("ELAPSED").dataAlign(HorizontalAlign.LEFT).with(this::getElapsed), + new Column().header("FIRST").dataAlign(HorizontalAlign.LEFT).with(this::getFirst), + new Column().header("LAST").dataAlign(HorizontalAlign.LEFT).with(this::getLast), + new Column().header("NEXT").dataAlign(HorizontalAlign.LEFT).with(this::getNext), + new Column().header("FAILURE").dataAlign(HorizontalAlign.LEFT) + .maxWidth(140, OverflowBehaviour.NEWLINE) + .with(r -> r.error)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java index 8885e4828349..490a994c30fb 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -179,27 +180,48 @@ public class ListKafka extends ProcessWatchCommand { } if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId), - new Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(this::getState), - new Column().header("GROUP-ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.groupId), - new Column().header("TOPIC").dataAlign(HorizontalAlign.RIGHT).with(r -> r.lastTopic), - new Column().header("PARTITION").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + r.lastPartition), - new Column().header("OFFSET").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + r.lastOffset), - new Column().header("COMMITTED").visible(committed).dataAlign(HorizontalAlign.RIGHT) - .with(this::getCommitted), - new Column().header("ERROR").dataAlign(HorizontalAlign.LEFT) - .maxWidth(60, OverflowBehaviour.NEWLINE) - .with(this::getLastError), - new Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT) - .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(this::getUri), - new Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT) - .maxWidth(140, OverflowBehaviour.NEWLINE) - .with(this::getUri)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("route", getRouteId(r)); + jo.put("status", getState(r)); + jo.put("groupId", r.groupId); + jo.put("topic", r.lastTopic); + jo.put("partition", r.lastPartition); + jo.put("offset", r.lastOffset); + if (committed) { + jo.put("committed", getCommitted(r)); + } + jo.put("error", getLastError(r)); + jo.put("endpoint", getUri(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId), + new Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(this::getState), + new Column().header("GROUP-ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.groupId), + new Column().header("TOPIC").dataAlign(HorizontalAlign.RIGHT).with(r -> r.lastTopic), + new Column().header("PARTITION").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + r.lastPartition), + new Column().header("OFFSET").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + r.lastOffset), + new Column().header("COMMITTED").visible(committed).dataAlign(HorizontalAlign.RIGHT) + .with(this::getCommitted), + new Column().header("ERROR").dataAlign(HorizontalAlign.LEFT) + .maxWidth(60, OverflowBehaviour.NEWLINE) + .with(this::getLastError), + new Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT) + .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(this::getUri), + new Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT) + .maxWidth(140, OverflowBehaviour.NEWLINE) + .with(this::getUri)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java index ca95c89c39f1..f7c6f1269ade 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.StringJoiner; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -203,26 +205,46 @@ public class ListMetric extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type), - new Column().header("METRIC").dataAlign(HorizontalAlign.LEFT).maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.metricName), - new Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.metricId), - new Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(r -> getNumber(r.count)), - new Column().header("MEAN").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(r -> getNumber(r.mean)), - new Column().header("MAX").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(r -> getNumber(r.max)), - new Column().header("TOTAL").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(r -> getNumber(r.total)), - new Column().header("TAGS").visible(tags).dataAlign(HorizontalAlign.LEFT) - .maxWidth(60, OverflowBehaviour.NEWLINE) - .with(r -> r.tags)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("type", r.type); + jo.put("metric", r.metricName); + jo.put("id", r.metricId); + jo.put("value", r.count); + jo.put("mean", r.mean); + jo.put("max", r.max); + jo.put("total", r.total); + jo.put("tags", r.tags); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type), + new Column().header("METRIC").dataAlign(HorizontalAlign.LEFT) + .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.metricName), + new Column().header("ID").dataAlign(HorizontalAlign.LEFT) + .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.metricId), + new Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) + .with(r -> getNumber(r.count)), + new Column().header("MEAN").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) + .with(r -> getNumber(r.mean)), + new Column().header("MAX").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) + .with(r -> getNumber(r.max)), + new Column().header("TOTAL").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) + .with(r -> getNumber(r.total)), + new Column().header("TAGS").visible(tags).dataAlign(HorizontalAlign.LEFT) + .maxWidth(60, OverflowBehaviour.NEWLINE) + .with(r -> r.tags)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java index 8c63a8fef0f1..cdabe64a1101 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.StringJoiner; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -118,13 +120,27 @@ public class ListPlatformHttp extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url), - new Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.verbs), - new Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("url", r.url); + jo.put("method", r.verbs); + jo.put("consumes", r.consumes); + jo.put("produces", r.produces); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url), + new Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.verbs), + new Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java index 4881e6d98d70..d1d68372ec82 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java @@ -53,10 +53,6 @@ public class ListProcess extends ProcessWatchCommand { description = "List only pid in the output") boolean pid; - @CommandLine.Option(names = { "--json" }, - description = "Output in JSON Format") - boolean jsonOutput; - public ListProcess(CamelJBangMain main) { super(main); } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java index c19723fe8929..98bb30161abe 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.support.PatternHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -136,6 +138,20 @@ public class ListProducer extends ProcessWatchCommand { } protected void printTable(List<Row> rows) { + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("age", r.age); + jo.put("id", r.id); + jo.put("status", getState(r)); + jo.put("type", getType(r)); + jo.put("uri", r.uri); + return jo; + }).collect(Collectors.toList()))); + return; + } printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java index 92809ff0285d..c2130dd622a6 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.util.SensitiveUtils; import org.apache.camel.util.StringHelper; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -133,22 +135,40 @@ public class ListProperties extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("LOCATION").dataAlign(HorizontalAlign.LEFT).maxWidth(80, OverflowBehaviour.NEWLINE) - .with(r -> r.loc), - new Column().header("KEY").dataAlign(HorizontalAlign.LEFT).maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.key), - new Column().header("VALUE").dataAlign(HorizontalAlign.LEFT).maxWidth(80, OverflowBehaviour.NEWLINE) - .with(r -> "" + r.value), - new Column().header("FUNCTION").visible(verbose).dataAlign(HorizontalAlign.LEFT) - .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(this::getFunction), - new Column().header("ORIGINAL VALUE").visible(verbose).dataAlign(HorizontalAlign.LEFT) - .maxWidth(80, OverflowBehaviour.NEWLINE) - .with(r -> "" + r.originalValue)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("location", r.loc); + jo.put("key", r.key); + jo.put("value", "" + r.value); + jo.put("function", getFunction(r)); + jo.put("originalValue", "" + r.originalValue); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("LOCATION").dataAlign(HorizontalAlign.LEFT) + .maxWidth(80, OverflowBehaviour.NEWLINE) + .with(r -> r.loc), + new Column().header("KEY").dataAlign(HorizontalAlign.LEFT) + .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.key), + new Column().header("VALUE").dataAlign(HorizontalAlign.LEFT) + .maxWidth(80, OverflowBehaviour.NEWLINE) + .with(r -> "" + r.value), + new Column().header("FUNCTION").visible(verbose).dataAlign(HorizontalAlign.LEFT) + .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(this::getFunction), + new Column().header("ORIGINAL VALUE").visible(verbose).dataAlign(HorizontalAlign.LEFT) + .maxWidth(80, OverflowBehaviour.NEWLINE) + .with(r -> "" + r.originalValue)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java index 31ff9e539e76..5c277debad0b 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.StringJoiner; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -32,6 +33,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -102,16 +104,31 @@ public class ListRest extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url), - new Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.method), - new Column().header("FIRST").visible(verbose).dataAlign(HorizontalAlign.LEFT).with(this::getKind), - new Column().header("DESCRIPTION").visible(verbose).maxWidth(40, OverflowBehaviour.NEWLINE) - .dataAlign(HorizontalAlign.LEFT).with(r -> r.description), - new Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("url", r.url); + jo.put("method", r.method); + jo.put("consumes", r.consumes); + jo.put("produces", r.produces); + jo.put("description", r.description); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url), + new Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.method), + new Column().header("FIRST").visible(verbose).dataAlign(HorizontalAlign.LEFT).with(this::getKind), + new Column().header("DESCRIPTION").visible(verbose).maxWidth(40, OverflowBehaviour.NEWLINE) + .dataAlign(HorizontalAlign.LEFT).with(r -> r.description), + new Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java index c98f55ad10e7..4a70bed96302 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.StringJoiner; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -112,23 +114,41 @@ public class ListService extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> r.component), - new Column().header("DIR").dataAlign(HorizontalAlign.LEFT).with(r -> r.direction), - new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId), - new Column().header("PROTOCOL").dataAlign(HorizontalAlign.LEFT).with(this::getProtocol), - new Column().header("SERVICE").dataAlign(HorizontalAlign.LEFT).with(this::getService), - new Column().header("METADATA").visible(metadata).dataAlign(HorizontalAlign.LEFT).with(this::getMetadata), - new Column().header("TOTAL").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + r.hits), - new Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT) - .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(this::getUri), - new Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT) - .maxWidth(140, OverflowBehaviour.NEWLINE) - .with(this::getUri)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("component", r.component); + jo.put("direction", r.direction); + jo.put("routeId", getRouteId(r)); + jo.put("protocol", getProtocol(r)); + jo.put("service", getService(r)); + jo.put("total", r.hits); + jo.put("endpoint", r.endpointUri); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> r.component), + new Column().header("DIR").dataAlign(HorizontalAlign.LEFT).with(r -> r.direction), + new Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId), + new Column().header("PROTOCOL").dataAlign(HorizontalAlign.LEFT).with(this::getProtocol), + new Column().header("SERVICE").dataAlign(HorizontalAlign.LEFT).with(this::getService), + new Column().header("METADATA").visible(metadata).dataAlign(HorizontalAlign.LEFT) + .with(this::getMetadata), + new Column().header("TOTAL").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + r.hits), + new Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT) + .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(this::getUri), + new Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT) + .maxWidth(140, OverflowBehaviour.NEWLINE) + .with(this::getUri)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java index cb66c00d342d..dfd20b89b233 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -56,6 +58,10 @@ public class ListTransformer extends ProcessBaseCommand { description = "Sort by pid, name, age or total", defaultValue = "pid") String sort; + @CommandLine.Option(names = { "--json" }, + description = "Output in JSON Format") + boolean jsonOutput; + public ListTransformer(CamelJBangMain main) { super(main); } @@ -104,6 +110,19 @@ public class ListTransformer extends ProcessBaseCommand { } protected void printTable(List<Row> rows) { + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("age", r.age); + jo.put("dataType", r.dataTypeName); + jo.put("from", r.dataTypeFrom); + jo.put("to", r.dataTypeTo); + return jo; + }).collect(Collectors.toList()))); + return; + } printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java index fe3809a40a22..5efda04fe33b 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -29,6 +30,7 @@ import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -104,17 +106,32 @@ public class ListVariable extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("REPO").headerAlign(HorizontalAlign.CENTER).with(r -> r.id), - new Column().header("TYPE").headerAlign(HorizontalAlign.CENTER) - .maxWidth(40, OverflowBehaviour.ELLIPSIS_LEFT).with(r -> r.type), - new Column().header("KEY").dataAlign(HorizontalAlign.LEFT).maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.key), - new Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).maxWidth(80, OverflowBehaviour.NEWLINE) - .with(this::getValue)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("repo", r.id); + jo.put("type", r.type); + jo.put("key", r.key); + jo.put("value", getValue(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("REPO").headerAlign(HorizontalAlign.CENTER).with(r -> r.id), + new Column().header("TYPE").headerAlign(HorizontalAlign.CENTER) + .maxWidth(40, OverflowBehaviour.ELLIPSIS_LEFT).with(r -> r.type), + new Column().header("KEY").dataAlign(HorizontalAlign.LEFT) + .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.key), + new Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).maxWidth(80, OverflowBehaviour.NEWLINE) + .with(this::getValue)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java index 5269b0c3cab2..8acb4a6ba2b6 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; import picocli.CommandLine; import picocli.CommandLine.Command; @@ -187,17 +189,34 @@ public class ListVault extends ProcessWatchCommand { rows.sort(this::sortRow); if (!rows.isEmpty()) { - printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( - new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), - new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.name), - new Column().header("VAULT").dataAlign(HorizontalAlign.LEFT).with(r -> r.vault), - new Column().header("REGION").dataAlign(HorizontalAlign.LEFT).with(r -> r.region), - new Column().header("SECRET").dataAlign(HorizontalAlign.LEFT).maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) - .with(r -> r.secret), - new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(this::getAgo), - new Column().header("UPDATE").headerAlign(HorizontalAlign.LEFT).with(this::getReloadAgo), - new Column().header("CHECK").headerAlign(HorizontalAlign.LEFT).with(this::getCheckAgo)))); + if (jsonOutput) { + printer().println(Jsoner.serialize(rows.stream().map(r -> { + JsonObject jo = new JsonObject(); + jo.put("pid", r.pid); + jo.put("name", r.name); + jo.put("vault", r.vault); + jo.put("region", r.region); + jo.put("secret", r.secret); + jo.put("age", getAgo(r)); + jo.put("update", getReloadAgo(r)); + jo.put("check", getCheckAgo(r)); + return jo; + }).collect(Collectors.toList()))); + } else { + printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( + new Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid), + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT) + .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.name), + new Column().header("VAULT").dataAlign(HorizontalAlign.LEFT).with(r -> r.vault), + new Column().header("REGION").dataAlign(HorizontalAlign.LEFT).with(r -> r.region), + new Column().header("SECRET").dataAlign(HorizontalAlign.LEFT) + .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(r -> r.secret), + new Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(this::getAgo), + new Column().header("UPDATE").headerAlign(HorizontalAlign.LEFT).with(this::getReloadAgo), + new Column().header("CHECK").headerAlign(HorizontalAlign.LEFT).with(this::getCheckAgo)))); + } } return 0; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java index d9559a9f5a1c..ce37b306577c 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java @@ -34,6 +34,10 @@ abstract class ProcessWatchCommand extends ProcessBaseCommand { description = "Execute periodically and showing output fullscreen") boolean watch; + @CommandLine.Option(names = { "--json" }, + description = "Output in JSON Format") + boolean jsonOutput; + private CommandHelper.ReadConsoleTask waitUserTask; public ProcessWatchCommand(CamelJBangMain main) {
