Move webflux context injection to the decorator (#686)

* move webflux context injection to the decorator

* add if statement
This commit is contained in:
Munir Abdinur 2020-07-16 05:12:40 -04:00 committed by GitHub
parent e58dd71b74
commit 5bab5b9d7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 12 deletions

View File

@ -16,19 +16,24 @@
package io.opentelemetry.instrumentation.springwebflux.client; package io.opentelemetry.instrumentation.springwebflux.client;
import io.opentelemetry.OpenTelemetry; import static io.opentelemetry.OpenTelemetry.getPropagators;
import static io.opentelemetry.OpenTelemetry.getTracerProvider;
import static io.opentelemetry.instrumentation.springwebflux.client.HttpHeadersInjectAdapter.SETTER;
import io.grpc.Context;
import io.opentelemetry.auto.bootstrap.instrumentation.decorator.HttpClientDecorator; import io.opentelemetry.auto.bootstrap.instrumentation.decorator.HttpClientDecorator;
import io.opentelemetry.trace.Span; import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer; import io.opentelemetry.trace.Tracer;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import org.springframework.http.HttpHeaders;
import org.springframework.web.reactive.function.client.ClientRequest; import org.springframework.web.reactive.function.client.ClientRequest;
import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.ClientResponse;
class SpringWebfluxHttpClientDecorator extends HttpClientDecorator<ClientRequest, ClientResponse> { class SpringWebfluxHttpClientDecorator extends HttpClientDecorator<ClientRequest, ClientResponse> {
public static final Tracer TRACER = public static final Tracer TRACER =
OpenTelemetry.getTracerProvider().get("io.opentelemetry.auto.spring-webflux-5.0"); getTracerProvider().get("io.opentelemetry.auto.spring-webflux-5.0");
public static final SpringWebfluxHttpClientDecorator DECORATE = public static final SpringWebfluxHttpClientDecorator DECORATE =
new SpringWebfluxHttpClientDecorator(); new SpringWebfluxHttpClientDecorator();
@ -37,6 +42,10 @@ class SpringWebfluxHttpClientDecorator extends HttpClientDecorator<ClientRequest
span.setAttribute("message", "The subscription was cancelled"); span.setAttribute("message", "The subscription was cancelled");
} }
public void inject(Context context, HttpHeaders httpHeaders) {
getPropagators().getHttpTextFormat().inject(context, httpHeaders, SETTER);
}
@Override @Override
protected String method(final ClientRequest httpRequest) { protected String method(final ClientRequest httpRequest) {
return httpRequest.method().name(); return httpRequest.method().name();

View File

@ -16,13 +16,10 @@
package io.opentelemetry.instrumentation.springwebflux.client; package io.opentelemetry.instrumentation.springwebflux.client;
import static io.opentelemetry.instrumentation.springwebflux.client.HttpHeadersInjectAdapter.SETTER;
import static io.opentelemetry.instrumentation.springwebflux.client.SpringWebfluxHttpClientDecorator.DECORATE; import static io.opentelemetry.instrumentation.springwebflux.client.SpringWebfluxHttpClientDecorator.DECORATE;
import static io.opentelemetry.instrumentation.springwebflux.client.SpringWebfluxHttpClientDecorator.TRACER; import static io.opentelemetry.instrumentation.springwebflux.client.SpringWebfluxHttpClientDecorator.TRACER;
import static io.opentelemetry.trace.Span.Kind.CLIENT;
import io.grpc.Context; import io.grpc.Context;
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.Span; import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer; import io.opentelemetry.trace.Tracer;
@ -52,18 +49,13 @@ public class WebClientTracingFilter implements ExchangeFilterFunction {
@Override @Override
public Mono<ClientResponse> filter(final ClientRequest request, final ExchangeFunction next) { public Mono<ClientResponse> filter(final ClientRequest request, final ExchangeFunction next) {
final Span span = final Span span = DECORATE.getOrCreateSpan(request, tracer);
tracer.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan();
DECORATE.afterStart(span); DECORATE.afterStart(span);
try (final Scope scope = TRACER.withSpan(span)) { try (final Scope scope = TRACER.withSpan(span)) {
final ClientRequest mutatedRequest = final ClientRequest mutatedRequest =
ClientRequest.from(request) ClientRequest.from(request)
.headers( .headers(httpHeaders -> DECORATE.inject(Context.current(), httpHeaders))
httpHeaders ->
OpenTelemetry.getPropagators()
.getHttpTextFormat()
.inject(Context.current(), httpHeaders, SETTER))
.build(); .build();
DECORATE.onRequest(span, mutatedRequest); DECORATE.onRequest(span, mutatedRequest);