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 <claus.ib...@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; } }