From e9ba87d6b361e3fa464a969320cc8a9ab7c964b9 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Tue, 26 Oct 2021 17:28:31 +0200 Subject: [PATCH] Migrate Netty 3.8 CONNECT instrumentation to Instrumenter API (#4492) * Migrate Netty 3.8 CONNECT instrumentation to Instrumenter API * Move shouldStart() --- .../ChannelFutureListenerInstrumentation.java | 7 +-- .../v3_8/NettyChannelInstrumentation.java | 45 ++++++++++++++++--- .../netty/v3_8/NettyConnectionContext.java | 9 ---- .../netty/v3_8/client/ConnectionListener.java | 33 ++++++++++++++ .../v3_8/client/NettyClientSingletons.java | 27 ++++++++++- .../NettyConnectNetAttributesExtractor.java | 43 ++++++++++++++++++ .../v3_8/client/NettyHttpClientTracer.java | 43 ------------------ .../client/ConnectionCompleteListener.java | 1 + .../NettyClientInstrumenterFactory.java | 1 + .../client/NettyConnectInstrumenter.java | 1 + .../client/NettyConnectInstrumenterImpl.java | 1 + .../NettyConnectNetAttributesExtractor.java | 2 +- .../NettyErrorOnlyConnectInstrumenter.java | 1 + .../netty/v4_0/BootstrapInstrumentation.java | 2 +- .../netty/v4_1/BootstrapInstrumentation.java | 2 +- .../netty-common/javaagent/build.gradle.kts | 5 +++ .../netty/common}/NettyConnectRequest.java | 6 +-- .../instrumentation/netty/common}/Timer.java | 10 ++--- .../reactornetty/v1_0/ConnectionWrapper.java | 2 +- .../TransportConnectorInstrumentation.java | 2 +- 20 files changed, 165 insertions(+), 78 deletions(-) create mode 100644 instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/ConnectionListener.java create mode 100644 instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyConnectNetAttributesExtractor.java delete mode 100644 instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java rename instrumentation/netty/{netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client => netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common}/NettyConnectRequest.java (73%) rename instrumentation/netty/{netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client => netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common}/Timer.java (74%) diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/ChannelFutureListenerInstrumentation.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/ChannelFutureListenerInstrumentation.java index 35eaf4be9c..0be686c5a3 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/ChannelFutureListenerInstrumentation.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/ChannelFutureListenerInstrumentation.java @@ -7,7 +7,6 @@ package io.opentelemetry.javaagent.instrumentation.netty.v3_8; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; -import static io.opentelemetry.javaagent.instrumentation.netty.v3_8.client.NettyHttpClientTracer.tracer; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -70,11 +69,7 @@ public class ChannelFutureListenerInstrumentation implements TypeInstrumentation if (parentContext == null) { return null; } - Scope parentScope = parentContext.makeCurrent(); - if (connectionContext.createConnectionSpan()) { - tracer().connectionFailure(parentContext, future.getChannel(), cause); - } - return parentScope; + return parentContext.makeCurrent(); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyChannelInstrumentation.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyChannelInstrumentation.java index a2b50b7729..e2a85c4580 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyChannelInstrumentation.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyChannelInstrumentation.java @@ -7,9 +7,11 @@ package io.opentelemetry.javaagent.instrumentation.netty.v3_8; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; +import static io.opentelemetry.javaagent.instrumentation.netty.v3_8.client.NettyClientSingletons.connectInstrumenter; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; @@ -17,10 +19,14 @@ import io.opentelemetry.instrumentation.api.field.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; +import io.opentelemetry.javaagent.instrumentation.netty.v3_8.client.ConnectionListener; +import java.net.SocketAddress; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelFuture; public class NettyChannelInstrumentation implements TypeInstrumentation { @@ -39,6 +45,7 @@ public class NettyChannelInstrumentation implements TypeInstrumentation { transformer.applyAdviceToMethod( isMethod() .and(named("connect")) + .and(takesArgument(0, SocketAddress.class)) .and(returns(named("org.jboss.netty.channel.ChannelFuture"))), NettyChannelInstrumentation.class.getName() + "$ChannelConnectAdvice"); } @@ -46,10 +53,15 @@ public class NettyChannelInstrumentation implements TypeInstrumentation { @SuppressWarnings("unused") public static class ChannelConnectAdvice { - @Advice.OnMethodEnter - public static void onEnter(@Advice.This Channel channel) { - Context context = Java8BytecodeBridge.currentContext(); - Span span = Java8BytecodeBridge.spanFromContext(context); + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void onEnter( + @Advice.This Channel channel, + @Advice.Argument(0) SocketAddress remoteAddress, + @Advice.Local("otelParentContext") Context parentContext, + @Advice.Local("otelRequest") NettyConnectRequest request) { + + parentContext = Java8BytecodeBridge.currentContext(); + Span span = Java8BytecodeBridge.spanFromContext(parentContext); if (!span.getSpanContext().isValid()) { return; } @@ -59,7 +71,30 @@ public class NettyChannelInstrumentation implements TypeInstrumentation { if (virtualField.get(channel) != null) { return; } - virtualField.set(channel, new NettyConnectionContext(context)); + virtualField.set(channel, new NettyConnectionContext(parentContext)); + + request = NettyConnectRequest.create(remoteAddress); + } + + @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) + public static void onExit( + @Advice.Return ChannelFuture channelFuture, + @Advice.Thrown Throwable error, + @Advice.Local("otelParentContext") Context parentContext, + @Advice.Local("otelRequest") NettyConnectRequest request) { + + if (request == null) { + return; + } + + if (error != null) { + if (connectInstrumenter().shouldStart(parentContext, request)) { + Context context = connectInstrumenter().start(parentContext, request); + connectInstrumenter().end(context, request, null, error); + } + } else { + channelFuture.addListener(new ConnectionListener(parentContext, request)); + } } } } diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyConnectionContext.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyConnectionContext.java index 13453b9738..ddcc54c773 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyConnectionContext.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyConnectionContext.java @@ -10,7 +10,6 @@ import javax.annotation.Nullable; public class NettyConnectionContext { private Context connectionContext; - private boolean connectionSpanCreated; public NettyConnectionContext(Context connectionContext) { this.connectionContext = connectionContext; @@ -27,12 +26,4 @@ public class NettyConnectionContext { connectionContext = null; return context; } - - public boolean createConnectionSpan() { - if (connectionSpanCreated) { - return false; - } - connectionSpanCreated = true; - return true; - } } diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/ConnectionListener.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/ConnectionListener.java new file mode 100644 index 0000000000..3e65eccc13 --- /dev/null +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/ConnectionListener.java @@ -0,0 +1,33 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.netty.v3_8.client; + +import static io.opentelemetry.javaagent.instrumentation.netty.v3_8.client.NettyClientSingletons.connectInstrumenter; + +import io.opentelemetry.context.Context; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; +import org.jboss.netty.channel.ChannelFuture; +import org.jboss.netty.channel.ChannelFutureListener; + +public final class ConnectionListener implements ChannelFutureListener { + + private final Context parentContext; + private final NettyConnectRequest request; + + public ConnectionListener(Context parentContext, NettyConnectRequest request) { + this.parentContext = parentContext; + this.request = request; + } + + @Override + public void operationComplete(ChannelFuture future) { + Throwable cause = future.getCause(); + if (cause != null && connectInstrumenter().shouldStart(parentContext, request)) { + Context context = connectInstrumenter().start(parentContext, request); + connectInstrumenter().end(context, request, future.getChannel(), cause); + } + } +} diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java index 890c1ac315..5ea370b10b 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java @@ -8,16 +8,22 @@ package io.opentelemetry.javaagent.instrumentation.netty.v3_8.client; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import io.opentelemetry.javaagent.instrumentation.netty.common.NettyErrorHolder; import io.opentelemetry.javaagent.instrumentation.netty.v3_8.HttpRequestAndChannel; +import org.jboss.netty.channel.Channel; import org.jboss.netty.handler.codec.http.HttpResponse; -final class NettyClientSingletons { +public final class NettyClientSingletons { + + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.netty-3.8"; private static final Instrumenter INSTRUMENTER; + private static final Instrumenter CONNECT_INSTRUMENTER; static { NettyHttpClientAttributesExtractor httpClientAttributesExtractor = @@ -28,7 +34,7 @@ final class NettyClientSingletons { INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), - "io.opentelemetry.netty-3.8", + INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpClientAttributesExtractor)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpClientAttributesExtractor)) .addAttributesExtractor(httpClientAttributesExtractor) @@ -39,11 +45,28 @@ final class NettyClientSingletons { .addContextCustomizer( (context, requestAndChannel, startAttributes) -> NettyErrorHolder.init(context)) .newClientInstrumenter(new HttpRequestHeadersSetter()); + + NettyConnectNetAttributesExtractor nettyConnectAttributesExtractor = + new NettyConnectNetAttributesExtractor(); + CONNECT_INSTRUMENTER = + Instrumenter.builder( + GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, rq -> "CONNECT") + .addAttributesExtractor(nettyConnectAttributesExtractor) + .addAttributesExtractor( + PeerServiceAttributesExtractor.create(nettyConnectAttributesExtractor)) + .setTimeExtractors( + request -> request.timer().startTime(), + (request, channel, error) -> request.timer().now()) + .newInstrumenter(SpanKindExtractor.alwaysClient()); } public static Instrumenter instrumenter() { return INSTRUMENTER; } + public static Instrumenter connectInstrumenter() { + return CONNECT_INSTRUMENTER; + } + private NettyClientSingletons() {} } diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyConnectNetAttributesExtractor.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyConnectNetAttributesExtractor.java new file mode 100644 index 0000000000..38a0d5c1c3 --- /dev/null +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyConnectNetAttributesExtractor.java @@ -0,0 +1,43 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.netty.v3_8.client; + +import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP; +import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP; + +import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import javax.annotation.Nullable; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.socket.DatagramChannel; + +final class NettyConnectNetAttributesExtractor + extends InetSocketAddressNetClientAttributesExtractor { + + @Nullable + @Override + public InetSocketAddress getAddress(NettyConnectRequest request, @Nullable Channel channel) { + SocketAddress remoteAddress = null; + if (channel != null) { + remoteAddress = channel.getRemoteAddress(); + } + // remote address on end() may be null when connection hasn't been established + if (remoteAddress == null) { + remoteAddress = request.remoteAddressOnStart(); + } + if (remoteAddress instanceof InetSocketAddress) { + return (InetSocketAddress) remoteAddress; + } + return null; + } + + @Override + public String transport(NettyConnectRequest request, @Nullable Channel channel) { + return channel instanceof DatagramChannel ? IP_UDP : IP_TCP; + } +} diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java deleted file mode 100644 index 294b7220ba..0000000000 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.netty.v3_8.client; - -import static io.opentelemetry.api.trace.SpanKind.CLIENT; -import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP; -import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP; - -import io.opentelemetry.api.trace.SpanBuilder; -import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.tracer.BaseTracer; -import io.opentelemetry.instrumentation.api.tracer.net.NetPeerAttributes; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; -import java.net.InetSocketAddress; -import org.jboss.netty.channel.Channel; -import org.jboss.netty.channel.socket.DatagramChannel; - -public class NettyHttpClientTracer extends BaseTracer { - private static final NettyHttpClientTracer TRACER = new NettyHttpClientTracer(); - - public static NettyHttpClientTracer tracer() { - return TRACER; - } - - public void connectionFailure(Context parentContext, Channel channel, Throwable throwable) { - SpanBuilder spanBuilder = spanBuilder(parentContext, "CONNECT", CLIENT); - spanBuilder.setAttribute( - SemanticAttributes.NET_TRANSPORT, channel instanceof DatagramChannel ? IP_UDP : IP_TCP); - NetPeerAttributes.INSTANCE.setNetPeer( - spanBuilder, (InetSocketAddress) channel.getRemoteAddress()); - - Context context = withClientSpan(parentContext, spanBuilder.startSpan()); - tracer().endExceptionally(context, throwable); - } - - @Override - protected String getInstrumentationName() { - return "io.opentelemetry.netty-3.8"; - } -} diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/ConnectionCompleteListener.java b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/ConnectionCompleteListener.java index e19afc6dc1..68f364759c 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/ConnectionCompleteListener.java +++ b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/ConnectionCompleteListener.java @@ -10,6 +10,7 @@ import io.netty.channel.ChannelFuture; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; import io.opentelemetry.context.Context; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; public class ConnectionCompleteListener implements GenericFutureListener> { private final NettyConnectInstrumenter instrumenter; diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyClientInstrumenterFactory.java b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyClientInstrumenterFactory.java index 203176a2fa..4e63a13f74 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyClientInstrumenterFactory.java +++ b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyClientInstrumenterFactory.java @@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.javaagent.instrumentation.netty.common.HttpRequestAndChannel; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; public final class NettyClientInstrumenterFactory { diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenter.java b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenter.java index 64df8c1d5f..000a8fe3f3 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenter.java +++ b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenter.java @@ -7,6 +7,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.common.client; import io.netty.channel.Channel; import io.opentelemetry.context.Context; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import javax.annotation.Nullable; public interface NettyConnectInstrumenter { diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenterImpl.java b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenterImpl.java index 0e1f003668..55f342f222 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenterImpl.java +++ b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectInstrumenterImpl.java @@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.common.client; import io.netty.channel.Channel; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import javax.annotation.Nullable; final class NettyConnectInstrumenterImpl implements NettyConnectInstrumenter { diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectNetAttributesExtractor.java b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectNetAttributesExtractor.java index d94bb1488a..98ca5cde4b 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectNetAttributesExtractor.java +++ b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectNetAttributesExtractor.java @@ -11,6 +11,7 @@ import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTr import io.netty.channel.Channel; import io.netty.channel.socket.DatagramChannel; import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesExtractor; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; @@ -35,7 +36,6 @@ final class NettyConnectNetAttributesExtractor return null; } - @Nullable @Override public String transport(NettyConnectRequest request, @Nullable Channel channel) { return channel instanceof DatagramChannel ? IP_UDP : IP_TCP; diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyErrorOnlyConnectInstrumenter.java b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyErrorOnlyConnectInstrumenter.java index 408f3cce5f..6550f96c38 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyErrorOnlyConnectInstrumenter.java +++ b/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyErrorOnlyConnectInstrumenter.java @@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.common.client; import io.netty.channel.Channel; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import javax.annotation.Nullable; final class NettyErrorOnlyConnectInstrumenter implements NettyConnectInstrumenter { diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/BootstrapInstrumentation.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/BootstrapInstrumentation.java index eca85bba2a..f7b23951b8 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/BootstrapInstrumentation.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/BootstrapInstrumentation.java @@ -15,8 +15,8 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import io.opentelemetry.javaagent.instrumentation.netty.common.client.ConnectionCompleteListener; -import io.opentelemetry.javaagent.instrumentation.netty.common.client.NettyConnectRequest; import java.net.SocketAddress; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; 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 7f4d3c1497..a00a3b1b59 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 @@ -15,8 +15,8 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import io.opentelemetry.javaagent.instrumentation.netty.common.client.ConnectionCompleteListener; -import io.opentelemetry.javaagent.instrumentation.netty.common.client.NettyConnectRequest; import java.net.SocketAddress; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; diff --git a/instrumentation/netty/netty-common/javaagent/build.gradle.kts b/instrumentation/netty/netty-common/javaagent/build.gradle.kts index 0b6bd5f679..afe601decb 100644 --- a/instrumentation/netty/netty-common/javaagent/build.gradle.kts +++ b/instrumentation/netty/netty-common/javaagent/build.gradle.kts @@ -1,3 +1,8 @@ plugins { id("otel.javaagent-instrumentation") } + +dependencies { + compileOnly("com.google.auto.value:auto-value-annotations") + annotationProcessor("com.google.auto.value:auto-value") +} diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectRequest.java b/instrumentation/netty/netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/NettyConnectRequest.java similarity index 73% rename from instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectRequest.java rename to instrumentation/netty/netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/NettyConnectRequest.java index 7b1bcbe093..bf92465a2c 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/NettyConnectRequest.java +++ b/instrumentation/netty/netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/NettyConnectRequest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.common.client; +package io.opentelemetry.javaagent.instrumentation.netty.common; import com.google.auto.value.AutoValue; import java.net.SocketAddress; @@ -16,8 +16,8 @@ public abstract class NettyConnectRequest { return new AutoValue_NettyConnectRequest(Timer.start(), remoteAddress); } - abstract Timer timer(); + public abstract Timer timer(); @Nullable - abstract SocketAddress remoteAddressOnStart(); + public abstract SocketAddress remoteAddressOnStart(); } diff --git a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/Timer.java b/instrumentation/netty/netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/Timer.java similarity index 74% rename from instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/Timer.java rename to instrumentation/netty/netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/Timer.java index 69bb71484f..6d1e0104ed 100644 --- a/instrumentation/netty/netty-4-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/client/Timer.java +++ b/instrumentation/netty/netty-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/common/Timer.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.netty.common.client; +package io.opentelemetry.javaagent.instrumentation.netty.common; import java.time.Instant; -final class Timer { +public final class Timer { - static Timer start() { + public static Timer start() { return new Timer(Instant.now(), System.nanoTime()); } @@ -21,11 +21,11 @@ final class Timer { this.startNanoTime = startNanoTime; } - Instant startTime() { + public Instant startTime() { return startTime; } - Instant now() { + public Instant now() { long durationNanos = System.nanoTime() - startNanoTime; return startTime().plusNanos(durationNanos); } diff --git a/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ConnectionWrapper.java b/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ConnectionWrapper.java index eb85d8560a..5615b17fc8 100644 --- a/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ConnectionWrapper.java +++ b/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ConnectionWrapper.java @@ -9,7 +9,7 @@ import static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.React import io.netty.channel.Channel; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.instrumentation.netty.common.client.NettyConnectRequest; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import reactor.core.publisher.Mono; public class ConnectionWrapper { diff --git a/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/TransportConnectorInstrumentation.java b/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/TransportConnectorInstrumentation.java index 072e85db2e..b43e1f6b69 100644 --- a/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/TransportConnectorInstrumentation.java +++ b/instrumentation/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/TransportConnectorInstrumentation.java @@ -15,7 +15,7 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; -import io.opentelemetry.javaagent.instrumentation.netty.common.client.NettyConnectRequest; +import io.opentelemetry.javaagent.instrumentation.netty.common.NettyConnectRequest; import java.net.SocketAddress; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription;