diff --git a/apm-network/src/main/java/org/skywalking/apm/network/trace/component/ComponentsDefine.java b/apm-network/src/main/java/org/skywalking/apm/network/trace/component/ComponentsDefine.java index ef1169e92..d52b73c4e 100644 --- a/apm-network/src/main/java/org/skywalking/apm/network/trace/component/ComponentsDefine.java +++ b/apm-network/src/main/java/org/skywalking/apm/network/trace/component/ComponentsDefine.java @@ -5,4 +5,8 @@ package org.skywalking.apm.network.trace.component; */ public class ComponentsDefine { public static final OfficialComponent TOMCAT = new OfficialComponent(1, "Tomcat"); + + public static final OfficialComponent HTTPCLIENT = new OfficialComponent(2, "HttpClient"); + + public static final OfficialComponent DUBBO = new OfficialComponent(3, "Dubbo"); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/boot/ServiceManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/boot/ServiceManager.java index 06283a8ef..2d7338994 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/boot/ServiceManager.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/boot/ServiceManager.java @@ -1,12 +1,11 @@ package org.skywalking.apm.agent.core.boot; -import org.skywalking.apm.logging.ILog; -import org.skywalking.apm.logging.LogManager; - import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.ServiceLoader; +import org.skywalking.apm.logging.ILog; +import org.skywalking.apm.logging.LogManager; /** * The ServiceManager bases on {@link ServiceLoader}, @@ -58,7 +57,7 @@ public enum ServiceManager { } } - private void afterBoot(){ + private void afterBoot() { for (BootService service : bootedServices.values()) { try { service.afterBoot(); @@ -72,11 +71,11 @@ public enum ServiceManager { * Find a {@link BootService} implementation, which is already started. * * @param serviceClass class name. - * @param {@link BootService} implementation class. + * @param {@link BootService} implementation class. * @return {@link BootService} instance */ public T findService(Class serviceClass) { - return (T) bootedServices.get(serviceClass); + return (T)bootedServices.get(serviceClass); } ServiceLoader load() { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java index 467a61ecc..7e67765f8 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java @@ -6,7 +6,6 @@ import java.util.List; import org.skywalking.apm.agent.core.context.ids.DistributedTraceId; import org.skywalking.apm.agent.core.context.ids.PropagatedTraceId; import org.skywalking.apm.agent.core.context.trace.TraceSegment; -import org.skywalking.apm.agent.core.dictionary.DictionaryManager; import org.skywalking.apm.agent.core.dictionary.DictionaryUtil; import org.skywalking.apm.util.StringUtil; diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java index 2315f4fbe..3c0038a69 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java @@ -185,9 +185,9 @@ public class TracingContext implements AbstractTracerContext { return new ExitSpan(spanIdGenerator++, parentSpanId, operationName, remotePeer); } }); - exitSpan.start(); push(exitSpan); } + exitSpan.start(); return exitSpan; } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java index b6315a0a1..8502111dd 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java @@ -48,7 +48,7 @@ public class TraceSegmentRef { } String entryOperationName = carrier.getEntryOperationName(); if (entryOperationName.charAt(0) == '#') { - this.operationName = host.substring(1); + this.operationName = entryOperationName.substring(1); } else { this.operationId = Integer.parseInt(entryOperationName); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java index 96d05f757..d4bef8411 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java @@ -5,7 +5,6 @@ import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.implementation.FieldAccessor; import net.bytebuddy.implementation.MethodDelegation; import net.bytebuddy.implementation.SuperMethodCall; -import net.bytebuddy.implementation.bind.annotation.FieldProxy; import net.bytebuddy.implementation.bind.annotation.Morph; import net.bytebuddy.matcher.ElementMatchers; import org.skywalking.apm.agent.core.plugin.AbstractClassEnhancePluginDefine; @@ -128,7 +127,7 @@ public abstract class ClassEnhancePluginDefine extends AbstractClassEnhancePlugi .withBinders( Morph.Binder.install(OverrideCallable.class) ) - .to(new InstMethodsInterWithOverrideArgs(interceptor)) + .to(new InstMethodsInterWithOverrideArgs(interceptor, classLoader)) ); } else { newClassBuilder = diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInter.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInter.java index 07ab7fad7..aad8d924c 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInter.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInter.java @@ -1,8 +1,6 @@ package org.skywalking.apm.agent.core.plugin.interceptor.enhance; -import java.lang.reflect.InvocationTargetException; import net.bytebuddy.implementation.bind.annotation.AllArguments; -import net.bytebuddy.implementation.bind.annotation.FieldProxy; import net.bytebuddy.implementation.bind.annotation.RuntimeType; import net.bytebuddy.implementation.bind.annotation.This; import org.skywalking.apm.agent.core.plugin.PluginException; diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInterWithOverrideArgs.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInterWithOverrideArgs.java index 980f30e49..3f5cc9b69 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInterWithOverrideArgs.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/InstMethodsInterWithOverrideArgs.java @@ -2,7 +2,6 @@ package org.skywalking.apm.agent.core.plugin.interceptor.enhance; import java.lang.reflect.Method; import net.bytebuddy.implementation.bind.annotation.AllArguments; -import net.bytebuddy.implementation.bind.annotation.FieldProxy; import net.bytebuddy.implementation.bind.annotation.Morph; import net.bytebuddy.implementation.bind.annotation.Origin; import net.bytebuddy.implementation.bind.annotation.RuntimeType; diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCStreamServiceStatus.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCStreamServiceStatus.java index de37d99e4..03150151c 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCStreamServiceStatus.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCStreamServiceStatus.java @@ -23,7 +23,7 @@ public class GRPCStreamServiceStatus { */ public void wait4Finish(long maxTimeout) { long time = 0; - while (status == false) { + while (!status) { if (time > maxTimeout) { break; } diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializerTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializerTest.java index 3bec24c73..89fb6ceab 100644 --- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializerTest.java +++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializerTest.java @@ -17,7 +17,6 @@ public class SnifferConfigInitializerTest { Assert.assertEquals("crmApp", Config.Agent.APPLICATION_CODE); Assert.assertEquals("127.0.0.1:8080", Config.Collector.SERVERS); - Assert.assertNotNull(Config.Buffer.SIZE); Assert.assertNotNull(Config.Logging.DIR); Assert.assertNotNull(Config.Logging.FILE_NAME); Assert.assertNotNull(Config.Logging.MAX_FILE_SIZE); diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/LeafSpanTestCase.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/LeafSpanTestCase.java deleted file mode 100644 index 499ecbea9..000000000 --- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/trace/LeafSpanTestCase.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.skywalking.apm.agent.core.context.trace; - -import org.junit.Assert; -import org.junit.Test; -import org.skywalking.apm.agent.core.tags.StringTagReader; -import org.skywalking.apm.agent.core.context.tag.StringTag; - -/** - * @author wusheng - */ -public class LeafSpanTestCase { - @Test - public void testLeaf() { - LeafSpan span = new LeafSpan(0, "serviceA", System.currentTimeMillis()); - span.push(); - span.setOperationName("serviceA2"); - span.setTag("key", "value-text"); - span.setTag("key2", false); - span.setTag("key3", 1); - - //start 2nd span - span.push(); - - Assert.assertFalse(span.isFinished()); - Assert.assertTrue(span.isLeaf()); - span.setOperationName("service123"); - span.setTag("key", "value-text2"); - span.setTag("key2", true); - span.setTag("key3", 2); - Assert.assertEquals("serviceA2", span.getOperationName()); - Assert.assertEquals("value-text", StringTagReader.get(span, new StringTag("key"))); - Assert.assertFalse(BooleanTagReader.get(span, new BooleanTag("key2", false))); - Assert.assertEquals(1, IntTagReader.get(span, new IntTag("key3")).intValue()); - - //end 2nd span - span.pop(); - - span.pop(); - Assert.assertTrue(span.isFinished()); - } -} diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInstrumentation.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInstrumentation.java index 0cfffb7f7..e6e1f4f44 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInstrumentation.java @@ -42,6 +42,11 @@ public class DubboInstrumentation extends ClassInstanceMethodsEnhancePluginDefin public String getMethodsInterceptor() { return INTERCEPT_CLASS; } + + @Override + public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java index 9e39b8b04..c5a727b1d 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java @@ -10,8 +10,11 @@ import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.context.tag.Tags; import org.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.skywalking.apm.agent.core.context.trace.SpanLayer; +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; +import org.skywalking.apm.network.trace.component.ComponentsDefine; import org.skywalking.apm.plugin.dubbox.BugFixActive; import org.skywalking.apm.plugin.dubbox.SWBaseBean; @@ -27,8 +30,6 @@ import org.skywalking.apm.plugin.dubbox.SWBaseBean; */ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { - public static final String DUBBO_COMPONENT = "Dubbo"; - /** *

Consumer:

The serialized trace context data will inject the first param that extend {@link SWBaseBean} * of dubbo service if the method {@link BugFixActive#active()} be called. or the serialized context data will @@ -39,26 +40,21 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { * {@link RpcContext#attachments}. current trace segment will ref if the serialize context data is not null. */ @Override - public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, - MethodInterceptResult result) { - Object[] arguments = interceptorContext.allArguments(); - Invoker invoker = (Invoker) arguments[0]; - Invocation invocation = (Invocation) arguments[1]; + public void beforeMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + Invoker invoker = (Invoker)allArguments[0]; + Invocation invocation = (Invocation)allArguments[1]; RpcContext rpcContext = RpcContext.getContext(); boolean isConsumer = rpcContext.isConsumerSide(); URL requestURL = invoker.getUrl(); - AbstractSpan span = ContextManager.createSpan(generateOperationName(requestURL, invocation)); - Tags.URL.set(span, generateRequestURL(requestURL, invocation)); - Tags.COMPONENT.set(span, DUBBO_COMPONENT); - Tags.SPAN_LAYER.asRPCFramework(span); - span.setPeerHost(requestURL.getHost()); - span.setPort(requestURL.getPort()); + AbstractSpan span; + final String host = requestURL.getHost(); + final int port = requestURL.getPort(); if (isConsumer) { - Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_CLIENT); - ContextCarrier contextCarrier = new ContextCarrier(); - ContextManager.inject(contextCarrier); + final ContextCarrier contextCarrier = new ContextCarrier(); + span = ContextManager.createExitSpan(generateOperationName(requestURL, invocation), contextCarrier, host + ":" + port); if (!BugFixActive.isActive()) { //invocation.getAttachments().put("contextData", contextDataStr); //@see https://github.com/alibaba/dubbo/blob/dubbo-2.5.3/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java#L154-L161 @@ -67,7 +63,6 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { fix283SendNoAttachmentIssue(invocation, contextCarrier); } } else { - Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_SERVER); ContextCarrier contextCarrier; if (!BugFixActive.isActive()) { @@ -76,21 +71,18 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { contextCarrier = fix283RecvNoAttachmentIssue(invocation); } - if (contextCarrier != null) { - ContextManager.extract(contextCarrier); - } + span = ContextManager.createEntrySpan(generateOperationName(requestURL, invocation), contextCarrier); } + + Tags.URL.set(span, generateRequestURL(requestURL, invocation)); + span.setComponent(ComponentsDefine.DUBBO); + SpanLayer.asRPCFramework(span); } - /** - * Execute after {@link com.alibaba.dubbo.monitor.support.MonitorFilter#invoke(Invoker, Invocation)}, - * when dubbo instrumentation is active. Check {@link Result#getException()} , if not NULL, - * log the exception and set tag error=true. - */ @Override - public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, - Object ret) { - Result result = (Result) ret; + public Object afterMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Object ret) throws Throwable { + Result result = (Result)ret; if (result != null && result.getException() != null) { dealException(result.getException()); } @@ -100,8 +92,8 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { } @Override - public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, - InstanceMethodInvokeContext interceptorContext) { + public void handleMethodException(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { dealException(t); } @@ -110,7 +102,7 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { */ private void dealException(Throwable throwable) { AbstractSpan span = ContextManager.activeSpan(); - Tags.ERROR.set(span, true); + span.errorOccurred(); span.log(throwable); } @@ -159,7 +151,7 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { private void fix283SendNoAttachmentIssue(Invocation invocation, ContextCarrier contextCarrier) { for (Object parameter : invocation.getArguments()) { if (parameter instanceof SWBaseBean) { - ((SWBaseBean) parameter).setTraceContext(contextCarrier.serialize()); + ((SWBaseBean)parameter).setTraceContext(contextCarrier.serialize()); return; } } @@ -173,7 +165,7 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { private ContextCarrier fix283RecvNoAttachmentIssue(Invocation invocation) { for (Object parameter : invocation.getArguments()) { if (parameter instanceof SWBaseBean) { - return new ContextCarrier().deserialize(((SWBaseBean) parameter).getTraceContext()); + return new ContextCarrier().deserialize(((SWBaseBean)parameter).getTraceContext()); } } diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java index 29d7d464e..d31614e2d 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java @@ -12,68 +12,47 @@ import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.context.tag.Tags; import org.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.skywalking.apm.agent.core.context.trace.SpanLayer; +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; +import org.skywalking.apm.network.trace.component.ComponentsDefine; /** * {@link HttpClientExecuteInterceptor} transport the trace context by call {@link HttpRequest#setHeader(Header)}, - * The current span tag the {@link Tags#ERROR} if {@link StatusLine#getStatusCode()} is not equals 200. + * The {@link Tags#STATUS_CODE} will be set if {@link StatusLine#getStatusCode()} is not equals 200. * * @author zhangxin */ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterceptor { - private static final String COMPONENT_NAME = "HttpClient"; - @Override - public void beforeMethod(EnhancedClassInstanceContext context, - InstanceMethodInvokeContext interceptorContext, MethodInterceptResult result) { - Object[] allArguments = interceptorContext.allArguments(); + @Override public void beforeMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { if (allArguments[0] == null || allArguments[1] == null) { // illegal args, can't trace. ignore. return; } - HttpHost httpHost = (HttpHost)allArguments[0]; + final HttpHost httpHost = (HttpHost)allArguments[0]; HttpRequest httpRequest = (HttpRequest)allArguments[1]; - AbstractSpan span = createSpan(httpRequest); - span.setPeerHost(httpHost.getHostName()); - span.setPort(httpHost.getPort()); - Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_CLIENT); - Tags.COMPONENT.set(span, COMPONENT_NAME); - Tags.URL.set(span, generateURL(httpRequest)); - Tags.SPAN_LAYER.asHttp(span); + final ContextCarrier contextCarrier = new ContextCarrier(); + AbstractSpan span = null; + String remotePeer = httpHost.getHostName() + ":" + httpHost.getPort(); + try { + URL url = new URL(httpRequest.getRequestLine().getUri()); + span = ContextManager.createExitSpan(url.getPath(), contextCarrier, remotePeer); + } catch (MalformedURLException e) { + throw e; + } + + span.setComponent(ComponentsDefine.HTTPCLIENT); + Tags.URL.set(span, httpRequest.getRequestLine().getUri()); + SpanLayer.asHttp(span); - ContextCarrier contextCarrier = new ContextCarrier(); - ContextManager.inject(contextCarrier); httpRequest.setHeader(Config.Plugin.Propagation.HEADER_NAME, contextCarrier.serialize()); } - /** - * Format request URL. - * - * @return request URL - */ - private String generateURL(HttpRequest httpRequest) { - return httpRequest.getRequestLine().getUri(); - } - - /** - * Create span. - */ - private AbstractSpan createSpan(HttpRequest httpRequest) { - AbstractSpan span; - try { - URL url = new URL(httpRequest.getRequestLine().getUri()); - span = ContextManager.createSpan(url.getPath()); - } catch (MalformedURLException e) { - span = ContextManager.createSpan(httpRequest.getRequestLine().getUri()); - } - return span; - } - - @Override - public Object afterMethod(EnhancedClassInstanceContext context, - InstanceMethodInvokeContext interceptorContext, Object ret) { - Object[] allArguments = interceptorContext.allArguments(); + @Override public Object afterMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Object ret) throws Throwable { if (allArguments[0] == null || allArguments[1] == null) { return ret; } @@ -82,19 +61,18 @@ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterc int statusCode = response.getStatusLine().getStatusCode(); AbstractSpan span = ContextManager.activeSpan(); if (statusCode != 200) { - Tags.ERROR.set(span, true); + span.errorOccurred(); + Tags.STATUS_CODE.set(span, statusCode + ""); } - Tags.STATUS_CODE.set(span, statusCode); ContextManager.stopSpan(); return ret; } - @Override - public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, - InstanceMethodInvokeContext interceptorContext) { - Tags.ERROR.set(ContextManager.activeSpan(), true); - ContextManager.activeSpan().log(t); + @Override public void handleMethodException(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + AbstractSpan activeSpan = ContextManager.activeSpan(); + activeSpan.errorOccurred(); + activeSpan.log(t); } - } diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/AbstractHttpClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/AbstractHttpClientInstrumentation.java index fb7a6948d..93f446675 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/AbstractHttpClientInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/AbstractHttpClientInstrumentation.java @@ -43,6 +43,11 @@ public class AbstractHttpClientInstrumentation extends HttpClientInstrumentation public String getMethodsInterceptor() { return getInstanceMethodsInterceptor(); } + + @Override + public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/DefaultRequestDirectorInstrumentation.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/DefaultRequestDirectorInstrumentation.java index ae882ccc8..3665c618a 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/DefaultRequestDirectorInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/DefaultRequestDirectorInstrumentation.java @@ -2,24 +2,16 @@ package org.skywalking.apm.plugin.httpClient.v4.define; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.apache.http.HttpHost; import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import static net.bytebuddy.matcher.ElementMatchers.named; -/** - * {@link AbstractHttpClientInstrumentation} presents that skywalking intercepts - * {@link org.apache.http.impl.client.DefaultRequestDirector#execute(HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)} - * by using {@link HttpClientInstrumentation#INTERCEPT_CLASS}. - * - * @author zhangxin - */ public class DefaultRequestDirectorInstrumentation extends HttpClientInstrumentation { /** * Enhance class. */ - private static final String ENHANCE_CLASS = "org.apache.http.impl.discovery.DefaultRequestDirector"; + private static final String ENHANCE_CLASS = "org.apache.http.impl.client.DefaultRequestDirector"; /** * DefaultRequestDirector is default implement.
@@ -44,6 +36,11 @@ public class DefaultRequestDirectorInstrumentation extends HttpClientInstrumenta public String getMethodsInterceptor() { return getInstanceMethodsInterceptor(); } + + @Override + public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/InternalHttpClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/InternalHttpClientInstrumentation.java index 781dda068..9c7919fb8 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/InternalHttpClientInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/InternalHttpClientInstrumentation.java @@ -8,8 +8,8 @@ import static net.bytebuddy.matcher.ElementMatchers.named; /** * {@link AbstractHttpClientInstrumentation} presents that skywalking intercepts {@link - * org.apache.http.impl.client.InternalHttpClient#doExecute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)} by using {@link - * HttpClientInstrumentation#INTERCEPT_CLASS}. + * org.apache.http.impl.client.InternalHttpClient#doExecute(org.apache.http.HttpHost, org.apache.http.HttpRequest, + * org.apache.http.protocol.HttpContext)} by using {@link HttpClientInstrumentation#INTERCEPT_CLASS}. * * @author zhangxin */ @@ -35,6 +35,11 @@ public class InternalHttpClientInstrumentation extends HttpClientInstrumentation public String getMethodsInterceptor() { return getInstanceMethodsInterceptor(); } + + @Override + public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/MinimalHttpClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/MinimalHttpClientInstrumentation.java index a711cbc5c..e9f2ca753 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/MinimalHttpClientInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/define/MinimalHttpClientInstrumentation.java @@ -38,6 +38,11 @@ public class MinimalHttpClientInstrumentation extends HttpClientInstrumentation public String getMethodsInterceptor() { return getInstanceMethodsInterceptor(); } + + @Override + public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptor.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptor.java index 25e37798c..c59e700f9 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptor.java @@ -7,10 +7,12 @@ import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.context.tag.Tags; import org.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.skywalking.apm.agent.core.context.trace.SpanLayer; import org.skywalking.apm.agent.core.context.trace.TraceSegment; +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; -import org.skywalking.apm.util.StringUtil; +import org.skywalking.apm.network.trace.component.ComponentsDefine; /** * {@link TomcatInterceptor} fetch the serialized context data by using {@link HttpServletRequest#getHeader(String)}. @@ -18,85 +20,48 @@ import org.skywalking.apm.util.StringUtil; * segment id of the previous level if the serialized context is not null. */ public class TomcatInterceptor implements InstanceMethodsAroundInterceptor { - /** - * Tomcat component. - */ - public static final String TOMCAT_COMPONENT = "Tomcat"; /** - * The {@link TraceSegment#refs} of current trace segment will reference to the + * * The {@link TraceSegment#refs} of current trace segment will reference to the * trace segment id of the previous level if the serialized context is not null. * - * @param context instance context, a class instance only has one {@link EnhancedClassInstanceContext} instance. - * @param interceptorContext method context, includes class name, method name, etc. - * @param result change this result, if you want to truncate the method. + * @param objInst + * @param methodName + * @param allArguments + * @param argumentsTypes + * @param result change this result, if you want to truncate the method. + * @throws Throwable */ - @Override - public void beforeMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, - MethodInterceptResult result) { - Object[] args = interceptorContext.allArguments(); - HttpServletRequest request = (HttpServletRequest) args[0]; - - AbstractSpan span = ContextManager.createSpan(request.getRequestURI()); - Tags.COMPONENT.set(span, TOMCAT_COMPONENT); - span.setPeerHost(fetchRequestPeerHost(request)); - span.setPort(request.getRemotePort()); - Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_SERVER); - Tags.URL.set(span, request.getRequestURL().toString()); - Tags.SPAN_LAYER.asHttp(span); - + @Override public void beforeMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + HttpServletRequest request = (HttpServletRequest)allArguments[0]; String tracingHeaderValue = request.getHeader(Config.Plugin.Propagation.HEADER_NAME); - if (!StringUtil.isEmpty(tracingHeaderValue)) { - ContextManager.extract(new ContextCarrier().deserialize(tracingHeaderValue)); - } + ContextCarrier contextCarrier = new ContextCarrier().deserialize(tracingHeaderValue); + AbstractSpan span = ContextManager.createEntrySpan(request.getRequestURI(), contextCarrier); + Tags.URL.set(span, request.getRequestURL().toString()); + Tags.HTTP.METHOD.set(span, request.getMethod()); + span.setComponent(ComponentsDefine.TOMCAT); + SpanLayer.asHttp(span); + } - @Override - public Object afterMethod(EnhancedClassInstanceContext context, InstanceMethodInvokeContext interceptorContext, - Object ret) { - HttpServletResponse response = (HttpServletResponse) interceptorContext.allArguments()[1]; + @Override public Object afterMethod(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Object ret) throws Throwable { + HttpServletResponse response = (HttpServletResponse)allArguments[1]; AbstractSpan span = ContextManager.activeSpan(); - Tags.STATUS_CODE.set(span, response.getStatus()); - if (response.getStatus() != 200) { - Tags.ERROR.set(span, true); + span.errorOccurred(); + Tags.STATUS_CODE.set(span, response.getStatus() + ""); } - ContextManager.stopSpan(); return ret; } - @Override - public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, - InstanceMethodInvokeContext interceptorContext) { + @Override public void handleMethodException(EnhancedInstance objInst, String methodName, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { AbstractSpan span = ContextManager.activeSpan(); span.log(t); - Tags.ERROR.set(span, true); + span.errorOccurred(); } - - /** - * @param request - * @return - */ - public String fetchRequestPeerHost(HttpServletRequest request) { - String ip = request.getHeader("X-Forwarded-For"); - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("Proxy-Client-IP"); - } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("WL-Proxy-Client-IP"); - } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("HTTP_CLIENT_IP"); - } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("HTTP_X_FORWARDED_FOR"); - } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getRemoteAddr(); - } - return ip; - } - } diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java index 0a4bb4552..419c579fc 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java @@ -52,6 +52,11 @@ public class TomcatInstrumentation extends ClassInstanceMethodsEnhancePluginDefi public String getMethodsInterceptor() { return INTERCEPT_CLASS; } + + @Override + public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/BooleanTagReader.java b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/BooleanTagReader.java deleted file mode 100644 index b58819d67..000000000 --- a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/BooleanTagReader.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.skywalking.apm.sniffer.mock.trace.tags; - -import java.lang.reflect.Field; -import java.util.List; - -/** - * @author wusheng - */ -public class BooleanTagReader { - public static Boolean get(Span span, BooleanTag tag) { - List tagsWithBoolList = null; - try { - Field tagsWithBool = Span.class.getDeclaredField("tagsWithBool"); - tagsWithBool.setAccessible(true); - tagsWithBoolList = (List)tagsWithBool.get(span); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } - - if (tagsWithBoolList != null) { - for (BooleanTagItem item : tagsWithBoolList) { - if (tag.key().equals(item.getKey())) { - return item.getValue(); - } - } - } - return tag.defaultValue(); - } - -} diff --git a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/IntTagReader.java b/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/IntTagReader.java deleted file mode 100644 index 3056f7e31..000000000 --- a/apm-sniffer/apm-sniffer-mock/src/main/java/org/skywalking/apm/sniffer/mock/trace/tags/IntTagReader.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.skywalking.apm.sniffer.mock.trace.tags; - -import java.lang.reflect.Field; -import java.util.List; - -/** - * @author wusheng - */ -public class IntTagReader { - public static Integer get(Span span, IntTag tag) { - List tagsWithIntList = null; - try { - Field tagsWithInt = Span.class.getDeclaredField("tagsWithInt"); - tagsWithInt.setAccessible(true); - tagsWithIntList = (List)tagsWithInt.get(span); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } - - for (IntTagItem item : tagsWithIntList) { - if (tag.key().equals(item.getKey())) { - return item.getValue(); - } - } - return null; - } - -}