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

Reply via email to