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 2022/08/22 17:10:44 UTC
[camel] 05/05: CAMEL-18419: camel-management - Add last exchange received timestamp
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 <cl...@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;
}
}