Skip to content

Commit 5f5c930

Browse files
authored
Merge pull request #5 from hypertrace/main
pull main
2 parents 1a71a72 + 23761b2 commit 5f5c930

File tree

34 files changed

+345
-369
lines changed

34 files changed

+345
-369
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ subprojects {
2828
description = "Hypertrace OpenTelemetry Javaagent"
2929

3030
extra.set("versions", mapOf(
31-
"opentelemetry" to "0.14.1",
32-
"opentelemetry_java_agent" to "0.14.0",
31+
"opentelemetry" to "0.15.0",
32+
"opentelemetry_java_agent" to "0.15.1",
3333
"byte_buddy" to "1.10.18"
3434
))
3535

instrumentation/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,10 @@ tasks {
7979

8080
// relocate OpenTelemetry API
8181
relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api")
82+
relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv")
8283
relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi")
8384
relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context")
85+
relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin")
8486
relocate ("io.opentelemetry.extension.trace.propagation", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.trace.propagation")
8587
}
8688
}

instrumentation/grpc-1.5/build.gradle.kts

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,38 @@ protobuf {
5555
}
5656

5757
val versions: Map<String, String> by extra
58+
val grpcVersion = "1.5.0"
5859

5960
dependencies {
6061
api("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-grpc-1.5:${versions["opentelemetry_java_agent"]}")
6162
api("io.opentelemetry.instrumentation:opentelemetry-grpc-1.5:${versions["opentelemetry_java_agent"]}")
6263

63-
compileOnly("io.grpc:grpc-core:1.5.0")
64-
compileOnly("io.grpc:grpc-protobuf:1.5.0")
65-
compileOnly("io.grpc:grpc-stub:1.5.0")
66-
compileOnly("io.grpc:grpc-netty:1.5.0")
64+
compileOnly("io.grpc:grpc-core:${grpcVersion}")
65+
compileOnly("io.grpc:grpc-protobuf:${grpcVersion}")
66+
compileOnly("io.grpc:grpc-stub:${grpcVersion}")
67+
compileOnly("io.grpc:grpc-netty:${grpcVersion}")
6768

6869
implementation("javax.annotation:javax.annotation-api:1.3.2")
6970

7071
testImplementation(project(":testing-common"))
71-
testImplementation("io.grpc:grpc-core:1.5.0")
72-
testImplementation("io.grpc:grpc-protobuf:1.5.0")
73-
testImplementation("io.grpc:grpc-stub:1.5.0")
74-
testImplementation("io.grpc:grpc-netty:1.5.0")
72+
testImplementation("io.grpc:grpc-core:${grpcVersion}") {
73+
version {
74+
strictly(grpcVersion)
75+
}
76+
}
77+
testImplementation("io.grpc:grpc-protobuf:${grpcVersion}") {
78+
version {
79+
strictly(grpcVersion)
80+
}
81+
}
82+
testImplementation("io.grpc:grpc-stub:${grpcVersion}") {
83+
version {
84+
strictly(grpcVersion)
85+
}
86+
}
87+
testImplementation("io.grpc:grpc-netty:${grpcVersion}") {
88+
version {
89+
strictly(grpcVersion)
90+
}
91+
}
7592
}

instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,13 @@ public static void available(InputStream inputStream, int available) {
147147
}
148148
SpanAndBuffer spanAndBuffer =
149149
GlobalObjectRegistry.inputStreamToSpanAndBufferMap.get(inputStream);
150-
InputStreamUtils.addBody(
151-
spanAndBuffer.span,
152-
spanAndBuffer.attributeKey,
153-
spanAndBuffer.byteArrayBuffer,
154-
spanAndBuffer.charset);
155-
GlobalObjectRegistry.inputStreamToSpanAndBufferMap.remove(inputStream);
150+
if (spanAndBuffer != null) {
151+
InputStreamUtils.addBody(
152+
spanAndBuffer.span,
153+
spanAndBuffer.attributeKey,
154+
spanAndBuffer.byteArrayBuffer,
155+
spanAndBuffer.charset);
156+
GlobalObjectRegistry.inputStreamToSpanAndBufferMap.remove(inputStream);
157+
}
156158
}
157159
}

instrumentation/netty/netty-4.0/build.gradle.kts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,48 @@ afterEvaluate{
4040
}
4141

4242
val versions: Map<String, String> by extra
43+
// version used by async-http-client:2.0.9
44+
val nettyVersion = "4.0.38.Final"
4345

4446
dependencies {
4547
implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.0:${versions["opentelemetry_java_agent"]}")
4648

47-
implementation("io.netty:netty-codec-http:4.0.0.Final")
49+
compileOnly("io.netty:netty-codec-http:${nettyVersion}") {
50+
version {
51+
strictly(nettyVersion)
52+
}
53+
}
54+
55+
testImplementation("io.netty:netty-codec-http:${nettyVersion}") {
56+
version {
57+
strictly(nettyVersion)
58+
}
59+
}
60+
testImplementation("io.netty:netty-transport:${nettyVersion}") {
61+
version {
62+
strictly(nettyVersion)
63+
}
64+
}
65+
testImplementation("io.netty:netty-common:${nettyVersion}") {
66+
version {
67+
strictly(nettyVersion)
68+
}
69+
}
70+
testImplementation("io.netty:netty-codec:${nettyVersion}") {
71+
version {
72+
strictly(nettyVersion)
73+
}
74+
}
75+
testImplementation("io.netty:netty-handler:${nettyVersion}") {
76+
version {
77+
strictly(nettyVersion)
78+
}
79+
}
80+
testImplementation("io.netty:netty-buffer:${nettyVersion}") {
81+
version {
82+
strictly(nettyVersion)
83+
}
84+
}
4885

4986
testImplementation(project(":testing-common"))
5087
testImplementation("org.asynchttpclient:async-http-client:2.0.9")

instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/NettyInstrumentationModule.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@
1616

1717
package io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0;
1818

19+
import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed;
20+
import static net.bytebuddy.matcher.ElementMatchers.not;
21+
1922
import com.google.auto.service.AutoService;
2023
import io.opentelemetry.javaagent.tooling.InstrumentationModule;
2124
import io.opentelemetry.javaagent.tooling.TypeInstrumentation;
2225
import java.util.Arrays;
2326
import java.util.List;
27+
import net.bytebuddy.matcher.ElementMatcher;
2428

2529
@AutoService(InstrumentationModule.class)
2630
public class NettyInstrumentationModule extends InstrumentationModule {
@@ -34,6 +38,13 @@ public int getOrder() {
3438
return -1;
3539
}
3640

41+
@Override
42+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
43+
// Class added in 4.1.0 and not in 4.0.56 to avoid resolving this instrumentation completely
44+
// when using 4.1.
45+
return not(hasClassesNamed("io.netty.handler.codec.http.CombinedHttpHeaders"));
46+
}
47+
3748
@Override
3849
public List<TypeInstrumentation> typeInstrumentations() {
3950
return Arrays.asList(new NettyChannelPipelineInstrumentation());

instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/NettyInstrumentationModule.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616

1717
package io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1;
1818

19+
import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed;
20+
1921
import com.google.auto.service.AutoService;
2022
import io.opentelemetry.javaagent.tooling.InstrumentationModule;
2123
import io.opentelemetry.javaagent.tooling.TypeInstrumentation;
2224
import java.util.Arrays;
2325
import java.util.List;
26+
import net.bytebuddy.matcher.ElementMatcher;
2427

2528
@AutoService(InstrumentationModule.class)
2629
public class NettyInstrumentationModule extends InstrumentationModule {
@@ -34,6 +37,13 @@ public int getOrder() {
3437
return -1;
3538
}
3639

40+
@Override
41+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
42+
// Class added in 4.1.0 and not in 4.0.56 to avoid resolving this instrumentation completely
43+
// when using 4.0.
44+
return hasClassesNamed("io.netty.handler.codec.http.CombinedHttpHeaders");
45+
}
46+
3747
@Override
3848
public List<TypeInstrumentation> typeInstrumentations() {
3949
return Arrays.asList(new NettyChannelPipelineInstrumentation());

instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/BodyCaptureAsyncListener.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
import io.opentelemetry.api.trace.Span;
2020
import io.opentelemetry.javaagent.instrumentation.api.ContextStore;
21-
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.request.RequestStreamReaderHolder;
22-
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.response.ResponseStreamWriterHolder;
2321
import java.io.BufferedReader;
2422
import java.io.PrintWriter;
2523
import java.util.concurrent.atomic.AtomicBoolean;
@@ -34,6 +32,7 @@
3432
import org.hypertrace.agent.config.Config.AgentConfig;
3533
import org.hypertrace.agent.core.config.HypertraceConfig;
3634
import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes;
35+
import org.hypertrace.agent.core.instrumentation.SpanAndObjectPair;
3736
import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream;
3837
import org.hypertrace.agent.core.instrumentation.buffer.BoundedCharArrayWriter;
3938
import org.hypertrace.agent.core.instrumentation.buffer.ByteBufferSpanPair;
@@ -45,11 +44,11 @@ public class BodyCaptureAsyncListener implements AsyncListener {
4544
private final AtomicBoolean responseHandled;
4645
private final Span span;
4746

48-
private final ContextStore<HttpServletResponse, ResponseStreamWriterHolder> responseContextStore;
47+
private final ContextStore<HttpServletResponse, SpanAndObjectPair> responseContextStore;
4948
private final ContextStore<ServletOutputStream, BoundedByteArrayOutputStream> streamContextStore;
5049
private final ContextStore<PrintWriter, BoundedCharArrayWriter> writerContextStore;
5150

52-
private final ContextStore<HttpServletRequest, RequestStreamReaderHolder> requestContextStore;
51+
private final ContextStore<HttpServletRequest, SpanAndObjectPair> requestContextStore;
5352
private final ContextStore<ServletInputStream, ByteBufferSpanPair> inputStreamContextStore;
5453
private final ContextStore<BufferedReader, CharBufferSpanPair> readerContextStore;
5554

@@ -58,10 +57,10 @@ public class BodyCaptureAsyncListener implements AsyncListener {
5857
public BodyCaptureAsyncListener(
5958
AtomicBoolean responseHandled,
6059
Span span,
61-
ContextStore<HttpServletResponse, ResponseStreamWriterHolder> responseContextStore,
60+
ContextStore<HttpServletResponse, SpanAndObjectPair> responseContextStore,
6261
ContextStore<ServletOutputStream, BoundedByteArrayOutputStream> streamContextStore,
6362
ContextStore<PrintWriter, BoundedCharArrayWriter> writerContextStore,
64-
ContextStore<HttpServletRequest, RequestStreamReaderHolder> requestContextStore,
63+
ContextStore<HttpServletRequest, SpanAndObjectPair> requestContextStore,
6564
ContextStore<ServletInputStream, ByteBufferSpanPair> inputStreamContextStore,
6665
ContextStore<BufferedReader, CharBufferSpanPair> readerContextStore) {
6766
this.responseHandled = responseHandled;

instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentation.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping;
1818

1919
import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType;
20+
import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed;
2021
import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.NameMatchers.namedOneOf;
2122
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
2223
import static net.bytebuddy.matcher.ElementMatchers.named;
@@ -28,8 +29,6 @@
2829
import io.opentelemetry.javaagent.instrumentation.api.ContextStore;
2930
import io.opentelemetry.javaagent.instrumentation.api.InstrumentationContext;
3031
import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge;
31-
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.request.RequestStreamReaderHolder;
32-
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.response.ResponseStreamWriterHolder;
3332
import io.opentelemetry.javaagent.tooling.TypeInstrumentation;
3433
import java.io.BufferedReader;
3534
import java.io.PrintWriter;
@@ -51,6 +50,7 @@
5150
import org.hypertrace.agent.config.Config.AgentConfig;
5251
import org.hypertrace.agent.core.config.HypertraceConfig;
5352
import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes;
53+
import org.hypertrace.agent.core.instrumentation.SpanAndObjectPair;
5454
import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream;
5555
import org.hypertrace.agent.core.instrumentation.buffer.BoundedCharArrayWriter;
5656
import org.hypertrace.agent.core.instrumentation.buffer.ByteBufferSpanPair;
@@ -60,9 +60,14 @@
6060

6161
public class Servlet31NoWrappingInstrumentation implements TypeInstrumentation {
6262

63+
@Override
64+
public ElementMatcher<ClassLoader> classLoaderOptimization() {
65+
return hasClassesNamed("javax.servlet.Filter");
66+
}
67+
6368
@Override
6469
public ElementMatcher<? super TypeDescription> typeMatcher() {
65-
return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.http.HttpServlet"));
70+
return safeHasSuperType(namedOneOf("javax.servlet.Filter", "javax.servlet.Servlet"));
6671
}
6772

6873
@Override
@@ -103,8 +108,8 @@ public static boolean start(
103108
&& ContentTypeUtils.shouldCapture(contentType)) {
104109
// The HttpServletRequest instrumentation uses this to
105110
// enable the instrumentation
106-
InstrumentationContext.get(HttpServletRequest.class, RequestStreamReaderHolder.class)
107-
.put(httpRequest, new RequestStreamReaderHolder(currentSpan));
111+
InstrumentationContext.get(HttpServletRequest.class, SpanAndObjectPair.class)
112+
.put(httpRequest, new SpanAndObjectPair(currentSpan));
108113
}
109114

110115
Utils.addSessionId(currentSpan, httpRequest);
@@ -152,18 +157,17 @@ public static void exit(
152157
HttpServletRequest httpRequest = (HttpServletRequest) request;
153158
AgentConfig agentConfig = HypertraceConfig.get();
154159

160+
// response context to capture body and clear the context
161+
ContextStore<HttpServletResponse, SpanAndObjectPair> responseContextStore =
162+
InstrumentationContext.get(HttpServletResponse.class, SpanAndObjectPair.class);
155163
ContextStore<ServletOutputStream, BoundedByteArrayOutputStream> outputStreamContextStore =
156164
InstrumentationContext.get(ServletOutputStream.class, BoundedByteArrayOutputStream.class);
157165
ContextStore<PrintWriter, BoundedCharArrayWriter> writerContextStore =
158166
InstrumentationContext.get(PrintWriter.class, BoundedCharArrayWriter.class);
159167

160-
// response context to capture body and clear the context
161-
ContextStore<HttpServletResponse, ResponseStreamWriterHolder> responseContextStore =
162-
InstrumentationContext.get(HttpServletResponse.class, ResponseStreamWriterHolder.class);
163-
164168
// request context to clear body buffer
165-
ContextStore<HttpServletRequest, RequestStreamReaderHolder> requestContextStore =
166-
InstrumentationContext.get(HttpServletRequest.class, RequestStreamReaderHolder.class);
169+
ContextStore<HttpServletRequest, SpanAndObjectPair> requestContextStore =
170+
InstrumentationContext.get(HttpServletRequest.class, SpanAndObjectPair.class);
167171
ContextStore<ServletInputStream, ByteBufferSpanPair> inputStreamContextStore =
168172
InstrumentationContext.get(ServletInputStream.class, ByteBufferSpanPair.class);
169173
ContextStore<BufferedReader, CharBufferSpanPair> readerContextStore =

instrumentation/servlet/servlet-3.0-no-wrapping/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet31NoWrappingInstrumentationModule.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@
1919
import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.ClassLoaderMatcher.hasClassesNamed;
2020

2121
import com.google.auto.service.AutoService;
22-
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.request.RequestStreamReaderHolder;
2322
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.request.ServletInputStreamInstrumentation;
2423
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.request.ServletRequestInstrumentation;
25-
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.response.ResponseStreamWriterHolder;
2624
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.response.ServletOutputStreamInstrumentation;
2725
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.response.ServletResponseInstrumentation;
2826
import io.opentelemetry.javaagent.tooling.InstrumentationModule;
@@ -32,6 +30,7 @@
3230
import java.util.List;
3331
import java.util.Map;
3432
import net.bytebuddy.matcher.ElementMatcher;
33+
import org.hypertrace.agent.core.instrumentation.SpanAndObjectPair;
3534
import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream;
3635
import org.hypertrace.agent.core.instrumentation.buffer.BoundedCharArrayWriter;
3736
import org.hypertrace.agent.core.instrumentation.buffer.ByteBufferSpanPair;
@@ -68,13 +67,12 @@ public List<TypeInstrumentation> typeInstrumentations() {
6867
protected Map<String, String> contextStore() {
6968
Map<String, String> context = new HashMap<>();
7069
// capture request body
71-
context.put("javax.servlet.http.HttpServletRequest", RequestStreamReaderHolder.class.getName());
70+
context.put("javax.servlet.http.HttpServletRequest", SpanAndObjectPair.class.getName());
7271
context.put("javax.servlet.ServletInputStream", ByteBufferSpanPair.class.getName());
7372
context.put("java.io.BufferedReader", CharBufferSpanPair.class.getName());
7473

7574
// capture response body
76-
context.put(
77-
"javax.servlet.http.HttpServletResponse", ResponseStreamWriterHolder.class.getName());
75+
context.put("javax.servlet.http.HttpServletResponse", SpanAndObjectPair.class.getName());
7876
context.put("javax.servlet.ServletOutputStream", BoundedByteArrayOutputStream.class.getName());
7977
context.put("java.io.PrintWriter", BoundedCharArrayWriter.class.getName());
8078
return context;

0 commit comments

Comments
 (0)