This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch since in repository https://gitbox.apache.org/repos/asf/camel.git
commit 1ddf506bd34c5ba5be029ff3ee1b7834f3186f9a Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sun Dec 3 10:14:19 2023 +0100 CAMEL-20179: camel-core - Add idleSince attribute to JMX --- .../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())));