From 1440d95fb5a8ada6eb731c62b29f788312cdff45 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Wed, 5 Feb 2020 13:20:07 -0800 Subject: [PATCH] Last instrumentation conversion to OpenTelemetry API and remove prior agent API (#128) * Convert OkHttp3 to use OpenTelemetry API directly * Remove Agent API --- .../instrumentation/api/AgentPropagation.java | 19 - .../auto/instrumentation/api/AgentScope.java | 11 - .../auto/instrumentation/api/AgentSpan.java | 34 -- .../auto/instrumentation/api/AgentTracer.java | 219 ------------ .../auto/decorator/BaseDecorator.java | 47 --- .../auto/decorator/ClientDecorator.java | 8 - .../decorator/DatabaseClientDecorator.java | 20 -- .../auto/decorator/HttpClientDecorator.java | 13 - .../auto/decorator/HttpServerDecorator.java | 19 - .../auto/decorator/OrmClientDecorator.java | 7 - .../auto/decorator/ServerDecorator.java | 8 - .../auto/tooling/AgentTracerImpl.java | 327 ------------------ .../auto/tooling/TracerInstaller.java | 10 - .../okhttp3/RequestBuilderInjectAdapter.java | 6 +- .../okhttp3/TracingInterceptor.java | 19 +- .../TomcatClassloadingInstrumentation.java | 6 +- .../test/groovy/TomcatClassloadingTest.groovy | 6 +- .../auto/test/AgentTestRunner.java | 4 - 18 files changed, 19 insertions(+), 764 deletions(-) delete mode 100644 agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentPropagation.java delete mode 100644 agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentScope.java delete mode 100644 agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentSpan.java delete mode 100644 agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentTracer.java delete mode 100644 agent-tooling/src/main/java/io/opentelemetry/auto/tooling/AgentTracerImpl.java diff --git a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentPropagation.java b/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentPropagation.java deleted file mode 100644 index 6f29621420..0000000000 --- a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentPropagation.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.opentelemetry.auto.instrumentation.api; - -@Deprecated -public interface AgentPropagation { - - void inject(AgentSpan span, C carrier, Setter setter); - - interface Setter { - void set(C carrier, String key, String value); - } - - AgentSpan.Context extract(C carrier, Getter getter); - - interface Getter { - Iterable keys(C carrier); - - String get(C carrier, String key); - } -} diff --git a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentScope.java b/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentScope.java deleted file mode 100644 index 31b4263502..0000000000 --- a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentScope.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.opentelemetry.auto.instrumentation.api; - -import java.io.Closeable; - -@Deprecated -public interface AgentScope extends Closeable { - AgentSpan span(); - - @Override - void close(); -} diff --git a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentSpan.java b/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentSpan.java deleted file mode 100644 index 9bbb070529..0000000000 --- a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentSpan.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.opentelemetry.auto.instrumentation.api; - -import io.opentelemetry.trace.Span; - -@Deprecated -public interface AgentSpan { - AgentSpan setAttribute(String key, boolean value); - - AgentSpan setAttribute(String key, int value); - - AgentSpan setAttribute(String key, long value); - - AgentSpan setAttribute(String key, double value); - - AgentSpan setAttribute(String key, String value); - - AgentSpan setError(boolean error); - - AgentSpan setErrorMessage(String errorMessage); - - AgentSpan addThrowable(Throwable throwable); - - Context context(); - - void finish(); - - String getSpanName(); - - void setSpanName(String spanName); - - Span getSpan(); - - interface Context {} -} diff --git a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentTracer.java b/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentTracer.java deleted file mode 100644 index 0c6983143f..0000000000 --- a/agent-bootstrap/src/main/java/io/opentelemetry/auto/instrumentation/api/AgentTracer.java +++ /dev/null @@ -1,219 +0,0 @@ -package io.opentelemetry.auto.instrumentation.api; - -import io.opentelemetry.auto.instrumentation.api.AgentSpan.Context; -import io.opentelemetry.trace.DefaultSpan; -import io.opentelemetry.trace.Span; -import java.util.concurrent.atomic.AtomicReference; - -@Deprecated -public class AgentTracer { - - // Implicit parent - public static AgentSpan startSpan(final String spanName) { - return get().startSpan(spanName); - } - - // Implicit parent - public static AgentSpan startSpan(final String spanName, final long startTimeMicros) { - return get().startSpan(spanName, startTimeMicros); - } - - // Explicit parent - public static AgentSpan startSpan(final String spanName, final AgentSpan.Context parent) { - return get().startSpan(spanName, parent); - } - - // Explicit parent - public static AgentSpan startSpan( - final String spanName, final AgentSpan.Context parent, final long startTimeMicros) { - return get().startSpan(spanName, parent, startTimeMicros); - } - - public static AgentScope activateSpan(final AgentSpan span, final boolean finishSpanOnClose) { - return get().activateSpan(span, finishSpanOnClose); - } - - public static AgentSpan activeSpan() { - return get().activeSpan(); - } - - public static AgentPropagation propagate() { - return get().propagate(); - } - - public static AgentSpan noopSpan() { - return get().noopSpan(); - } - - private static final TracerAPI DEFAULT = new NoopTracerAPI(); - - private static final AtomicReference provider = new AtomicReference<>(DEFAULT); - - public static void registerIfAbsent(final TracerAPI trace) { - provider.compareAndSet(DEFAULT, trace); - } - - public static TracerAPI get() { - return provider.get(); - } - - // Not intended to be constructed. - private AgentTracer() {} - - public interface TracerAPI { - AgentSpan startSpan(String spanName); - - AgentSpan startSpan(String spanName, long startTimeMicros); - - AgentSpan startSpan(String spanName, AgentSpan.Context parent); - - AgentSpan startSpan(String spanName, AgentSpan.Context parent, long startTimeMicros); - - AgentScope activateSpan(AgentSpan span, boolean finishSpanOnClose); - - AgentSpan activeSpan(); - - AgentPropagation propagate(); - - AgentSpan noopSpan(); - } - - static class NoopTracerAPI implements TracerAPI { - - protected NoopTracerAPI() {} - - @Override - public AgentSpan startSpan(final String spanName) { - return NoopAgentSpan.INSTANCE; - } - - @Override - public AgentSpan startSpan(final String spanName, final long startTimeMicros) { - return NoopAgentSpan.INSTANCE; - } - - @Override - public AgentSpan startSpan(final String spanName, final Context parent) { - return NoopAgentSpan.INSTANCE; - } - - @Override - public AgentSpan startSpan( - final String spanName, final Context parent, final long startTimeMicros) { - return NoopAgentSpan.INSTANCE; - } - - @Override - public AgentScope activateSpan(final AgentSpan span, final boolean finishSpanOnClose) { - return NoopAgentScope.INSTANCE; - } - - @Override - public AgentSpan activeSpan() { - return NoopAgentSpan.INSTANCE; - } - - @Override - public AgentPropagation propagate() { - return NoopAgentPropagation.INSTANCE; - } - - @Override - public AgentSpan noopSpan() { - return NoopAgentSpan.INSTANCE; - } - } - - static class NoopAgentSpan implements AgentSpan { - static final NoopAgentSpan INSTANCE = new NoopAgentSpan(); - - @Override - public AgentSpan setAttribute(final String key, final boolean value) { - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final int value) { - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final long value) { - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final double value) { - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final String value) { - return this; - } - - @Override - public AgentSpan setError(final boolean error) { - return this; - } - - @Override - public AgentSpan setErrorMessage(final String errorMessage) { - return this; - } - - @Override - public AgentSpan addThrowable(final Throwable throwable) { - return this; - } - - @Override - public Context context() { - return NoopContext.INSTANCE; - } - - @Override - public void finish() {} - - @Override - public String getSpanName() { - return ""; - } - - @Override - public void setSpanName(final String spanName) {} - - @Override - public Span getSpan() { - return DefaultSpan.getInvalid(); - } - } - - public static class NoopAgentScope implements AgentScope { - public static final NoopAgentScope INSTANCE = new NoopAgentScope(); - - @Override - public AgentSpan span() { - return NoopAgentSpan.INSTANCE; - } - - @Override - public void close() {} - } - - static class NoopAgentPropagation implements AgentPropagation { - static final NoopAgentPropagation INSTANCE = new NoopAgentPropagation(); - - @Override - public void inject(final AgentSpan span, final C carrier, final Setter setter) {} - - @Override - public Context extract(final C carrier, final Getter getter) { - return NoopContext.INSTANCE; - } - } - - static class NoopContext implements Context { - static final NoopContext INSTANCE = new NoopContext(); - } -} diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java index bdbcd52976..552ce825ca 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java @@ -1,7 +1,5 @@ package io.opentelemetry.auto.decorator; -import io.opentelemetry.auto.instrumentation.api.AgentScope; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.auto.instrumentation.api.Tags; import io.opentelemetry.trace.Span; @@ -23,12 +21,6 @@ public abstract class BaseDecorator { protected abstract String getComponentName(); - @Deprecated - public AgentSpan afterStart(final AgentSpan span) { - afterStart(span.getSpan()); - return span; - } - public Span afterStart(final Span span) { assert span != null; final String spanType = getSpanType(); @@ -42,37 +34,11 @@ public abstract class BaseDecorator { return span; } - @Deprecated - public AgentScope beforeFinish(final AgentScope scope) { - assert scope != null; - beforeFinish(scope.span()); - return scope; - } - - @Deprecated - public AgentSpan beforeFinish(final AgentSpan span) { - beforeFinish(span.getSpan()); - return span; - } - public Span beforeFinish(final Span span) { assert span != null; return span; } - @Deprecated - public AgentScope onError(final AgentScope scope, final Throwable throwable) { - assert scope != null; - onError(scope.span(), throwable); - return scope; - } - - @Deprecated - public AgentSpan onError(final AgentSpan span, final Throwable throwable) { - onError(span.getSpan(), throwable); - return span; - } - public Span onError(final Span span, final Throwable throwable) { assert span != null; if (throwable != null) { @@ -83,13 +49,6 @@ public abstract class BaseDecorator { return span; } - @Deprecated - public AgentSpan onPeerConnection( - final AgentSpan span, final InetSocketAddress remoteConnection) { - onPeerConnection(span.getSpan(), remoteConnection); - return span; - } - public Span onPeerConnection(final Span span, final InetSocketAddress remoteConnection) { assert span != null; if (remoteConnection != null) { @@ -101,12 +60,6 @@ public abstract class BaseDecorator { return span; } - @Deprecated - public AgentSpan onPeerConnection(final AgentSpan span, final InetAddress remoteAddress) { - onPeerConnection(span.getSpan(), remoteAddress); - return span; - } - public Span onPeerConnection(final Span span, final InetAddress remoteAddress) { assert span != null; if (remoteAddress != null) { diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ClientDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ClientDecorator.java index 64e35caf97..26a4756487 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ClientDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ClientDecorator.java @@ -1,6 +1,5 @@ package io.opentelemetry.auto.decorator; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.auto.instrumentation.api.Tags; import io.opentelemetry.trace.Span; @@ -13,13 +12,6 @@ public abstract class ClientDecorator extends BaseDecorator { return Tags.SPAN_KIND_CLIENT; } - @Deprecated - @Override - public AgentSpan afterStart(final AgentSpan span) { - afterStart(span.getSpan()); - return span; - } - @Override public Span afterStart(final Span span) { assert span != null; diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/DatabaseClientDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/DatabaseClientDecorator.java index b8934cc0c7..a06a73c74d 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/DatabaseClientDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/DatabaseClientDecorator.java @@ -1,7 +1,6 @@ package io.opentelemetry.auto.decorator; import io.opentelemetry.auto.config.Config; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.auto.instrumentation.api.Tags; import io.opentelemetry.trace.Span; @@ -14,13 +13,6 @@ public abstract class DatabaseClientDecorator extends ClientDecorato protected abstract String dbInstance(CONNECTION connection); - @Deprecated - @Override - public AgentSpan afterStart(final AgentSpan span) { - afterStart(span.getSpan()); - return span; - } - @Override public Span afterStart(final Span span) { assert span != null; @@ -38,12 +30,6 @@ public abstract class DatabaseClientDecorator extends ClientDecorato * @param connection * @return */ - @Deprecated - public AgentSpan onConnection(final AgentSpan span, final CONNECTION connection) { - onConnection(span.getSpan(), connection); - return span; - } - public Span onConnection(final Span span, final CONNECTION connection) { assert span != null; if (connection != null) { @@ -63,12 +49,6 @@ public abstract class DatabaseClientDecorator extends ClientDecorato return span; } - @Deprecated - public AgentSpan onStatement(final AgentSpan span, final String statement) { - onStatement(span.getSpan(), statement); - return span; - } - public Span onStatement(final Span span, final String statement) { assert span != null; span.setAttribute(Tags.DB_STATEMENT, statement); diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java index c148dd42b0..62b44b9aa0 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java @@ -1,7 +1,6 @@ package io.opentelemetry.auto.decorator; import io.opentelemetry.auto.config.Config; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.auto.instrumentation.api.SpanTypes; import io.opentelemetry.auto.instrumentation.api.Tags; @@ -34,12 +33,6 @@ public abstract class HttpClientDecorator extends ClientDecor return null; } - @Deprecated - public AgentSpan onRequest(final AgentSpan span, final REQUEST request) { - onRequest(span.getSpan(), request); - return span; - } - public Span onRequest(final Span span, final REQUEST request) { assert span != null; if (request != null) { @@ -105,12 +98,6 @@ public abstract class HttpClientDecorator extends ClientDecor return span; } - @Deprecated - public AgentSpan onResponse(final AgentSpan span, final RESPONSE response) { - onResponse(span.getSpan(), response); - return span; - } - public Span onResponse(final Span span, final RESPONSE response) { assert span != null; if (response != null) { diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java index 99cd4fc248..afe8e9fede 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java @@ -1,7 +1,6 @@ package io.opentelemetry.auto.decorator; import io.opentelemetry.auto.config.Config; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.auto.instrumentation.api.SpanTypes; import io.opentelemetry.auto.instrumentation.api.Tags; @@ -38,12 +37,6 @@ public abstract class HttpServerDecorator extends return SpanTypes.HTTP_SERVER; } - @Deprecated - public AgentSpan onRequest(final AgentSpan span, final REQUEST request) { - onRequest(span.getSpan(), request); - return span; - } - public Span onRequest(final Span span, final REQUEST request) { assert span != null; if (request != null) { @@ -91,12 +84,6 @@ public abstract class HttpServerDecorator extends return span; } - @Deprecated - public AgentSpan onConnection(final AgentSpan span, final CONNECTION connection) { - onConnection(span.getSpan(), connection); - return span; - } - public Span onConnection(final Span span, final CONNECTION connection) { assert span != null; if (connection != null) { @@ -121,12 +108,6 @@ public abstract class HttpServerDecorator extends return span; } - @Deprecated - public AgentSpan onResponse(final AgentSpan span, final RESPONSE response) { - onResponse(span.getSpan(), response); - return span; - } - public Span onResponse(final Span span, final RESPONSE response) { assert span != null; if (response != null) { diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/OrmClientDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/OrmClientDecorator.java index d1cfb5b2cb..ca4a24f736 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/OrmClientDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/OrmClientDecorator.java @@ -1,6 +1,5 @@ package io.opentelemetry.auto.decorator; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.trace.Span; @@ -8,12 +7,6 @@ public abstract class OrmClientDecorator extends DatabaseClientDecorator { public abstract String entityName(final Object entity); - @Deprecated - public AgentSpan onOperation(final AgentSpan span, final Object entity) { - onOperation(span.getSpan(), entity); - return span; - } - public Span onOperation(final Span span, final Object entity) { assert span != null; diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ServerDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ServerDecorator.java index 0790a33eed..97badc3080 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ServerDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/ServerDecorator.java @@ -1,18 +1,10 @@ package io.opentelemetry.auto.decorator; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; import io.opentelemetry.auto.instrumentation.api.Tags; import io.opentelemetry.trace.Span; public abstract class ServerDecorator extends BaseDecorator { - @Deprecated - @Override - public AgentSpan afterStart(final AgentSpan span) { - afterStart(span.getSpan()); - return span; - } - @Override public Span afterStart(final Span span) { assert span != null; diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/AgentTracerImpl.java b/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/AgentTracerImpl.java deleted file mode 100644 index 994298a2ac..0000000000 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/AgentTracerImpl.java +++ /dev/null @@ -1,327 +0,0 @@ -package io.opentelemetry.auto.tooling; - -import static java.util.concurrent.TimeUnit.MICROSECONDS; - -import io.opentelemetry.auto.instrumentation.api.AgentPropagation; -import io.opentelemetry.auto.instrumentation.api.AgentPropagation.Getter; -import io.opentelemetry.auto.instrumentation.api.AgentScope; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; -import io.opentelemetry.auto.instrumentation.api.AgentTracer.TracerAPI; -import io.opentelemetry.auto.instrumentation.api.MoreTags; -import io.opentelemetry.context.Scope; -import io.opentelemetry.context.propagation.HttpTextFormat; -import io.opentelemetry.sdk.trace.ReadableSpan; -import io.opentelemetry.trace.DefaultSpan; -import io.opentelemetry.trace.Span; -import io.opentelemetry.trace.SpanContext; -import io.opentelemetry.trace.Status; -import io.opentelemetry.trace.Tracer; -import java.io.PrintWriter; -import java.io.StringWriter; - -public final class AgentTracerImpl implements TracerAPI { - - private final Tracer tracer; - private final AgentPropagationImpl propagation = new AgentPropagationImpl(); - - private final AgentSpanImpl noopSpan; - - public AgentTracerImpl(final Tracer tracer) { - this.tracer = tracer; - noopSpan = new AgentSpanImpl(DefaultSpan.getInvalid()); - } - - @Override - public AgentSpan startSpan(final String spanName) { - return new AgentSpanImpl(spanName); - } - - @Override - public AgentSpan startSpan(final String spanName, final long startTimeMicros) { - return new AgentSpanImpl(spanName, startTimeMicros); - } - - @Override - public AgentSpan startSpan(final String spanName, final AgentSpan.Context parent) { - return new AgentSpanImpl(spanName, (AgentContextImpl) parent); - } - - @Override - public AgentSpan startSpan( - final String spanName, final AgentSpan.Context parent, final long startTimeMicros) { - return new AgentSpanImpl(spanName, parent, startTimeMicros); - } - - @Override - public AgentScope activateSpan(final AgentSpan span, final boolean finishSpanOnClose) { - final Scope scope = tracer.withSpan(((AgentSpanImpl) span).span); - return new AgentScopeImpl(span, scope, finishSpanOnClose); - } - - @Override - public AgentSpan activeSpan() { - final Span span = tracer.getCurrentSpan(); - if (!span.getContext().isValid()) { - return null; - } - return new AgentSpanImpl(span); - } - - @Override - public AgentPropagation propagate() { - return propagation; - } - - @Override - public AgentSpan noopSpan() { - return noopSpan; - } - - private final class AgentSpanImpl implements AgentSpan { - - private final Span span; - - private AgentSpanImpl(final String spanName) { - this(tracer.spanBuilder(spanName).startSpan()); - } - - private AgentSpanImpl(final String spanName, final long startTimeMicros) { - this( - tracer - .spanBuilder(spanName) - .setStartTimestamp(MICROSECONDS.toNanos(startTimeMicros)) - .startSpan()); - } - - private AgentSpanImpl(final String spanName, final AgentContextImpl parent) { - final SpanContext context = parent.context; - final Span.Builder spanBuilder = tracer.spanBuilder(spanName); - if (context == null) { - spanBuilder.setNoParent(); - } else { - spanBuilder.setParent(context); - } - span = spanBuilder.startSpan(); - } - - private AgentSpanImpl(final String spanName, final Context parent, final long startTimeMicros) { - final SpanContext context = ((AgentContextImpl) parent).context; - final Span.Builder spanBuilder = - tracer.spanBuilder(spanName).setStartTimestamp(MICROSECONDS.toNanos(startTimeMicros)); - if (context == null) { - spanBuilder.setNoParent(); - } else { - spanBuilder.setParent(context); - } - span = spanBuilder.startSpan(); - } - - private AgentSpanImpl(final Span span) { - this.span = span; - } - - @Override - public AgentSpan setAttribute(final String key, final boolean value) { - span.setAttribute(key, value); - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final int value) { - span.setAttribute(key, value); - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final long value) { - span.setAttribute(key, value); - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final double value) { - span.setAttribute(key, value); - return this; - } - - @Override - public AgentSpan setAttribute(final String key, final String value) { - if (value != null && !value.isEmpty()) { - span.setAttribute(key, value); - } - return this; - } - - @Override - public AgentSpan setError(final boolean error) { - span.setStatus(Status.UNKNOWN); - return this; - } - - @Override - public AgentSpan setErrorMessage(final String errorMessage) { - span.setAttribute(MoreTags.ERROR_MSG, errorMessage); - return this; - } - - @Override - public AgentSpan addThrowable(final Throwable throwable) { - final String message = throwable.getMessage(); - if (message != null) { - span.setAttribute(MoreTags.ERROR_MSG, message); - } - span.setAttribute(MoreTags.ERROR_TYPE, throwable.getClass().getName()); - - final StringWriter errorString = new StringWriter(); - throwable.printStackTrace(new PrintWriter(errorString)); - span.setAttribute(MoreTags.ERROR_STACK, errorString.toString()); - return this; - } - - @Override - public AgentContextImpl context() { - final SpanContext context = span.getContext(); - return new AgentContextImpl(context); - } - - @Override - public void finish() { - span.end(); - } - - @Override - public String getSpanName() { - if (span instanceof ReadableSpan) { - return ((ReadableSpan) span).getName(); - } else { - return ""; - } - } - - @Override - public void setSpanName(final String spanName) { - span.updateName(spanName); - } - - @Override - public Span getSpan() { - return span; - } - - @Override - public int hashCode() { - return span.hashCode(); - } - - @Override - public boolean equals(final Object obj) { - if (!(obj instanceof AgentSpanImpl)) { - return false; - } - final AgentSpanImpl other = (AgentSpanImpl) obj; - return span.equals(other.span); - } - } - - private final class AgentScopeImpl implements AgentScope { - - private final AgentSpanImpl span; - private final Scope scope; - private final boolean finishSpanOnClose; - - private AgentScopeImpl( - final AgentSpan span, final Scope scope, final boolean finishSpanOnClose) { - assert span instanceof AgentSpanImpl; - this.span = (AgentSpanImpl) span; - this.scope = scope; - this.finishSpanOnClose = finishSpanOnClose; - } - - @Override - public void close() { - scope.close(); - if (finishSpanOnClose) { - span.finish(); - } - } - - @Override - public AgentSpan span() { - return span; - } - - @Override - public int hashCode() { - return scope.hashCode(); - } - - @Override - public boolean equals(final Object obj) { - if (!(obj instanceof AgentScopeImpl)) { - return false; - } - final AgentScopeImpl other = (AgentScopeImpl) obj; - return scope.equals(other.scope); - } - } - - private final class AgentPropagationImpl implements AgentPropagation { - - @Override - public void inject(final AgentSpan span, final C carrier, final Setter setter) { - assert span instanceof AgentSpanImpl; - tracer - .getHttpTextFormat() - .inject( - ((AgentSpanImpl) span).getSpan().getContext(), - carrier, - new AgentPropagationImpl.Injector<>(setter)); - } - - private final class Injector implements HttpTextFormat.Setter { - private final Setter setter; - - private Injector(final Setter setter) { - this.setter = setter; - } - - @Override - public void put(final C carrier, final String key, final String value) { - setter.set(carrier, key, value); - } - } - - @Override - public AgentSpan.Context extract(final C carrier, final Getter getter) { - SpanContext extract; - try { - extract = tracer.getHttpTextFormat().extract(carrier, new Extractor<>(getter)); - } catch (final IllegalArgumentException e) { - extract = null; - } - return new AgentContextImpl(extract); - } - } - - private static final class Extractor implements HttpTextFormat.Getter { - - private final Getter getter; - - private Extractor(final Getter getter) { - this.getter = getter; - } - - @Override - public String get(final C carrier, final String key) { - return getter.get(carrier, key); - } - } - - private static final class AgentContextImpl implements AgentSpan.Context { - private final SpanContext context; - - private AgentContextImpl(final SpanContext context) { - this.context = context; - } - } -} diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java b/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java index c58ef699c4..c22b4e530c 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java @@ -1,14 +1,11 @@ package io.opentelemetry.auto.tooling; -import io.opentelemetry.OpenTelemetry; import io.opentelemetry.auto.config.Config; -import io.opentelemetry.auto.instrumentation.api.AgentTracer; import io.opentelemetry.auto.tooling.exporter.ExporterConfigException; import io.opentelemetry.auto.tooling.exporter.ExporterRegistry; import io.opentelemetry.auto.tooling.exporter.SpanExporterFactory; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.export.SimpleSpansProcessor; -import io.opentelemetry.trace.Tracer; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -32,13 +29,6 @@ public class TracerInstaller { } else { log.warn("No exporter is specified. Tracing will run but spans are dropped"); } - final Tracer tracer = OpenTelemetry.getTracerFactory().get("io.opentelemetry.auto"); - try { - AgentTracer.registerIfAbsent(new AgentTracerImpl(tracer)); - } catch (final RuntimeException re) { - log.warn("Failed to register tracer '" + tracer + "'", re); - } - } else { log.debug("Tracing is disabled."); } diff --git a/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/RequestBuilderInjectAdapter.java b/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/RequestBuilderInjectAdapter.java index 75b6fc8a98..42022f0be6 100644 --- a/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/RequestBuilderInjectAdapter.java +++ b/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/RequestBuilderInjectAdapter.java @@ -1,6 +1,6 @@ package io.opentelemetry.auto.instrumentation.okhttp3; -import io.opentelemetry.auto.instrumentation.api.AgentPropagation; +import io.opentelemetry.context.propagation.HttpTextFormat; import okhttp3.Request; /** @@ -8,12 +8,12 @@ import okhttp3.Request; * * @author Pavol Loffay */ -public class RequestBuilderInjectAdapter implements AgentPropagation.Setter { +public class RequestBuilderInjectAdapter implements HttpTextFormat.Setter { public static final RequestBuilderInjectAdapter SETTER = new RequestBuilderInjectAdapter(); @Override - public void set(final Request.Builder carrier, final String key, final String value) { + public void put(final Request.Builder carrier, final String key, final String value) { carrier.addHeader(key, value); } } diff --git a/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/TracingInterceptor.java b/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/TracingInterceptor.java index 34c577cabd..82ec487f1e 100644 --- a/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/TracingInterceptor.java +++ b/instrumentation/okhttp-3/src/main/java/io/opentelemetry/auto/instrumentation/okhttp3/TracingInterceptor.java @@ -1,13 +1,12 @@ package io.opentelemetry.auto.instrumentation.okhttp3; -import static io.opentelemetry.auto.instrumentation.api.AgentTracer.activateSpan; -import static io.opentelemetry.auto.instrumentation.api.AgentTracer.propagate; -import static io.opentelemetry.auto.instrumentation.api.AgentTracer.startSpan; import static io.opentelemetry.auto.instrumentation.okhttp3.OkHttpClientDecorator.DECORATE; import static io.opentelemetry.auto.instrumentation.okhttp3.RequestBuilderInjectAdapter.SETTER; -import io.opentelemetry.auto.instrumentation.api.AgentScope; -import io.opentelemetry.auto.instrumentation.api.AgentSpan; +import io.opentelemetry.OpenTelemetry; +import io.opentelemetry.context.Scope; +import io.opentelemetry.trace.Span; +import io.opentelemetry.trace.Tracer; import java.io.IOException; import lombok.extern.slf4j.Slf4j; import okhttp3.Interceptor; @@ -16,27 +15,31 @@ import okhttp3.Response; @Slf4j public class TracingInterceptor implements Interceptor { + public static final Tracer TRACER = OpenTelemetry.getTracerFactory().get("io.opentelemetry.auto"); + @Override public Response intercept(final Chain chain) throws IOException { - final AgentSpan span = startSpan("okhttp.request"); + final Span span = TRACER.spanBuilder("okhttp.request").startSpan(); - try (final AgentScope scope = activateSpan(span, true)) { + try (final Scope scope = TRACER.withSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, chain.request()); final Request.Builder requestBuilder = chain.request().newBuilder(); - propagate().inject(span, requestBuilder, SETTER); + TRACER.getHttpTextFormat().inject(span.getContext(), requestBuilder, SETTER); final Response response; try { response = chain.proceed(requestBuilder.build()); } catch (final Exception e) { DECORATE.onError(span, e); + span.end(); throw e; } DECORATE.onResponse(span, response); DECORATE.beforeFinish(span); + span.end(); return response; } } diff --git a/instrumentation/tomcat-classloading/src/main/java/io/opentelemetry/auto/instrumentation/tomcat/TomcatClassloadingInstrumentation.java b/instrumentation/tomcat-classloading/src/main/java/io/opentelemetry/auto/instrumentation/tomcat/TomcatClassloadingInstrumentation.java index 62c2f50205..01a77b0994 100644 --- a/instrumentation/tomcat-classloading/src/main/java/io/opentelemetry/auto/instrumentation/tomcat/TomcatClassloadingInstrumentation.java +++ b/instrumentation/tomcat-classloading/src/main/java/io/opentelemetry/auto/instrumentation/tomcat/TomcatClassloadingInstrumentation.java @@ -8,7 +8,6 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; -import io.opentelemetry.auto.instrumentation.api.AgentTracer; import io.opentelemetry.auto.tooling.Constants; import io.opentelemetry.auto.tooling.Instrumenter; import java.util.Map; @@ -19,9 +18,8 @@ import net.bytebuddy.matcher.ElementMatcher; /** * Instrument Tomcat's web app classloader so it loads agent bootstrap classes from parent - * classloader. Without this change web apps get their own versions of agent classes leading to - * there being multiple {@link AgentTracer}s in existence, some of them not configured properly. - * This is really the same idea we have for OSGi and JBoss. + * classloader. Without this change web apps get their own versions of agent classes. This is really + * the same idea we have for OSGi and JBoss. */ @AutoService(Instrumenter.class) public final class TomcatClassloadingInstrumentation extends Instrumenter.Default { diff --git a/instrumentation/tomcat-classloading/src/test/groovy/TomcatClassloadingTest.groovy b/instrumentation/tomcat-classloading/src/test/groovy/TomcatClassloadingTest.groovy index 2f8537e52f..a3ca1dd6bb 100644 --- a/instrumentation/tomcat-classloading/src/test/groovy/TomcatClassloadingTest.groovy +++ b/instrumentation/tomcat-classloading/src/test/groovy/TomcatClassloadingTest.groovy @@ -1,4 +1,4 @@ -import io.opentelemetry.auto.instrumentation.api.AgentTracer +import io.opentelemetry.auto.instrumentation.api.Tags import io.opentelemetry.auto.test.AgentTestRunner import org.apache.catalina.WebResource import org.apache.catalina.WebResourceRoot @@ -22,9 +22,9 @@ class TomcatClassloadingTest extends AgentTestRunner { when: // If instrumentation didn't work this would blow up with NPE due to incomplete resources mocking - def clazz = classloader.loadClass("io.opentelemetry.auto.instrumentation.api.AgentTracer") + def clazz = classloader.loadClass("io.opentelemetry.auto.instrumentation.api.Tags") then: - clazz == AgentTracer + clazz == Tags } } diff --git a/testing/src/main/groovy/io/opentelemetry/auto/test/AgentTestRunner.java b/testing/src/main/groovy/io/opentelemetry/auto/test/AgentTestRunner.java index d24858fa6d..960b1d8fb8 100644 --- a/testing/src/main/groovy/io/opentelemetry/auto/test/AgentTestRunner.java +++ b/testing/src/main/groovy/io/opentelemetry/auto/test/AgentTestRunner.java @@ -10,10 +10,8 @@ import groovy.lang.DelegatesTo; import groovy.transform.stc.ClosureParams; import groovy.transform.stc.SimpleType; import io.opentelemetry.OpenTelemetry; -import io.opentelemetry.auto.instrumentation.api.AgentTracer; import io.opentelemetry.auto.test.asserts.ListWriterAssert; import io.opentelemetry.auto.tooling.AgentInstaller; -import io.opentelemetry.auto.tooling.AgentTracerImpl; import io.opentelemetry.auto.tooling.Instrumenter; import io.opentelemetry.auto.util.test.AgentSpecification; import io.opentelemetry.sdk.OpenTelemetrySdk; @@ -84,8 +82,6 @@ public abstract class AgentTestRunner extends AgentSpecification { TEST_WRITER = new ListWriter(); OpenTelemetrySdk.getTracerFactory().addSpanProcessor(TEST_WRITER); TEST_TRACER = OpenTelemetry.getTracerFactory().get("io.opentelemetry.auto"); - - AgentTracer.registerIfAbsent(new AgentTracerImpl(TEST_TRACER)); } protected static Tracer getTestTracer() {