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
The following commit(s) were added to refs/heads/main by this push: new a68e412c751 CAMEL-20164: camel-jbang - Add camel get consumer command a68e412c751 is described below commit a68e412c7512b26a027a9baf5e07862c083b5ee5 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Dec 1 13:31:50 2023 +0100 CAMEL-20164: camel-jbang - Add camel get consumer command --- .../camel/impl/console/ConsumerDevConsole.java | 30 ++++++++++++++++ .../jbang/core/commands/process/ListConsumer.java | 42 ++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsumerDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsumerDevConsole.java index 50db3511a6f..97e2f81cd37 100644 --- a/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsumerDevConsole.java +++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsumerDevConsole.java @@ -18,6 +18,7 @@ package org.apache.camel.impl.console; import java.lang.management.ManagementFactory; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -27,9 +28,11 @@ import javax.management.ObjectName; import org.apache.camel.Route; import org.apache.camel.api.management.ManagedCamelContext; import org.apache.camel.api.management.mbean.ManagedConsumerMBean; +import org.apache.camel.api.management.mbean.ManagedRouteMBean; import org.apache.camel.api.management.mbean.ManagedSchedulePollConsumerMBean; import org.apache.camel.spi.annotations.DevConsole; import org.apache.camel.support.console.AbstractDevConsole; +import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonObject; @DevConsole("consumer") @@ -135,6 +138,7 @@ public class ConsumerDevConsole extends AbstractDevConsole { if (mcc != null) { for (Route route : getCamelContext().getRoutes()) { String id = route.getId(); + ManagedRouteMBean mr = mcc.getManagedRoute(id); ManagedConsumerMBean mc = mcc.getManagedConsumer(id); if (mc != null) { JsonObject jo = new JsonObject(); @@ -207,6 +211,32 @@ public class ConsumerDevConsole extends AbstractDevConsole { // ignore } } + + if (mr != null) { + JsonObject stats = new JsonObject(); + stats.put("exchangesTotal", mr.getExchangesTotal()); + stats.put("exchangesFailed", mr.getExchangesFailed()); + stats.put("exchangesInflight", mr.getExchangesInflight()); + stats.put("meanProcessingTime", mr.getMeanProcessingTime()); + stats.put("maxProcessingTime", mr.getMaxProcessingTime()); + stats.put("minProcessingTime", mr.getMinProcessingTime()); + if (mr.getExchangesTotal() > 0) { + stats.put("lastProcessingTime", mr.getLastProcessingTime()); + stats.put("deltaProcessingTime", mr.getDeltaProcessingTime()); + } + Date last = mr.getLastExchangeCompletedTimestamp(); + if (last != null) { + String ago = TimeUtils.printSince(last.getTime()); + stats.put("sinceLastCompletedExchange", ago); + } + last = mr.getLastExchangeFailureTimestamp(); + if (last != null) { + String ago = TimeUtils.printSince(last.getTime()); + stats.put("sinceLastFailedExchange", ago); + } + jo.put("statistics", stats); + } + list.add(jo); } } 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 1c7ed264db8..6121497385d 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 @@ -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.Map; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -103,8 +104,25 @@ public class ListConsumer extends ProcessWatchCommand { row.inflight = o.getInteger("inflight"); row.polling = o.getBoolean("polling"); row.totalCounter = o.getLong("totalCounter"); + row.delay = o.getLong("delay"); + row.period = o.getLong("period"); row.uptime = extractSince(ph); row.age = TimeUtils.printSince(row.uptime); + Map<String, ?> stats = o.getMap("statistics"); + if (stats != null) { + Object last = stats.get("sinceLastCreatedExchange"); + if (last != null) { + row.sinceLastStarted = last.toString(); + } + last = stats.get("sinceLastCompletedExchange"); + if (last != null) { + row.sinceLastCompleted = last.toString(); + } + last = stats.get("sinceLastFailedExchange"); + if (last != null) { + row.sinceLastFailed = last.toString(); + } + } boolean add = true; if (filter != null) { String f = filter; @@ -157,6 +175,8 @@ public class ListConsumer extends ProcessWatchCommand { .with(this::getType), new Column().header("INFLIGHT").with(r -> "" + r.inflight), new Column().header("POLL").with(this::getTotal), + new Column().header("PERIOD").visible(scheduled).with(this::getPeriod), + new Column().header("SINCE-LAST").with(this::getSinceLast), new Column().header("URI").visible(!wideUri).dataAlign(HorizontalAlign.LEFT) .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT) .with(this::getUri), @@ -198,6 +218,23 @@ public class ListConsumer extends ProcessWatchCommand { return ""; } + private String getPeriod(Row r) { + // favour using period, fallback to delay + if (r.period != null) { + return String.valueOf(r.period); + } else if (r.delay != null) { + return String.valueOf(r.delay); + } + return ""; + } + + protected String getSinceLast(Row r) { + String s1 = r.sinceLastStarted != null ? r.sinceLastStarted : "-"; + String s2 = r.sinceLastCompleted != null ? r.sinceLastCompleted : "-"; + String s3 = r.sinceLastFailed != null ? r.sinceLastFailed : "-"; + return s1 + "/" + s2 + "/" + s3; + } + protected int sortRow(Row o1, Row o2) { String s = sort; int negate = 1; @@ -230,6 +267,11 @@ public class ListConsumer extends ProcessWatchCommand { int inflight; Boolean polling; Long totalCounter; + Long delay; + Long period; + String sinceLastStarted; + String sinceLastCompleted; + String sinceLastFailed; } }