Skip to content

Commit 0d4f861

Browse files
Mateusz Rzeszutekkuba-wuanuraaga
authored
Apache camel enable sqs propagation (#2102) -- 0.15.x cherrypick (#2200)
* Apache camel enable sqs propagation (#2102) * adding AWS SQS tests to Apache Camel instrumentation * code review changes Co-authored-by: Anuraag Agrawal <[email protected]> * SQS context propagation for Apache Camel instrumentation * code review - removed not needed dep Co-authored-by: Anuraag Agrawal <[email protected]> * Bumped testcontainers version to make smoke tests pass Co-authored-by: Jakub Wach <[email protected]> Co-authored-by: Anuraag Agrawal <[email protected]>
1 parent 94fd21e commit 0d4f861

File tree

22 files changed

+664
-272
lines changed

22 files changed

+664
-272
lines changed

gradle/dependencies.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ ext {
8383
],
8484
groovy : "org.codehaus.groovy:groovy-all:${versions.groovy}",
8585
systemLambda : "com.github.stefanbirkner:system-lambda:${versions.systemLambda}",
86-
testcontainers : "org.testcontainers:testcontainers:1.15.0-rc2",
86+
testcontainers : "org.testcontainers:testcontainers:1.15.1",
8787
testLogging : [
8888
dependencies.create(group: 'ch.qos.logback', name: 'logback-classic', version: versions.logback),
8989
dependencies.create(group: 'org.slf4j', name: 'log4j-over-slf4j', version: versions.slf4j),
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apply from: "$rootDir/gradle/java.gradle"
2+
3+
dependencies {
4+
testImplementation project(':instrumentation:apache-camel-2.20:javaagent')
5+
testImplementation group: 'org.apache.camel', name: 'camel-core', version: '2.20.1'
6+
testImplementation group: 'org.apache.camel', name: 'camel-aws', version: '2.20.1'
7+
8+
testImplementation deps.opentelemetryTraceProps
9+
testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.18.1'
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.apachecamel;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.api.trace.Span;
11+
import io.opentelemetry.api.trace.SpanContext;
12+
import io.opentelemetry.context.Context;
13+
import java.util.Collections;
14+
import java.util.Map;
15+
import org.apache.camel.Endpoint;
16+
import org.apache.camel.component.aws.sqs.SqsComponent;
17+
import org.apache.camel.component.aws.sqs.SqsConfiguration;
18+
import org.apache.camel.component.aws.sqs.SqsEndpoint;
19+
import org.junit.jupiter.api.Test;
20+
21+
public class CamelPropagationUtilTest {
22+
23+
@Test
24+
public void shouldExtractAwsParent() {
25+
26+
// given
27+
Endpoint endpoint = new SqsEndpoint("", new SqsComponent(), new SqsConfiguration());
28+
Map<String, Object> exchangeHeaders =
29+
Collections.singletonMap(
30+
"AWSTraceHeader",
31+
"Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1\n");
32+
33+
// when
34+
Context parent = CamelPropagationUtil.extractParent(exchangeHeaders, endpoint);
35+
36+
// then
37+
Span parentSpan = Span.fromContext(parent);
38+
SpanContext parentSpanContext = parentSpan.getSpanContext();
39+
assertThat(parentSpanContext.getTraceIdAsHexString())
40+
.isEqualTo("5759e988bd862e3fe1be46a994272793");
41+
assertThat(parentSpanContext.getSpanIdAsHexString()).isEqualTo("53995c3f42cd8ad8");
42+
}
43+
}

instrumentation/apache-camel-2.20/javaagent/apache-camel-2.20-javaagent.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ muzzle {
1414

1515
dependencies {
1616
library group: 'org.apache.camel', name: 'camel-core', version: '2.20.1'
17+
implementation deps.opentelemetryTraceProps
1718

1819
testLibrary group: 'org.apache.camel', name: 'camel-spring-boot-starter', version: '2.20.1'
1920
testLibrary group: 'org.apache.camel', name: 'camel-jetty-starter', version: '2.20.1'

instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/ApacheCamelInstrumentationModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public List<TypeInstrumentation> typeInstrumentations() {
3838
return singletonList(new CamelContextInstrumentation());
3939
}
4040

41+
@Override
42+
public String[] additionalHelperClassNames() {
43+
return new String[] {"io.opentelemetry.extension.trace.propagation.AwsXrayPropagator"};
44+
}
45+
4146
public static class CamelContextInstrumentation implements TypeInstrumentation {
4247
@Override
4348
public ElementMatcher<ClassLoader> classLoaderOptimization() {

instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelPropagationUtil.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,34 @@
99
import io.opentelemetry.context.Context;
1010
import io.opentelemetry.context.propagation.TextMapPropagator.Getter;
1111
import io.opentelemetry.context.propagation.TextMapPropagator.Setter;
12+
import io.opentelemetry.extension.trace.propagation.AwsXrayPropagator;
13+
import java.util.Collections;
1214
import java.util.Map;
15+
import org.apache.camel.Endpoint;
1316

1417
final class CamelPropagationUtil {
1518

1619
private CamelPropagationUtil() {}
1720

18-
static Context extractParent(final Map<String, Object> exchangeHeaders) {
21+
private static boolean isAwsPropagated(Endpoint endpoint) {
22+
return endpoint.getClass().getName().endsWith("SqsEndpoint");
23+
}
24+
25+
static Context extractParent(final Map<String, Object> exchangeHeaders, Endpoint endpoint) {
26+
return (isAwsPropagated(endpoint)
27+
? extractAwsPropagationParent(exchangeHeaders)
28+
: extractHttpPropagationParent(exchangeHeaders));
29+
}
30+
31+
private static Context extractAwsPropagationParent(final Map<String, Object> exchangeHeaders) {
32+
return AwsXrayPropagator.getInstance()
33+
.extract(
34+
Context.current(),
35+
Collections.singletonMap("X-Amzn-Trace-Id", exchangeHeaders.get("AWSTraceHeader")),
36+
MapGetter.INSTANCE);
37+
}
38+
39+
private static Context extractHttpPropagationParent(final Map<String, Object> exchangeHeaders) {
1940
return GlobalOpenTelemetry.getPropagators()
2041
.getTextMapPropagator()
2142
.extract(Context.current(), exchangeHeaders, MapGetter.INSTANCE);

instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelRoutePolicy.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ private Span spanOnExchangeBegin(
4343
SpanBuilder builder = CamelTracer.TRACER.spanBuilder(name);
4444
builder.setSpanKind(spanKind);
4545
if (!activeSpan.getSpanContext().isValid()) {
46-
Context parentContext = CamelPropagationUtil.extractParent(exchange.getIn().getHeaders());
46+
Context parentContext =
47+
CamelPropagationUtil.extractParent(exchange.getIn().getHeaders(), route.getEndpoint());
4748
if (parentContext != null) {
4849
builder.setParent(parentContext);
4950
}

instrumentation/apache-camel-2.20/javaagent/src/test/groovy/test/DirectCamelTest.groovy renamed to instrumentation/apache-camel-2.20/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/apachecamel/DirectCamelTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package test
6+
package io.opentelemetry.javaagent.instrumentation.apachecamel
77

88
import static io.opentelemetry.api.trace.Span.Kind.INTERNAL
99

instrumentation/apache-camel-2.20/javaagent/src/test/groovy/test/DirectConfig.groovy renamed to instrumentation/apache-camel-2.20/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/apachecamel/DirectConfig.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package test
6+
package io.opentelemetry.javaagent.instrumentation.apachecamel
77

88
import org.apache.camel.LoggingLevel
99
import org.apache.camel.builder.RouteBuilder

instrumentation/apache-camel-2.20/javaagent/src/test/groovy/test/MulticastConfig.groovy renamed to instrumentation/apache-camel-2.20/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/apachecamel/MulticastConfig.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package test
6+
package io.opentelemetry.javaagent.instrumentation.apachecamel
77

88
import org.apache.camel.LoggingLevel
99
import org.apache.camel.builder.RouteBuilder

0 commit comments

Comments
 (0)