Limit netty exception capture to netty spans (#3809)
* Limit Netty exception capture to Netty span * Rename constant * Fix var name * Apply to netty-4.0 also
This commit is contained in:
parent
b2609d0f40
commit
1889c1adfb
|
@ -15,7 +15,6 @@ import io.netty.util.Attribute;
|
|||
import io.opentelemetry.context.Context;
|
||||
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.v4_0.client.NettyHttpClientTracer;
|
||||
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.NettyHttpServerTracer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
@ -49,16 +48,18 @@ public class AbstractChannelHandlerContextInstrumentation implements TypeInstrum
|
|||
public static void onEnter(
|
||||
@Advice.This ChannelHandlerContext channelContext,
|
||||
@Advice.Argument(0) Throwable throwable) {
|
||||
if (throwable != null) {
|
||||
Attribute<Context> clientContextAttr =
|
||||
channelContext.channel().attr(AttributeKeys.CLIENT_CONTEXT);
|
||||
Context context = clientContextAttr.get();
|
||||
if (context != null) {
|
||||
NettyHttpClientTracer.tracer().endExceptionally(context, throwable);
|
||||
} else {
|
||||
NettyHttpServerTracer.tracer()
|
||||
.onException(Java8BytecodeBridge.currentContext(), throwable);
|
||||
}
|
||||
Attribute<Context> clientContextAttr =
|
||||
channelContext.channel().attr(AttributeKeys.CLIENT_CONTEXT);
|
||||
Context clientContext = clientContextAttr.get();
|
||||
if (clientContext != null) {
|
||||
NettyHttpClientTracer.tracer().endExceptionally(clientContext, throwable);
|
||||
return;
|
||||
}
|
||||
Attribute<Context> serverContextAttr =
|
||||
channelContext.channel().attr(AttributeKeys.SERVER_CONTEXT);
|
||||
Context serverContext = serverContextAttr.get();
|
||||
if (serverContext != null) {
|
||||
NettyHttpServerTracer.tracer().onException(serverContext, throwable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,8 @@ public class AttributeKeys {
|
|||
attributeKey(AttributeKeys.class.getName() + ".write-context");
|
||||
|
||||
// this is the context that has the server span
|
||||
public static final AttributeKey<Context> SERVER_SPAN =
|
||||
attributeKey(AttributeKeys.class.getName() + ".server-span");
|
||||
public static final AttributeKey<Context> SERVER_CONTEXT =
|
||||
attributeKey(AttributeKeys.class.getName() + ".server-context");
|
||||
|
||||
public static final AttributeKey<Context> CLIENT_CONTEXT =
|
||||
attributeKey(AttributeKeys.class.getName() + ".client-context");
|
||||
|
|
|
@ -43,12 +43,12 @@ public class NettyHttpServerTracer
|
|||
|
||||
@Override
|
||||
protected void attachServerContext(Context context, Channel channel) {
|
||||
channel.attr(AttributeKeys.SERVER_SPAN).set(context);
|
||||
channel.attr(AttributeKeys.SERVER_CONTEXT).set(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Context getServerContext(Channel channel) {
|
||||
return channel.attr(AttributeKeys.SERVER_SPAN).get();
|
||||
return channel.attr(AttributeKeys.SERVER_CONTEXT).get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,9 +15,7 @@ import io.opentelemetry.context.Context;
|
|||
import io.opentelemetry.instrumentation.netty.v4_1.AttributeKeys;
|
||||
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.v4_1.client.NettyHttpClientTracer;
|
||||
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyHttpServerTracer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
@ -46,15 +44,14 @@ public class AbstractChannelHandlerContextInstrumentation implements TypeInstrum
|
|||
public static void onEnter(
|
||||
@Advice.This ChannelHandlerContext channelContext,
|
||||
@Advice.Argument(0) Throwable throwable) {
|
||||
if (throwable != null) {
|
||||
if (channelContext.channel().hasAttr(AttributeKeys.CLIENT_CONTEXT)) {
|
||||
Attribute<Context> clientContextAttr =
|
||||
channelContext.channel().attr(AttributeKeys.CLIENT_CONTEXT);
|
||||
NettyHttpClientTracer.tracer().endExceptionally(clientContextAttr.get(), throwable);
|
||||
} else {
|
||||
NettyHttpServerTracer.tracer()
|
||||
.onException(Java8BytecodeBridge.currentContext(), throwable);
|
||||
}
|
||||
if (channelContext.channel().hasAttr(AttributeKeys.CLIENT_CONTEXT)) {
|
||||
Attribute<Context> clientContextAttr =
|
||||
channelContext.channel().attr(AttributeKeys.CLIENT_CONTEXT);
|
||||
NettyHttpClientTracer.tracer().endExceptionally(clientContextAttr.get(), throwable);
|
||||
} else if (channelContext.channel().hasAttr(AttributeKeys.SERVER_CONTEXT)) {
|
||||
Attribute<Context> serverContextAttr =
|
||||
channelContext.channel().attr(AttributeKeys.SERVER_CONTEXT);
|
||||
NettyHttpClientTracer.tracer().onException(serverContextAttr.get(), throwable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,12 +43,12 @@ public class NettyHttpServerTracer
|
|||
|
||||
@Override
|
||||
protected void attachServerContext(Context context, Channel channel) {
|
||||
channel.attr(AttributeKeys.SERVER_SPAN).set(context);
|
||||
channel.attr(AttributeKeys.SERVER_CONTEXT).set(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Context getServerContext(Channel channel) {
|
||||
return channel.attr(AttributeKeys.SERVER_SPAN).get();
|
||||
return channel.attr(AttributeKeys.SERVER_CONTEXT).get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -16,7 +16,7 @@ public final class AttributeKeys {
|
|||
// this is the context that has the server span
|
||||
//
|
||||
// note: this attribute key is also used by ratpack instrumentation
|
||||
public static final AttributeKey<Context> SERVER_SPAN =
|
||||
public static final AttributeKey<Context> SERVER_CONTEXT =
|
||||
AttributeKey.valueOf(AttributeKeys.class, "server-span");
|
||||
|
||||
public static final AttributeKey<Context> CLIENT_CONTEXT =
|
||||
|
|
|
@ -21,7 +21,7 @@ public final class TracingHandler implements Handler {
|
|||
@Override
|
||||
public void handle(Context ctx) {
|
||||
Attribute<io.opentelemetry.context.Context> spanAttribute =
|
||||
ctx.getDirectChannelAccess().getChannel().attr(AttributeKeys.SERVER_SPAN);
|
||||
ctx.getDirectChannelAccess().getChannel().attr(AttributeKeys.SERVER_CONTEXT);
|
||||
io.opentelemetry.context.Context serverSpanContext = spanAttribute.get();
|
||||
|
||||
// Must use context from channel, as executor instrumentation is not accurate - Ratpack
|
||||
|
|
Loading…
Reference in New Issue