You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/12/21 20:36:47 UTC

(camel) branch main updated: CAMEL-20225: convert MessageHistory to the clock API (#12531)

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 <or...@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