Update jax-rs-client-2.0 to new agent api
This commit is contained in:
parent
b1f48185fa
commit
769873bb71
|
@ -1,6 +1,5 @@
|
||||||
package datadog.trace.instrumentation.connection_error.jersey;
|
package datadog.trace.instrumentation.connection_error.jersey;
|
||||||
|
|
||||||
import static io.opentracing.log.Fields.ERROR_OBJECT;
|
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
|
@ -8,11 +7,8 @@ import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import datadog.trace.agent.tooling.Instrumenter;
|
import datadog.trace.agent.tooling.Instrumenter;
|
||||||
|
import datadog.trace.instrumentation.api.AgentSpan;
|
||||||
import datadog.trace.instrumentation.jaxrs.ClientTracingFilter;
|
import datadog.trace.instrumentation.jaxrs.ClientTracingFilter;
|
||||||
import io.opentracing.Span;
|
|
||||||
import io.opentracing.log.Fields;
|
|
||||||
import io.opentracing.tag.Tags;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
@ -66,10 +62,10 @@ public final class JerseyClientConnectionErrorInstrumentation extends Instrument
|
||||||
@Advice.Thrown final Throwable throwable) {
|
@Advice.Thrown final Throwable throwable) {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
||||||
if (prop instanceof Span) {
|
if (prop instanceof AgentSpan) {
|
||||||
final Span span = (Span) prop;
|
final AgentSpan span = (AgentSpan) prop;
|
||||||
Tags.ERROR.set(span, true);
|
span.setError(true);
|
||||||
span.log(Collections.singletonMap(ERROR_OBJECT, throwable));
|
span.addThrowable(throwable);
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,10 +115,10 @@ public final class JerseyClientConnectionErrorInstrumentation extends Instrument
|
||||||
return wrapped.get();
|
return wrapped.get();
|
||||||
} catch (final ExecutionException e) {
|
} catch (final ExecutionException e) {
|
||||||
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
||||||
if (prop instanceof Span) {
|
if (prop instanceof AgentSpan) {
|
||||||
final Span span = (Span) prop;
|
final AgentSpan span = (AgentSpan) prop;
|
||||||
Tags.ERROR.set(span, true);
|
span.setError(true);
|
||||||
span.log(Collections.singletonMap(Fields.ERROR_OBJECT, e.getCause()));
|
span.addThrowable(e.getCause());
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
|
@ -136,10 +132,10 @@ public final class JerseyClientConnectionErrorInstrumentation extends Instrument
|
||||||
return wrapped.get(timeout, unit);
|
return wrapped.get(timeout, unit);
|
||||||
} catch (final ExecutionException e) {
|
} catch (final ExecutionException e) {
|
||||||
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
||||||
if (prop instanceof Span) {
|
if (prop instanceof AgentSpan) {
|
||||||
final Span span = (Span) prop;
|
final AgentSpan span = (AgentSpan) prop;
|
||||||
Tags.ERROR.set(span, true);
|
span.setError(true);
|
||||||
span.log(Collections.singletonMap(Fields.ERROR_OBJECT, e.getCause()));
|
span.addThrowable(e.getCause());
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package datadog.trace.instrumentation.connection_error.resteasy;
|
package datadog.trace.instrumentation.connection_error.resteasy;
|
||||||
|
|
||||||
import static io.opentracing.log.Fields.ERROR_OBJECT;
|
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
|
@ -8,11 +7,8 @@ import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import datadog.trace.agent.tooling.Instrumenter;
|
import datadog.trace.agent.tooling.Instrumenter;
|
||||||
|
import datadog.trace.instrumentation.api.AgentSpan;
|
||||||
import datadog.trace.instrumentation.jaxrs.ClientTracingFilter;
|
import datadog.trace.instrumentation.jaxrs.ClientTracingFilter;
|
||||||
import io.opentracing.Span;
|
|
||||||
import io.opentracing.log.Fields;
|
|
||||||
import io.opentracing.tag.Tags;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
@ -66,10 +62,10 @@ public final class ResteasyClientConnectionErrorInstrumentation extends Instrume
|
||||||
@Advice.Thrown final Throwable throwable) {
|
@Advice.Thrown final Throwable throwable) {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
||||||
if (prop instanceof Span) {
|
if (prop instanceof AgentSpan) {
|
||||||
final Span span = (Span) prop;
|
final AgentSpan span = (AgentSpan) prop;
|
||||||
Tags.ERROR.set(span, true);
|
span.setError(true);
|
||||||
span.log(Collections.singletonMap(ERROR_OBJECT, throwable));
|
span.addThrowable(throwable);
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,10 +115,10 @@ public final class ResteasyClientConnectionErrorInstrumentation extends Instrume
|
||||||
return wrapped.get();
|
return wrapped.get();
|
||||||
} catch (final ExecutionException e) {
|
} catch (final ExecutionException e) {
|
||||||
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
||||||
if (prop instanceof Span) {
|
if (prop instanceof AgentSpan) {
|
||||||
final Span span = (Span) prop;
|
final AgentSpan span = (AgentSpan) prop;
|
||||||
Tags.ERROR.set(span, true);
|
span.setError(true);
|
||||||
span.log(Collections.singletonMap(Fields.ERROR_OBJECT, e.getCause()));
|
span.addThrowable(e.getCause());
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
|
@ -136,10 +132,10 @@ public final class ResteasyClientConnectionErrorInstrumentation extends Instrume
|
||||||
return wrapped.get(timeout, unit);
|
return wrapped.get(timeout, unit);
|
||||||
} catch (final ExecutionException e) {
|
} catch (final ExecutionException e) {
|
||||||
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
final Object prop = context.getProperty(ClientTracingFilter.SPAN_PROPERTY_NAME);
|
||||||
if (prop instanceof Span) {
|
if (prop instanceof AgentSpan) {
|
||||||
final Span span = (Span) prop;
|
final AgentSpan span = (AgentSpan) prop;
|
||||||
Tags.ERROR.set(span, true);
|
span.setError(true);
|
||||||
span.log(Collections.singletonMap(Fields.ERROR_OBJECT, e.getCause()));
|
span.addThrowable(e.getCause());
|
||||||
span.finish();
|
span.finish();
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
package datadog.trace.instrumentation.jaxrs;
|
package datadog.trace.instrumentation.jaxrs;
|
||||||
|
|
||||||
|
import static datadog.trace.instrumentation.api.AgentTracer.activateSpan;
|
||||||
|
import static datadog.trace.instrumentation.api.AgentTracer.propagate;
|
||||||
|
import static datadog.trace.instrumentation.api.AgentTracer.startSpan;
|
||||||
|
import static datadog.trace.instrumentation.jaxrs.InjectAdapter.SETTER;
|
||||||
import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.DECORATE;
|
import static datadog.trace.instrumentation.jaxrs.JaxRsClientDecorator.DECORATE;
|
||||||
|
|
||||||
import datadog.trace.api.DDTags;
|
import datadog.trace.api.DDTags;
|
||||||
import io.opentracing.Scope;
|
import datadog.trace.instrumentation.api.AgentScope;
|
||||||
import io.opentracing.Span;
|
import datadog.trace.instrumentation.api.AgentSpan;
|
||||||
import io.opentracing.propagation.Format;
|
|
||||||
import io.opentracing.util.GlobalTracer;
|
|
||||||
import javax.annotation.Priority;
|
import javax.annotation.Priority;
|
||||||
import javax.ws.rs.Priorities;
|
import javax.ws.rs.Priorities;
|
||||||
import javax.ws.rs.client.ClientRequestContext;
|
import javax.ws.rs.client.ClientRequestContext;
|
||||||
|
@ -22,20 +24,14 @@ public class ClientTracingFilter implements ClientRequestFilter, ClientResponseF
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void filter(final ClientRequestContext requestContext) {
|
public void filter(final ClientRequestContext requestContext) {
|
||||||
final Span span =
|
final AgentSpan span =
|
||||||
GlobalTracer.get()
|
startSpan("jax-rs.client.call")
|
||||||
.buildSpan("jax-rs.client.call")
|
.setTag(DDTags.RESOURCE_NAME, requestContext.getMethod() + " jax-rs.client.call");
|
||||||
.withTag(DDTags.RESOURCE_NAME, requestContext.getMethod() + " jax-rs.client.call")
|
try (final AgentScope scope = activateSpan(span, false)) {
|
||||||
.start();
|
|
||||||
try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) {
|
|
||||||
DECORATE.afterStart(span);
|
DECORATE.afterStart(span);
|
||||||
DECORATE.onRequest(span, requestContext);
|
DECORATE.onRequest(span, requestContext);
|
||||||
|
|
||||||
GlobalTracer.get()
|
propagate().inject(span, requestContext, SETTER);
|
||||||
.inject(
|
|
||||||
span.context(),
|
|
||||||
Format.Builtin.HTTP_HEADERS,
|
|
||||||
new InjectAdapter(requestContext.getHeaders()));
|
|
||||||
|
|
||||||
requestContext.setProperty(SPAN_PROPERTY_NAME, span);
|
requestContext.setProperty(SPAN_PROPERTY_NAME, span);
|
||||||
}
|
}
|
||||||
|
@ -45,8 +41,8 @@ public class ClientTracingFilter implements ClientRequestFilter, ClientResponseF
|
||||||
public void filter(
|
public void filter(
|
||||||
final ClientRequestContext requestContext, final ClientResponseContext responseContext) {
|
final ClientRequestContext requestContext, final ClientResponseContext responseContext) {
|
||||||
final Object spanObj = requestContext.getProperty(SPAN_PROPERTY_NAME);
|
final Object spanObj = requestContext.getProperty(SPAN_PROPERTY_NAME);
|
||||||
if (spanObj instanceof Span) {
|
if (spanObj instanceof AgentSpan) {
|
||||||
final Span span = (Span) spanObj;
|
final AgentSpan span = (AgentSpan) spanObj;
|
||||||
DECORATE.onResponse(span, responseContext);
|
DECORATE.onResponse(span, responseContext);
|
||||||
DECORATE.beforeFinish(span);
|
DECORATE.beforeFinish(span);
|
||||||
span.finish();
|
span.finish();
|
||||||
|
|
|
@ -1,26 +1,15 @@
|
||||||
package datadog.trace.instrumentation.jaxrs;
|
package datadog.trace.instrumentation.jaxrs;
|
||||||
|
|
||||||
import io.opentracing.propagation.TextMap;
|
import datadog.trace.instrumentation.api.AgentPropagation;
|
||||||
import java.util.Iterator;
|
import javax.ws.rs.client.ClientRequestContext;
|
||||||
import java.util.Map;
|
|
||||||
import javax.ws.rs.core.MultivaluedMap;
|
|
||||||
|
|
||||||
public final class InjectAdapter implements TextMap {
|
public final class InjectAdapter implements AgentPropagation.Setter<ClientRequestContext> {
|
||||||
private final MultivaluedMap<String, Object> map;
|
|
||||||
|
|
||||||
public InjectAdapter(final MultivaluedMap<String, Object> map) {
|
public static final InjectAdapter SETTER = new InjectAdapter();
|
||||||
this.map = map;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<Map.Entry<String, String>> iterator() {
|
public void set(final ClientRequestContext carrier, final String key, final String value) {
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"InjectAdapter should only be used with Tracer.inject()");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void put(final String key, final String value) {
|
|
||||||
// Don't allow duplicates.
|
// Don't allow duplicates.
|
||||||
map.putSingle(key, value);
|
carrier.getHeaders().putSingle(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue