You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2021/01/28 15:11:13 UTC
[karaf-decanter] branch master updated: [KARAF-7007] Refactore
Decanter Camel tracer as a intercept strategy
This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/karaf-decanter.git
The following commit(s) were added to refs/heads/master by this push:
new 8504b6a [KARAF-7007] Refactore Decanter Camel tracer as a intercept strategy
new ff9b30c Merge pull request #227 from jbonofre/KARAF-7007
8504b6a is described below
commit 8504b6adb25a56151702e8cb5ff4f091bf0cffe4
Author: jbonofre <jb...@apache.org>
AuthorDate: Thu Jan 28 09:57:21 2021 +0100
[KARAF-7007] Refactore Decanter Camel tracer as a intercept strategy
---
...Handler.java => DecanterInterceptStrategy.java} | 51 ++++++++++++----------
...est.java => DecanterInterceptStrategyTest.java} | 33 +++++---------
collector/camel/src/test/resources/sample.xml | 2 +-
.../itests/collector/CamelCollectorTest.java | 18 +++-----
.../src/main/asciidoc/user-guide/collectors.adoc | 34 ++++++++-------
5 files changed, 63 insertions(+), 75 deletions(-)
diff --git a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategy.java
similarity index 68%
rename from collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java
rename to collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategy.java
index e658528..bea43d8 100644
--- a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java
+++ b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategy.java
@@ -19,28 +19,42 @@ package org.apache.karaf.decanter.collector.camel;
import java.net.InetAddress;
import java.util.HashMap;
+import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.processor.interceptor.TraceEventHandler;
-import org.apache.camel.processor.interceptor.TraceInterceptor;
+import org.apache.camel.spi.InterceptStrategy;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
-public class DecanterTraceEventHandler implements TraceEventHandler {
+public class DecanterInterceptStrategy implements InterceptStrategy {
- private EventAdmin eventAdmin;
+ private EventAdmin dispatcher;
private DefaultExchangeExtender dextender = new DefaultExchangeExtender();
private DecanterCamelEventExtender extender;
@Override
- public void traceExchange(ProcessorDefinition<?> node, Processor target, TraceInterceptor traceInterceptor, Exchange exchange) throws Exception {
+ public Processor wrapProcessorInInterceptors(CamelContext context, ProcessorDefinition<?> definition, Processor target, Processor nextTarget) throws Exception {
+ Processor answer = new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ send(exchange);
+ target.process(exchange);
+ }
+ };
+ return answer;
+ }
+
+ private void send(Exchange exchange) {
HashMap<String, Object> data = new HashMap<>();
data.put("type", "camelTracer");
data.put("karafName", System.getProperty("karaf.name"));
- data.put("hostAddress", InetAddress.getLocalHost().getHostAddress());
- data.put("hostName", InetAddress.getLocalHost().getHostName());
- data.put("nodeId", node.getId());
+ try {
+ data.put("hostAddress", InetAddress.getLocalHost().getHostAddress());
+ data.put("hostName", InetAddress.getLocalHost().getHostName());
+ } catch (Exception e) {
+ // no-op
+ }
data.put("timestamp", System.currentTimeMillis());
new DefaultExchangeExtender().extend(data, exchange);
for (String property : exchange.getProperties().keySet()) {
@@ -58,30 +72,19 @@ public class DecanterTraceEventHandler implements TraceEventHandler {
}
}
Event event = new Event("decanter/collect/camel/tracer", data);
- eventAdmin.postEvent(event);
- }
-
- @Override
- public Object traceExchangeIn(ProcessorDefinition<?> node, Processor target, TraceInterceptor traceInterceptor, Exchange exchange) throws Exception {
- traceExchange(node, target, traceInterceptor, exchange);
- return null;
- }
-
- @Override
- public void traceExchangeOut(ProcessorDefinition<?> node, Processor target, TraceInterceptor traceInterceptor, Exchange exchange, Object traceState) throws Exception {
- traceExchange(node, target, traceInterceptor, exchange);
+ dispatcher.postEvent(event);
}
- public EventAdmin getEventAdmin() {
- return eventAdmin;
+ public EventAdmin getDispatcher() {
+ return dispatcher;
}
public void setExtender(DecanterCamelEventExtender extender) {
this.extender = extender;
}
- public void setEventAdmin(EventAdmin eventAdmin) {
- this.eventAdmin = eventAdmin;
+ public void setDispatcher(EventAdmin dispatcher) {
+ this.dispatcher = dispatcher;
}
public void setIncludeBody(boolean includeBody) {
diff --git a/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandlerTest.java b/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategyTest.java
similarity index 78%
rename from collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandlerTest.java
rename to collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategyTest.java
index faac1d9..60f816e 100644
--- a/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandlerTest.java
+++ b/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategyTest.java
@@ -24,26 +24,24 @@ import javax.json.JsonObject;
import javax.json.JsonReader;
import org.apache.camel.Exchange;
-import org.apache.camel.LoggingLevel;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.processor.interceptor.TraceEventHandler;
-import org.apache.camel.processor.interceptor.Tracer;
+import org.apache.camel.spi.InterceptStrategy;
import org.apache.karaf.decanter.marshaller.json.JsonMarshaller;
import org.junit.Assert;
import org.junit.Test;
import org.osgi.service.event.Event;
-public class DecanterTraceEventHandlerTest {
+public class DecanterInterceptStrategyTest {
@Test
public void testTracer() throws Exception {
JsonMarshaller marshaller = new JsonMarshaller();
MockEventAdmin eventAdmin = new MockEventAdmin();
- DecanterTraceEventHandler handler = new DecanterTraceEventHandler();
- handler.setEventAdmin(eventAdmin);
- DefaultCamelContext camelContext = createCamelContext(handler);
+ DecanterInterceptStrategy tracer = new DecanterInterceptStrategy();
+ tracer.setDispatcher(eventAdmin);
+ DefaultCamelContext camelContext = createCamelContext(tracer);
ProducerTemplate template = camelContext.createProducerTemplate();
template.sendBodyAndHeader("direct:start", "TEST", "header", "test");
@@ -73,21 +71,20 @@ public class DecanterTraceEventHandlerTest {
public void testTracerWithExtender() throws Exception {
MockEventAdmin eventAdmin = new MockEventAdmin();
TestExtender extender = new TestExtender();
- DecanterTraceEventHandler handler = new DecanterTraceEventHandler();
- handler.setExtender(extender);
- handler.setEventAdmin(eventAdmin);
- DefaultCamelContext camelContext = createCamelContext(handler);
+ DecanterInterceptStrategy tracer = new DecanterInterceptStrategy();
+ tracer.setExtender(extender);
+ tracer.setDispatcher(eventAdmin);
+ DefaultCamelContext camelContext = createCamelContext(tracer);
ProducerTemplate template = camelContext.createProducerTemplate();
template.sendBodyAndHeader("direct:start", "TEST", "header", "test");
- Assert.assertEquals(2, eventAdmin.getPostEvents().size());
+ Assert.assertEquals(1, eventAdmin.getPostEvents().size());
Assert.assertEquals("test", eventAdmin.getPostEvents().get(0).getProperty("extender-test"));
- Assert.assertEquals("test", eventAdmin.getPostEvents().get(1).getProperty("extender-test"));
}
- private DefaultCamelContext createCamelContext(TraceEventHandler handler) throws Exception {
+ private DefaultCamelContext createCamelContext(InterceptStrategy tracer) throws Exception {
RouteBuilder builder = new RouteBuilder() {
@Override
public void configure() throws Exception {
@@ -97,13 +94,7 @@ public class DecanterTraceEventHandlerTest {
DefaultCamelContext camelContext = new DefaultCamelContext();
camelContext.setName("test-context");
camelContext.addRoutes(builder);
- Tracer tracer = new Tracer();
- tracer.setEnabled(true);
- tracer.setTraceOutExchanges(true);
- tracer.setLogLevel(LoggingLevel.OFF);
- tracer.addTraceHandler(handler);
- camelContext.setTracing(true);
- camelContext.setDefaultTracer(tracer);
+ camelContext.addInterceptStrategy(tracer);
camelContext.start();
return camelContext;
}
diff --git a/collector/camel/src/test/resources/sample.xml b/collector/camel/src/test/resources/sample.xml
index 1d6af23..dd0b5c3 100644
--- a/collector/camel/src/test/resources/sample.xml
+++ b/collector/camel/src/test/resources/sample.xml
@@ -21,7 +21,7 @@
<reference id="dispatcher" interface="org.osgi.service.event.EventAdmin"/>
- <bean id="traceHandler" class="org.apache.karaf.decanter.collector.camel.DecanterTraceEventHandler">
+ <bean id="traceHandler" class="org.apache.karaf.decanter.collector.camel.DecanterInterceptStrategy">
<property name="dispatcher" ref="dispatcher"/>
</bean>
diff --git a/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java b/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java
index 2ac30a0..2b211d2 100644
--- a/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java
+++ b/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java
@@ -16,13 +16,11 @@
*/
package org.apache.karaf.decanter.itests.collector;
-import org.apache.camel.LoggingLevel;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.processor.interceptor.Tracer;
import org.apache.karaf.decanter.collector.camel.DecanterEventNotifier;
-import org.apache.karaf.decanter.collector.camel.DecanterTraceEventHandler;
+import org.apache.karaf.decanter.collector.camel.DecanterInterceptStrategy;
import org.apache.karaf.itests.KarafTestSupport;
import org.apache.karaf.jaas.boot.principal.RolePrincipal;
import org.junit.Assert;
@@ -78,8 +76,8 @@ public class CamelCollectorTest extends KarafTestSupport {
// create route with tracer
EventAdmin eventAdmin = getOsgiService(EventAdmin.class);
- DecanterTraceEventHandler handler = new DecanterTraceEventHandler();
- handler.setEventAdmin(eventAdmin);
+ DecanterInterceptStrategy tracer = new DecanterInterceptStrategy();
+ tracer.setDispatcher(eventAdmin);
RouteBuilder routeBuilder = new RouteBuilder() {
@Override
@@ -90,20 +88,14 @@ public class CamelCollectorTest extends KarafTestSupport {
DefaultCamelContext camelContext = new DefaultCamelContext();
camelContext.setName("context-test");
camelContext.addRoutes(routeBuilder);
- Tracer tracer = new Tracer();
- tracer.setEnabled(true);
- tracer.setTraceOutExchanges(true);
- tracer.setLogLevel(LoggingLevel.OFF);
- tracer.addTraceHandler(handler);
- camelContext.setTracing(true);
- camelContext.setDefaultTracer(tracer);
+ camelContext.addInterceptStrategy(tracer);
camelContext.start();
// send a exchange into the route
ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
producerTemplate.sendBodyAndHeader("direct:test", "This is a test", "testHeader", "testValue");
- Assert.assertEquals(2, received.size());
+ Assert.assertEquals(1, received.size());
Assert.assertEquals("decanter/collect/camel/tracer", received.get(0).getTopic());
Assert.assertEquals("context-test", received.get(0).getProperty("camelContextName"));
diff --git a/manual/src/main/asciidoc/user-guide/collectors.adoc b/manual/src/main/asciidoc/user-guide/collectors.adoc
index 10d9831..713d19a 100644
--- a/manual/src/main/asciidoc/user-guide/collectors.adoc
+++ b/manual/src/main/asciidoc/user-guide/collectors.adoc
@@ -467,19 +467,25 @@ Decanter provides a Camel Tracer Handler that you can set on a Camel Tracer. It
===== Camel Tracer
-If you enable the tracer on a Camel route, all tracer events (exchanges on each step of the route) are sent to the
-appenders.
+Decanter Camel Tracer is actually an intercept strategy.
-The `decanter-collector-camel` feature provides the Camel Tracer Handler:
+It catches all exchanges in the route. If you enable the tracer on a Camel route, all events (exchanges on each step of the route) are sent to the dispatcher.
+
+The `decanter-collector-camel` feature provides the Decanter Camel intercept strategy:
----
karaf@root()> feature:install decanter-collector-camel
----
-Now, you can use the Decanter Camel Tracer Handler in a tracer that you can use in routes.
+You just have to register Decanter intercept strategy in your Camel Context:
+
+----
+DecanterInterceptStrategy decanterCamelTracer = new DecanterInterceptStrategy();
+decanterCamelTracer.setDispatcher(eventAdmin);
+camelContext.addInterceptStrategy(decanterCamelTracer);
+----
-For instance, the following route definition shows how to enable tracer on a route, and use the Decanter Tracer Handler
-in the Camel Tracer:
+This is an example of a complete route with Decanter Camel intercept strategy:
----
<?xml version="1.0" encoding="UTF-8"?>
@@ -487,18 +493,14 @@ in the Camel Tracer:
<reference id="dispatcher" interface="org.osgi.service.event.EventAdmin"/>
- <bean id="traceHandler" class="org.apache.karaf.decanter.collector.camel.DecanterTraceEventHandler">
+ <bean id="decanterInterceptor" class="org.apache.karaf.decanter.collector.camel.DecanterInterceptStrategy">
<property name="dispatcher" ref="dispatcher"/>
</bean>
- <bean id="tracer" class="org.apache.camel.processor.interceptor.Tracer">
- <property name="traceHandler" ref="traceHandler"/>
- <property name="enabled" value="true"/>
- <property name="traceOutExchanges" value="true"/>
- <property name="logLevel" value="OFF"/>
- </bean>
-
- <camelContext trace="true" xmlns="http://camel.apache.org/schema/blueprint">
+ <camelContext xmlns="http://camel.apache.org/schema/blueprint">
+ <interceptStrategy>
+ <bean ref="decanterInterceptor"/>
+ </interceptStrategy>
<route id="test">
<from uri="timer:fire?period=10000"/>
<setBody><constant>Hello World</constant></setBody>
@@ -519,7 +521,7 @@ public interface DecanterCamelEventExtender {
}
----
-You can inject your extender using `setExtender(myExtender)` on the `DecanterTraceEventHandler`. Decanter will automatically
+You can inject your extender using `setExtender(myExtender)` on the `DecanterInterceptStrategy`. Decanter will automatically
call your extender to populate extra properties.
===== Camel Event Notifier