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 2016/04/01 13:56:22 UTC

[4/6] camel git commit: CAMEL-9759: camel-zipkin - Instrument Camel. Work in progress.

CAMEL-9759: camel-zipkin - Instrument Camel. Work in progress.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a8b941e5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a8b941e5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a8b941e5

Branch: refs/heads/master
Commit: a8b941e59c89db995431b367a76618ac359d5d33
Parents: a9da3a6
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Apr 1 10:21:10 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 1 13:55:21 2016 +0200

----------------------------------------------------------------------
 .../camel/zipkin/ZipkinEventNotifier.java       | 46 ++++++++++----------
 .../org/apache/camel/zipkin/ZipkinHelper.java   |  2 +-
 .../zipkin/ZipkinServerRequestAdapter.java      |  4 +-
 .../org/apache/camel/zipkin/ZipkinState.java    | 10 ++++-
 .../main/java/sample/camel/Service1Route.java   |  4 +-
 examples/camel-example-zipkin/service2/pom.xml  |  4 ++
 .../main/java/sample/camel/Service2Route.java   |  7 ++-
 .../src/main/resources/application.properties   |  6 ++-
 8 files changed, 51 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
index 8f3c6e2..85f5afc 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
@@ -501,7 +501,8 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
     }
 
     private void clientRequest(Brave brave, String serviceName, ExchangeSendingEvent event) {
-        ClientSpanThreadBinder binder = brave.clientSpanThreadBinder();
+        ClientSpanThreadBinder clientBinder = brave.clientSpanThreadBinder();
+        ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
 
         // reuse existing span if we do multiple requests from the same
         ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
@@ -509,21 +510,22 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
             state = new ZipkinState();
             event.getExchange().setProperty(ZipkinState.KEY, state);
         }
+        // need to store the last span in use whether it was a server or client based span
         Object last = state.getLast();
         if (last != null && last instanceof Span) {
-            binder.setCurrentSpan((Span) last);
+            clientBinder.setCurrentSpan((Span) last);
         } else if (last != null && last instanceof ServerSpan) {
-            Span span = ((ServerSpan) last).getSpan();
-            binder.setCurrentSpan(span);
+            serverBinder.setCurrentSpan((ServerSpan) last);
         }
 
         brave.clientRequestInterceptor().handle(new ZipkinClientRequestAdapter(this, serviceName, event.getExchange(), event.getEndpoint()));
 
         // store span after request
-        Span span = binder.getCurrentClientSpan();
+        Span span = clientBinder.getCurrentClientSpan();
         state.pushClientSpan(span);
         // and reset binder
-        binder.setCurrentSpan(null);
+        clientBinder.setCurrentSpan(null);
+        serverBinder.setCurrentSpan(null);
 
         if (log.isDebugEnabled()) {
             String traceId = "<null>";
@@ -546,16 +548,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
         Span span = null;
         ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
         if (state != null) {
+            // only process if it was a zipkin client event
             span = state.popClientSpan();
         }
 
         if (span != null) {
-            // only process if it was a zipkin client event
-            ClientSpanThreadBinder binder = brave.clientSpanThreadBinder();
-            binder.setCurrentSpan(span);
+            ClientSpanThreadBinder clientBinder = brave.clientSpanThreadBinder();
+            clientBinder.setCurrentSpan(span);
             brave.clientResponseInterceptor().handle(new ZipkinClientResponseAdaptor(this, event.getExchange(), event.getEndpoint()));
             // and reset binder
-            binder.setCurrentSpan(null);
+            clientBinder.setCurrentSpan(null);
 
             if (log.isDebugEnabled()) {
                 String traceId = "" + span.getTrace_id();
@@ -567,7 +569,7 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
     }
 
     private void serverRequest(Brave brave, String serviceName, ExchangeCreatedEvent event) {
-        ServerSpanThreadBinder binder = brave.serverSpanThreadBinder();
+        ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
 
         // reuse existing span if we do multiple requests from the same
         ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
@@ -577,16 +579,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
         }
         Object last = state.getLast();
         if (last != null && last instanceof ServerSpan) {
-            binder.setCurrentSpan((ServerSpan) last);
+            serverBinder.setCurrentSpan((ServerSpan) last);
         }
 
         brave.serverRequestInterceptor().handle(new ZipkinServerRequestAdapter(this, event.getExchange()));
 
         // store span after request
-        ServerSpan span = binder.getCurrentServerSpan();
+        ServerSpan span = serverBinder.getCurrentServerSpan();
         state.pushServerSpan(span);
         // and reset binder
-        binder.setCurrentSpan(null);
+        serverBinder.setCurrentSpan(null);
 
         if (log.isDebugEnabled()) {
             String traceId = "<null>";
@@ -609,16 +611,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
         ServerSpan span = null;
         ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
         if (state != null) {
+            // only process if it was a zipkin server event
             span = state.popServerSpan();
         }
 
         if (span != null) {
-            // only process if it was a zipkin server event
-            ServerSpanThreadBinder binder = brave.serverSpanThreadBinder();
-            binder.setCurrentSpan(span);
+            ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
+            serverBinder.setCurrentSpan(span);
             brave.serverResponseInterceptor().handle(new ZipkinServerResponseAdapter(this, event.getExchange()));
             // and reset binder
-            binder.setCurrentSpan(null);
+            serverBinder.setCurrentSpan(null);
 
             if (log.isDebugEnabled()) {
                 String traceId = "<null>";
@@ -642,16 +644,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
         ServerSpan span = null;
         ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
         if (state != null) {
+            // only process if it was a zipkin server event
             span = state.popServerSpan();
         }
 
         if (span != null) {
-            // only process if it was a zipkin server event
-            ServerSpanThreadBinder binder = brave.serverSpanThreadBinder();
-            binder.setCurrentSpan(span);
+            ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
+            serverBinder.setCurrentSpan(span);
             brave.serverResponseInterceptor().handle(new ZipkinServerResponseAdapter(this, event.getExchange()));
             // and reset binder
-            binder.setCurrentSpan(null);
+            serverBinder.setCurrentSpan(null);
 
             if (log.isDebugEnabled()) {
                 String traceId = "<null>";

http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
index 630f828..96d86b7 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
@@ -27,7 +27,7 @@ public final class ZipkinHelper {
     private ZipkinHelper() {
     }
 
-    public static SpanId getSpanId(String traceId, String spanId, String parentSpanId) {
+    public static SpanId createSpanId(String traceId, String spanId, String parentSpanId) {
         if (parentSpanId != null) {
             return SpanId.create(IdConversion.convertToLong(traceId), IdConversion.convertToLong(spanId), IdConversion.convertToLong(parentSpanId));
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
index 0d7605d..76eadad 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
@@ -30,7 +30,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.util.MessageHelper;
 import org.apache.camel.util.URISupport;
 
-import static org.apache.camel.zipkin.ZipkinHelper.getSpanId;
+import static org.apache.camel.zipkin.ZipkinHelper.createSpanId;
 
 public class ZipkinServerRequestAdapter implements ServerRequestAdapter {
 
@@ -58,7 +58,7 @@ public class ZipkinServerRequestAdapter implements ServerRequestAdapter {
             String spanId = exchange.getIn().getHeader(ZipkinConstants.SPAN_ID, String.class);
             String parentSpanId = exchange.getIn().getHeader(ZipkinConstants.PARENT_SPAN_ID, String.class);
             if (traceId != null && spanId != null) {
-                SpanId span = getSpanId(traceId, spanId, parentSpanId);
+                SpanId span = createSpanId(traceId, spanId, parentSpanId);
                 return TraceData.builder().sample(true).spanId(span).build();
             }
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
index d09af34..0c9ed83 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
@@ -20,8 +20,16 @@ import java.util.Stack;
 
 import com.github.kristofa.brave.ServerSpan;
 import com.twitter.zipkin.gen.Span;
+import org.apache.camel.Exchange;
 
-public class ZipkinState {
+/**
+ * The state of the zipkin trace which we store on the {@link Exchange}
+ * <p/>
+ * This is needed to keep track of of correlating when an existing span
+ * is calling downstream service(s) and therefore must be able to correlate
+ * those service calls with the parent span.
+ */
+public final class ZipkinState {
 
     public static final String KEY = "CamelZipkinState";
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java b/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
index 7e1be20..f91ca5a 100644
--- a/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
+++ b/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
@@ -32,7 +32,7 @@ public class Service1Route extends RouteBuilder {
         zipkin.setHostName("192.168.99.100");
         zipkin.setPort(9410);
         zipkin.addClientServiceMapping("http://localhost:9090/service2", "service2");
-        zipkin.addClientServiceMapping("http://localhost:7070/service3", "service3");
+//        zipkin.addClientServiceMapping("http://localhost:7070/service3", "service3");
 
         // add zipkin to CamelContext
         getContext().getManagementStrategy().addEventNotifier(zipkin);
@@ -40,7 +40,7 @@ public class Service1Route extends RouteBuilder {
         from("timer:trigger?exchangePattern=InOut&period=30s")
             .bean("counterBean")
             .to("http://localhost:9090/service2")
-            .to("http://localhost:7070/service3")
+//            .to("http://localhost:7070/service3")
             .log("Result: ${body}");
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service2/pom.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service2/pom.xml b/examples/camel-example-zipkin/service2/pom.xml
index d037c9a..a28b997 100644
--- a/examples/camel-example-zipkin/service2/pom.xml
+++ b/examples/camel-example-zipkin/service2/pom.xml
@@ -74,6 +74,10 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-jetty</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-http</artifactId>
+    </dependency>
 
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java b/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
index e95582b..e81f152 100644
--- a/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
+++ b/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
@@ -24,10 +24,13 @@ public class Service2Route extends RouteBuilder {
 
     @Override
     public void configure() throws Exception {
-        from("jetty:http://0.0.0.0:{{jetty.port}}/service2").routeId("service2")
+        from("jetty:http://0.0.0.0:{{service2.port}}/service2").routeId("service2")
+            .removeHeaders("CamelHttp*")
             .convertBodyTo(String.class)
             .delay(simple("${random(1000,2000)}"))
-            .transform(simple("Hello: ${body}"));
+            .transform(simple("Hello: ${body}"))
+            .to("http://0.0.0.0:{{service3.port}}/service3");
+
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service2/src/main/resources/application.properties
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service2/src/main/resources/application.properties b/examples/camel-example-zipkin/service2/src/main/resources/application.properties
index a8673a9..5212f4e 100644
--- a/examples/camel-example-zipkin/service2/src/main/resources/application.properties
+++ b/examples/camel-example-zipkin/service2/src/main/resources/application.properties
@@ -24,7 +24,8 @@ camel.zipkin.host-name=192.168.99.100
 camel.zipkin.port=9410
 
 # the zipkin service name
-camel.zipkin.service-name=service2
+camel.zipkin.server-service-mappings.*=service2
+camel.zipkin.client-service-mappings.*=service3
 
 # include the message body in the zipkin traces
 camel.zipkin.include-message-body=true
@@ -33,5 +34,6 @@ camel.zipkin.include-message-body=true
 logging.level.org.apache.camel.zipkin=debug
 
 # the port number the service will use for accepting incoming HTTP requests
-jetty.port=9090
+service2.port=9090
+service3.port=7070