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;
|
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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue