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 <[email protected]>
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())));