Update jax-rs-client-2.0 to new agent api

This commit is contained in:
Trask Stalnaker 2019-10-19 11:57:43 -07:00
parent b1f48185fa
commit 769873bb71
4 changed files with 45 additions and 68 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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);
} }
} }