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
The following commit(s) were added to refs/heads/master by this push: new 25a4eaf camel-zipkin - Generate tracing identifiers on exchange begin if they… (#2494) 25a4eaf is described below commit 25a4eafcb4792b13ea2efac2c8ece94c21f827a6 Author: ramu11 <kramu...@gmail.com> AuthorDate: Tue Aug 28 15:31:43 2018 +0530 camel-zipkin - Generate tracing identifiers on exchange begin if they… (#2494) * camel-zipkin - Generate tracing identifiers on exchange begin if they do not exist * CAMEL-12109:Generate tracing identifiers on exchange begin if they do not exist --- .../java/org/apache/camel/zipkin/ZipkinTracer.java | 22 +++--- .../zipkin/ZipkinMultiServerNoClientTest.java | 71 ++++++++++++++++++ .../camel/zipkin/ZipkinServerMulticastTest.java | 83 ++++++++++++++++++++++ 3 files changed, 168 insertions(+), 8 deletions(-) diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java index 2513f36..e26cae6 100644 --- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java +++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java @@ -31,6 +31,7 @@ import brave.propagation.Propagation.Setter; import brave.propagation.TraceContext; import brave.propagation.TraceContext.Extractor; import brave.propagation.TraceContext.Injector; +import brave.propagation.TraceContextOrSamplingFlags; import brave.sampler.Sampler; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; @@ -625,8 +626,14 @@ public class ZipkinTracer extends ServiceSupport implements RoutePolicyFactory, state = new ZipkinState(); exchange.setProperty(ZipkinState.KEY, state); } - - Span span = brave.tracer().nextSpan(EXTRACTOR.extract(exchange.getIn())); + Span span = null; + TraceContextOrSamplingFlags sampleFlag = EXTRACTOR.extract(exchange.getIn()); + if (ObjectHelper.isEmpty(sampleFlag)) { + span = brave.tracer().nextSpan(); + INJECTOR.inject(span.context(), exchange.getIn()); + } else { + span = brave.tracer().nextSpan(sampleFlag); + } span.kind(Span.Kind.SERVER).start(); ZipkinServerRequestAdapter parser = new ZipkinServerRequestAdapter(this, exchange); parser.onRequest(exchange, span.customizer()); @@ -734,13 +741,12 @@ public class ZipkinTracer extends ServiceSupport implements RoutePolicyFactory, // use route policy to track events when Camel a Camel route begins/end the lifecycle of an Exchange // these events corresponds to Zipkin server events - if (hasZipkinTraceId(exchange)) { - String serviceName = getServiceName(exchange, route.getEndpoint(), true, false); - Tracing brave = getTracing(serviceName); - if (brave != null) { - serverRequest(brave, serviceName, exchange); - } + String serviceName = getServiceName(exchange, route.getEndpoint(), true, false); + Tracing brave = getTracing(serviceName); + if (brave != null) { + serverRequest(brave, serviceName, exchange); } + } // Report Server send after route has completed processing of the exchange. diff --git a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinMultiServerNoClientTest.java b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinMultiServerNoClientTest.java new file mode 100644 index 0000000..90bbcd2 --- /dev/null +++ b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinMultiServerNoClientTest.java @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.zipkin; + +import org.apache.camel.CamelContext; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; +import zipkin2.reporter.Reporter; + +public class ZipkinMultiServerNoClientTest extends CamelTestSupport { + + private ZipkinTracer zipkin; + + protected void setSpanReporter(ZipkinTracer zipkin) { + zipkin.setSpanReporter(Reporter.NOOP); + } + @Override + protected CamelContext createCamelContext() throws Exception { + CamelContext context = super.createCamelContext(); + zipkin = new ZipkinTracer(); + // we have one route as service + zipkin.addServerServiceMapping("seda:abc", "abc"); + zipkin.addServerServiceMapping("seda:xyz", "xyz"); + setSpanReporter(zipkin); + // attaching ourself to CamelContext + zipkin.init(context); + return context; + } + @Test + public void testZipkinRoute() throws Exception { + template.requestBody("direct:start", "Hello abc"); + } + @Override + protected RoutesBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").to("seda:abc"); + + from("seda:abc").routeId("abc") + .log("routing at ${routeId}") + .multicast() + .to("seda:xyz") + .end() + .log("End of routing"); + + from("seda:xyz").routeId("xyz") + .log("routing at ${routeId}") + .delay(simple("${random(1000,2000)}")); + } + }; + } +} + + diff --git a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinServerMulticastTest.java b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinServerMulticastTest.java new file mode 100644 index 0000000..7ae2c93 --- /dev/null +++ b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinServerMulticastTest.java @@ -0,0 +1,83 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.zipkin; + +import org.apache.camel.CamelContext; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; +import zipkin2.reporter.Reporter; + +public class ZipkinServerMulticastTest extends CamelTestSupport { + + private ZipkinTracer zipkin; + + protected void setSpanReporter(ZipkinTracer zipkin) { + zipkin.setSpanReporter(Reporter.NOOP); + } + @Override + protected CamelContext createCamelContext() throws Exception { + CamelContext context = super.createCamelContext(); + zipkin = new ZipkinTracer(); + // we have one route as service + zipkin.addClientServiceMapping("seda:abc", "abc"); + zipkin.addServerServiceMapping("seda:xyz", "xyz"); + zipkin.addServerServiceMapping("seda:cat", "cat"); + zipkin.addServerServiceMapping("seda:dog", "dog"); + setSpanReporter(zipkin); + // attaching ourself to CamelContext + zipkin.init(context); + return context; + } + @Test + public void testZipkinRoute() throws Exception { + template.requestBody("direct:start", "Hello abc"); + } + @Override + protected RoutesBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").to("seda:abc"); + + from("seda:abc").routeId("abc") + .log("routing at ${routeId}") + .multicast() + .to("seda:xyz") + .to("seda:cat") + .to("seda:dog") + .end() + .log("End of routing"); + + from("seda:xyz").routeId("xyz") + .log("routing at ${routeId}") + .delay(simple("${random(1000,2000)}")); + + from("seda:cat").routeId("cat") + .log("routing at ${routeId}") + .delay(simple("${random(1000,2000)}")); + + from("seda:dog").routeId("b") + .log("routing at ${routeId}") + .delay(simple("${random(1000,2000)}")); + } + }; + } +} + +