From 91d08bbcd92aefdaa44caff19100aae41fcfa24e Mon Sep 17 00:00:00 2001 From: ascrutae Date: Tue, 18 Jul 2017 23:37:22 +0800 Subject: [PATCH] fix issue that open tracing activation set tag failed --- .../toolkit/opentracing/SkywalkingSpan.java | 9 +++-- .../span/SkywalkingSpanActivation.java | 14 +++++++ .../span/SpanSetTagInterceptor.java | 37 +++++++++++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SpanSetTagInterceptor.java diff --git a/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingSpan.java b/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingSpan.java index 430fa46e6..a9d08faac 100644 --- a/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingSpan.java +++ b/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingSpan.java @@ -68,16 +68,19 @@ public class SkywalkingSpan implements Span { return SkywalkingContext.INSTANCE; } + @NeedSnifferActivation( + "1. ContextManager#activeSpan()" + + "2. SkywalkingSpan#setTag(String, String)") @Override public Span setTag(String key, String value) { - return null; + return this; } @Override public Span setTag(String key, boolean value) { - return null; + return setTag(key, String.valueOf(value)); } @Override public Span setTag(String key, Number value) { - return null; + return setTag(key, String.valueOf(value)); } @Override diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java index e68396cc8..eb22cff3e 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java @@ -48,6 +48,7 @@ public class SkywalkingSpanActivation extends ClassInstanceMethodsEnhancePluginD private static final String FINISH_METHOD_INTERCEPTOR = "org.skywalking.apm.toolkit.activation.opentracing.span.SpanFinishInterceptor"; private static final String LOG_INTERCEPTOR = "org.skywalking.apm.toolkit.activation.opentracing.span.SpanLogInterceptor"; private static final String SET_OPERATION_NAME_INTERCEPTOR = "org.skywalking.apm.toolkit.activation.opentracing.span.SpanSetOperationNameInterceptor"; + private static final String SET_TAG_INTERCEPTOR = "org.skywalking.apm.toolkit.activation.opentracing.span.SpanSetTagInterceptor"; @Override protected ClassMatch enhanceClass() { @@ -132,6 +133,19 @@ public class SkywalkingSpanActivation extends ClassInstanceMethodsEnhancePluginD public boolean isOverrideArgs() { return false; } + }, + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named("setTag").and(takesArgument(0, String.class)).and(takesArgument(1, String.class)); + } + + @Override public String getMethodsInterceptor() { + return SET_TAG_INTERCEPTOR; + } + + @Override public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SpanSetTagInterceptor.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SpanSetTagInterceptor.java new file mode 100644 index 000000000..3abc0ebde --- /dev/null +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/span/SpanSetTagInterceptor.java @@ -0,0 +1,37 @@ +package org.skywalking.apm.toolkit.activation.opentracing.span; + +import io.opentracing.tag.Tags; +import org.skywalking.apm.agent.core.context.ContextManager; +import org.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; + +public class SpanSetTagInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + } + + @Override + public Object afterMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Object ret) throws Throwable { + AbstractSpan activeSpan = ContextManager.activeSpan(); + String tagKey = String.valueOf(allArguments[0]); + String tagValue = String.valueOf(allArguments[1]); + if (Tags.COMPONENT.getKey().equals(tagKey)) { + activeSpan.setComponent(tagValue); + } else if (Tags.PEER_SERVICE.getKey().equals(tagKey)) { + activeSpan.setOperationName(tagValue); + } else { + activeSpan.tag(tagKey, tagValue); + } + return ret; + } + + @Override + public void handleMethodException(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + + } +}