|
27 | 27 | import io.opentelemetry.api.common.AttributeKey; |
28 | 28 | import io.opentelemetry.api.trace.Span; |
29 | 29 | import io.opentelemetry.context.Context; |
30 | | -import io.opentelemetry.context.Scope; |
31 | 30 | import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys; |
32 | 31 | import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils; |
33 | | -import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.client.OtelHttpClientRequestTracingHandler; |
34 | 32 | import java.nio.charset.Charset; |
35 | 33 | import java.util.HashMap; |
36 | 34 | import java.util.Map; |
@@ -59,54 +57,47 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { |
59 | 57 | ctx.fireChannelRead(msg); |
60 | 58 | return; |
61 | 59 | } |
| 60 | + Span span = Span.fromContext(context); |
62 | 61 |
|
63 | | - // Store the server context in our ThreadLocal for later use by client handlers |
64 | | - // This is CRITICAL for proper context propagation to client spans |
65 | | - OtelHttpClientRequestTracingHandler.storeServerContext(context); |
| 62 | + if (msg instanceof HttpRequest) { |
| 63 | + HttpRequest httpRequest = (HttpRequest) msg; |
66 | 64 |
|
67 | | - try (Scope ignored = context.makeCurrent()) { |
68 | | - Span span = Span.fromContext(context); |
69 | | - |
70 | | - if (msg instanceof HttpRequest) { |
71 | | - HttpRequest httpRequest = (HttpRequest) msg; |
72 | | - |
73 | | - Map<String, String> headersMap = headersToMap(httpRequest); |
74 | | - if (instrumentationConfig.httpHeaders().request()) { |
75 | | - headersMap.forEach(span::setAttribute); |
76 | | - } |
77 | | - // used by blocking handler |
78 | | - channel.attr(AttributeKeys.REQUEST_HEADERS).set(headersMap); |
| 65 | + Map<String, String> headersMap = headersToMap(httpRequest); |
| 66 | + if (instrumentationConfig.httpHeaders().request()) { |
| 67 | + headersMap.forEach(span::setAttribute); |
| 68 | + } |
| 69 | + // used by blocking handler |
| 70 | + channel.attr(AttributeKeys.REQUEST_HEADERS).set(headersMap); |
79 | 71 |
|
80 | | - CharSequence contentType = DataCaptureUtils.getContentType(httpRequest); |
81 | | - if (instrumentationConfig.httpBody().request() |
82 | | - && contentType != null |
83 | | - && ContentTypeUtils.shouldCapture(contentType.toString())) { |
| 72 | + CharSequence contentType = DataCaptureUtils.getContentType(httpRequest); |
| 73 | + if (instrumentationConfig.httpBody().request() |
| 74 | + && contentType != null |
| 75 | + && ContentTypeUtils.shouldCapture(contentType.toString())) { |
84 | 76 |
|
85 | | - CharSequence contentLengthHeader = DataCaptureUtils.getContentLength(httpRequest); |
86 | | - int contentLength = ContentLengthUtils.parseLength(contentLengthHeader); |
| 77 | + CharSequence contentLengthHeader = DataCaptureUtils.getContentLength(httpRequest); |
| 78 | + int contentLength = ContentLengthUtils.parseLength(contentLengthHeader); |
87 | 79 |
|
88 | | - String charsetString = ContentTypeUtils.parseCharset(contentType.toString()); |
89 | | - Charset charset = ContentTypeCharsetUtils.toCharset(charsetString); |
| 80 | + String charsetString = ContentTypeUtils.parseCharset(contentType.toString()); |
| 81 | + Charset charset = ContentTypeCharsetUtils.toCharset(charsetString); |
90 | 82 |
|
91 | | - // set the buffer to capture response body |
92 | | - // the buffer is used byt captureBody method |
93 | | - Attribute<BoundedByteArrayOutputStream> bufferAttr = |
94 | | - ctx.channel().attr(AttributeKeys.REQUEST_BODY_BUFFER); |
95 | | - bufferAttr.set(BoundedBuffersFactory.createStream(contentLength, charset)); |
| 83 | + // set the buffer to capture response body |
| 84 | + // the buffer is used byt captureBody method |
| 85 | + Attribute<BoundedByteArrayOutputStream> bufferAttr = |
| 86 | + ctx.channel().attr(AttributeKeys.REQUEST_BODY_BUFFER); |
| 87 | + bufferAttr.set(BoundedBuffersFactory.createStream(contentLength, charset)); |
96 | 88 |
|
97 | | - channel.attr(AttributeKeys.CHARSET).set(charset); |
98 | | - } |
| 89 | + channel.attr(AttributeKeys.CHARSET).set(charset); |
99 | 90 | } |
| 91 | + } |
100 | 92 |
|
101 | | - if ((msg instanceof HttpContent || msg instanceof ByteBuf) |
102 | | - && instrumentationConfig.httpBody().request()) { |
103 | | - Charset charset = channel.attr(AttributeKeys.CHARSET).get(); |
104 | | - if (charset == null) { |
105 | | - charset = ContentTypeCharsetUtils.getDefaultCharset(); |
106 | | - } |
107 | | - DataCaptureUtils.captureBody( |
108 | | - span, channel, AttributeKeys.REQUEST_BODY_BUFFER, msg, null, charset); |
| 93 | + if ((msg instanceof HttpContent || msg instanceof ByteBuf) |
| 94 | + && instrumentationConfig.httpBody().request()) { |
| 95 | + Charset charset = channel.attr(AttributeKeys.CHARSET).get(); |
| 96 | + if (charset == null) { |
| 97 | + charset = ContentTypeCharsetUtils.getDefaultCharset(); |
109 | 98 | } |
| 99 | + DataCaptureUtils.captureBody( |
| 100 | + span, channel, AttributeKeys.REQUEST_BODY_BUFFER, msg, null, charset); |
110 | 101 | } |
111 | 102 |
|
112 | 103 | ctx.fireChannelRead(msg); |
|
0 commit comments