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 2023/12/03 10:01:24 UTC

(camel) branch main updated: CAMEL-20179: camel-core - Add idleSince attribute to JMX (#12296)

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 077717c2b4f CAMEL-20179: camel-core - Add idleSince attribute to JMX (#12296)
077717c2b4f is described below

commit 077717c2b4f31e50a0a2ca0baa553a5e4b66c6bc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Dec 3 11:01:17 2023 +0100

    CAMEL-20179: camel-core - Add idleSince attribute to JMX (#12296)
---
 .../apache/camel/impl/console/ConsumerDevConsole.java   |  1 +
 .../apache/camel/impl/console/ContextDevConsole.java    |  7 +++++++
 .../org/apache/camel/impl/console/RouteDevConsole.java  | 14 ++++++++++++++
 .../mbean/ManagedPerformanceCounterMBean.java           |  3 +++
 .../management/mbean/ManagedPerformanceCounter.java     | 17 +++++++++++++++++
 5 files changed, 42 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 97e2f81cd37..4ff91adab1d 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
@@ -214,6 +214,7 @@ public class ConsumerDevConsole extends AbstractDevConsole {
 
                     if (mr != null) {
                         JsonObject stats = new JsonObject();
+                        stats.put("idleSince", mr.getIdleSince());
                         stats.put("exchangesTotal", mr.getExchangesTotal());
                         stats.put("exchangesFailed", mr.getExchangesFailed());
                         stats.put("exchangesInflight", mr.getExchangesInflight());
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 cf759bdb9ac..8d64127d5c8 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
@@ -69,6 +69,12 @@ public class ContextDevConsole extends AbstractDevConsole {
                 sb.append(String.format("\n    Total: %s", mb.getExchangesTotal()));
                 sb.append(String.format("\n    Failed: %s", mb.getExchangesFailed()));
                 sb.append(String.format("\n    Inflight: %s", mb.getExchangesInflight()));
+                long idle = mb.getIdleSince();
+                if (idle > 0) {
+                    sb.append(String.format("\n    Idle Since: %s", TimeUtils.printDuration(idle)));
+                } else {
+                    sb.append(String.format("\n    Idle Since: %s", ""));
+                }
                 sb.append(String.format("\n    Reloaded: %s", reloaded));
                 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)));
@@ -134,6 +140,7 @@ public class ContextDevConsole extends AbstractDevConsole {
                 if (!thp.isEmpty()) {
                     stats.put("exchangesThroughput", thp);
                 }
+                stats.put("idleSince", mb.getIdleSince());
                 stats.put("exchangesTotal", mb.getExchangesTotal());
                 stats.put("exchangesFailed", mb.getExchangesFailed());
                 stats.put("exchangesInflight", mb.getExchangesInflight());
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
index 69c3b25f22a..a166ccb6585 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
@@ -95,6 +95,12 @@ public class RouteDevConsole extends AbstractDevConsole {
             sb.append(String.format("\n    Total: %s", mrb.getExchangesTotal()));
             sb.append(String.format("\n    Failed: %s", mrb.getExchangesFailed()));
             sb.append(String.format("\n    Inflight: %s", mrb.getExchangesInflight()));
+            long idle = mrb.getIdleSince();
+            if (idle > 0) {
+                sb.append(String.format("\n    Idle Since: %s", TimeUtils.printDuration(idle)));
+            } else {
+                sb.append(String.format("\n    Idle Since: %s", ""));
+            }
             sb.append(String.format("\n    Mean Time: %s", TimeUtils.printDuration(mrb.getMeanProcessingTime(), true)));
             sb.append(String.format("\n    Max Time: %s", TimeUtils.printDuration(mrb.getMaxProcessingTime(), true)));
             sb.append(String.format("\n    Min Time: %s", TimeUtils.printDuration(mrb.getMinProcessingTime(), true)));
@@ -166,6 +172,12 @@ public class RouteDevConsole extends AbstractDevConsole {
             sb.append(String.format("\n        Total: %s", mp.getExchangesTotal()));
             sb.append(String.format("\n        Failed: %s", mp.getExchangesFailed()));
             sb.append(String.format("\n        Inflight: %s", mp.getExchangesInflight()));
+            long idle = mp.getIdleSince();
+            if (idle > 0) {
+                sb.append(String.format("\n        Idle Since: %s", TimeUtils.printDuration(idle)));
+            } else {
+                sb.append(String.format("\n        Idle Since: %s", ""));
+            }
             sb.append(String.format("\n        Mean Time: %s", TimeUtils.printDuration(mp.getMeanProcessingTime(), true)));
             sb.append(String.format("\n        Max Time: %s", TimeUtils.printDuration(mp.getMaxProcessingTime(), true)));
             sb.append(String.format("\n        Min Time: %s", TimeUtils.printDuration(mp.getMinProcessingTime(), true)));
@@ -222,6 +234,7 @@ public class RouteDevConsole extends AbstractDevConsole {
             if (!thp.isEmpty()) {
                 stats.put("exchangesThroughput", thp);
             }
+            stats.put("idleSince", mrb.getIdleSince());
             stats.put("exchangesTotal", mrb.getExchangesTotal());
             stats.put("exchangesFailed", mrb.getExchangesFailed());
             stats.put("exchangesInflight", mrb.getExchangesInflight());
@@ -309,6 +322,7 @@ public class RouteDevConsole extends AbstractDevConsole {
             jo.put("processor", mp.getProcessorName());
             jo.put("level", mp.getLevel());
             JsonObject stats = new JsonObject();
+            stats.put("idleSince", mp.getIdleSince());
             stats.put("exchangesTotal", mp.getExchangesTotal());
             stats.put("exchangesFailed", mp.getExchangesFailed());
             stats.put("exchangesInflight", mp.getExchangesInflight());
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 e6e6d2c48f9..511e874d229 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 = "Time in millis being idle (no messages incoming or inflight)")
+    long getIdleSince();
+
     @ManagedAttribute(description = "Last Exchange Created Timestamp")
     Date getLastExchangeCreatedTimestamp();
 
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 a54919ee95c..e8a1f900551 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
@@ -166,6 +166,22 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
         return deltaProcessingTime.getValue();
     }
 
+    @Override
+    public long getIdleSince() {
+        // must not have any inflight
+        if (getExchangesInflight() <= 0) {
+            // what is the last time since completed/failed
+            long max = Math.max(lastExchangeCompletedTimestamp.getValue(), lastExchangeFailureTimestamp.getValue());
+            if (max > 0) {
+                long delta = System.currentTimeMillis() - max;
+                if (delta > 0) {
+                    return delta;
+                }
+            }
+        }
+        return -1;
+    }
+
     @Override
     public Date getLastExchangeCreatedTimestamp() {
         long value = lastExchangeCreatedTimestamp.getValue();
@@ -314,6 +330,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter
         sb.append(String.format(" lastProcessingTime=\"%s\"", lastProcessingTime.getValue()));
         sb.append(String.format(" deltaProcessingTime=\"%s\"", deltaProcessingTime.getValue()));
         sb.append(String.format(" meanProcessingTime=\"%s\"", meanProcessingTime.getValue()));
+        sb.append(String.format(" idleSince=\"%s\"", getIdleSince()));
 
         if (fullStats) {
             sb.append(String.format(" startTimestamp=\"%s\"", dateAsString(startTimestamp.getTime())));