This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 3de03c0d3265cfc00c2e7e203c460941ff852a63
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Jun 11 21:08:40 2019 +0200

    CAMEL-13369: Message History EIP now supports filtering nodes and to keep a 
copy of the traced message.
---
 MIGRATION.md                                       |  2 +
 .../messagehistory/MetricsMessageHistory.java      |  5 ++-
 .../MetricsMessageHistoryFactory.java              | 47 ++++++++++++++++++++--
 .../messagehistory/MicrometerMessageHistory.java   |  8 ++--
 .../MicrometerMessageHistoryFactory.java           | 46 +++++++++++++++++++--
 .../support/DefaultMessageHistoryFactory.java      |  6 +--
 6 files changed, 100 insertions(+), 14 deletions(-)

diff --git a/MIGRATION.md b/MIGRATION.md
index 9cd0d13..8a2f453 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -262,6 +262,8 @@ Rename various APIs in camel-core to fix the typo `chiper` 
to `cipher`.
 
 The classes `ReloadStrategySupport` and `FileWatcherReloadStrategy` has been 
removed.
 
+The `MessageHistoryFactory` interface has some options to filter and copy the 
message and a slight change in its API.
+
 #### camel-test
 
 If you are using camel-test and override the `createRegistry` method, for 
example to register beans from the `JndiRegisty` class, then this is no longer 
necessary, and instead
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 5b04202..c3b6d3b 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
@@ -17,6 +17,7 @@
 package org.apache.camel.component.metrics.messagehistory;
 
 import com.codahale.metrics.Timer;
+import org.apache.camel.Message;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.support.DefaultMessageHistory;
@@ -28,8 +29,8 @@ public class MetricsMessageHistory extends 
DefaultMessageHistory {
 
     private final Timer.Context context;
 
-    public MetricsMessageHistory(String routeId, NamedNode namedNode, Timer 
timer, long timestamp) {
-        super(routeId, namedNode, timestamp);
+    public MetricsMessageHistory(String routeId, NamedNode namedNode, Timer 
timer, long timestamp, Message message) {
+        super(routeId, namedNode, timestamp, 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 e2832cc..75076e4 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
@@ -22,12 +22,15 @@ import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.Timer;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NonManagedService;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StaticService;
 import org.apache.camel.spi.MessageHistoryFactory;
+import org.apache.camel.support.PatternHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 
@@ -39,6 +42,8 @@ public class MetricsMessageHistoryFactory extends 
ServiceSupport implements Came
     private CamelContext camelContext;
     private MetricsMessageHistoryService messageHistoryService;
     private MetricRegistry metricsRegistry;
+    private boolean copyMessage;
+    private String nodePattern;
     private boolean useJmx;
     private String jmxDomain = "org.apache.camel.metrics";
     private boolean prettyPrint;
@@ -125,9 +130,45 @@ public class MetricsMessageHistoryFactory extends 
ServiceSupport implements Came
     }
 
     @Override
-    public MessageHistory newMessageHistory(String routeId, NamedNode 
namedNode, long timestamp) {
-        Timer timer = metricsRegistry.timer(createName("history", routeId, 
namedNode.getId()));
-        return new MetricsMessageHistory(routeId, namedNode, timer, timestamp);
+    public boolean isCopyMessage() {
+        return copyMessage;
+    }
+
+    @Override
+    public void setCopyMessage(boolean copyMessage) {
+        this.copyMessage = copyMessage;
+    }
+
+    @Override
+    public String getNodePattern() {
+        return nodePattern;
+    }
+
+    @Override
+    public void setNodePattern(String nodePattern) {
+        this.nodePattern = nodePattern;
+    }
+
+    @Override
+    public MessageHistory newMessageHistory(String routeId, NamedNode node, 
long timestamp, Exchange exchange) {
+        if (nodePattern != null) {
+            String name = node.getShortName();
+            String[] parts = nodePattern.split(",");
+            for (String part : parts) {
+                boolean match = PatternHelper.matchPattern(name, part);
+                if (!match) {
+                    return null;
+                }
+            }
+        }
+
+        Message msg = null;
+        if (copyMessage) {
+            msg = exchange.getMessage().copy();
+        }
+
+        Timer timer = metricsRegistry.timer(createName("history", routeId, 
node.getId()));
+        return new MetricsMessageHistory(routeId, node, timer, timestamp, 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 095d903..af5413b 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
@@ -18,13 +18,14 @@ package 
org.apache.camel.component.micrometer.messagehistory;
 
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Timer;
+import org.apache.camel.Message;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Route;
 import org.apache.camel.support.DefaultMessageHistory;
 
 /**
- * A micrometer metrics based {@link MessageHistory}. This could also use 
{@link #elapsed}
+ * A micrometer metrics based {@link MessageHistory}. This could also use 
{@link #getElapsed()}
  * provided by the super class, but Micrometer can potentially use other 
{@link io.micrometer.core.instrument.Clock clocks}
  * and measures in nano-second precision.
  */
@@ -35,8 +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) {
-        super(route.getId(), namedNode, timestamp);
+    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;
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 eb2f582..7f7ead9 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
@@ -21,6 +21,8 @@ import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tags;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NonManagedService;
@@ -29,6 +31,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StaticService;
 import org.apache.camel.component.micrometer.MicrometerUtils;
 import org.apache.camel.spi.MessageHistoryFactory;
+import org.apache.camel.support.PatternHelper;
 import org.apache.camel.support.service.ServiceSupport;
 
 import static 
org.apache.camel.component.micrometer.MicrometerConstants.METRICS_REGISTRY_NAME;
@@ -41,6 +44,8 @@ public class MicrometerMessageHistoryFactory extends 
ServiceSupport implements C
 
     private CamelContext camelContext;
     private MeterRegistry meterRegistry;
+    private boolean copyMessage;
+    private String nodePattern;
     private boolean prettyPrint = true;
     private TimeUnit durationUnit = TimeUnit.MILLISECONDS;
     private MicrometerMessageHistoryNamingStrategy namingStrategy = 
MicrometerMessageHistoryNamingStrategy.DEFAULT;
@@ -102,10 +107,46 @@ public class MicrometerMessageHistoryFactory extends 
ServiceSupport implements C
     }
 
     @Override
-    public MessageHistory newMessageHistory(String routeId, NamedNode 
namedNode, long timestamp) {
+    public boolean isCopyMessage() {
+        return copyMessage;
+    }
+
+    @Override
+    public void setCopyMessage(boolean copyMessage) {
+        this.copyMessage = copyMessage;
+    }
+
+    @Override
+    public String getNodePattern() {
+        return nodePattern;
+    }
+
+    @Override
+    public void setNodePattern(String nodePattern) {
+        this.nodePattern = nodePattern;
+    }
+
+    @Override
+    public MessageHistory newMessageHistory(String routeId, NamedNode 
namedNode, long timestamp, Exchange exchange) {
+        if (nodePattern != null) {
+            String name = namedNode.getShortName();
+            String[] parts = nodePattern.split(",");
+            for (String part : parts) {
+                boolean match = PatternHelper.matchPattern(name, part);
+                if (!match) {
+                    return null;
+                }
+            }
+        }
+
+        Message msg = null;
+        if (copyMessage) {
+            msg = exchange.getMessage().copy();
+        }
+
         Route route = camelContext.getRoute(routeId);
         if (route != null) {
-            return new MicrometerMessageHistory(getMeterRegistry(), route, 
namedNode, getNamingStrategy(), timestamp);
+            return new MicrometerMessageHistory(getMeterRegistry(), route, 
namedNode, getNamingStrategy(), timestamp, msg);
         } else {
             return null;
         }
@@ -113,7 +154,6 @@ public class MicrometerMessageHistoryFactory extends 
ServiceSupport implements C
 
     @Override
     protected void doStart() throws Exception {
-
         if (meterRegistry == null) {
             meterRegistry = 
MicrometerUtils.getOrCreateMeterRegistry(camelContext.getRegistry(), 
METRICS_REGISTRY_NAME);
         }
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistoryFactory.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistoryFactory.java
index 9864f2a..71c1f3f 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistoryFactory.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessageHistoryFactory.java
@@ -40,12 +40,12 @@ public class DefaultMessageHistoryFactory implements 
MessageHistoryFactory {
             }
         }
 
-        Message target = null;
+        Message msg = null;
         if (copyMessage) {
-            target = exchange.getMessage().copy();
+            msg = exchange.getMessage().copy();
         }
 
-        return new DefaultMessageHistory(routeId, node, timestamp, target);
+        return new DefaultMessageHistory(routeId, node, timestamp, msg);
     }
 
     @Override

Reply via email to