diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4/common/AbstractNettyChannelPipelineInstrumentation.java b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4/common/AbstractNettyChannelPipelineInstrumentation.java index dc9b701f95..c2c65fb42d 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4/common/AbstractNettyChannelPipelineInstrumentation.java +++ b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4/common/AbstractNettyChannelPipelineInstrumentation.java @@ -153,6 +153,11 @@ public abstract class AbstractNettyChannelPipelineInstrumentation implements Typ .getName() .startsWith("io.opentelemetry.javaagent.instrumentation.netty.")) { pipeline.removeLast(); + } else if (handler + .getClass() + .getName() + .startsWith("io.opentelemetry.instrumentation.netty.")) { + pipeline.removeLast(); } } } diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/HttpRequestAndChannel.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/HttpRequestAndChannel.java similarity index 52% rename from instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/HttpRequestAndChannel.java rename to instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/HttpRequestAndChannel.java index 808d23ed41..4afe458d5b 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/HttpRequestAndChannel.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/HttpRequestAndChannel.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.netty.v4.common.internal; +package io.opentelemetry.instrumentation.netty.v4.common; import com.google.auto.value.AutoValue; import io.netty.channel.Channel; @@ -11,23 +11,29 @@ import io.netty.handler.codec.http.HttpRequest; import java.net.SocketAddress; import javax.annotation.Nullable; -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ +/** A tuple of an {@link HttpRequest} and a {@link Channel}. */ @AutoValue public abstract class HttpRequestAndChannel { + /** Create a new {@link HttpRequestAndChannel}. */ public static HttpRequestAndChannel create(HttpRequest request, Channel channel) { return new AutoValue_HttpRequestAndChannel(request, channel, channel.remoteAddress()); } + /** Returns the {@link HttpRequest}. */ public abstract HttpRequest request(); + /** Returns the {@link Channel}. */ public abstract Channel channel(); - // we're capturing the remote address early because in case of timeouts or other connection issues - // netty may return null when calling Channel.remoteAddress() at the end of processing + /** + * Return the {@link Channel#remoteAddress()} present when this {@link HttpRequestAndChannel} was + * created. + * + *

We capture the remote address early because netty may return null when calling {@link + * Channel#remoteAddress()} at the end of processing in cases of timeouts or other connection + * issues. + */ @Nullable public abstract SocketAddress remoteAddress(); } diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/HttpSchemeUtil.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/HttpSchemeUtil.java index e47aea6ab9..3b54f71fd0 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/HttpSchemeUtil.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/HttpSchemeUtil.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.netty.v4.common.internal; import io.netty.channel.ChannelHandler; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; /** * This class is internal and is hence not for public use. Its APIs are unstable and can change at diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/HttpRequestHeadersSetter.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/HttpRequestHeadersSetter.java index 5af3dccbc8..b56a4d8bb1 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/HttpRequestHeadersSetter.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/HttpRequestHeadersSetter.java @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.netty.v4.common.internal.client; import io.opentelemetry.context.propagation.TextMapSetter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; enum HttpRequestHeadersSetter implements TextMapSetter { INSTANCE; diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java index f9c485734f..2e250067bd 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java @@ -7,7 +7,8 @@ package io.opentelemetry.instrumentation.netty.v4.common.internal.client; import io.netty.channel.Channel; import io.netty.handler.codec.http.HttpResponse; -import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; @@ -19,7 +20,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributes import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.netty.common.internal.HttpClientSpanKeyAttributesExtractor; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.util.List; import java.util.Map; @@ -29,35 +30,36 @@ import java.util.Map; */ public final class NettyClientInstrumenterFactory { + private final OpenTelemetry openTelemetry; private final String instrumentationName; private final boolean connectionTelemetryEnabled; private final boolean sslTelemetryEnabled; - private final List capturedRequestHeaders; - private final List capturedResponseHeaders; private final Map peerServiceMapping; public NettyClientInstrumenterFactory( + OpenTelemetry openTelemetry, String instrumentationName, boolean connectionTelemetryEnabled, boolean sslTelemetryEnabled, - List capturedRequestHeaders, - List capturedResponseHeaders, Map peerServiceMapping) { + this.openTelemetry = openTelemetry; this.instrumentationName = instrumentationName; this.connectionTelemetryEnabled = connectionTelemetryEnabled; this.sslTelemetryEnabled = sslTelemetryEnabled; - this.capturedRequestHeaders = capturedRequestHeaders; - this.capturedResponseHeaders = capturedResponseHeaders; this.peerServiceMapping = peerServiceMapping; } - public Instrumenter createHttpInstrumenter() { + public Instrumenter createHttpInstrumenter( + List capturedRequestHeaders, + List capturedResponseHeaders, + List> + additionalHttpAttributeExtractors) { NettyHttpClientAttributesGetter httpClientAttributesGetter = new NettyHttpClientAttributesGetter(); NettyNetClientAttributesGetter netAttributesGetter = new NettyNetClientAttributesGetter(); return Instrumenter.builder( - GlobalOpenTelemetry.get(), + openTelemetry, instrumentationName, HttpSpanNameExtractor.create(httpClientAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpClientAttributesGetter)) @@ -69,6 +71,7 @@ public final class NettyClientInstrumenterFactory { .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor( PeerServiceAttributesExtractor.create(netAttributesGetter, peerServiceMapping)) + .addAttributesExtractors(additionalHttpAttributeExtractors) .addOperationMetrics(HttpClientMetrics.get()) .buildClientInstrumenter(HttpRequestHeadersSetter.INSTANCE); } @@ -78,7 +81,7 @@ public final class NettyClientInstrumenterFactory { InstrumenterBuilder instrumenterBuilder = Instrumenter.builder( - GlobalOpenTelemetry.get(), instrumentationName, NettyConnectionRequest::spanName) + openTelemetry, instrumentationName, NettyConnectionRequest::spanName) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor( PeerServiceAttributesExtractor.create(netAttributesGetter, peerServiceMapping)); @@ -108,7 +111,7 @@ public final class NettyClientInstrumenterFactory { NettySslNetAttributesGetter netAttributesGetter = new NettySslNetAttributesGetter(); Instrumenter instrumenter = Instrumenter.builder( - GlobalOpenTelemetry.get(), instrumentationName, NettySslRequest::spanName) + openTelemetry, instrumentationName, NettySslRequest::spanName) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor( PeerServiceAttributesExtractor.create(netAttributesGetter, peerServiceMapping)) diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyHttpClientAttributesGetter.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyHttpClientAttributesGetter.java index 782c3da4ac..f6c3c0dbd8 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyHttpClientAttributesGetter.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyHttpClientAttributesGetter.java @@ -9,7 +9,7 @@ import static io.opentelemetry.instrumentation.netty.v4.common.internal.HttpSche import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesGetter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.net.URI; import java.net.URISyntaxException; import java.util.List; diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyNetClientAttributesGetter.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyNetClientAttributesGetter.java index 5cce6f0709..5607dd5223 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyNetClientAttributesGetter.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyNetClientAttributesGetter.java @@ -11,7 +11,7 @@ import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTr import io.netty.channel.socket.DatagramChannel; import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesGetter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/HttpRequestHeadersGetter.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/HttpRequestHeadersGetter.java index 90e2b2384a..431168c05c 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/HttpRequestHeadersGetter.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/HttpRequestHeadersGetter.java @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.netty.v4.common.internal.server; import io.opentelemetry.context.propagation.TextMapGetter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import javax.annotation.Nullable; enum HttpRequestHeadersGetter implements TextMapGetter { diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyHttpServerAttributesGetter.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyHttpServerAttributesGetter.java index 67f1a20350..96870a39db 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyHttpServerAttributesGetter.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyHttpServerAttributesGetter.java @@ -9,7 +9,7 @@ import static io.opentelemetry.instrumentation.netty.v4.common.internal.HttpSche import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.util.List; import javax.annotation.Nullable; diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyNetServerAttributesGetter.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyNetServerAttributesGetter.java index 89e2a8fa08..a63a281cac 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyNetServerAttributesGetter.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyNetServerAttributesGetter.java @@ -10,7 +10,7 @@ import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTr import io.netty.channel.socket.DatagramChannel; import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesGetter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java index fa80394f3f..03e7084b11 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.netty.v4.common.internal.server; import io.netty.handler.codec.http.HttpResponse; -import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor; @@ -15,7 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtrac import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.util.List; /** @@ -25,6 +25,7 @@ import java.util.List; public final class NettyServerInstrumenterFactory { public static Instrumenter create( + OpenTelemetry openTelemetry, String instrumentationName, List capturedRequestHeaders, List capturedResponseHeaders) { @@ -32,9 +33,7 @@ public final class NettyServerInstrumenterFactory { NettyHttpServerAttributesGetter httpAttributesGetter = new NettyHttpServerAttributesGetter(); return Instrumenter.builder( - GlobalOpenTelemetry.get(), - instrumentationName, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, instrumentationName, HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpServerAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AbstractChannelHandlerContextInstrumentation.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AbstractChannelHandlerContextInstrumentation.java index 25c322ac64..58d5addb23 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AbstractChannelHandlerContextInstrumentation.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AbstractChannelHandlerContextInstrumentation.java @@ -15,7 +15,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.util.Attribute; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import net.bytebuddy.asm.Advice; diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AttributeKeys.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AttributeKeys.java index ad6fa7da80..d598dfd405 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AttributeKeys.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/AttributeKeys.java @@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_0; import io.netty.handler.codec.http.HttpResponse; import io.netty.util.AttributeKey; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientRequestTracingHandler.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientRequestTracingHandler.java index c4b869cefa..6ba14db480 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientRequestTracingHandler.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientRequestTracingHandler.java @@ -14,7 +14,7 @@ import io.netty.handler.codec.http.HttpRequest; import io.netty.util.Attribute; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapter { diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientResponseTracingHandler.java index c208aeef8e..b0cdd86dbb 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/HttpClientResponseTracingHandler.java @@ -15,7 +15,7 @@ import io.netty.handler.codec.http.LastHttpContent; import io.netty.util.Attribute; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapter { diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java index b356c8becc..45a6aaeb70 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java @@ -6,14 +6,16 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_0.client; import io.netty.handler.codec.http.HttpResponse; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumenter; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettySslInstrumenter; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.DeprecatedConfigPropertyWarning; import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig; +import java.util.Collections; public final class NettyClientSingletons { @@ -42,13 +44,16 @@ public final class NettyClientSingletons { static { NettyClientInstrumenterFactory factory = new NettyClientInstrumenterFactory( + GlobalOpenTelemetry.get(), "io.opentelemetry.netty-4.0", connectionTelemetryEnabled, sslTelemetryEnabled, + CommonConfig.get().getPeerServiceMapping()); + INSTRUMENTER = + factory.createHttpInstrumenter( CommonConfig.get().getClientRequestHeaders(), CommonConfig.get().getClientResponseHeaders(), - CommonConfig.get().getPeerServiceMapping()); - INSTRUMENTER = factory.createHttpInstrumenter(); + Collections.emptyList()); CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); SSL_INSTRUMENTER = factory.createSslInstrumenter(); } diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerRequestTracingHandler.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerRequestTracingHandler.java index 5cb9e73414..c5a5c109a1 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerRequestTracingHandler.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerRequestTracingHandler.java @@ -14,7 +14,7 @@ import io.netty.handler.codec.http.HttpRequest; import io.netty.util.Attribute; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter { diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerResponseTracingHandler.java index 6aaa79208f..8a47122231 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/HttpServerResponseTracingHandler.java @@ -15,7 +15,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; import javax.annotation.Nullable; diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java index 4e0a4ebb58..6af51fad8b 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java @@ -6,8 +6,9 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_0.server; import io.netty.handler.codec.http.HttpResponse; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; @@ -15,6 +16,7 @@ public final class NettyServerSingletons { private static final Instrumenter INSTRUMENTER = NettyServerInstrumenterFactory.create( + GlobalOpenTelemetry.get(), "io.opentelemetry.netty-4.0", CommonConfig.get().getServerRequestHeaders(), CommonConfig.get().getServerResponseHeaders()); diff --git a/instrumentation/netty/netty-4.1/javaagent/build.gradle.kts b/instrumentation/netty/netty-4.1/javaagent/build.gradle.kts index a35ce85ec4..3a6f391785 100644 --- a/instrumentation/netty/netty-4.1/javaagent/build.gradle.kts +++ b/instrumentation/netty/netty-4.1/javaagent/build.gradle.kts @@ -25,6 +25,7 @@ muzzle { dependencies { library("io.netty:netty-codec-http:4.1.0.Final") + implementation(project(":instrumentation:netty:netty-4.1:library")) implementation(project(":instrumentation:netty:netty-4-common:javaagent")) implementation(project(":instrumentation:netty:netty-4-common:library")) implementation(project(":instrumentation:netty:netty-common:library")) diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/AbstractChannelHandlerContextInstrumentation.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/AbstractChannelHandlerContextInstrumentation.java index 3b4256bdae..ad9534622d 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/AbstractChannelHandlerContextInstrumentation.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/AbstractChannelHandlerContextInstrumentation.java @@ -5,7 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_1; -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons.instrumenter; +import static io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientRequestTracingHandler.HTTP_REQUEST; +import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.NettyClientSingletons.instrumenter; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -14,10 +15,10 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.util.Attribute; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -51,8 +52,7 @@ public class AbstractChannelHandlerContextInstrumentation implements TypeInstrum if (clientContext != null) { ctx.channel().attr(AttributeKeys.CLIENT_PARENT_CONTEXT).remove(); contextAttr.remove(); - HttpRequestAndChannel request = - ctx.channel().attr(NettyClientSingletons.HTTP_REQUEST).getAndRemove(); + HttpRequestAndChannel request = ctx.channel().attr(HTTP_REQUEST).getAndRemove(); instrumenter().end(clientContext, request, null, throwable); return; } diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/BootstrapInstrumentation.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/BootstrapInstrumentation.java index 3cc065a750..aa91de4d1b 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/BootstrapInstrumentation.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/BootstrapInstrumentation.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_1; -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons.connectionInstrumenter; +import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.NettyClientSingletons.connectionInstrumenter; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/ChannelInstrumentation.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/ChannelInstrumentation.java index e17db0ee27..059906028d 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/ChannelInstrumentation.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/ChannelInstrumentation.java @@ -12,6 +12,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; import io.netty.channel.Channel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyChannelPipelineInstrumentation.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyChannelPipelineInstrumentation.java index a1fad6bd4a..73ff517ddc 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyChannelPipelineInstrumentation.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyChannelPipelineInstrumentation.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_1; -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons.sslInstrumenter; +import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.NettyClientSingletons.sslInstrumenter; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -22,15 +22,15 @@ import io.netty.handler.codec.http.HttpResponseEncoder; import io.netty.handler.codec.http.HttpServerCodec; import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettySslInstrumentationHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientRequestTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientResponseTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.server.HttpServerRequestTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.server.HttpServerResponseTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.server.HttpServerTracingHandler; import io.opentelemetry.javaagent.bootstrap.CallDepth; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.netty.v4.common.AbstractNettyChannelPipelineInstrumentation; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientRequestTracingHandler; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientResponseTracingHandler; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientTracingHandler; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.HttpServerRequestTracingHandler; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.HttpServerResponseTracingHandler; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.HttpServerTracingHandler; import net.bytebuddy.asm.Advice; public class NettyChannelPipelineInstrumentation @@ -105,18 +105,18 @@ public class NettyChannelPipelineInstrumentation ChannelHandler ourHandler = null; // Server pipeline handlers if (handler instanceof HttpServerCodec) { - ourHandler = new HttpServerTracingHandler(); + ourHandler = new HttpServerTracingHandler(NettyServerSingletons.instrumenter()); } else if (handler instanceof HttpRequestDecoder) { - ourHandler = new HttpServerRequestTracingHandler(); + ourHandler = new HttpServerRequestTracingHandler(NettyServerSingletons.instrumenter()); } else if (handler instanceof HttpResponseEncoder) { - ourHandler = new HttpServerResponseTracingHandler(); + ourHandler = new HttpServerResponseTracingHandler(NettyServerSingletons.instrumenter()); // Client pipeline handlers } else if (handler instanceof HttpClientCodec) { - ourHandler = new HttpClientTracingHandler(); + ourHandler = new HttpClientTracingHandler(NettyClientSingletons.instrumenter()); } else if (handler instanceof HttpRequestEncoder) { - ourHandler = new HttpClientRequestTracingHandler(); + ourHandler = new HttpClientRequestTracingHandler(NettyClientSingletons.instrumenter()); } else if (handler instanceof HttpResponseDecoder) { - ourHandler = new HttpClientResponseTracingHandler(); + ourHandler = new HttpClientResponseTracingHandler(NettyClientSingletons.instrumenter()); // the SslHandler lives in the netty-handler module, using class name comparison to avoid // adding a dependency } else if (handler.getClass().getName().equals("io.netty.handler.ssl.SslHandler")) { diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java similarity index 83% rename from instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/NettyClientSingletons.java rename to instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index 6a8f28e018..0eb38b84ee 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -3,26 +3,22 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.client; +package io.opentelemetry.javaagent.instrumentation.netty.v4_1; import io.netty.handler.codec.http.HttpResponse; -import io.netty.util.AttributeKey; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumenter; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettySslInstrumenter; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.DeprecatedConfigPropertyWarning; import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig; +import java.util.Collections; public final class NettyClientSingletons { - public static final AttributeKey HTTP_REQUEST = - AttributeKey.valueOf(NettyClientSingletons.class, "http-client-request"); - static final AttributeKey HTTP_RESPONSE = - AttributeKey.valueOf(NettyClientSingletons.class, "http-client-response"); - private static final boolean connectionTelemetryEnabled; private static final boolean sslTelemetryEnabled; @@ -48,13 +44,16 @@ public final class NettyClientSingletons { static { NettyClientInstrumenterFactory factory = new NettyClientInstrumenterFactory( + GlobalOpenTelemetry.get(), "io.opentelemetry.netty-4.1", connectionTelemetryEnabled, sslTelemetryEnabled, + CommonConfig.get().getPeerServiceMapping()); + INSTRUMENTER = + factory.createHttpInstrumenter( CommonConfig.get().getClientRequestHeaders(), CommonConfig.get().getClientResponseHeaders(), - CommonConfig.get().getPeerServiceMapping()); - INSTRUMENTER = factory.createHttpInstrumenter(); + Collections.emptyList()); CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); SSL_INSTRUMENTER = factory.createSslInstrumenter(); } diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/NettyServerSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java similarity index 64% rename from instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/NettyServerSingletons.java rename to instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java index 0926b5866d..c4239f6b0d 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java @@ -3,24 +3,20 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.server; +package io.opentelemetry.javaagent.instrumentation.netty.v4_1; import io.netty.handler.codec.http.HttpResponse; -import io.netty.util.AttributeKey; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; public final class NettyServerSingletons { - static final AttributeKey HTTP_REQUEST = - AttributeKey.valueOf(NettyServerSingletons.class, "http-server-request"); - static final AttributeKey HTTP_RESPONSE = - AttributeKey.valueOf(NettyServerSingletons.class, "http-server-response"); - private static final Instrumenter INSTRUMENTER = NettyServerInstrumenterFactory.create( + GlobalOpenTelemetry.get(), "io.opentelemetry.netty-4.1", CommonConfig.get().getServerRequestHeaders(), CommonConfig.get().getServerResponseHeaders()); diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientTracingHandler.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientTracingHandler.java deleted file mode 100644 index d549aa823a..0000000000 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientTracingHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.client; - -import io.netty.channel.CombinedChannelDuplexHandler; - -public class HttpClientTracingHandler - extends CombinedChannelDuplexHandler< - HttpClientResponseTracingHandler, HttpClientRequestTracingHandler> { - - public HttpClientTracingHandler() { - super(new HttpClientResponseTracingHandler(), new HttpClientRequestTracingHandler()); - } -} diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerTracingHandler.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerTracingHandler.java deleted file mode 100644 index cdb1be0fc0..0000000000 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerTracingHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.server; - -import io.netty.channel.CombinedChannelDuplexHandler; - -public class HttpServerTracingHandler - extends CombinedChannelDuplexHandler< - HttpServerRequestTracingHandler, HttpServerResponseTracingHandler> { - - public HttpServerTracingHandler() { - super(new HttpServerRequestTracingHandler(), new HttpServerResponseTracingHandler()); - } -} diff --git a/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/ChannelPipelineTest.groovy b/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/ChannelPipelineTest.groovy index b08a4eff16..6d0d79060e 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/ChannelPipelineTest.groovy +++ b/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/ChannelPipelineTest.groovy @@ -8,7 +8,7 @@ import io.netty.channel.DefaultChannelPipeline import io.netty.channel.embedded.EmbeddedChannel import io.netty.handler.codec.http.HttpClientCodec import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientTracingHandler +import io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler import spock.lang.Unroll @Unroll @@ -31,7 +31,7 @@ class ChannelPipelineTest extends AgentInstrumentationSpecification { channelPipeline.addLast("http", handler) channelPipeline.first() == handler // our handler was also added - channelPipeline.last().getClass() == HttpClientTracingHandler + channelPipeline.last().getClass().simpleName == "HttpClientTracingHandler" and: removeMethod.call(channelPipeline, handler) @@ -70,7 +70,7 @@ class ChannelPipelineTest extends AgentInstrumentationSpecification { then: "noop handler was removed; http and instrumentation handlers were added" channelPipeline.size() == 2 channelPipeline.first() == httpHandler - channelPipeline.last().getClass() == HttpClientTracingHandler + channelPipeline.last().getClass().simpleName == "HttpClientTracingHandler" when: def anotherNoopHandler = new NoopChannelHandler() @@ -103,7 +103,7 @@ class ChannelPipelineTest extends AgentInstrumentationSpecification { then: "add http and instrumentation handlers" channelPipeline.size() == 2 channelPipeline.first() == httpHandler - channelPipeline.last().getClass() == HttpClientTracingHandler + channelPipeline.last().getClass().simpleName == "HttpClientTracingHandler" when: def noopHandler = new NoopChannelHandler() @@ -120,7 +120,7 @@ class ChannelPipelineTest extends AgentInstrumentationSpecification { then: "http and instrumentation handlers will be remained" channelPipeline.size() == 2 channelPipeline.first() == httpHandler - channelPipeline.last().getClass() == HttpClientTracingHandler + channelPipeline.last().getClass().simpleName == "HttpClientTracingHandler" when: channelPipeline.removeLast() diff --git a/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ClientTest.groovy b/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ClientTest.groovy index f4a822216d..d4b5decfc6 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ClientTest.groovy +++ b/instrumentation/netty/netty-4.1/javaagent/src/test/groovy/Netty41ClientTest.groovy @@ -30,7 +30,6 @@ import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpClientTest import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest import io.opentelemetry.instrumentation.testing.junit.http.SingleConnection -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientTracingHandler import io.opentelemetry.semconv.trace.attributes.SemanticAttributes import spock.lang.Shared import spock.lang.Unroll @@ -253,7 +252,7 @@ class Netty41ClientTest extends HttpClientTest implement then: // The first one returns the removed tracing handler - pipeline.remove(HttpClientTracingHandler.getName()) != null + pipeline.remove("io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler") != null } def "when a handler is added to the netty pipeline we add ONLY ONE tracing handler"() { @@ -264,9 +263,9 @@ class Netty41ClientTest extends HttpClientTest implement when: pipeline.addLast("name", new HttpClientCodec()) // The first one returns the removed tracing handler - pipeline.remove(HttpClientTracingHandler.getName()) + pipeline.remove("io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler") // There is only one - pipeline.remove(HttpClientTracingHandler.getName()) == null + pipeline.remove("io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler") == null then: thrown NoSuchElementException @@ -283,7 +282,7 @@ class Netty41ClientTest extends HttpClientTest implement then: // The first one returns the removed tracing handler - null != pipeline.remove(HttpClientTracingHandler.getName()) + null != pipeline.remove("io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler") null != pipeline.remove("some_handler") null != pipeline.remove("a_traced_handler") } @@ -311,9 +310,9 @@ class Netty41ClientTest extends HttpClientTest implement channel.pipeline().addLast(new TracedHandlerFromInitializerHandler()) then: - null != channel.pipeline().get(HttpClientTracingHandler.getName()) + null != channel.pipeline().get("io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler") null != channel.pipeline().remove("added_in_initializer") - null == channel.pipeline().get(HttpClientTracingHandler.getName()) + null == channel.pipeline().get("io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler") } def "request with trace annotated method #method"() { diff --git a/instrumentation/netty/netty-4.1/library/build.gradle.kts b/instrumentation/netty/netty-4.1/library/build.gradle.kts new file mode 100644 index 0000000000..a38f1066a8 --- /dev/null +++ b/instrumentation/netty/netty-4.1/library/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("otel.library-instrumentation") +} + +dependencies { + library("io.netty:netty-codec-http:4.1.0.Final") + implementation(project(":instrumentation:netty:netty-4-common:library")) + implementation(project(":instrumentation:netty:netty-common:library")) +} diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetry.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetry.java new file mode 100644 index 0000000000..47c5650a73 --- /dev/null +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetry.java @@ -0,0 +1,66 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.netty.v4_1; + +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.CombinedChannelDuplexHandler; +import io.netty.handler.codec.http.HttpResponse; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientRequestTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientResponseTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientTracingHandler; + +/** Entrypoint for instrumenting Netty HTTP clients. */ +public final class NettyClientTelemetry { + + private final Instrumenter instrumenter; + + NettyClientTelemetry(Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + + /** Returns a new {@link NettyClientTelemetry} configured with the given {@link OpenTelemetry}. */ + public static NettyClientTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + /** + * Returns a new {@link NettyClientTelemetryBuilder} configured with the given {@link + * OpenTelemetry}. + */ + public static NettyClientTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new NettyClientTelemetryBuilder(openTelemetry); + } + + /** + * /** Returns a new {@link ChannelOutboundHandlerAdapter} that generates telemetry for outgoing + * HTTP requests. Must be paired with {@link #createResponseHandler()}. + */ + public ChannelOutboundHandlerAdapter createRequestHandler() { + return new HttpClientRequestTracingHandler(instrumenter); + } + + /** + * Returns a new {@link ChannelInboundHandlerAdapter} that generates telemetry for incoming HTTP + * responses. Must be paired with {@link #createRequestHandler()}. + */ + public ChannelInboundHandlerAdapter createResponseHandler() { + return new HttpClientResponseTracingHandler(instrumenter); + } + + /** + * Returns a new {@link CombinedChannelDuplexHandler} that generates telemetry for outgoing HTTP + * requests and incoming responses in a single handler. + */ + public CombinedChannelDuplexHandler< + ? extends ChannelInboundHandlerAdapter, ? extends ChannelOutboundHandlerAdapter> + createCombinedHandler() { + return new HttpClientTracingHandler(instrumenter); + } +} diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetryBuilder.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetryBuilder.java new file mode 100644 index 0000000000..bf3a9080dd --- /dev/null +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetryBuilder.java @@ -0,0 +1,74 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.netty.v4_1; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.netty.handler.codec.http.HttpResponse; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** A builder of {@link NettyClientTelemetry}. */ +public final class NettyClientTelemetryBuilder { + + private final OpenTelemetry openTelemetry; + private List capturedRequestHeaders = Collections.emptyList(); + private List capturedResponseHeaders = Collections.emptyList(); + private final List> + additionalAttributesExtractors = new ArrayList<>(); + + NettyClientTelemetryBuilder(OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + } + + /** + * Configures the HTTP request headers that will be captured as span attributes. + * + * @param capturedRequestHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public NettyClientTelemetryBuilder setCapturedRequestHeaders( + List capturedRequestHeaders) { + this.capturedRequestHeaders = capturedRequestHeaders; + return this; + } + + /** + * Configures the HTTP response headers that will be captured as span attributes. + * + * @param capturedResponseHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public NettyClientTelemetryBuilder setCapturedResponseHeaders( + List capturedResponseHeaders) { + this.capturedResponseHeaders = capturedResponseHeaders; + return this; + } + + /** + * Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented + * items. + */ + @CanIgnoreReturnValue + public NettyClientTelemetryBuilder addAttributesExtractor( + AttributesExtractor attributesExtractor) { + additionalAttributesExtractors.add(attributesExtractor); + return this; + } + + /** Returns a new {@link NettyClientTelemetry} with the given configuration. */ + public NettyClientTelemetry build() { + return new NettyClientTelemetry( + new NettyClientInstrumenterFactory( + openTelemetry, "io.opentelemetry.netty-4.1", false, false, Collections.emptyMap()) + .createHttpInstrumenter( + capturedRequestHeaders, capturedResponseHeaders, additionalAttributesExtractors)); + } +} diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetry.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetry.java new file mode 100644 index 0000000000..f78abcb67a --- /dev/null +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetry.java @@ -0,0 +1,66 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.netty.v4_1; + +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.CombinedChannelDuplexHandler; +import io.netty.handler.codec.http.HttpResponse; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.server.HttpServerRequestTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.server.HttpServerResponseTracingHandler; +import io.opentelemetry.instrumentation.netty.v4_1.internal.server.HttpServerTracingHandler; + +/** Entrypoint for instrumenting Netty HTTP servers. */ +public final class NettyServerTelemetry { + + private final Instrumenter instrumenter; + + NettyServerTelemetry(Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + + /** Returns a new {@link NettyServerTelemetry} configured with the given {@link OpenTelemetry}. */ + public static NettyServerTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + /** + * Returns a new {@link NettyServerTelemetryBuilder} configured with the given {@link + * OpenTelemetry}. + */ + public static NettyServerTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new NettyServerTelemetryBuilder(openTelemetry); + } + + /** + * Returns a new {@link ChannelInboundHandlerAdapter} that generates telemetry for incoming HTTP + * requests. Must be paired with {@link #createResponseHandler()}. + */ + public ChannelInboundHandlerAdapter createRequestHandler() { + return new HttpServerRequestTracingHandler(instrumenter); + } + + /** + * Returns a new {@link ChannelOutboundHandlerAdapter} that generates telemetry for outgoing HTTP + * responses. Must be paired with {@link #createRequestHandler()}. + */ + public ChannelOutboundHandlerAdapter createResponseHandler() { + return new HttpServerResponseTracingHandler(instrumenter); + } + + /** + * Returns a new {@link CombinedChannelDuplexHandler} that generates telemetry for incoming HTTP + * requests and outgoing responses in a single handler. + */ + public CombinedChannelDuplexHandler< + ? extends ChannelInboundHandlerAdapter, ? extends ChannelOutboundHandlerAdapter> + createCombinedHandler() { + return new HttpServerTracingHandler(instrumenter); + } +} diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetryBuilder.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetryBuilder.java new file mode 100644 index 0000000000..9e802cfae9 --- /dev/null +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetryBuilder.java @@ -0,0 +1,58 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.netty.v4_1; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory; +import java.util.Collections; +import java.util.List; + +/** A builder of {@link NettyServerTelemetry}. */ +public final class NettyServerTelemetryBuilder { + + private final OpenTelemetry openTelemetry; + private List capturedRequestHeaders = Collections.emptyList(); + private List capturedResponseHeaders = Collections.emptyList(); + + NettyServerTelemetryBuilder(OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + } + + /** + * Configures the HTTP request headers that will be captured as span attributes. + * + * @param capturedRequestHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public NettyServerTelemetryBuilder setCapturedRequestHeaders( + List capturedRequestHeaders) { + this.capturedRequestHeaders = capturedRequestHeaders; + return this; + } + + /** + * Configures the HTTP response headers that will be captured as span attributes. + * + * @param capturedResponseHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public NettyServerTelemetryBuilder setCapturedResponseHeaders( + List capturedResponseHeaders) { + this.capturedResponseHeaders = capturedResponseHeaders; + return this; + } + + /** Returns a new {@link NettyServerTelemetry} with the given configuration. */ + public NettyServerTelemetry build() { + return new NettyServerTelemetry( + NettyServerInstrumenterFactory.create( + openTelemetry, + "io.opentelemetry.netty-4.1", + capturedRequestHeaders, + capturedResponseHeaders)); + } +} diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/AttributeKeys.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/AttributeKeys.java similarity index 82% rename from instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/AttributeKeys.java rename to instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/AttributeKeys.java index 73d46c5fe1..b06edb0582 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/AttributeKeys.java +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/AttributeKeys.java @@ -3,11 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.v4_1; +package io.opentelemetry.instrumentation.netty.v4_1.internal; import io.netty.util.AttributeKey; import io.opentelemetry.context.Context; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public final class AttributeKeys { public static final AttributeKey WRITE_CONTEXT = diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientRequestTracingHandler.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientRequestTracingHandler.java similarity index 66% rename from instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientRequestTracingHandler.java rename to instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientRequestTracingHandler.java index a18484d9f0..9c1317465b 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientRequestTracingHandler.java +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientRequestTracingHandler.java @@ -3,23 +3,37 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.client; - -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons.HTTP_REQUEST; -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons.instrumenter; +package io.opentelemetry.instrumentation.netty.v4_1.internal.client; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponse; import io.netty.util.Attribute; +import io.netty.util.AttributeKey; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapter { + public static final AttributeKey HTTP_REQUEST = + AttributeKey.valueOf(HttpClientRequestTracingHandler.class, "http-client-request"); + + private final Instrumenter instrumenter; + + public HttpClientRequestTracingHandler( + Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) { if (!(msg instanceof HttpRequest)) { @@ -27,13 +41,13 @@ public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapt return; } - Context parentContext = ctx.channel().attr(AttributeKeys.WRITE_CONTEXT).getAndRemove(); + Context parentContext = ctx.channel().attr(AttributeKeys.WRITE_CONTEXT).getAndSet(null); if (parentContext == null) { parentContext = Context.current(); } HttpRequestAndChannel request = HttpRequestAndChannel.create((HttpRequest) msg, ctx.channel()); - if (!instrumenter().shouldStart(parentContext, request) || isAwsRequest(request)) { + if (!instrumenter.shouldStart(parentContext, request) || isAwsRequest(request)) { ctx.write(msg, prm); return; } @@ -42,7 +56,7 @@ public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapt Attribute contextAttr = ctx.channel().attr(AttributeKeys.CLIENT_CONTEXT); Attribute requestAttr = ctx.channel().attr(HTTP_REQUEST); - Context context = instrumenter().start(parentContext, request); + Context context = instrumenter.start(parentContext, request); parentContextAttr.set(parentContext); contextAttr.set(context); requestAttr.set(request); @@ -51,8 +65,8 @@ public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapt ctx.write(msg, prm); // span is ended normally in HttpClientResponseTracingHandler } catch (Throwable throwable) { - instrumenter().end(contextAttr.getAndRemove(), requestAttr.getAndRemove(), null, throwable); - parentContextAttr.remove(); + instrumenter.end(contextAttr.getAndSet(null), requestAttr.getAndSet(null), null, throwable); + parentContextAttr.set(null); throw throwable; } } diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientResponseTracingHandler.java similarity index 56% rename from instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientResponseTracingHandler.java rename to instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientResponseTracingHandler.java index 010ef1b790..30a03d8718 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientResponseTracingHandler.java @@ -3,10 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.client; +package io.opentelemetry.instrumentation.netty.v4_1.internal.client; -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons.HTTP_RESPONSE; -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons.instrumenter; +import static io.opentelemetry.instrumentation.netty.v4_1.internal.client.HttpClientRequestTracingHandler.HTTP_REQUEST; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; @@ -14,13 +13,29 @@ import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.LastHttpContent; import io.netty.util.Attribute; +import io.netty.util.AttributeKey; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapter { + private static final AttributeKey HTTP_RESPONSE = + AttributeKey.valueOf(HttpClientResponseTracingHandler.class, "http-client-response"); + + private final Instrumenter instrumenter; + + public HttpClientResponseTracingHandler( + Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { Attribute contextAttr = ctx.channel().attr(AttributeKeys.CLIENT_CONTEXT); @@ -31,25 +46,24 @@ public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapt } Attribute parentContextAttr = ctx.channel().attr(AttributeKeys.CLIENT_PARENT_CONTEXT); - Attribute requestAttr = - ctx.channel().attr(NettyClientSingletons.HTTP_REQUEST); + Attribute requestAttr = ctx.channel().attr(HTTP_REQUEST); Context parentContext = parentContextAttr.get(); HttpRequestAndChannel request = requestAttr.get(); if (msg instanceof FullHttpResponse) { - parentContextAttr.remove(); - contextAttr.remove(); - requestAttr.remove(); + parentContextAttr.set(null); + contextAttr.set(null); + requestAttr.set(null); } else if (msg instanceof HttpResponse) { // Headers before body have been received, store them to use when finishing the span. ctx.channel().attr(HTTP_RESPONSE).set((HttpResponse) msg); } else if (msg instanceof LastHttpContent) { // Not a FullHttpResponse so this is content that has been received after headers. Finish the // span using what we stored in attrs. - parentContextAttr.remove(); - contextAttr.remove(); - requestAttr.remove(); + parentContextAttr.set(null); + contextAttr.set(null); + requestAttr.set(null); } // We want the callback in the scope of the parent, not the client span @@ -62,9 +76,9 @@ public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapt } if (msg instanceof FullHttpResponse) { - instrumenter().end(context, request, (HttpResponse) msg, null); + instrumenter.end(context, request, (HttpResponse) msg, null); } else if (msg instanceof LastHttpContent) { - instrumenter().end(context, request, ctx.channel().attr(HTTP_RESPONSE).getAndRemove(), null); + instrumenter.end(context, request, ctx.channel().attr(HTTP_RESPONSE).getAndSet(null), null); } } } diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientTracingHandler.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientTracingHandler.java new file mode 100644 index 0000000000..aa7cc2f39a --- /dev/null +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/client/HttpClientTracingHandler.java @@ -0,0 +1,26 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.netty.v4_1.internal.client; + +import io.netty.channel.CombinedChannelDuplexHandler; +import io.netty.handler.codec.http.HttpResponse; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public class HttpClientTracingHandler + extends CombinedChannelDuplexHandler< + HttpClientResponseTracingHandler, HttpClientRequestTracingHandler> { + + public HttpClientTracingHandler(Instrumenter instrumenter) { + super( + new HttpClientResponseTracingHandler(instrumenter), + new HttpClientRequestTracingHandler(instrumenter)); + } +} diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerRequestTracingHandler.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerRequestTracingHandler.java similarity index 59% rename from instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerRequestTracingHandler.java rename to instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerRequestTracingHandler.java index a06fd35580..0a666b1623 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerRequestTracingHandler.java +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerRequestTracingHandler.java @@ -3,27 +3,42 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.server; - -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyServerSingletons.instrumenter; +package io.opentelemetry.instrumentation.netty.v4_1.internal.server; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponse; import io.netty.util.Attribute; +import io.netty.util.AttributeKey; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter { + static final AttributeKey HTTP_REQUEST = + AttributeKey.valueOf(HttpServerRequestTracingHandler.class, "http-server-request"); + + private final Instrumenter instrumenter; + + public HttpServerRequestTracingHandler( + Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { Channel channel = ctx.channel(); Attribute contextAttr = channel.attr(AttributeKeys.SERVER_CONTEXT); - Attribute requestAttr = channel.attr(NettyServerSingletons.HTTP_REQUEST); + Attribute requestAttr = channel.attr(HTTP_REQUEST); if (!(msg instanceof HttpRequest)) { Context serverContext = contextAttr.get(); @@ -43,12 +58,12 @@ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapte } HttpRequestAndChannel request = HttpRequestAndChannel.create((HttpRequest) msg, channel); - if (!instrumenter().shouldStart(parentContext, request)) { + if (!instrumenter.shouldStart(parentContext, request)) { ctx.fireChannelRead(msg); return; } - Context context = instrumenter().start(parentContext, request); + Context context = instrumenter.start(parentContext, request); contextAttr.set(context); requestAttr.set(request); @@ -57,7 +72,7 @@ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapte // the span is ended normally in HttpServerResponseTracingHandler } catch (Throwable throwable) { // make sure to remove the server context on end() call - instrumenter().end(contextAttr.getAndRemove(), requestAttr.getAndRemove(), null, throwable); + instrumenter.end(contextAttr.getAndSet(null), requestAttr.getAndSet(null), null, throwable); throw throwable; } } diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerResponseTracingHandler.java similarity index 66% rename from instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerResponseTracingHandler.java rename to instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerResponseTracingHandler.java index 81079e9de1..95b562bd9f 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerResponseTracingHandler.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.v4_1.server; +package io.opentelemetry.instrumentation.netty.v4_1.internal.server; -import static io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyServerSingletons.instrumenter; +import static io.opentelemetry.instrumentation.netty.v4_1.internal.server.HttpServerRequestTracingHandler.HTTP_REQUEST; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -16,15 +16,31 @@ import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.LastHttpContent; import io.netty.util.Attribute; +import io.netty.util.AttributeKey; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; -import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; import javax.annotation.Nullable; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public class HttpServerResponseTracingHandler extends ChannelOutboundHandlerAdapter { + static final AttributeKey HTTP_RESPONSE = + AttributeKey.valueOf(HttpServerResponseTracingHandler.class, "http-server-response"); + + private final Instrumenter instrumenter; + + public HttpServerResponseTracingHandler( + Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) { Attribute contextAttr = ctx.channel().attr(AttributeKeys.SERVER_CONTEXT); @@ -59,14 +75,14 @@ public class HttpServerResponseTracingHandler extends ChannelOutboundHandlerAdap future -> end( ctx.channel(), - ctx.channel().attr(NettyServerSingletons.HTTP_RESPONSE).getAndRemove(), + ctx.channel().attr(HTTP_RESPONSE).getAndSet(null), writePromise)); } } else { writePromise = prm; if (msg instanceof HttpResponse) { // Headers before body has been sent, store them to use when finishing the span. - ctx.channel().attr(NettyServerSingletons.HTTP_RESPONSE).set((HttpResponse) msg); + ctx.channel().attr(HTTP_RESPONSE).set((HttpResponse) msg); } } @@ -78,17 +94,16 @@ public class HttpServerResponseTracingHandler extends ChannelOutboundHandlerAdap } } - private static void end(Channel channel, HttpResponse response, ChannelFuture future) { + private void end(Channel channel, HttpResponse response, ChannelFuture future) { Throwable error = future.isSuccess() ? null : future.cause(); end(channel, response, error); } // make sure to remove the server context on end() call - private static void end( - Channel channel, @Nullable HttpResponse response, @Nullable Throwable error) { - Context context = channel.attr(AttributeKeys.SERVER_CONTEXT).getAndRemove(); - HttpRequestAndChannel request = channel.attr(NettyServerSingletons.HTTP_REQUEST).getAndRemove(); + private void end(Channel channel, @Nullable HttpResponse response, @Nullable Throwable error) { + Context context = channel.attr(AttributeKeys.SERVER_CONTEXT).getAndSet(null); + HttpRequestAndChannel request = channel.attr(HTTP_REQUEST).getAndSet(null); error = NettyErrorHolder.getOrDefault(context, error); - instrumenter().end(context, request, response, error); + instrumenter.end(context, request, response, error); } } diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerTracingHandler.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerTracingHandler.java new file mode 100644 index 0000000000..817e3b08c6 --- /dev/null +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/internal/server/HttpServerTracingHandler.java @@ -0,0 +1,26 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.netty.v4_1.internal.server; + +import io.netty.channel.CombinedChannelDuplexHandler; +import io.netty.handler.codec.http.HttpResponse; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public class HttpServerTracingHandler + extends CombinedChannelDuplexHandler< + HttpServerRequestTracingHandler, HttpServerResponseTracingHandler> { + + public HttpServerTracingHandler(Instrumenter instrumenter) { + super( + new HttpServerRequestTracingHandler(instrumenter), + new HttpServerResponseTracingHandler(instrumenter)); + } +} diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/build.gradle.kts b/instrumentation/ratpack/ratpack-1.4/javaagent/build.gradle.kts index b390c16488..3c0407a2d0 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/build.gradle.kts +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { library("io.ratpack:ratpack-core:1.4.0") implementation(project(":instrumentation:netty:netty-4.1:javaagent")) + implementation(project(":instrumentation:netty:netty-4.1:library")) testImplementation(project(":instrumentation:ratpack:ratpack-1.4:testing")) diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/TracingHandler.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/TracingHandler.java index 027348378a..7195272f90 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/TracingHandler.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/TracingHandler.java @@ -11,8 +11,8 @@ import static io.opentelemetry.javaagent.instrumentation.ratpack.RatpackSingleto import io.netty.util.Attribute; import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; import ratpack.handling.Context; import ratpack.handling.Handler; diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/build.gradle.kts b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/build.gradle.kts index 7b6aca282d..a15491f468 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/build.gradle.kts +++ b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/build.gradle.kts @@ -21,6 +21,7 @@ muzzle { dependencies { implementation(project(":instrumentation:netty:netty-4.1:javaagent")) + implementation(project(":instrumentation:netty:netty-4.1:library")) library("io.projectreactor.netty:reactor-netty:0.9.0.RELEASE") testInstrumentation(project(":instrumentation:reactor:reactor-netty:reactor-netty-1.0:javaagent")) diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/DecoratorFunctions.java b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/DecoratorFunctions.java index 984e167e4c..25f340ea6c 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/DecoratorFunctions.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/DecoratorFunctions.java @@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.reactornetty.v0_9; import io.netty.channel.Channel; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; import java.util.function.BiConsumer; import javax.annotation.Nullable; import reactor.netty.Connection; diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/OnRequest.java b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/OnRequest.java index 032eba29ba..59009b19bd 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/OnRequest.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/OnRequest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.reactornetty.v0_9; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; import java.util.function.BiConsumer; import reactor.netty.Connection; import reactor.netty.http.client.HttpClientRequest; diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/build.gradle.kts b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/build.gradle.kts index 490b00ea2f..9dc70b6628 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/build.gradle.kts +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/build.gradle.kts @@ -24,6 +24,7 @@ dependencies { annotationProcessor("com.google.auto.value:auto-value") implementation(project(":instrumentation:netty:netty-4.1:javaagent")) + implementation(project(":instrumentation:netty:netty-4.1:library")) implementation(project(":instrumentation:netty:netty-4-common:library")) implementation(project(":instrumentation:netty:netty-common:library")) implementation(project(":instrumentation:reactor:reactor-3.1:library")) diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/HttpResponseReceiverInstrumenter.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/HttpResponseReceiverInstrumenter.java index bf83a43230..ce60341dfe 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/HttpResponseReceiverInstrumenter.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/HttpResponseReceiverInstrumenter.java @@ -11,8 +11,8 @@ import static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.React import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.netty.v4_1.internal.AttributeKeys; import io.opentelemetry.instrumentation.reactor.ContextPropagationOperator; -import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; import java.util.function.BiConsumer; import java.util.function.Function; import javax.annotation.Nullable; diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java index 3a95b968ae..aca88537ad 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java @@ -72,11 +72,10 @@ public final class ReactorNettySingletons { NettyClientInstrumenterFactory instrumenterFactory = new NettyClientInstrumenterFactory( + GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, connectionTelemetryEnabled, false, - CommonConfig.get().getClientRequestHeaders(), - CommonConfig.get().getClientResponseHeaders(), CommonConfig.get().getPeerServiceMapping()); CONNECTION_INSTRUMENTER = instrumenterFactory.createConnectionInstrumenter(); } diff --git a/settings.gradle.kts b/settings.gradle.kts index 6f43d2e176..aaf3ccc1f3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -351,6 +351,7 @@ include(":instrumentation:mongo:mongo-common:testing") include(":instrumentation:netty:netty-3.8:javaagent") include(":instrumentation:netty:netty-4.0:javaagent") include(":instrumentation:netty:netty-4.1:javaagent") +include(":instrumentation:netty:netty-4.1:library") include(":instrumentation:netty:netty-4-common:javaagent") include(":instrumentation:netty:netty-4-common:library") include(":instrumentation:netty:netty-common:library")