You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/08/22 17:10:44 UTC

[camel] 05/05: CAMEL-18419: camel-management - Add last exchange received timestamp

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 853a05159d8d1d77f5ea564825219228085262c5
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 22 17:00:56 2022 +0200

    CAMEL-18419: camel-management - Add last exchange received timestamp
---
 .../apache/camel/impl/console/ContextDevConsole.java    | 16 ++++++++++++++--
 .../mbean/ManagedPerformanceCounterMBean.java           |  3 +++
 .../camel/management/CompositePerformanceCounter.java   |  6 +++---
 .../management/DefaultInstrumentationProcessor.java     |  2 +-
 .../camel/management/DelegatePerformanceCounter.java    |  4 ++--
 .../org/apache/camel/management/PerformanceCounter.java |  3 ++-
 .../management/mbean/ManagedPerformanceCounter.java     | 17 ++++++++++++++++-
 .../dsl/jbang/core/commands/process/CamelStatus.java    |  6 ++++++
 8 files changed, 47 insertions(+), 10 deletions(-)

diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
index 5ae52f460fc..a9e33fd913f 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.impl.console;
 
+import java.util.Date;
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.camel.api.management.ManagedCamelContext;
@@ -35,7 +37,7 @@ public class ContextDevConsole extends AbstractDevConsole {
         StringBuilder sb = new StringBuilder();
 
         sb.append(String.format("Apache Camel %s %s (%s) uptime %s", getCamelContext().getVersion(),
-                getCamelContext().getStatus().statusLowerCase(), getCamelContext().getName(), getCamelContext().getUptime()));
+                getCamelContext().getStatus().name().toLowerCase(Locale.ROOT), getCamelContext().getName(), getCamelContext().getUptime()));
         sb.append("\n");
 
         ManagedCamelContext mcc = getCamelContext().getExtension(ManagedCamelContext.class);
@@ -47,6 +49,11 @@ public class ContextDevConsole extends AbstractDevConsole {
             sb.append(String.format("\n    Mean Time: %s", TimeUtils.printDuration(mb.getMeanProcessingTime(), true)));
             sb.append(String.format("\n    Max Time: %s", TimeUtils.printDuration(mb.getMaxProcessingTime(), true)));
             sb.append(String.format("\n    Min Time: %s", TimeUtils.printDuration(mb.getMinProcessingTime(), true)));
+            Date last = mb.getLastExchangeCreatedTimestamp();
+            if (last != null) {
+                String ago = TimeUtils.printSince(last.getTime());
+                sb.append(String.format("\n    Since Last: %s", ago));
+            }
             sb.append("\n");
         }
 
@@ -57,7 +64,7 @@ public class ContextDevConsole extends AbstractDevConsole {
         JsonObject root = new JsonObject();
         root.put("name", getCamelContext().getName());
         root.put("version", getCamelContext().getVersion());
-        root.put("state", getCamelContext().getStatus());
+        root.put("state", getCamelContext().getStatus().name());
         root.put("uptime", getCamelContext().getUptime());
 
         ManagedCamelContext mcc = getCamelContext().getExtension(ManagedCamelContext.class);
@@ -70,6 +77,11 @@ public class ContextDevConsole extends AbstractDevConsole {
             stats.put("meanProcessingTime", mb.getMeanProcessingTime());
             stats.put("maxProcessingTime", mb.getMaxProcessingTime());
             stats.put("minProcessingTime", mb.getMinProcessingTime());
+            Date last = mb.getLastExchangeCreatedTimestamp();
+            if (last != null) {
+                String ago = TimeUtils.printSince(last.getTime());
+                stats.put("sinceLastExchange", ago);
+            }
             root.put("statistics", stats);
         }
 
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedPerformanceCounterMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedPerformanceCounterMBean.java
index 0220a14d698..e6e6d2c48f9 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedPerformanceCounterMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedPerformanceCounterMBean.java
@@ -59,6 +59,9 @@ public interface ManagedPerformanceCounterMBean extends ManagedCounterMBean {
     @ManagedAttribute(description = "Delta Processing Time [milliseconds]")
     long getDeltaProcessingTime();
 
+    @ManagedAttribute(description = "Last Exchange Created Timestamp")
+    Date getLastExchangeCreatedTimestamp();
+
     @ManagedAttribute(description = "Last Exchange Completed Timestamp")
     Date getLastExchangeCompletedTimestamp();
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/CompositePerformanceCounter.java b/core/camel-management/src/main/java/org/apache/camel/management/CompositePerformanceCounter.java
index c2627c4a51e..6caf8891554 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/CompositePerformanceCounter.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/CompositePerformanceCounter.java
@@ -36,12 +36,12 @@ public class CompositePerformanceCounter implements PerformanceCounter {
     }
 
     @Override
-    public void processExchange(Exchange exchange) {
+    public void processExchange(Exchange exchange, String type) {
         if (counter1.isStatisticsEnabled()) {
-            counter1.processExchange(exchange);
+            counter1.processExchange(exchange, type);
         }
         if (counter2.isStatisticsEnabled()) {
-            counter2.processExchange(exchange);
+            counter2.processExchange(exchange, type);
         }
     }
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/DefaultInstrumentationProcessor.java b/core/camel-management/src/main/java/org/apache/camel/management/DefaultInstrumentationProcessor.java
index a174158d72e..a514d59de60 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/DefaultInstrumentationProcessor.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/DefaultInstrumentationProcessor.java
@@ -91,7 +91,7 @@ public class DefaultInstrumentationProcessor extends DelegateAsyncProcessor
     }
 
     protected void beginTime(Exchange exchange) {
-        counter.processExchange(exchange);
+        counter.processExchange(exchange, type);
     }
 
     protected void recordTime(Exchange exchange, long duration) {
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/DelegatePerformanceCounter.java b/core/camel-management/src/main/java/org/apache/camel/management/DelegatePerformanceCounter.java
index eb8235f2613..533300687bb 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/DelegatePerformanceCounter.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/DelegatePerformanceCounter.java
@@ -44,9 +44,9 @@ public class DelegatePerformanceCounter implements PerformanceCounter {
     }
 
     @Override
-    public void processExchange(Exchange exchange) {
+    public void processExchange(Exchange exchange, String type) {
         if (counter != null) {
-            counter.processExchange(exchange);
+            counter.processExchange(exchange, type);
         }
     }
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/PerformanceCounter.java b/core/camel-management/src/main/java/org/apache/camel/management/PerformanceCounter.java
index fdfa23676d9..52e96dc3ffb 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/PerformanceCounter.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/PerformanceCounter.java
@@ -27,8 +27,9 @@ public interface PerformanceCounter {
      * Executed when an {@link org.apache.camel.Exchange} is about to be processed.
      *
      * @param exchange the exchange
+     * @param type the node type
      */
-    void processExchange(Exchange exchange);
+    void processExchange(Exchange exchange, String type);
 
     /**
      * Executed when an {@link org.apache.camel.Exchange} is complete.
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
index c2d997b30e1..d97d9738726 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
@@ -48,6 +48,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
     private String firstExchangeCompletedExchangeId;
     private Statistic firstExchangeFailureTimestamp;
     private String firstExchangeFailureExchangeId;
+    private Statistic lastExchangeCreatedTimestamp;
     private Statistic lastExchangeCompletedTimestamp;
     private String lastExchangeCompletedExchangeId;
     private Statistic lastExchangeFailureTimestamp;
@@ -74,6 +75,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
 
         this.firstExchangeCompletedTimestamp = new StatisticValue();
         this.firstExchangeFailureTimestamp = new StatisticValue();
+        this.lastExchangeCreatedTimestamp = new StatisticValue();
         this.lastExchangeCompletedTimestamp = new StatisticValue();
         this.lastExchangeFailureTimestamp = new StatisticValue();
     }
@@ -97,6 +99,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
         firstExchangeCompletedExchangeId = null;
         firstExchangeFailureTimestamp.reset();
         firstExchangeFailureExchangeId = null;
+        lastExchangeCreatedTimestamp.reset();
         lastExchangeCompletedTimestamp.reset();
         lastExchangeCompletedExchangeId = null;
         lastExchangeFailureTimestamp.reset();
@@ -163,6 +166,12 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
         return deltaProcessingTime.getValue();
     }
 
+    @Override
+    public Date getLastExchangeCreatedTimestamp() {
+        long value = lastExchangeCreatedTimestamp.getValue();
+        return value > 0 ? new Date(value) : null;
+    }
+
     @Override
     public Date getLastExchangeCompletedTimestamp() {
         long value = lastExchangeCompletedTimestamp.getValue();
@@ -218,8 +227,12 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
     }
 
     @Override
-    public void processExchange(Exchange exchange) {
+    public void processExchange(Exchange exchange, String type) {
         exchangesInflight.increment();
+        if ("route".equals(type)) {
+            long now = System.currentTimeMillis();
+            lastExchangeCreatedTimestamp.updateValue(now);
+        }
     }
 
     @Override
@@ -311,6 +324,8 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
             sb.append(String.format(" firstExchangeFailureTimestamp=\"%s\"",
                     dateAsString(firstExchangeFailureTimestamp.getValue())));
             sb.append(String.format(" firstExchangeFailureExchangeId=\"%s\"", nullSafe(firstExchangeFailureExchangeId)));
+            sb.append(String.format(" lastExchangeCreatedTimestamp=\"%s\"",
+                    dateAsString(lastExchangeCreatedTimestamp.getValue())));
             sb.append(String.format(" lastExchangeCompletedTimestamp=\"%s\"",
                     dateAsString(lastExchangeCompletedTimestamp.getValue())));
             sb.append(String.format(" lastExchangeCompletedExchangeId=\"%s\"", nullSafe(lastExchangeCompletedExchangeId)));
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
index 7b4dcabe831..a92c3edd2a5 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelStatus.java
@@ -78,6 +78,10 @@ public class CamelStatus extends ProcessBaseCommand {
                                 row.total = stats.get("exchangesTotal").toString();
                                 row.inflight = stats.get("exchangesInflight").toString();
                                 row.failed = stats.get("exchangesFailed").toString();
+                                Object last = stats.get("sinceLastExchange");
+                                if (last != null) {
+                                    row.sinceLast = last.toString();
+                                }
                             }
                         }
                         rows.add(row);
@@ -90,6 +94,7 @@ public class CamelStatus extends ProcessBaseCommand {
                     new Column().header("Name").maxColumnWidth(30).with(r -> r.name),
                     new Column().header("State").with(r -> r.state),
                     new Column().header("Age").with(r -> r.ago),
+                    new Column().header("Since Last").with(r -> r.sinceLast),
                     new Column().header("Total #").with(r -> r.total),
                     new Column().header("Failed #").with(r -> r.failed),
                     new Column().header("Inflight #").with(r -> r.inflight)
@@ -122,6 +127,7 @@ public class CamelStatus extends ProcessBaseCommand {
         String total;
         String failed;
         String inflight;
+        String sinceLast;
     }
 
 }