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())));