提交 f57aac38 编写于 作者: wu-sheng's avatar wu-sheng 提交者: GitHub

Merge pull request #298 from ascrutae/zhangxin/fix/ot-set-tag-failed

fix issue that open tracing activation set tag failed
......@@ -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
......
......@@ -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<MethodDescription> 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;
}
}
};
}
......
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) {
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册