Move webflux context injection to the decorator (#686)
* move webflux context injection to the decorator * add if statement
This commit is contained in:
parent
e58dd71b74
commit
5bab5b9d7d
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue