Skip to content

Commit

Permalink
Add implementation for context propagation based on changed in OpenTe…
Browse files Browse the repository at this point in the history
…lemetry 0.9.0. (#8884)

* Update to use implementation of context propagator object according to OpenTelemetry 0.9.0.

* Add test for checking correct  tracing context propagation.

Co-authored-by: David Burns <david.burns@theautomatedtester.co.uk>
  • Loading branch information
pujagani and AutomatedTester committed Nov 19, 2020
1 parent f89bec1 commit 64c6421
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ java_test_suite(
artifact("io.opentelemetry:opentelemetry-sdk"),
artifact("io.opentelemetry:opentelemetry-sdk-common"),
artifact("io.opentelemetry:opentelemetry-sdk-tracing"),
artifact("io.opentelemetry:opentelemetry-context-prop"),
artifact("junit:junit"),
artifact("org.assertj:assertj-core"),
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.common.AttributeKey;
import io.opentelemetry.common.Attributes;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.DefaultContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.TracerSdkProvider;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import io.opentelemetry.trace.StatusCanonicalCode;
import io.opentelemetry.trace.propagation.HttpTraceContext;
import org.junit.Test;
import org.openqa.selenium.grid.web.CombinedHandler;
import org.openqa.selenium.remote.http.HttpRequest;
Expand Down Expand Up @@ -85,6 +88,27 @@ public void shouldBeAbleToCreateATracer() {

}

@Test
public void shouldBeAbleToInjectContext() {
List<SpanData> allSpans = new ArrayList<>();
Tracer tracer = createTracer(allSpans);

HttpRequest cheeseReq = new HttpRequest(GET, "/cheeses");

assertThat(cheeseReq.getHeaderNames()).size().isEqualTo(0);

try (Span span = tracer.getCurrentContext().createSpan("parent")) {
span.setAttribute("cheese", "gouda");
span.setStatus(Status.NOT_FOUND);
tracer.getPropagator().inject(tracer.getCurrentContext(),
cheeseReq,
(req, key, value) -> req.setHeader("cheese", "gouda"));
}

assertThat(cheeseReq.getHeaderNames()).size().isEqualTo(1);
assertThat(cheeseReq.getHeaderNames()).element(0).isEqualTo("cheese");
}

@Test
public void shouldBeAbleToCreateASpanWithAEvent() {
List<SpanData> allSpans = new ArrayList<>();
Expand Down Expand Up @@ -568,8 +592,11 @@ public CompletableResultCode shutdown() {
}).build());

io.opentelemetry.trace.Tracer otTracer = provider.get("get");
ContextPropagators propagators = DefaultContextPropagators.builder()
.addTextMapPropagator(HttpTraceContext.getInstance()).build();

return new OpenTelemetryTracer(
otTracer,
OpenTelemetry.getPropagators().getTextMapPropagator());
propagators.getTextMapPropagator());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import io.opentelemetry.common.AttributeConsumer;
import io.opentelemetry.common.AttributeKey;
import io.opentelemetry.common.Attributes;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.DefaultContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.MultiSpanProcessor;
Expand All @@ -30,6 +32,7 @@
import io.opentelemetry.sdk.trace.data.SpanData.Event;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import io.opentelemetry.trace.propagation.HttpTraceContext;
import org.openqa.selenium.grid.config.Config;
import org.openqa.selenium.internal.Require;
import org.openqa.selenium.json.Json;
Expand Down Expand Up @@ -177,9 +180,14 @@ public CompletableResultCode shutdown() {
exporter -> exporters.add(SimpleSpanProcessor.newBuilder(exporter).build()));
tracerFactory.addSpanProcessor(MultiSpanProcessor.create(exporters));

// OpenTelemetry default propagators are no-op since version 0.9.0.
// Hence, required propagators need to defined and added.
ContextPropagators propagators = DefaultContextPropagators.builder()
.addTextMapPropagator(HttpTraceContext.getInstance()).build();

return new OpenTelemetryTracer(
tracerFactory.get("default"),
OpenTelemetry.getPropagators().getTextMapPropagator());
propagators.getTextMapPropagator());
}

public void configureLogging() {
Expand Down

0 comments on commit 64c6421

Please sign in to comment.