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;
- }
-
-}