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;
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.trace.Span;
import io.opentelemetry.trace.Tracer;
import java.net.URI;
import java.util.List;
import org.springframework.http.HttpHeaders;
import org.springframework.web.reactive.function.client.ClientRequest;
import org.springframework.web.reactive.function.client.ClientResponse;
class SpringWebfluxHttpClientDecorator extends HttpClientDecorator<ClientRequest, ClientResponse> {
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 =
new SpringWebfluxHttpClientDecorator();
@ -37,6 +42,10 @@ class SpringWebfluxHttpClientDecorator extends HttpClientDecorator<ClientRequest
span.setAttribute("message", "The subscription was cancelled");
}
public void inject(Context context, HttpHeaders httpHeaders) {
getPropagators().getHttpTextFormat().inject(context, httpHeaders, SETTER);
}
@Override
protected String method(final ClientRequest httpRequest) {
return httpRequest.method().name();

View File

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