diff --git a/build.gradle.kts b/build.gradle.kts index b7fb73ebb..4063cab8b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -28,8 +28,8 @@ subprojects { description = "Hypertrace OpenTelemetry Javaagent" extra.set("versions", mapOf( - "opentelemetry" to "0.13.1", - "opentelemetry_java_agent" to "0.13.0", + "opentelemetry" to "0.14.1", + "opentelemetry_java_agent" to "0.14.0", "byte_buddy" to "1.10.18" )) diff --git a/instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/DelegatingRequestAccessor.java b/instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/DelegatingRequestAccessor.java deleted file mode 100644 index 02d3259a5..000000000 --- a/instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/DelegatingRequestAccessor.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright The Hypertrace Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient; - -import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientInstrumentation.DelegatingRequestProducer; - -/** - * TODO remove once https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/1951 - * is merged - */ -public class DelegatingRequestAccessor { - - public static Context get(DelegatingRequestProducer delegatingRequestProducer) { - return delegatingRequestProducer.context; - } -} diff --git a/instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModule.java b/instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModule.java index a5f05a02d..142f8da3c 100644 --- a/instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModule.java +++ b/instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModule.java @@ -16,8 +16,8 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.apachehttpasyncclient; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.implementsInterface; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -28,7 +28,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; import io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient.ApacheHttpAsyncClientInstrumentation.DelegatingRequestProducer; -import io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient.DelegatingRequestAccessor; import io.opentelemetry.javaagent.instrumentation.hypertrace.apachehttpclient.v4_0.ApacheHttpClientUtils; import io.opentelemetry.javaagent.tooling.InstrumentationModule; import io.opentelemetry.javaagent.tooling.TypeInstrumentation; @@ -104,7 +103,7 @@ public static void enter( if (requestProducer instanceof DelegatingRequestProducer) { DelegatingRequestProducer delegatingRequestProducer = (DelegatingRequestProducer) requestProducer; - Context context = DelegatingRequestAccessor.get(delegatingRequestProducer); + Context context = delegatingRequestProducer.getContext(); requestProducer = new DelegatingCaptureBodyRequestProducer(context, requestProducer); futureCallback = new BodyCaptureDelegatingCallback(context, httpContext, futureCallback); } diff --git a/instrumentation/apache-httpasyncclient-4.1/src/test/java/io/opentelemetry/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModuleTest.java b/instrumentation/apache-httpasyncclient-4.1/src/test/java/io/opentelemetry/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModuleTest.java index fac7540e8..fbc92cbb1 100644 --- a/instrumentation/apache-httpasyncclient-4.1/src/test/java/io/opentelemetry/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModuleTest.java +++ b/instrumentation/apache-httpasyncclient-4.1/src/test/java/io/opentelemetry/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModuleTest.java @@ -45,7 +45,6 @@ import org.hypertrace.agent.testing.AbstractInstrumenterTest; import org.hypertrace.agent.testing.TestHttpServer; import org.hypertrace.agent.testing.TestHttpServer.GetJsonHandler; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -183,35 +182,7 @@ public boolean isRepeatable() { @Override public InputStream getContent() { - return new TestInputStream(this.content); - } - } - - // TODO remove once https://github.com/hypertrace/javaagent/issues/189 is fixed - static class TestInputStream extends ByteArrayInputStream { - - public TestInputStream(byte[] buf) { - super(buf); - } - - @Override - public synchronized int read() { - return super.read(); - } - - @Override - public int read(@NotNull byte[] b) throws IOException { - return super.read(b); - } - - @Override - public synchronized int read(byte[] b, int off, int len) { - return super.read(b, off, len); - } - - @Override - public synchronized int available() { - return super.available(); + return new ByteArrayInputStream(this.content); } } diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java index b3f96a094..e226edb7b 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/InputStreamReadAllInstrumentationModule.java @@ -17,7 +17,7 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.apachehttpclient.v4_0.readall; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; -import static io.opentelemetry.javaagent.tooling.matcher.NameMatchers.namedOneOf; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static net.bytebuddy.matcher.ElementMatchers.is; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; diff --git a/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/server/GrpcServerBodyInstrumentation.java b/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/server/GrpcServerBodyInstrumentation.java index 9f21876e7..0b659bdae 100644 --- a/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/server/GrpcServerBodyInstrumentation.java +++ b/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/server/GrpcServerBodyInstrumentation.java @@ -16,8 +16,8 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.v1_5.server; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; diff --git a/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModuleTest.java b/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModuleTest.java index 8adec3e5f..a7863a404 100644 --- a/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModuleTest.java +++ b/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModuleTest.java @@ -39,7 +39,7 @@ public class InputStreamInstrumentationModuleTest extends AbstractInstrumenterTe @Test public void read() { - InputStream inputStream = new TestByteArrayInputStream(STR.getBytes()); + InputStream inputStream = new ByteArrayInputStream(STR.getBytes()); read( inputStream, () -> { @@ -57,7 +57,7 @@ public void read() { @Test public void readBytes() { - InputStream inputStream = new TestByteArrayInputStream(STR.getBytes()); + InputStream inputStream = new ByteArrayInputStream(STR.getBytes()); read( inputStream, () -> { @@ -75,7 +75,7 @@ public void readBytes() { @Test public void readBytesOffset() { - InputStream inputStream = new TestByteArrayInputStream(STR.getBytes()); + InputStream inputStream = new ByteArrayInputStream(STR.getBytes()); read( inputStream, () -> { @@ -109,30 +109,4 @@ private void read(InputStream inputStream, Runnable read, String expected) { SpanData spanData = trace.get(0); Assertions.assertEquals(expected, spanData.getAttributes().get(ATTRIBUTE_KEY)); } - - /** - * Each method has to be overridden because OTEL agent ignores classes from java. - * https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/8baa897e8bf09359da848aaaa98d2b4eb7fbf4c1/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/matcher/GlobalIgnoresMatcher.java#L105 - */ - static class TestByteArrayInputStream extends ByteArrayInputStream { - - public TestByteArrayInputStream(byte[] buf) { - super(buf); - } - - @Override - public synchronized int read() { - return super.read(); - } - - @Override - public int read(byte[] b) throws IOException { - return super.read(b); - } - - @Override - public synchronized int read(byte[] b, int off, int len) { - return super.read(b, off, len); - } - } } diff --git a/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModuleTest.java b/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModuleTest.java index fb1c4f155..62c575f7a 100644 --- a/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModuleTest.java +++ b/instrumentation/java-streams/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModuleTest.java @@ -37,7 +37,7 @@ class OutputStreamInstrumentationModuleTest extends AbstractInstrumenterTest { @Test public void write() { - OutputStream outputStream = new TestByteArrayOutputStream(); + OutputStream outputStream = new ByteArrayOutputStream(); write( outputStream, () -> { @@ -54,7 +54,7 @@ public void write() { @Test public void writeBytes() { - OutputStream outputStream = new TestByteArrayOutputStream(); + OutputStream outputStream = new ByteArrayOutputStream(); write( outputStream, () -> { @@ -70,7 +70,7 @@ public void writeBytes() { @Test public void writeBytesOffset() { - OutputStream outputStream = new TestByteArrayOutputStream(); + OutputStream outputStream = new ByteArrayOutputStream(); write( outputStream, () -> { @@ -92,26 +92,4 @@ private void write(OutputStream outputStream, Runnable read, String expected) { read.run(); Assertions.assertEquals(expected, buffer.toString()); } - - /** - * Each method has to be overridden because OTEL agent ignores classes from java. - * https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/8baa897e8bf09359da848aaaa98d2b4eb7fbf4c1/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/matcher/GlobalIgnoresMatcher.java#L105 - */ - static class TestByteArrayOutputStream extends ByteArrayOutputStream { - - @Override - public synchronized void write(int b) { - super.write(b); - } - - @Override - public void write(byte[] b) throws IOException { - super.write(b); - } - - @Override - public synchronized void write(byte[] b, int off, int len) { - super.write(b, off, len); - } - } } diff --git a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyInstrumentationModule.java b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyInstrumentationModule.java index 6e8bdc73d..ae9885875 100644 --- a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyInstrumentationModule.java +++ b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyInstrumentationModule.java @@ -16,9 +16,9 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.jaxrs.v2_0; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.extendsClass; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.hasInterface; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AttributeKeys.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AttributeKeys.java index ffbabaad4..6f9750edd 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AttributeKeys.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AttributeKeys.java @@ -17,56 +17,20 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0; import io.netty.util.AttributeKey; -import io.opentelemetry.javaagent.instrumentation.api.WeakMap; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes; import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream; -/** - * Copied from - * https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/deda1af9c0e420b882164e5f8240b51678cd646f/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AttributeKeys.java#L14 - */ public class AttributeKeys { - private static final WeakMap>> map = - WeakMap.Implementation.DEFAULT.get(); - private static final WeakMap.ValueSupplier>> - mapSupplier = - new WeakMap.ValueSupplier>>() { - @Override - public ConcurrentMap> get(ClassLoader ignore) { - return new ConcurrentHashMap<>(); - } - }; - public static final AttributeKey RESPONSE_BODY_BUFFER = - attributeKey(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY.getKey()); + io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys.attributeKey( + HypertraceSemanticAttributes.HTTP_RESPONSE_BODY.getKey()); public static final AttributeKey REQUEST_BODY_BUFFER = - attributeKey(HypertraceSemanticAttributes.HTTP_REQUEST_BODY.getKey()); + io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys.attributeKey( + HypertraceSemanticAttributes.HTTP_REQUEST_BODY.getKey()); public static final AttributeKey> REQUEST_HEADERS = - attributeKey(AttributeKeys.class.getName() + ".request-headers"); - - /** - * Generate an attribute key or reuse the one existing in the global app map. This implementation - * creates attributes only once even if the current class is loaded by several class loaders and - * prevents an issue with Apache Atlas project were this class loaded by multiple class loaders, - * while the Attribute class is loaded by a third class loader and used internally for the - * cassandra driver. - */ - private static AttributeKey attributeKey(String key) { - ConcurrentMap> classLoaderMap = - map.computeIfAbsent(AttributeKey.class.getClassLoader(), mapSupplier); - if (classLoaderMap.containsKey(key)) { - @SuppressWarnings("unchecked") - AttributeKey attrKey = (AttributeKey) classLoaderMap.get(key); - return attrKey; - } - - AttributeKey value = new AttributeKey<>(key); - classLoaderMap.put(key, value); - return value; - } + io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys.attributeKey( + AttributeKeys.class.getName() + ".request-headers"); } diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyChannelPipelineInstrumentation.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyChannelPipelineInstrumentation.java index 796cdc1a2..0b96d717e 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyChannelPipelineInstrumentation.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyChannelPipelineInstrumentation.java @@ -16,8 +16,8 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.implementsInterface; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java index bb0e7a9ef..ea1ce001a 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java @@ -27,13 +27,13 @@ import io.netty.handler.codec.http.LastHttpContent; import io.netty.util.Attribute; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.attributes.SemanticAttributes; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.NettyHttpClientTracer; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; import java.util.Map; import org.hypertrace.agent.config.Config.AgentConfig; diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java index 1893ce7cc..e8d2319a8 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java @@ -29,13 +29,13 @@ import io.netty.handler.codec.http.LastHttpContent; import io.netty.util.Attribute; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.attributes.SemanticAttributes; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.NettyHttpServerTracer; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; import java.util.Map; import org.hypertrace.agent.config.Config.AgentConfig; diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyChannelPipelineInstrumentation.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyChannelPipelineInstrumentation.java index 273f96f47..8c018a8b8 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyChannelPipelineInstrumentation.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyChannelPipelineInstrumentation.java @@ -16,8 +16,8 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.implementsInterface; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java index 54bc77988..05350bbd7 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java @@ -27,13 +27,13 @@ import io.netty.handler.codec.http.LastHttpContent; import io.netty.util.Attribute; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.attributes.SemanticAttributes; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyHttpClientTracer; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; import java.util.Map; import org.hypertrace.agent.config.Config.AgentConfig; diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java index bdf336410..34fc53800 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java @@ -27,13 +27,13 @@ import io.netty.handler.codec.http.LastHttpContent; import io.netty.util.Attribute; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.attributes.SemanticAttributes; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyHttpServerTracer; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; import java.util.Map; import org.hypertrace.agent.config.Config.AgentConfig; diff --git a/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java b/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java index 488d4289f..bf0cb29ed 100644 --- a/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java +++ b/instrumentation/servlet/servlet-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v2_3/Servlet2BodyInstrumentationModule.java @@ -16,9 +16,9 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v2_3; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; -import static io.opentelemetry.javaagent.tooling.matcher.NameMatchers.namedOneOf; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java index 631bd2ec0..2ad9b4b4b 100644 --- a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30BodyInstrumentationModule.java @@ -16,9 +16,9 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; -import static io.opentelemetry.javaagent.tooling.matcher.NameMatchers.namedOneOf; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/instrumentation/servlet/servlet-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30InstrumentationTest.java b/instrumentation/servlet/servlet-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30InstrumentationTest.java index 362f18df2..be3bc6a14 100644 --- a/instrumentation/servlet/servlet-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30InstrumentationTest.java +++ b/instrumentation/servlet/servlet-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/Servlet30InstrumentationTest.java @@ -17,7 +17,7 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0; import io.opentelemetry.sdk.trace.data.SpanData; -import io.opentelemetry.sdk.trace.data.SpanData.Status; +import io.opentelemetry.sdk.trace.data.StatusData; import java.util.List; import okhttp3.MediaType; import okhttp3.Request; @@ -108,7 +108,7 @@ public void requestCast() throws Exception { List spans = traces.get(0); Assertions.assertEquals(1, spans.size()); SpanData spanData = spans.get(0); - Assertions.assertEquals(Status.error(), spanData.getStatus()); + Assertions.assertEquals(StatusData.error(), spanData.getStatus()); Assertions.assertEquals( REQUEST_HEADER_VALUE, spanData diff --git a/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java b/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java index af4cb82a6..095887cfb 100644 --- a/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31BodyInstrumentationModule.java @@ -16,9 +16,9 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_1; -import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; -import static io.opentelemetry.javaagent.tooling.matcher.NameMatchers.namedOneOf; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/instrumentation/servlet/servlet-3.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31InstrumentationTest.java b/instrumentation/servlet/servlet-3.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31InstrumentationTest.java index c506b73bf..7414db9c3 100644 --- a/instrumentation/servlet/servlet-3.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31InstrumentationTest.java +++ b/instrumentation/servlet/servlet-3.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_1/Servlet31InstrumentationTest.java @@ -17,7 +17,7 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_1; import io.opentelemetry.sdk.trace.data.SpanData; -import io.opentelemetry.sdk.trace.data.SpanData.Status; +import io.opentelemetry.sdk.trace.data.StatusData; import java.util.List; import okhttp3.MediaType; import okhttp3.Request; @@ -109,7 +109,7 @@ public void requestCast() throws Exception { List spans = traces.get(0); Assertions.assertEquals(1, spans.size()); SpanData spanData = spans.get(0); - Assertions.assertEquals(Status.error(), spanData.getStatus()); + Assertions.assertEquals(StatusData.error(), spanData.getStatus()); Assertions.assertEquals( REQUEST_HEADER_VALUE, spanData diff --git a/instrumentation/spark-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/sparkjava/SparkJavaBodyInstrumentationModule.java b/instrumentation/spark-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/sparkjava/SparkJavaBodyInstrumentationModule.java index e4658d656..84beb6445 100644 --- a/instrumentation/spark-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/sparkjava/SparkJavaBodyInstrumentationModule.java +++ b/instrumentation/spark-2.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/sparkjava/SparkJavaBodyInstrumentationModule.java @@ -16,7 +16,7 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.sparkjava; -import static io.opentelemetry.javaagent.tooling.matcher.NameMatchers.namedOneOf; +import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/otel-extensions/build.gradle.kts b/otel-extensions/build.gradle.kts index 9c538f7c5..b952ba8b8 100644 --- a/otel-extensions/build.gradle.kts +++ b/otel-extensions/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { implementation("org.slf4j:slf4j-api:1.7.30") implementation("com.google.auto.service:auto-service:1.0-rc7") + implementation("net.bytebuddy:byte-buddy:${versions["byte_buddy"]}") annotationProcessor("com.google.auto.service:auto-service:1.0-rc7") testImplementation("io.opentelemetry:opentelemetry-sdk:${versions["opentelemetry"]}") diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceGlobalIgnoreMatcher.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceGlobalIgnoreMatcher.java new file mode 100644 index 000000000..a54fe0912 --- /dev/null +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceGlobalIgnoreMatcher.java @@ -0,0 +1,43 @@ +/* + * Copyright The Hypertrace Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hypertrace.agent.otel.extensions; + +import com.google.auto.service.AutoService; +import io.opentelemetry.javaagent.spi.IgnoreMatcherProvider; + +@AutoService(IgnoreMatcherProvider.class) +public class HypertraceGlobalIgnoreMatcher implements IgnoreMatcherProvider { + + @Override + public Result type(net.bytebuddy.description.type.TypeDescription target) { + String actualName = target.getActualName(); + if (actualName.startsWith("java.io")) { + if (actualName.equals("java.io.InputStream") + || actualName.equals("java.io.OutputStream") + || actualName.equals("java.io.ByteArrayInputStream") + || actualName.equals("java.io.ByteArrayOutputStream")) { + return Result.ALLOW; + } + } + return Result.DEFAULT; + } + + @Override + public Result classloader(ClassLoader classLoader) { + return Result.DEFAULT; + } +} diff --git a/testing-common/build.gradle.kts b/testing-common/build.gradle.kts index 28145479a..9ee829f06 100644 --- a/testing-common/build.gradle.kts +++ b/testing-common/build.gradle.kts @@ -10,6 +10,8 @@ configurations { val versions: Map by extra dependencies { + api(project(":otel-extensions")) + api("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") api("io.opentelemetry:opentelemetry-sdk:${versions["opentelemetry"]}") api("com.squareup.okhttp3:okhttp:4.9.0") diff --git a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java index ce699709c..262e86cc7 100644 --- a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java +++ b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java @@ -18,7 +18,7 @@ import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; -import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.javaagent.spi.ComponentInstaller; import io.opentelemetry.javaagent.tooling.AgentInstaller; @@ -75,7 +75,7 @@ public abstract class AbstractInstrumenterTest { COMPONENT_INSTALLER = new TestOpenTelemetryInstaller(TEST_WRITER); OpenTelemetrySdk.getGlobalTracerManagement().addSpanProcessor(TEST_WRITER); - TEST_TRACER = OpenTelemetry.getGlobalTracer("io.opentelemetry.auto"); + TEST_TRACER = GlobalOpenTelemetry.getTracer("io.opentelemetry.auto"); } private static ClassFileTransformer classFileTransformer; @@ -93,7 +93,7 @@ public static void beforeAll() { if (classFileTransformer == null) { classFileTransformer = AgentInstaller.installBytebuddyAgent( - INSTRUMENTATION, true, Collections.singleton(COMPONENT_INSTALLER)); + INSTRUMENTATION, Collections.singleton(COMPONENT_INSTALLER)); } } diff --git a/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java b/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java index 4645bc122..cad52aa97 100644 --- a/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java +++ b/testing-common/src/main/java/org/hypertrace/agent/testing/TestOpenTelemetryInstaller.java @@ -16,11 +16,11 @@ package org.hypertrace.agent.testing; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller; import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.SpanProcessor; public class TestOpenTelemetryInstaller extends OpenTelemetryInstaller { @@ -33,19 +33,9 @@ public TestOpenTelemetryInstaller(SpanProcessor spanProcessor) { @Override public void afterByteBuddyAgent() { - // TODO this is probably temporary until default propagators are supplied by SDK - // https://github.com/open-telemetry/opentelemetry-java/issues/1742 - // currently checking against no-op implementation so that it won't override aws-lambda - // propagator configuration - if (OpenTelemetry.getGlobalPropagators() - .getTextMapPropagator() - .getClass() - .getSimpleName() - .equals("NoopTextMapPropagator")) { - // Workaround https://github.com/open-telemetry/opentelemetry-java/pull/2096 - OpenTelemetry.setGlobalPropagators( - ContextPropagators.create(W3CTraceContextPropagator.getInstance())); - } - OpenTelemetrySdk.getGlobalTracerManagement().addSpanProcessor(spanProcessor); + OpenTelemetrySdk.builder() + .setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build()) + .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) + .buildAndRegisterGlobal(); } }