Publish :instrumentation:netty:netty-4-common as library instrumentation (#6811)

Related to #6734. Builds on #6805.

I'll follow it up by splitting out `:instrumentation:netty:netty-4.1` in
a separate PR.
This commit is contained in:
jack-berg 2022-10-06 10:50:25 -05:00 committed by GitHub
parent 891ec8c491
commit 1fcea2017b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
48 changed files with 175 additions and 85 deletions

View File

@ -3,10 +3,8 @@ plugins {
} }
dependencies { dependencies {
compileOnly("com.google.auto.value:auto-value-annotations") implementation(project(":instrumentation:netty:netty-4-common:library"))
annotationProcessor("com.google.auto.value:auto-value") implementation(project(":instrumentation:netty:netty-common:library"))
api(project(":instrumentation:netty:netty-common:library"))
compileOnly("io.netty:netty-codec-http:4.0.0.Final") compileOnly("io.netty:netty-codec-http:4.0.0.Final")
} }

View File

@ -0,0 +1,12 @@
plugins {
id("otel.library-instrumentation")
}
dependencies {
compileOnly("com.google.auto.value:auto-value-annotations")
annotationProcessor("com.google.auto.value:auto-value")
implementation(project(":instrumentation:netty:netty-common:library"))
compileOnly("io.netty:netty-codec-http:4.0.0.Final")
}

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common; package io.opentelemetry.instrumentation.netty.v4.common.internal;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import io.netty.channel.Channel; import io.netty.channel.Channel;
@ -11,6 +11,10 @@ import io.netty.handler.codec.http.HttpRequest;
import java.net.SocketAddress; import java.net.SocketAddress;
import javax.annotation.Nullable; 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.
*/
@AutoValue @AutoValue
public abstract class HttpRequestAndChannel { public abstract class HttpRequestAndChannel {

View File

@ -3,10 +3,14 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common; package io.opentelemetry.instrumentation.netty.v4.common.internal;
import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandler;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public final class HttpSchemeUtil { public final class HttpSchemeUtil {
private static final Class<? extends ChannelHandler> sslHandlerClass = getSslHandlerClass(); private static final Class<? extends ChannelHandler> sslHandlerClass = getSslHandlerClass();

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFuture;
@ -12,6 +12,10 @@ import io.netty.util.concurrent.GenericFutureListener;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public class ConnectionCompleteListener implements GenericFutureListener<Future<Void>> { public class ConnectionCompleteListener implements GenericFutureListener<Future<Void>> {
private final NettyConnectionInstrumenter instrumenter; private final NettyConnectionInstrumenter instrumenter;
private final Context context; private final Context context;

View File

@ -3,10 +3,10 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.opentelemetry.context.propagation.TextMapSetter; import io.opentelemetry.context.propagation.TextMapSetter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
enum HttpRequestHeadersSetter implements TextMapSetter<HttpRequestAndChannel> { enum HttpRequestHeadersSetter implements TextMapSetter<HttpRequestAndChannel> {
INSTANCE; INSTANCE;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
@ -19,20 +19,36 @@ import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributes
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor;
import io.opentelemetry.instrumentation.netty.common.internal.HttpClientSpanKeyAttributesExtractor; import io.opentelemetry.instrumentation.netty.common.internal.HttpClientSpanKeyAttributesExtractor;
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.util.List;
import java.util.Map;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public final class NettyClientInstrumenterFactory { public final class NettyClientInstrumenterFactory {
private final String instrumentationName; private final String instrumentationName;
private final boolean connectionTelemetryEnabled; private final boolean connectionTelemetryEnabled;
private final boolean sslTelemetryEnabled; private final boolean sslTelemetryEnabled;
private final List<String> capturedRequestHeaders;
private final List<String> capturedResponseHeaders;
private final Map<String, String> peerServiceMapping;
public NettyClientInstrumenterFactory( public NettyClientInstrumenterFactory(
String instrumentationName, boolean connectionTelemetryEnabled, boolean sslTelemetryEnabled) { String instrumentationName,
boolean connectionTelemetryEnabled,
boolean sslTelemetryEnabled,
List<String> capturedRequestHeaders,
List<String> capturedResponseHeaders,
Map<String, String> peerServiceMapping) {
this.instrumentationName = instrumentationName; this.instrumentationName = instrumentationName;
this.connectionTelemetryEnabled = connectionTelemetryEnabled; this.connectionTelemetryEnabled = connectionTelemetryEnabled;
this.sslTelemetryEnabled = sslTelemetryEnabled; this.sslTelemetryEnabled = sslTelemetryEnabled;
this.capturedRequestHeaders = capturedRequestHeaders;
this.capturedResponseHeaders = capturedResponseHeaders;
this.peerServiceMapping = peerServiceMapping;
} }
public Instrumenter<HttpRequestAndChannel, HttpResponse> createHttpInstrumenter() { public Instrumenter<HttpRequestAndChannel, HttpResponse> createHttpInstrumenter() {
@ -47,13 +63,12 @@ public final class NettyClientInstrumenterFactory {
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpClientAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpClientAttributesGetter))
.addAttributesExtractor( .addAttributesExtractor(
HttpClientAttributesExtractor.builder(httpClientAttributesGetter) HttpClientAttributesExtractor.builder(httpClientAttributesGetter)
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders()) .setCapturedRequestHeaders(capturedRequestHeaders)
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders()) .setCapturedResponseHeaders(capturedResponseHeaders)
.build()) .build())
.addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter))
.addAttributesExtractor( .addAttributesExtractor(
PeerServiceAttributesExtractor.create( PeerServiceAttributesExtractor.create(netAttributesGetter, peerServiceMapping))
netAttributesGetter, CommonConfig.get().getPeerServiceMapping()))
.addOperationMetrics(HttpClientMetrics.get()) .addOperationMetrics(HttpClientMetrics.get())
.buildClientInstrumenter(HttpRequestHeadersSetter.INSTANCE); .buildClientInstrumenter(HttpRequestHeadersSetter.INSTANCE);
} }
@ -66,8 +81,7 @@ public final class NettyClientInstrumenterFactory {
GlobalOpenTelemetry.get(), instrumentationName, NettyConnectionRequest::spanName) GlobalOpenTelemetry.get(), instrumentationName, NettyConnectionRequest::spanName)
.addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter))
.addAttributesExtractor( .addAttributesExtractor(
PeerServiceAttributesExtractor.create( PeerServiceAttributesExtractor.create(netAttributesGetter, peerServiceMapping));
netAttributesGetter, CommonConfig.get().getPeerServiceMapping()));
if (!connectionTelemetryEnabled) { if (!connectionTelemetryEnabled) {
// when the connection telemetry is not enabled, netty creates CONNECT spans whenever a // when the connection telemetry is not enabled, netty creates CONNECT spans whenever a
// connection error occurs - because there is no HTTP span in that scenario, if raw netty // connection error occurs - because there is no HTTP span in that scenario, if raw netty
@ -97,8 +111,7 @@ public final class NettyClientInstrumenterFactory {
GlobalOpenTelemetry.get(), instrumentationName, NettySslRequest::spanName) GlobalOpenTelemetry.get(), instrumentationName, NettySslRequest::spanName)
.addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter))
.addAttributesExtractor( .addAttributesExtractor(
PeerServiceAttributesExtractor.create( PeerServiceAttributesExtractor.create(netAttributesGetter, peerServiceMapping))
netAttributesGetter, CommonConfig.get().getPeerServiceMapping()))
.buildInstrumenter( .buildInstrumenter(
sslTelemetryEnabled sslTelemetryEnabled
? SpanKindExtractor.alwaysInternal() ? SpanKindExtractor.alwaysInternal()

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP;

View File

@ -3,13 +3,17 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
import javax.annotation.Nullable; 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 interface NettyConnectionInstrumenter { public interface NettyConnectionInstrumenter {
boolean shouldStart(Context parentContext, NettyConnectionRequest request); boolean shouldStart(Context parentContext, NettyConnectionRequest request);

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;

View File

@ -3,13 +3,13 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import static io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpSchemeUtil.getScheme; import static io.opentelemetry.instrumentation.netty.v4.common.internal.HttpSchemeUtil.getScheme;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesGetter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.List; import java.util.List;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP;
@ -11,7 +11,7 @@ import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTr
import io.netty.channel.socket.DatagramChannel; import io.netty.channel.socket.DatagramChannel;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetClientAttributesGetter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketAddress; import java.net.SocketAddress;
import javax.annotation.Nullable; import javax.annotation.Nullable;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandler;
@ -16,6 +16,10 @@ import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType; import java.lang.invoke.MethodType;
import java.net.SocketAddress; import java.net.SocketAddress;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
// inspired by reactor-netty SslProvider.SslReadHandler // inspired by reactor-netty SslProvider.SslReadHandler
public final class NettySslInstrumentationHandler extends ChannelDuplexHandler { public final class NettySslInstrumentationHandler extends ChannelDuplexHandler {

View File

@ -3,11 +3,15 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import javax.annotation.Nullable; 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 interface NettySslInstrumenter { public interface NettySslInstrumenter {
boolean shouldStart(Context parentContext, NettySslRequest request); boolean shouldStart(Context parentContext, NettySslRequest request);

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP;

View File

@ -3,13 +3,17 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.client; package io.opentelemetry.instrumentation.netty.v4.common.internal.client;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import java.net.SocketAddress; import java.net.SocketAddress;
import javax.annotation.Nullable; 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.
*/
@AutoValue @AutoValue
public abstract class NettySslRequest { public abstract class NettySslRequest {

View File

@ -3,10 +3,10 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.server; package io.opentelemetry.instrumentation.netty.v4.common.internal.server;
import io.opentelemetry.context.propagation.TextMapGetter; import io.opentelemetry.context.propagation.TextMapGetter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import javax.annotation.Nullable; import javax.annotation.Nullable;
enum HttpRequestHeadersGetter implements TextMapGetter<HttpRequestAndChannel> { enum HttpRequestHeadersGetter implements TextMapGetter<HttpRequestAndChannel> {

View File

@ -3,13 +3,13 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.server; package io.opentelemetry.instrumentation.netty.v4.common.internal.server;
import static io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpSchemeUtil.getScheme; import static io.opentelemetry.instrumentation.netty.v4.common.internal.HttpSchemeUtil.getScheme;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import java.util.List; import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;

View File

@ -3,14 +3,14 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.server; package io.opentelemetry.instrumentation.netty.v4.common.internal.server;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP;
import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP; import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_UDP;
import io.netty.channel.socket.DatagramChannel; import io.netty.channel.socket.DatagramChannel;
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetServerAttributesGetter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketAddress; import java.net.SocketAddress;
import javax.annotation.Nullable; import javax.annotation.Nullable;

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.javaagent.instrumentation.netty.v4.common.server; package io.opentelemetry.instrumentation.netty.v4.common.internal.server;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry;
@ -15,13 +15,19 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtrac
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import java.util.List;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public final class NettyServerInstrumenterFactory { public final class NettyServerInstrumenterFactory {
public static Instrumenter<HttpRequestAndChannel, HttpResponse> create( public static Instrumenter<HttpRequestAndChannel, HttpResponse> create(
String instrumentationName) { String instrumentationName,
List<String> capturedRequestHeaders,
List<String> capturedResponseHeaders) {
NettyHttpServerAttributesGetter httpAttributesGetter = new NettyHttpServerAttributesGetter(); NettyHttpServerAttributesGetter httpAttributesGetter = new NettyHttpServerAttributesGetter();
@ -32,8 +38,8 @@ public final class NettyServerInstrumenterFactory {
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
.addAttributesExtractor( .addAttributesExtractor(
HttpServerAttributesExtractor.builder(httpAttributesGetter) HttpServerAttributesExtractor.builder(httpAttributesGetter)
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders()) .setCapturedRequestHeaders(capturedRequestHeaders)
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders()) .setCapturedResponseHeaders(capturedResponseHeaders)
.build()) .build())
.addAttributesExtractor( .addAttributesExtractor(
NetServerAttributesExtractor.create(new NettyNetServerAttributesGetter())) NetServerAttributesExtractor.create(new NettyNetServerAttributesGetter()))

View File

@ -26,6 +26,8 @@ muzzle {
dependencies { dependencies {
library("io.netty:netty-codec-http:4.0.0.Final") library("io.netty:netty-codec-http:4.0.0.Final")
implementation(project(":instrumentation:netty:netty-4-common:javaagent")) implementation(project(":instrumentation:netty:netty-4-common:javaagent"))
implementation(project(":instrumentation:netty:netty-4-common:library"))
implementation(project(":instrumentation:netty:netty-common:library"))
testInstrumentation(project(":instrumentation:netty:netty-3.8:javaagent")) testInstrumentation(project(":instrumentation:netty:netty-3.8:javaagent"))
testInstrumentation(project(":instrumentation:netty:netty-4.1:javaagent")) testInstrumentation(project(":instrumentation:netty:netty-4.1:javaagent"))

View File

@ -15,9 +15,9 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;

View File

@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_0;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.netty.util.AttributeKey; import io.netty.util.AttributeKey;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;

View File

@ -13,10 +13,10 @@ import io.netty.channel.ChannelPromise;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.ConnectionCompleteListener;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.ConnectionCompleteListener;
import java.net.SocketAddress; import java.net.SocketAddress;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;

View File

@ -20,10 +20,10 @@ import io.netty.handler.codec.http.HttpResponseDecoder;
import io.netty.handler.codec.http.HttpResponseEncoder; import io.netty.handler.codec.http.HttpResponseEncoder;
import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.HttpServerCodec;
import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.api.util.VirtualField;
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettySslInstrumentationHandler;
import io.opentelemetry.javaagent.bootstrap.CallDepth; import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.AbstractNettyChannelPipelineInstrumentation; import io.opentelemetry.javaagent.instrumentation.netty.v4.common.AbstractNettyChannelPipelineInstrumentation;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettySslInstrumentationHandler;
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.HttpClientRequestTracingHandler; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.HttpClientRequestTracingHandler;
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.HttpClientResponseTracingHandler; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.HttpClientResponseTracingHandler;
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.HttpClientTracingHandler; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.HttpClientTracingHandler;

View File

@ -14,7 +14,7 @@ import io.netty.handler.codec.http.HttpRequest;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys;
public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapter { public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapter {

View File

@ -15,7 +15,7 @@ import io.netty.handler.codec.http.LastHttpContent;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys;
public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapter { public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapter {

View File

@ -7,12 +7,13 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_0.client;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.netty.v4.common.internal.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.DeprecatedConfigPropertyWarning;
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettyClientInstrumenterFactory;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettyConnectionInstrumenter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettySslInstrumenter;
public final class NettyClientSingletons { public final class NettyClientSingletons {
@ -41,7 +42,12 @@ public final class NettyClientSingletons {
static { static {
NettyClientInstrumenterFactory factory = NettyClientInstrumenterFactory factory =
new NettyClientInstrumenterFactory( new NettyClientInstrumenterFactory(
"io.opentelemetry.netty-4.0", connectionTelemetryEnabled, sslTelemetryEnabled); "io.opentelemetry.netty-4.0",
connectionTelemetryEnabled,
sslTelemetryEnabled,
CommonConfig.get().getClientRequestHeaders(),
CommonConfig.get().getClientResponseHeaders(),
CommonConfig.get().getPeerServiceMapping());
INSTRUMENTER = factory.createHttpInstrumenter(); INSTRUMENTER = factory.createHttpInstrumenter();
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
SSL_INSTRUMENTER = factory.createSslInstrumenter(); SSL_INSTRUMENTER = factory.createSslInstrumenter();

View File

@ -14,7 +14,7 @@ import io.netty.handler.codec.http.HttpRequest;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys;
public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter { public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter {

View File

@ -15,7 +15,7 @@ import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.AttributeKeys;
import javax.annotation.Nullable; import javax.annotation.Nullable;

View File

@ -7,13 +7,17 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_0.server;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.server.NettyServerInstrumenterFactory; import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
public final class NettyServerSingletons { public final class NettyServerSingletons {
private static final Instrumenter<HttpRequestAndChannel, HttpResponse> INSTRUMENTER = private static final Instrumenter<HttpRequestAndChannel, HttpResponse> INSTRUMENTER =
NettyServerInstrumenterFactory.create("io.opentelemetry.netty-4.0"); NettyServerInstrumenterFactory.create(
"io.opentelemetry.netty-4.0",
CommonConfig.get().getServerRequestHeaders(),
CommonConfig.get().getServerResponseHeaders());
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() { public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
return INSTRUMENTER; return INSTRUMENTER;

View File

@ -25,7 +25,9 @@ muzzle {
dependencies { dependencies {
library("io.netty:netty-codec-http:4.1.0.Final") library("io.netty:netty-codec-http:4.1.0.Final")
api(project(":instrumentation:netty:netty-4-common:javaagent")) implementation(project(":instrumentation:netty:netty-4-common:javaagent"))
implementation(project(":instrumentation:netty:netty-4-common:library"))
implementation(project(":instrumentation:netty:netty-common:library"))
testInstrumentation(project(":instrumentation:netty:netty-3.8:javaagent")) testInstrumentation(project(":instrumentation:netty:netty-3.8:javaagent"))
testInstrumentation(project(":instrumentation:netty:netty-4.0:javaagent")) testInstrumentation(project(":instrumentation:netty:netty-4.0:javaagent"))

View File

@ -14,9 +14,9 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;

View File

@ -18,10 +18,10 @@ import io.netty.resolver.DefaultAddressResolverGroup;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.ConnectionCompleteListener;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.ConnectionCompleteListener;
import java.net.SocketAddress; import java.net.SocketAddress;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;

View File

@ -12,7 +12,7 @@ import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.Promise; import io.netty.util.concurrent.Promise;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettyConnectionInstrumenter; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumenter;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.util.List; import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;

View File

@ -21,10 +21,10 @@ import io.netty.handler.codec.http.HttpResponseDecoder;
import io.netty.handler.codec.http.HttpResponseEncoder; import io.netty.handler.codec.http.HttpResponseEncoder;
import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.HttpServerCodec;
import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.api.util.VirtualField;
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettySslInstrumentationHandler;
import io.opentelemetry.javaagent.bootstrap.CallDepth; import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.AbstractNettyChannelPipelineInstrumentation; import io.opentelemetry.javaagent.instrumentation.netty.v4.common.AbstractNettyChannelPipelineInstrumentation;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettySslInstrumentationHandler;
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientRequestTracingHandler; 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.HttpClientResponseTracingHandler;
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientTracingHandler; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.HttpClientTracingHandler;

View File

@ -15,7 +15,7 @@ import io.netty.handler.codec.http.HttpRequest;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys;
public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapter { public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapter {

View File

@ -16,7 +16,7 @@ import io.netty.handler.codec.http.LastHttpContent;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys;
public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapter { public class HttpClientResponseTracingHandler extends ChannelInboundHandlerAdapter {

View File

@ -8,12 +8,13 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_1.client;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.netty.util.AttributeKey; import io.netty.util.AttributeKey;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.netty.v4.common.internal.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.DeprecatedConfigPropertyWarning;
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettyClientInstrumenterFactory;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettyConnectionInstrumenter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettySslInstrumenter;
public final class NettyClientSingletons { public final class NettyClientSingletons {
@ -47,7 +48,12 @@ public final class NettyClientSingletons {
static { static {
NettyClientInstrumenterFactory factory = NettyClientInstrumenterFactory factory =
new NettyClientInstrumenterFactory( new NettyClientInstrumenterFactory(
"io.opentelemetry.netty-4.1", connectionTelemetryEnabled, sslTelemetryEnabled); "io.opentelemetry.netty-4.1",
connectionTelemetryEnabled,
sslTelemetryEnabled,
CommonConfig.get().getClientRequestHeaders(),
CommonConfig.get().getClientResponseHeaders(),
CommonConfig.get().getPeerServiceMapping());
INSTRUMENTER = factory.createHttpInstrumenter(); INSTRUMENTER = factory.createHttpInstrumenter();
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
SSL_INSTRUMENTER = factory.createSslInstrumenter(); SSL_INSTRUMENTER = factory.createSslInstrumenter();

View File

@ -14,7 +14,7 @@ import io.netty.handler.codec.http.HttpRequest;
import io.netty.util.Attribute; import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys;
public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter { public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter {

View File

@ -19,7 +19,7 @@ import io.netty.util.Attribute;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.AttributeKeys;
import javax.annotation.Nullable; import javax.annotation.Nullable;

View File

@ -8,8 +8,9 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_1.server;
import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponse;
import io.netty.util.AttributeKey; import io.netty.util.AttributeKey;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.HttpRequestAndChannel;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.server.NettyServerInstrumenterFactory; import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
public final class NettyServerSingletons { public final class NettyServerSingletons {
@ -19,7 +20,10 @@ public final class NettyServerSingletons {
AttributeKey.valueOf(NettyServerSingletons.class, "http-server-response"); AttributeKey.valueOf(NettyServerSingletons.class, "http-server-response");
private static final Instrumenter<HttpRequestAndChannel, HttpResponse> INSTRUMENTER = private static final Instrumenter<HttpRequestAndChannel, HttpResponse> INSTRUMENTER =
NettyServerInstrumenterFactory.create("io.opentelemetry.netty-4.1"); NettyServerInstrumenterFactory.create(
"io.opentelemetry.netty-4.1",
CommonConfig.get().getServerRequestHeaders(),
CommonConfig.get().getServerResponseHeaders());
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() { public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
return INSTRUMENTER; return INSTRUMENTER;

View File

@ -24,6 +24,8 @@ dependencies {
annotationProcessor("com.google.auto.value:auto-value") annotationProcessor("com.google.auto.value:auto-value")
implementation(project(":instrumentation:netty:netty-4.1:javaagent")) implementation(project(":instrumentation:netty:netty-4.1:javaagent"))
implementation(project(":instrumentation:netty:netty-4-common:library"))
implementation(project(":instrumentation:netty:netty-common:library"))
implementation(project(":instrumentation:reactor:reactor-3.1:library")) implementation(project(":instrumentation:reactor:reactor-3.1:library"))
library("io.projectreactor.netty:reactor-netty-http:1.0.0") library("io.projectreactor.netty:reactor-netty-http:1.0.0")

View File

@ -14,11 +14,11 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtrac
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor;
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory;
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumenter;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
import io.opentelemetry.javaagent.bootstrap.internal.DeprecatedConfigPropertyWarning; import io.opentelemetry.javaagent.bootstrap.internal.DeprecatedConfigPropertyWarning;
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettyClientInstrumenterFactory;
import io.opentelemetry.javaagent.instrumentation.netty.v4.common.client.NettyConnectionInstrumenter;
import reactor.netty.http.client.HttpClientConfig; import reactor.netty.http.client.HttpClientConfig;
import reactor.netty.http.client.HttpClientResponse; import reactor.netty.http.client.HttpClientResponse;
@ -71,7 +71,13 @@ public final class ReactorNettySingletons {
.buildInstrumenter(SpanKindExtractor.alwaysClient()); .buildInstrumenter(SpanKindExtractor.alwaysClient());
NettyClientInstrumenterFactory instrumenterFactory = NettyClientInstrumenterFactory instrumenterFactory =
new NettyClientInstrumenterFactory(INSTRUMENTATION_NAME, connectionTelemetryEnabled, false); new NettyClientInstrumenterFactory(
INSTRUMENTATION_NAME,
connectionTelemetryEnabled,
false,
CommonConfig.get().getClientRequestHeaders(),
CommonConfig.get().getClientResponseHeaders(),
CommonConfig.get().getPeerServiceMapping());
CONNECTION_INSTRUMENTER = instrumenterFactory.createConnectionInstrumenter(); CONNECTION_INSTRUMENTER = instrumenterFactory.createConnectionInstrumenter();
} }

View File

@ -352,6 +352,7 @@ include(":instrumentation:netty:netty-3.8:javaagent")
include(":instrumentation:netty:netty-4.0:javaagent") include(":instrumentation:netty:netty-4.0:javaagent")
include(":instrumentation:netty:netty-4.1:javaagent") include(":instrumentation:netty:netty-4.1:javaagent")
include(":instrumentation:netty:netty-4-common:javaagent") include(":instrumentation:netty:netty-4-common:javaagent")
include(":instrumentation:netty:netty-4-common:library")
include(":instrumentation:netty:netty-common:library") include(":instrumentation:netty:netty-common:library")
include(":instrumentation:okhttp:okhttp-2.2:javaagent") include(":instrumentation:okhttp:okhttp-2.2:javaagent")
include(":instrumentation:okhttp:okhttp-3.0:javaagent") include(":instrumentation:okhttp:okhttp-3.0:javaagent")