This is an automated email from the ASF dual-hosted git repository. orpiske 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 a0b8c9e7cd5 CAMEL-20225: convert MessageHistory to the clock API (#12531) a0b8c9e7cd5 is described below commit a0b8c9e7cd5c52f587a7ddf07a51b3de7ed8ff8e Author: Otavio Rodolfo Piske <orpi...@users.noreply.github.com> AuthorDate: Thu Dec 21 17:36:40 2023 -0300 CAMEL-20225: convert MessageHistory to the clock API (#12531) --- .../metrics/messagehistory/MetricsMessageHistory.java | 4 ++-- .../messagehistory/MetricsMessageHistoryFactory.java | 12 ++++++------ .../messagehistory/MicrometerMessageHistory.java | 11 +---------- .../messagehistory/MicrometerMessageHistoryFactory.java | 12 ++++++------ .../src/main/java/org/apache/camel/MessageHistory.java | 9 ++++++++- .../java/org/apache/camel/spi/MessageHistoryFactory.java | 4 ++-- .../camel/impl/engine/DefaultInflightRepository.java | 4 ++-- .../camel/impl/engine/DefaultMessageHistoryFactory.java | 12 ++++++------ .../org/apache/camel/support/DefaultMessageHistory.java | 15 ++++++--------- 9 files changed, 39 insertions(+), 44 deletions(-) diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistory.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistory.java index 8fff54b508f..2cb49ae6123 100644 --- a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistory.java +++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistory.java @@ -29,8 +29,8 @@ public class MetricsMessageHistory extends DefaultMessageHistory { private final Timer.Context context; - public MetricsMessageHistory(String routeId, NamedNode namedNode, Timer timer, long timestamp, Message message) { - super(routeId, namedNode, timestamp, message); + public MetricsMessageHistory(String routeId, NamedNode namedNode, Timer timer, Message message) { + super(routeId, namedNode, message); this.context = timer.time(); } diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryFactory.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryFactory.java index efb34f95230..5acd266052d 100644 --- a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryFactory.java +++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryFactory.java @@ -152,6 +152,11 @@ public class MetricsMessageHistoryFactory extends ServiceSupport @Override public MessageHistory newMessageHistory(String routeId, NamedNode node, long timestamp, Exchange exchange) { + return newMessageHistory(routeId, node, exchange); + } + + @Override + public MessageHistory newMessageHistory(String routeId, NamedNode node, Exchange exchange) { if (nodePattern != null) { String name = node.getShortName(); String[] parts = nodePattern.split(","); @@ -169,12 +174,7 @@ public class MetricsMessageHistoryFactory extends ServiceSupport } Timer timer = metricsRegistry.timer(createName("history", routeId, node.getId())); - return new MetricsMessageHistory(routeId, node, timer, timestamp, msg); - } - - @Override - public MessageHistory newMessageHistory(String routeId, NamedNode node, Exchange exchange) { - return newMessageHistory(routeId, node, System.currentTimeMillis(), exchange); + return new MetricsMessageHistory(routeId, node, timer, msg); } private String createName(String type, String routeId, String id) { diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java index 93aafed3b62..3297f56fa1f 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java @@ -36,18 +36,9 @@ public class MicrometerMessageHistory extends DefaultMessageHistory { private final MeterRegistry meterRegistry; private final MicrometerMessageHistoryNamingStrategy namingStrategy; - public MicrometerMessageHistory(MeterRegistry meterRegistry, Route route, NamedNode namedNode, - MicrometerMessageHistoryNamingStrategy namingStrategy, long timestamp, Message message) { - super(route.getId(), namedNode, timestamp, message); - this.meterRegistry = meterRegistry; - this.route = route; - this.namingStrategy = namingStrategy; - this.sample = Timer.start(meterRegistry); - } - public MicrometerMessageHistory(MeterRegistry meterRegistry, Route route, NamedNode namedNode, MicrometerMessageHistoryNamingStrategy namingStrategy, Message message) { - super(route.getId(), namedNode, System.currentTimeMillis(), message); + super(route.getId(), namedNode, message); this.meterRegistry = meterRegistry; this.route = route; this.namingStrategy = namingStrategy; diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java index 278f672bea2..01cee3eedc9 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java @@ -130,6 +130,11 @@ public class MicrometerMessageHistoryFactory extends ServiceSupport @Override public MessageHistory newMessageHistory(String routeId, NamedNode namedNode, long timestamp, Exchange exchange) { + return newMessageHistory(routeId, namedNode, exchange); + } + + @Override + public MessageHistory newMessageHistory(String routeId, NamedNode namedNode, Exchange exchange) { if (nodePattern != null) { String name = namedNode.getShortName(); String[] parts = nodePattern.split(","); @@ -148,17 +153,12 @@ public class MicrometerMessageHistoryFactory extends ServiceSupport Route route = camelContext.getRoute(routeId); if (route != null) { - return new MicrometerMessageHistory(getMeterRegistry(), route, namedNode, getNamingStrategy(), timestamp, msg); + return new MicrometerMessageHistory(getMeterRegistry(), route, namedNode, getNamingStrategy(), msg); } else { return null; } } - @Override - public MessageHistory newMessageHistory(String routeId, NamedNode node, Exchange exchange) { - return newMessageHistory(routeId, node, System.currentTimeMillis(), exchange); - } - @Override protected void doStart() throws Exception { if (meterRegistry == null) { diff --git a/core/camel-api/src/main/java/org/apache/camel/MessageHistory.java b/core/camel-api/src/main/java/org/apache/camel/MessageHistory.java index 8bad1dc5249..a86643b7d8d 100644 --- a/core/camel-api/src/main/java/org/apache/camel/MessageHistory.java +++ b/core/camel-api/src/main/java/org/apache/camel/MessageHistory.java @@ -32,7 +32,7 @@ public interface MessageHistory { NamedNode getNode(); /** - * Gets the timestamp at the point of this history. + * Gets the point in time the message history was created */ long getTime(); @@ -41,6 +41,13 @@ public interface MessageHistory { */ long getElapsed(); + /** + * The elapsed time since created. + */ + default long getElapsedSinceCreated() { + return System.nanoTime() - getTime(); + } + /** * Used for signalling that processing of the node is done. */ diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/MessageHistoryFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/MessageHistoryFactory.java index c695694708b..c070c052ffb 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/MessageHistoryFactory.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/MessageHistoryFactory.java @@ -28,11 +28,11 @@ import org.apache.camel.StaticService; public interface MessageHistoryFactory extends StaticService, CamelContextAware { /** - * Creates a new {@link MessageHistory} + * Deprecated way to create a new {@link MessageHistory} * * @param routeId the route id * @param node the node in the route - * @param timestamp the time the message processed at this node. + * @param timestamp the timestamp is unused and will be removed in the future * @param exchange the current exchange * @return a new {@link MessageHistory} * @deprecated use {@link #newMessageHistory(String, NamedNode, Exchange)} diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java index 44483efcb7e..53cd68e0187 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java @@ -241,9 +241,9 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh MessageHistory history = list.get(list.size() - 1); if (history != null) { long elapsed = history.getElapsed(); - if (elapsed == 0 && history.getTime() > 0) { + if (elapsed == 0) { // still in progress, so lets compute it via the start time - elapsed = System.currentTimeMillis() - history.getTime(); + elapsed = history.getElapsedSinceCreated(); } return elapsed; } else { diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultMessageHistoryFactory.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultMessageHistoryFactory.java index 14e9dae699b..25450573d26 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultMessageHistoryFactory.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultMessageHistoryFactory.java @@ -48,6 +48,11 @@ public class DefaultMessageHistoryFactory extends ServiceSupport implements Mess @Override public MessageHistory newMessageHistory(String routeId, NamedNode node, long timestamp, Exchange exchange) { + return newMessageHistory(routeId, node, exchange); + } + + @Override + public MessageHistory newMessageHistory(String routeId, NamedNode node, Exchange exchange) { if (nodePatternParts != null) { String name = node.getShortName(); for (String part : nodePatternParts) { @@ -63,12 +68,7 @@ public class DefaultMessageHistoryFactory extends ServiceSupport implements Mess msg = exchange.getMessage().copy(); } - return new DefaultMessageHistory(routeId, node, timestamp, msg); - } - - @Override - public MessageHistory newMessageHistory(String routeId, NamedNode node, Exchange exchange) { - return newMessageHistory(routeId, node, System.currentTimeMillis(), exchange); + return new DefaultMessageHistory(routeId, node, msg); } @ManagedAttribute(description = "Whether message history is enabled") diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistory.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistory.java index cb8c5600b5d..dc4b6edd4b2 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistory.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistory.java @@ -28,19 +28,18 @@ public class DefaultMessageHistory implements MessageHistory { private final String routeId; private final NamedNode node; private final String nodeId; - private final long timestamp; + private final MonotonicClock clock = new MonotonicClock(); private final Message message; private long elapsed; - public DefaultMessageHistory(String routeId, NamedNode node, long timestamp) { - this(routeId, node, timestamp, null); + public DefaultMessageHistory(String routeId, NamedNode node) { + this(routeId, node, null); } - public DefaultMessageHistory(String routeId, NamedNode node, long timestamp, Message message) { + public DefaultMessageHistory(String routeId, NamedNode node, Message message) { this.routeId = routeId; this.node = node; this.nodeId = node.getId(); - this.timestamp = timestamp; this.message = message; } @@ -56,7 +55,7 @@ public class DefaultMessageHistory implements MessageHistory { @Override public long getTime() { - return timestamp; + return clock.getCreated(); } @Override @@ -66,9 +65,7 @@ public class DefaultMessageHistory implements MessageHistory { @Override public void nodeProcessingDone() { - if (timestamp > 0) { - elapsed = System.currentTimeMillis() - timestamp; - } + elapsed = clock.elapsed(); } @Override