From 9744bc907cfd19232c044872f3debd64b542b169 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Mon, 19 Apr 2021 11:36:00 +0200 Subject: [PATCH 1/6] Upgrate OTEL to 1.1.0 Signed-off-by: Pavol Loffay --- build.gradle.kts | 6 +++--- .../ApacheAsyncClientInstrumentationModule.java | 2 ++ ...pacheAsyncClientInstrumentationModuleTest.java | 4 ++-- .../v4_0/ApacheHttpClientObjectRegistry.java | 6 +++--- .../v4_0/HttpEntityInstrumentation.java | 8 +++++--- .../ApacheClientReadAllInstrumentationModule.java | 2 +- .../InputStreamReadAllInstrumentationModule.java | 2 +- .../NettyHttp2HeadersInstrumentationModule.java | 2 +- .../InputStreamInstrumentationModule.java | 2 +- .../OutputStreamInstrumentationModule.java | 2 +- .../v2_3/Servlet2BodyInstrumentationModule.java | 2 +- .../Servlet31NoWrappingInstrumentation.java | 10 +++++++++- .../Servlet31NoWrappingInstrumentationModule.java | 2 +- .../ServletInputStreamInstrumentation.java | 2 +- .../request/ServletRequestInstrumentation.java | 2 +- .../ServletOutputStreamInstrumentation.java | 2 +- .../response/ServletResponseInstrumentation.java | 2 +- ...tStreamContextAccessInstrumentationModule.java | 4 ++-- ...tStreamContextAccessInstrumentationModule.java | 4 ++-- .../v3_0/Servlet30BodyInstrumentationModule.java | 2 +- .../v3_1/Servlet31BodyInstrumentationModule.java | 2 +- .../rw/reader/BufferedReaderInstrumentation.java | 2 +- .../BufferedReaderInstrumentationModule.java | 2 +- .../rw/writer/PrintWriterInstrumentation.java | 2 +- .../writer/PrintWriterInstrumentationModule.java | 2 +- ...dReaderContextAccessInstrumentationModule.java | 4 ++-- ...tWriterContextAccessInstrumentationModule.java | 4 ++-- javaagent-core/build.gradle.kts | 3 ++- .../instrumentation/GlobalObjectRegistry.java | 15 +++++++-------- javaagent/build.gradle.kts | 3 +++ otel-extensions/build.gradle.kts | 1 + .../otel/extensions/FilterComponentInstaller.java | 5 +++-- .../agent/testing/TestOpenTelemetryInstaller.java | 5 +++-- 33 files changed, 68 insertions(+), 50 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 27989d857..84fbc5f0c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,9 +31,9 @@ subprojects { description = "Hypertrace OpenTelemetry Javaagent" extra.set("versions", mapOf( - "opentelemetry" to "1.0.1", - "opentelemetry_java_agent" to "1.0.1-alpha", - "opentelemetry_java_agent_all" to "1.0.1", + "opentelemetry" to "1.1.0", + "opentelemetry_java_agent" to "1.1.0-alpha", + "opentelemetry_java_agent_all" to "1.1.0", "byte_buddy" to "1.10.18", "slf4j" to "1.7.30" )) 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 142f8da3c..0187fe7c6 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 @@ -123,6 +123,8 @@ public DelegatingCaptureBodyRequestProducer( @Override public HttpRequest generateRequest() throws IOException, HttpException { HttpRequest request = super.generateRequest(); + System.out.println("AAAA ->>>"); + System.out.println(Span.fromContext(context)); ApacheHttpClientUtils.traceRequest(Span.fromContext(context), request); return request; } 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 280426443..fda090eeb 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 @@ -107,7 +107,7 @@ public void getJson() responseBodySpan.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY)); } - @Test + // @Test public void postJson() throws IOException, TimeoutException, InterruptedException, ExecutionException { StringEntity entity = @@ -115,7 +115,7 @@ public void postJson() postJsonEntity(entity); } - @Test + // @Test public void postJsonNonRepeatableEntity() throws IOException, TimeoutException, InterruptedException, ExecutionException { StringEntity entity = new NonRepeatableStringEntity(JSON); diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java index 2819f23e0..0ce24e4b7 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientObjectRegistry.java @@ -18,13 +18,13 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.instrumentation.api.WeakMap; +import io.opentelemetry.instrumentation.api.caching.Cache; import org.apache.http.HttpEntity; public class ApacheHttpClientObjectRegistry { - public static final WeakMap entityToSpan = - WeakMap.Provider.newWeakMap(); + public static final Cache entityToSpan = + Cache.newBuilder().setWeakKeys().build(); public static class SpanAndAttributeKey { public final Span span; diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java index c0929da95..29b0e31d7 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/HttpEntityInstrumentation.java @@ -48,7 +48,7 @@ public class HttpEntityInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return implementsInterface(named("org.apache.http.HttpEntity")); } @@ -138,13 +138,15 @@ public static void enter( public static void exit( @Advice.This HttpEntity thizz, @Advice.Argument(0) OutputStream outputStream) { SpanAndAttributeKey spanAndAttributeKey = - ApacheHttpClientObjectRegistry.entityToSpan.remove(thizz); + ApacheHttpClientObjectRegistry.entityToSpan.get(thizz); + ApacheHttpClientObjectRegistry.entityToSpan.remove(thizz); if (spanAndAttributeKey == null) { return; } BoundedByteArrayOutputStream bufferedOutStream = - GlobalObjectRegistry.outputStreamToBufferMap.remove(outputStream); + GlobalObjectRegistry.outputStreamToBufferMap.get(outputStream); + GlobalObjectRegistry.outputStreamToBufferMap.remove(outputStream); try { String requestBody = bufferedOutStream.toStringWithSuppliedCharset(); spanAndAttributeKey.span.setAttribute(spanAndAttributeKey.attributeKey, requestBody); diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java index 09d1936aa..012073dc4 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java @@ -221,7 +221,7 @@ public static void exit(@Return Object response) { static class HttpEntityInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return implementsInterface(named("org.apache.http.HttpEntity")); } 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 e226edb7b..4c20ad240 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 @@ -68,7 +68,7 @@ public List typeInstrumentations() { static class InputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("java.io.InputStream")); } diff --git a/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java b/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java index dce24d9a4..a72935ab1 100644 --- a/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java +++ b/instrumentation/grpc-1.5/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_5/NettyHttp2HeadersInstrumentationModule.java @@ -69,7 +69,7 @@ public List typeInstrumentations() { */ class NettyUtilsInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return failSafe(named("io.grpc.netty.Utils")); } diff --git a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java index 7db461bd9..7da11eb20 100644 --- a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java +++ b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamInstrumentationModule.java @@ -70,7 +70,7 @@ public List typeInstrumentations() { static class InputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return extendsClass(named(InputStream.class.getName())) .and(not(safeHasSuperType(named("javax.servlet.ServletInputStream")))); } diff --git a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java index 9e851eea4..171f95daf 100644 --- a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java +++ b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/outputstream/OutputStreamInstrumentationModule.java @@ -64,7 +64,7 @@ public List typeInstrumentations() { static class OutputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return extendsClass(named(OutputStream.class.getName())); } 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 bf0cb29ed..64c8bf410 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 @@ -76,7 +76,7 @@ public ElementMatcher.Junction classLoaderMatcher() { } @Override - public Map contextStore() { + public Map getMuzzleContextStoreClasses() { return singletonMap("javax.servlet.ServletResponse", Integer.class.getName()); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java index c7343939a..0f1c9674f 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java @@ -60,13 +60,18 @@ public class Servlet31NoWrappingInstrumentation implements TypeInstrumentation { + + public Servlet31NoWrappingInstrumentation() { + System.out.println("Constructor"); + } + @Override public ElementMatcher classLoaderOptimization() { return hasClassesNamed("javax.servlet.Filter"); } @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.Servlet")); } @@ -89,6 +94,7 @@ public static boolean start( @Advice.Argument(value = 1) ServletResponse response, @Advice.Local("currentSpan") Span currentSpan) { + System.out.println("---> \n\n\nAAAA"); int callDepth = CallDepthThreadLocalMap.incrementCallDepth(Servlet31InstrumentationName.class); if (callDepth > 0) { @@ -98,6 +104,8 @@ public static boolean start( return false; } + System.out.println("---> \n\n\nAAAA"); + HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; currentSpan = Java8BytecodeBridge.currentSpan(); diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java index 64445fc1c..34498099b 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java @@ -56,7 +56,7 @@ public List typeInstrumentations() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { Map context = new HashMap<>(); // capture request body context.put("javax.servlet.http.HttpServletRequest", SpanAndObjectPair.class.getName()); diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java index afa0b6f6d..58dc64975 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamInstrumentation.java @@ -41,7 +41,7 @@ public class ServletInputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletInputStream")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java index f28019c98..63d0547cd 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletRequestInstrumentation.java @@ -44,7 +44,7 @@ public class ServletRequestInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletRequest")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java index e133e3eaa..6d518175b 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamInstrumentation.java @@ -40,7 +40,7 @@ public class ServletOutputStreamInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletOutputStream")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java index 57c658f96..d8ce9d908 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletResponseInstrumentation.java @@ -51,7 +51,7 @@ public class ServletResponseInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("javax.servlet.ServletResponse")); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java index 3996c4a79..ccfdae9d6 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/request/ServletInputStreamContextAccessInstrumentationModule.java @@ -44,7 +44,7 @@ public ServletInputStreamContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { Map context = new HashMap<>(); context.put("javax.servlet.ServletInputStream", ByteBufferSpanPair.class.getName()); return context; @@ -58,7 +58,7 @@ public List typeInstrumentations() { class InputStreamTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.ServletStreamContextAccess"); } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java index 855a7aae1..f1f80038d 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java @@ -43,7 +43,7 @@ public ServletOutputStreamContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { Map context = new HashMap<>(); context.put("javax.servlet.ServletOutputStream", BoundedByteArrayOutputStream.class.getName()); return context; @@ -57,7 +57,7 @@ public List typeInstrumentations() { class OutputStreamTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.ServletStreamContextAccess"); } 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 1b6885f77..6ef602584 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 @@ -88,7 +88,7 @@ public List typeInstrumentations() { private static class Servlet30BodyInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.http.HttpServlet")); } 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 7731fe5b8..03952d7e4 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 @@ -78,7 +78,7 @@ public List typeInstrumentations() { private static final class Servlet31BodyInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.http.HttpServlet")); } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java index fb4712ae0..8e20b35fc 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java @@ -41,7 +41,7 @@ public class BufferedReaderInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("java.io.BufferedReader")).or(named("java.io.BufferedReader")); } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java index aed4e7930..709b940f9 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java @@ -37,7 +37,7 @@ public BufferedReaderInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { return Collections.singletonMap("java.io.BufferedReader", CharBufferSpanPair.class.getName()); } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java index 3cba35d11..c76cfd159 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentation.java @@ -40,7 +40,7 @@ public class PrintWriterInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return safeHasSuperType(named("java.io.PrintWriter")).or(named("java.io.PrintWriter")); } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java index 4e7ea8ae1..555a0107a 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java @@ -32,7 +32,7 @@ public PrintWriterInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { return Collections.singletonMap("java.io.PrintWriter", BoundedCharArrayWriter.class.getName()); } diff --git a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java index 0ce3647b1..29be11f18 100644 --- a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderContextAccessInstrumentationModule.java @@ -41,7 +41,7 @@ public BufferedReaderContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { return Collections.singletonMap("java.io.BufferedReader", CharBufferSpanPair.class.getName()); } @@ -53,7 +53,7 @@ public List typeInstrumentations() { class BufferedReaderTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.BufferedReaderPrintWriterContextAccess"); } diff --git a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java index 8dbcf0f8b..52be208e2 100644 --- a/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterContextAccessInstrumentationModule.java @@ -43,7 +43,7 @@ public PrintWriterContextAccessInstrumentationModule() { } @Override - protected Map contextStore() { + protected Map getMuzzleContextStoreClasses() { return Collections.singletonMap("java.io.PrintWriter", BoundedCharArrayWriter.class.getName()); } @@ -55,7 +55,7 @@ public List typeInstrumentations() { class PrintWriterTriggerInstrumentation implements TypeInstrumentation { @Override - public ElementMatcher typeMatcher() { + public ElementMatcher typeMatcher() { return named("org.BufferedReaderPrintWriterContextAccess"); } diff --git a/javaagent-core/build.gradle.kts b/javaagent-core/build.gradle.kts index 9de342656..94d69c9a5 100644 --- a/javaagent-core/build.gradle.kts +++ b/javaagent-core/build.gradle.kts @@ -27,6 +27,8 @@ val versions: Map by extra dependencies { api("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") api("io.opentelemetry.javaagent:opentelemetry-javaagent-api:${versions["opentelemetry_java_agent"]}") +// api("io.opentelemetry.javaagent:opentelemetry-javaagent-instrumentation-api-caching:${versions["opentelemetry_java_agent"]}") + implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-caching:${versions["opentelemetry_java_agent"]}") implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") api("com.google.protobuf:protobuf-java:3.11.4") @@ -34,5 +36,4 @@ dependencies { // convert yaml to json, since java protobuf impl supports only json implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3") - api("com.blogspot.mydailyjava:weak-lock-free:0.17") } diff --git a/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java b/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java index cc465f2db..5ad259bb9 100644 --- a/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java +++ b/javaagent-core/src/main/java/org/hypertrace/agent/core/instrumentation/GlobalObjectRegistry.java @@ -18,7 +18,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.instrumentation.api.WeakMap; +import io.opentelemetry.instrumentation.api.caching.Cache; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; @@ -28,17 +28,16 @@ public class GlobalObjectRegistry { // original input stream to span and byte buffer - public static final WeakMap inputStreamToSpanAndBufferMap = - WeakMap.Provider.newWeakMap(); + public static final Cache inputStreamToSpanAndBufferMap = + Cache.newBuilder().setWeakKeys().build(); // original output stream to byte buffer - public static final WeakMap outputStreamToBufferMap = - WeakMap.Provider.newWeakMap(); + public static final Cache outputStreamToBufferMap = + Cache.newBuilder().setWeakKeys().build(); // original input stream to buffered one - public static final WeakMap inputStreamMap = - WeakMap.Provider.newWeakMap(); - public static final WeakMap objectMap = WeakMap.Provider.newWeakMap(); + public static final Cache inputStreamMap = Cache.newBuilder().build(); + public static final Cache objectMap = Cache.newBuilder().setWeakKeys().build(); public static class SpanAndBuffer { public final Span span; diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index eeaffde0e..00ad5914d 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -25,10 +25,13 @@ tasks { into("inst") rename("(^.*)\\.class$", "$1.classdata") } + exclude("**/META-INF/LICENSE") dependsOn(customizationShadowTask) } + // TODO relocate weak map + shadowJar { // config in javaagent-core uses protobuf and jackson // shade to the same location as OTEL, because the package prefix is used in classloader instrumentation diff --git a/otel-extensions/build.gradle.kts b/otel-extensions/build.gradle.kts index 5680cd561..c33295ac5 100644 --- a/otel-extensions/build.gradle.kts +++ b/otel-extensions/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${versions["opentelemetry"]}-alpha") implementation("io.opentelemetry:opentelemetry-semconv:${versions["opentelemetry"]}-alpha") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}") + implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry_java_agent"]}") implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") implementation("com.google.auto.service:auto-service:1.0-rc7") diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java index 5b97bd157..3d0b51cb1 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java @@ -17,6 +17,7 @@ package org.hypertrace.agent.otel.extensions; import com.google.auto.service.AutoService; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.spi.ComponentInstaller; import org.hypertrace.agent.filter.FilterRegistry; @@ -24,11 +25,11 @@ public class FilterComponentInstaller implements ComponentInstaller { @Override - public void beforeByteBuddyAgent() { + public void beforeByteBuddyAgent(Config config) { // resolves filter via service loader resolution FilterRegistry.getFilter(); } @Override - public void afterByteBuddyAgent() {} + public void afterByteBuddyAgent(Config config) {} } 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 34d1d5a2e..6dd06df83 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 @@ -18,6 +18,7 @@ import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; @@ -32,7 +33,7 @@ public TestOpenTelemetryInstaller(SpanProcessor spanProcessor) { } @Override - public void beforeByteBuddyAgent() { + public void beforeByteBuddyAgent(Config config) { OpenTelemetrySdk.builder() .setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build()) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) @@ -40,5 +41,5 @@ public void beforeByteBuddyAgent() { } @Override - public void afterByteBuddyAgent() {} + public void afterByteBuddyAgent(Config config) {} } From eeb95c675162bfa043de2bd02aeeb736dfb034fe Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Tue, 20 Apr 2021 14:07:15 +0200 Subject: [PATCH 2/6] Fixes Signed-off-by: Pavol Loffay --- ...pacheAsyncClientInstrumentationModule.java | 2 - ...eAsyncClientInstrumentationModuleTest.java | 4 +- .../Servlet2BodyInstrumentationModule.java | 5 - .../Servlet31NoWrappingInstrumentation.java | 8 - ...vlet31NoWrappingInstrumentationModule.java | 22 --- .../BufferedReaderInstrumentationModule.java | 7 - .../PrintWriterInstrumentationModule.java | 7 - .../vertx/VertxClientInstrumentationTest.java | 183 ++++++++---------- javaagent-core/build.gradle.kts | 2 +- .../testing/AbstractInstrumenterTest.java | 4 + 10 files changed, 92 insertions(+), 152 deletions(-) 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 0187fe7c6..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 @@ -123,8 +123,6 @@ public DelegatingCaptureBodyRequestProducer( @Override public HttpRequest generateRequest() throws IOException, HttpException { HttpRequest request = super.generateRequest(); - System.out.println("AAAA ->>>"); - System.out.println(Span.fromContext(context)); ApacheHttpClientUtils.traceRequest(Span.fromContext(context), request); return request; } 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 fda090eeb..280426443 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 @@ -107,7 +107,7 @@ public void getJson() responseBodySpan.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY)); } - // @Test + @Test public void postJson() throws IOException, TimeoutException, InterruptedException, ExecutionException { StringEntity entity = @@ -115,7 +115,7 @@ public void postJson() postJsonEntity(entity); } - // @Test + @Test public void postJsonNonRepeatableEntity() throws IOException, TimeoutException, InterruptedException, ExecutionException { StringEntity entity = new NonRepeatableStringEntity(JSON); 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 64c8bf410..d6e2e4b29 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 @@ -75,11 +75,6 @@ public ElementMatcher.Junction classLoaderMatcher() { .and(not(hasClassesNamed("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))); } - @Override - public Map getMuzzleContextStoreClasses() { - return singletonMap("javax.servlet.ServletResponse", Integer.class.getName()); - } - @Override public List typeInstrumentations() { return Collections.singletonList(new Servlet2BodyInstrumentation()); diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java index 0f1c9674f..e9237dcdf 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java @@ -60,11 +60,6 @@ public class Servlet31NoWrappingInstrumentation implements TypeInstrumentation { - - public Servlet31NoWrappingInstrumentation() { - System.out.println("Constructor"); - } - @Override public ElementMatcher classLoaderOptimization() { return hasClassesNamed("javax.servlet.Filter"); @@ -94,7 +89,6 @@ public static boolean start( @Advice.Argument(value = 1) ServletResponse response, @Advice.Local("currentSpan") Span currentSpan) { - System.out.println("---> \n\n\nAAAA"); int callDepth = CallDepthThreadLocalMap.incrementCallDepth(Servlet31InstrumentationName.class); if (callDepth > 0) { @@ -104,8 +98,6 @@ public static boolean start( return false; } - System.out.println("---> \n\n\nAAAA"); - HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; currentSpan = Java8BytecodeBridge.currentSpan(); diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java index 34498099b..8dbfa629c 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java @@ -24,14 +24,7 @@ import io.opentelemetry.javaagent.tooling.InstrumentationModule; import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import org.hypertrace.agent.core.instrumentation.SpanAndObjectPair; -import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream; -import org.hypertrace.agent.core.instrumentation.buffer.BoundedCharArrayWriter; -import org.hypertrace.agent.core.instrumentation.buffer.ByteBufferSpanPair; -import org.hypertrace.agent.core.instrumentation.buffer.CharBufferSpanPair; @AutoService(InstrumentationModule.class) public class Servlet31NoWrappingInstrumentationModule extends InstrumentationModule { @@ -54,19 +47,4 @@ public List typeInstrumentations() { new ServletResponseInstrumentation(), new ServletOutputStreamInstrumentation()); } - - @Override - protected Map getMuzzleContextStoreClasses() { - Map context = new HashMap<>(); - // capture request body - context.put("javax.servlet.http.HttpServletRequest", SpanAndObjectPair.class.getName()); - context.put("javax.servlet.ServletInputStream", ByteBufferSpanPair.class.getName()); - context.put("java.io.BufferedReader", CharBufferSpanPair.class.getName()); - - // capture response body - context.put("javax.servlet.http.HttpServletResponse", SpanAndObjectPair.class.getName()); - context.put("javax.servlet.ServletOutputStream", BoundedByteArrayOutputStream.class.getName()); - context.put("java.io.PrintWriter", BoundedCharArrayWriter.class.getName()); - return context; - } } diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java index 709b940f9..95ce986bd 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentationModule.java @@ -21,8 +21,6 @@ import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Collections; import java.util.List; -import java.util.Map; -import org.hypertrace.agent.core.instrumentation.buffer.CharBufferSpanPair; /** * Instrumentation module for {@link java.io.BufferedReader}. It must be be defined in a separate @@ -36,11 +34,6 @@ public BufferedReaderInstrumentationModule() { super("bufferedreader", "servlet", "servlet-3", "ht", "servlet-no-wrapping"); } - @Override - protected Map getMuzzleContextStoreClasses() { - return Collections.singletonMap("java.io.BufferedReader", CharBufferSpanPair.class.getName()); - } - @Override public List typeInstrumentations() { return Collections.singletonList(new BufferedReaderInstrumentation()); diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java index 555a0107a..f6aced6ba 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/writer/PrintWriterInstrumentationModule.java @@ -21,8 +21,6 @@ import io.opentelemetry.javaagent.tooling.TypeInstrumentation; import java.util.Collections; import java.util.List; -import java.util.Map; -import org.hypertrace.agent.core.instrumentation.buffer.BoundedCharArrayWriter; @AutoService(InstrumentationModule.class) public class PrintWriterInstrumentationModule extends InstrumentationModule { @@ -31,11 +29,6 @@ public PrintWriterInstrumentationModule() { super("printwriter", "servlet", "servlet-3", "ht", "servlet-no-wrapping"); } - @Override - protected Map getMuzzleContextStoreClasses() { - return Collections.singletonMap("java.io.PrintWriter", BoundedCharArrayWriter.class.getName()); - } - @Override public List typeInstrumentations() { return Collections.singletonList(new PrintWriterInstrumentation()); diff --git a/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java b/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java index 8aae96229..fec348973 100644 --- a/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java +++ b/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java @@ -16,102 +16,89 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.vertx; -import io.vertx.core.Handler; -import io.vertx.core.Vertx; -import io.vertx.core.VertxOptions; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.http.HttpClient; -import io.vertx.core.http.HttpClientOptions; -import io.vertx.core.http.HttpClientRequest; -import io.vertx.core.http.HttpClientResponse; -import io.vertx.core.http.HttpMethod; -import java.util.Map; -import java.util.concurrent.CountDownLatch; -import org.hypertrace.agent.testing.AbstractHttpClientTest; - -public class VertxClientInstrumentationTest extends AbstractHttpClientTest { - - private static final Vertx vertx = Vertx.vertx(new VertxOptions()); - private final HttpClientOptions clientOptions = new HttpClientOptions(); - private final HttpClient httpClient = vertx.createHttpClient(clientOptions); - - public VertxClientInstrumentationTest() { - super(false); - } - - @Override - public Response doPostRequest( - String uri, Map headers, String body, String contentType) - throws InterruptedException { - CountDownLatch countDownLatch = new CountDownLatch(1); - - HttpClientRequest request = httpClient.requestAbs(HttpMethod.POST, uri); - - for (Map.Entry entry : headers.entrySet()) { - request = request.putHeader(entry.getKey(), entry.getValue()); - } - request = request.putHeader("Content-Type", contentType); - BufferHandler bufferHandler = new BufferHandler(countDownLatch); - ResponseHandler responseHandler = new ResponseHandler(bufferHandler); - - request.handler(responseHandler).end(body); - - countDownLatch.await(); - return new Response(bufferHandler.responseBody, responseHandler.responseStatus); - } - - @Override - public Response doGetRequest(String uri, Map headers) - throws InterruptedException { - CountDownLatch countDownLatch = new CountDownLatch(1); - - HttpClientRequest request = httpClient.requestAbs(HttpMethod.GET, uri); - - for (Map.Entry entry : headers.entrySet()) { - request = request.putHeader(entry.getKey(), entry.getValue()); - } - BufferHandler bufferHandler = new BufferHandler(countDownLatch); - ResponseHandler responseHandler = new ResponseHandler(bufferHandler); - - request.handler(responseHandler).end(); - - countDownLatch.await(); - return new Response( - bufferHandler.responseBody == null || bufferHandler.responseBody.isEmpty() - ? null - : bufferHandler.responseBody, - responseHandler.responseStatus); - } - - static class ResponseHandler implements Handler { - - int responseStatus; - final BufferHandler bufferHandler; - - ResponseHandler(BufferHandler bufferHandler) { - this.bufferHandler = bufferHandler; - } - - @Override - public void handle(HttpClientResponse response) { - response.bodyHandler(bufferHandler); - responseStatus = response.statusCode(); - } - } - - static class BufferHandler implements Handler { - - String responseBody; - final CountDownLatch countDownLatch; - - BufferHandler(CountDownLatch countDownLatch) { - this.countDownLatch = countDownLatch; - } - - @Override - public void handle(Buffer responseBodyBuffer) { - responseBody = responseBodyBuffer.getString(0, responseBodyBuffer.length()); - countDownLatch.countDown(); - } - } +public class VertxClientInstrumentationTest { + + // private static final Vertx vertx = Vertx.vertx(new VertxOptions()); + // private final HttpClientOptions clientOptions = new HttpClientOptions(); + // private final HttpClient httpClient = vertx.createHttpClient(clientOptions); + // + // public VertxClientInstrumentationTest() { + // super(false); + // } + // + // @Override + // public Response doPostRequest( + // String uri, Map headers, String body, String contentType) + // throws InterruptedException { + // CountDownLatch countDownLatch = new CountDownLatch(1); + // + // HttpClientRequest request = httpClient.requestAbs(HttpMethod.POST, uri); + // + // for (Map.Entry entry : headers.entrySet()) { + // request = request.putHeader(entry.getKey(), entry.getValue()); + // } + // request = request.putHeader("Content-Type", contentType); + // BufferHandler bufferHandler = new BufferHandler(countDownLatch); + // ResponseHandler responseHandler = new ResponseHandler(bufferHandler); + // + // request.handler(responseHandler).end(body); + // + // countDownLatch.await(); + // return new Response(bufferHandler.responseBody, responseHandler.responseStatus); + // } + // + // @Override + // public Response doGetRequest(String uri, Map headers) + // throws InterruptedException { + // CountDownLatch countDownLatch = new CountDownLatch(1); + // + // HttpClientRequest request = httpClient.requestAbs(HttpMethod.GET, uri); + // + // for (Map.Entry entry : headers.entrySet()) { + // request = request.putHeader(entry.getKey(), entry.getValue()); + // } + // BufferHandler bufferHandler = new BufferHandler(countDownLatch); + // ResponseHandler responseHandler = new ResponseHandler(bufferHandler); + // + // request.handler(responseHandler).end(); + // + // countDownLatch.await(); + // return new Response( + // bufferHandler.responseBody == null || bufferHandler.responseBody.isEmpty() + // ? null + // : bufferHandler.responseBody, + // responseHandler.responseStatus); + // } + // + // static class ResponseHandler implements Handler { + // + // int responseStatus; + // final BufferHandler bufferHandler; + // + // ResponseHandler(BufferHandler bufferHandler) { + // this.bufferHandler = bufferHandler; + // } + // + // @Override + // public void handle(HttpClientResponse response) { + // response.bodyHandler(bufferHandler); + // responseStatus = response.statusCode(); + // } + // } + // + // static class BufferHandler implements Handler { + // + // String responseBody; + // final CountDownLatch countDownLatch; + // + // BufferHandler(CountDownLatch countDownLatch) { + // this.countDownLatch = countDownLatch; + // } + // + // @Override + // public void handle(Buffer responseBodyBuffer) { + // responseBody = responseBodyBuffer.getString(0, responseBodyBuffer.length()); + // countDownLatch.countDown(); + // } + // } } diff --git a/javaagent-core/build.gradle.kts b/javaagent-core/build.gradle.kts index 94d69c9a5..bd3181405 100644 --- a/javaagent-core/build.gradle.kts +++ b/javaagent-core/build.gradle.kts @@ -27,7 +27,6 @@ val versions: Map by extra dependencies { api("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") api("io.opentelemetry.javaagent:opentelemetry-javaagent-api:${versions["opentelemetry_java_agent"]}") -// api("io.opentelemetry.javaagent:opentelemetry-javaagent-instrumentation-api-caching:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-caching:${versions["opentelemetry_java_agent"]}") implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") @@ -36,4 +35,5 @@ dependencies { // convert yaml to json, since java protobuf impl supports only json implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3") + api("com.blogspot.mydailyjava:weak-lock-free:0.17") } 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 9731504a7..fe07d9383 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 @@ -20,6 +20,7 @@ import ch.qos.logback.classic.Logger; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.spi.ComponentInstaller; import io.opentelemetry.javaagent.tooling.AgentInstaller; import java.io.IOException; @@ -86,6 +87,9 @@ public abstract class AbstractInstrumenterTest { @BeforeAll public static void beforeAll() { if (classFileTransformer == null) { + // TODO remove once + // https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/2821 is merged + COMPONENT_INSTALLER.beforeByteBuddyAgent(Config.get()); classFileTransformer = AgentInstaller.installBytebuddyAgent( INSTRUMENTATION, Collections.singleton(COMPONENT_INSTALLER)); From c6ebc8f93c6601ead8f53f48030dee0fc93f6f11 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Tue, 20 Apr 2021 14:21:59 +0200 Subject: [PATCH 3/6] Fix dependencies Signed-off-by: Pavol Loffay --- instrumentation/build.gradle.kts | 2 +- javaagent-core/build.gradle.kts | 2 +- javaagent/build.gradle.kts | 5 +---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index a8813bde9..99af76f77 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -63,7 +63,7 @@ tasks { relocate("org.checkerframework", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") relocate("org.yaml", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") - relocate("com.blogspot.mydailyjava", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.blogspot.mydailyjava") + relocate("com.blogspot.mydailyjava.weaklockfree", "io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") exclude("**/module-info.class") diff --git a/javaagent-core/build.gradle.kts b/javaagent-core/build.gradle.kts index bd3181405..96c1ca955 100644 --- a/javaagent-core/build.gradle.kts +++ b/javaagent-core/build.gradle.kts @@ -35,5 +35,5 @@ dependencies { // convert yaml to json, since java protobuf impl supports only json implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3") - api("com.blogspot.mydailyjava:weak-lock-free:0.17") + implementation("com.blogspot.mydailyjava:weak-lock-free:0.17") } diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index 00ad5914d..dd1342253 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -29,9 +29,6 @@ tasks { dependsOn(customizationShadowTask) } - - // TODO relocate weak map - shadowJar { // config in javaagent-core uses protobuf and jackson // shade to the same location as OTEL, because the package prefix is used in classloader instrumentation @@ -44,7 +41,7 @@ tasks { relocate("org.checkerframework", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") relocate("org.yaml", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") - relocate("com.blogspot.mydailyjava", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.blogspot.mydailyjava") + relocate("com.blogspot.mydailyjava.weaklockfree", "io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") dependencies { exclude(dependency("org.codehaus.mojo:animal-sniffer-annotations")) From 9fe1329d33d10bb1b1ea4c7668c9c82aa6933312 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Tue, 20 Apr 2021 14:48:44 +0200 Subject: [PATCH 4/6] Enable undertow Signed-off-by: Pavol Loffay --- .../agent/otel/extensions/HypertraceAgentConfiguration.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java index 3d70f1a30..cf596f967 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java @@ -68,10 +68,6 @@ public Map getProperties() { // metrics are not reported configProperties.put(OTEL_METRICS_EXPORTER, "none"); - // disable undertow because it is finishing span before payloads are captured in our filter - // TODO remove once fixed - // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/2499 - configProperties.put("otel.instrumentation.undertow.enabled", "false"); return configProperties; } From cde01baa208ee3373669b5e68291984e230518e4 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Tue, 20 Apr 2021 16:17:24 +0200 Subject: [PATCH 5/6] Disable muzzle for artifacts with no instr modules Signed-off-by: Pavol Loffay --- Makefile | 2 +- instrumentation/struts-2.3/build.gradle.kts | 9 --------- instrumentation/vertx-web-3.0/build.gradle.kts | 9 --------- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 8934e4aae..ba8348bb9 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ smoke-test: muzzle: # daemon was causing failure "java.lang.IllegalStateException: Could not locate class file for" # for injecting helper classes from the same packages as instrumentations - ./gradlew muzzle --no-daemon + ./gradlew assemble muzzle --no-daemon .PHONY: docker docker: assemble diff --git a/instrumentation/struts-2.3/build.gradle.kts b/instrumentation/struts-2.3/build.gradle.kts index 27ff5c03d..2c43f8ccf 100644 --- a/instrumentation/struts-2.3/build.gradle.kts +++ b/instrumentation/struts-2.3/build.gradle.kts @@ -1,15 +1,6 @@ plugins { `java-library` id("io.opentelemetry.instrumentation.auto-instrumentation") - muzzle -} - -muzzle { - pass { - group = "org.apache.struts" - module = "struts2-core" - versions = "[2.3.1,)" - } } val versions: Map by extra diff --git a/instrumentation/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx-web-3.0/build.gradle.kts index da22d8097..120fb52b5 100644 --- a/instrumentation/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx-web-3.0/build.gradle.kts @@ -2,15 +2,6 @@ plugins { `java-library` id("net.bytebuddy.byte-buddy") id("io.opentelemetry.instrumentation.auto-instrumentation") - muzzle -} - -muzzle { - pass { - group = "io.vertx" - module = "vertx-web" - versions = "[3.0.0,)" - } } afterEvaluate{ From b06ce1495964bd16957089d381efebb6f1bfc859 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Tue, 20 Apr 2021 16:41:05 +0200 Subject: [PATCH 6/6] Disable vertx test Signed-off-by: Pavol Loffay --- .../vertx/VertxClientInstrumentationTest.java | 185 ++++++++++-------- 1 file changed, 100 insertions(+), 85 deletions(-) diff --git a/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java b/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java index fec348973..4c32c1d08 100644 --- a/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java +++ b/instrumentation/vertx-web-3.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/VertxClientInstrumentationTest.java @@ -16,89 +16,104 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.vertx; -public class VertxClientInstrumentationTest { - - // private static final Vertx vertx = Vertx.vertx(new VertxOptions()); - // private final HttpClientOptions clientOptions = new HttpClientOptions(); - // private final HttpClient httpClient = vertx.createHttpClient(clientOptions); - // - // public VertxClientInstrumentationTest() { - // super(false); - // } - // - // @Override - // public Response doPostRequest( - // String uri, Map headers, String body, String contentType) - // throws InterruptedException { - // CountDownLatch countDownLatch = new CountDownLatch(1); - // - // HttpClientRequest request = httpClient.requestAbs(HttpMethod.POST, uri); - // - // for (Map.Entry entry : headers.entrySet()) { - // request = request.putHeader(entry.getKey(), entry.getValue()); - // } - // request = request.putHeader("Content-Type", contentType); - // BufferHandler bufferHandler = new BufferHandler(countDownLatch); - // ResponseHandler responseHandler = new ResponseHandler(bufferHandler); - // - // request.handler(responseHandler).end(body); - // - // countDownLatch.await(); - // return new Response(bufferHandler.responseBody, responseHandler.responseStatus); - // } - // - // @Override - // public Response doGetRequest(String uri, Map headers) - // throws InterruptedException { - // CountDownLatch countDownLatch = new CountDownLatch(1); - // - // HttpClientRequest request = httpClient.requestAbs(HttpMethod.GET, uri); - // - // for (Map.Entry entry : headers.entrySet()) { - // request = request.putHeader(entry.getKey(), entry.getValue()); - // } - // BufferHandler bufferHandler = new BufferHandler(countDownLatch); - // ResponseHandler responseHandler = new ResponseHandler(bufferHandler); - // - // request.handler(responseHandler).end(); - // - // countDownLatch.await(); - // return new Response( - // bufferHandler.responseBody == null || bufferHandler.responseBody.isEmpty() - // ? null - // : bufferHandler.responseBody, - // responseHandler.responseStatus); - // } - // - // static class ResponseHandler implements Handler { - // - // int responseStatus; - // final BufferHandler bufferHandler; - // - // ResponseHandler(BufferHandler bufferHandler) { - // this.bufferHandler = bufferHandler; - // } - // - // @Override - // public void handle(HttpClientResponse response) { - // response.bodyHandler(bufferHandler); - // responseStatus = response.statusCode(); - // } - // } - // - // static class BufferHandler implements Handler { - // - // String responseBody; - // final CountDownLatch countDownLatch; - // - // BufferHandler(CountDownLatch countDownLatch) { - // this.countDownLatch = countDownLatch; - // } - // - // @Override - // public void handle(Buffer responseBodyBuffer) { - // responseBody = responseBodyBuffer.getString(0, responseBodyBuffer.length()); - // countDownLatch.countDown(); - // } - // } +import io.vertx.core.Handler; +import io.vertx.core.Vertx; +import io.vertx.core.VertxOptions; +import io.vertx.core.buffer.Buffer; +import io.vertx.core.http.HttpClient; +import io.vertx.core.http.HttpClientOptions; +import io.vertx.core.http.HttpClientRequest; +import io.vertx.core.http.HttpClientResponse; +import io.vertx.core.http.HttpMethod; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import org.hypertrace.agent.testing.AbstractHttpClientTest; +import org.junit.jupiter.api.Disabled; + +@Disabled("Vertex instrumentation is broken, body and header capture") +public class VertxClientInstrumentationTest extends AbstractHttpClientTest { + + private static final Vertx vertx = Vertx.vertx(new VertxOptions()); + private final HttpClientOptions clientOptions = new HttpClientOptions(); + private final HttpClient httpClient = vertx.createHttpClient(clientOptions); + + public VertxClientInstrumentationTest() { + super(false); + } + + @Override + public Response doPostRequest( + String uri, Map headers, String body, String contentType) + throws InterruptedException { + CountDownLatch countDownLatch = new CountDownLatch(1); + + HttpClientRequest request = httpClient.requestAbs(HttpMethod.POST, uri); + + for (Map.Entry entry : headers.entrySet()) { + request = request.putHeader(entry.getKey(), entry.getValue()); + } + request = request.putHeader("Content-Type", contentType); + BufferHandler bufferHandler = new BufferHandler(countDownLatch); + ResponseHandler responseHandler = new ResponseHandler(bufferHandler); + + request.handler(responseHandler).end(body); + + countDownLatch.await(); + return new Response(bufferHandler.responseBody, responseHandler.responseStatus); + } + + @Override + public Response doGetRequest(String uri, Map headers) + throws InterruptedException { + CountDownLatch countDownLatch = new CountDownLatch(1); + + HttpClientRequest request = httpClient.requestAbs(HttpMethod.GET, uri); + + for (Map.Entry entry : headers.entrySet()) { + request = request.putHeader(entry.getKey(), entry.getValue()); + } + BufferHandler bufferHandler = new BufferHandler(countDownLatch); + ResponseHandler responseHandler = new ResponseHandler(bufferHandler); + + request.handler(responseHandler).end(); + + countDownLatch.await(); + return new Response( + bufferHandler.responseBody == null || bufferHandler.responseBody.isEmpty() + ? null + : bufferHandler.responseBody, + responseHandler.responseStatus); + } + + static class ResponseHandler implements Handler { + + int responseStatus; + final BufferHandler bufferHandler; + + ResponseHandler(BufferHandler bufferHandler) { + this.bufferHandler = bufferHandler; + } + + @Override + public void handle(HttpClientResponse response) { + response.bodyHandler(bufferHandler); + responseStatus = response.statusCode(); + } + } + + static class BufferHandler implements Handler { + + String responseBody; + final CountDownLatch countDownLatch; + + BufferHandler(CountDownLatch countDownLatch) { + this.countDownLatch = countDownLatch; + } + + @Override + public void handle(Buffer responseBodyBuffer) { + responseBody = responseBodyBuffer.getString(0, responseBodyBuffer.length()); + countDownLatch.countDown(); + } + } }