diff --git a/README.md b/README.md
index 31e607ea9..f55cef721 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
Sky Walking | [中文](README_ZH.md)
==========
+# Announcement:
+## SkyWalking has been accepted as an incubator project by Apache Foundation. All pull requests can't be accepted until Apache/SkyWalking repository established.
+
**SkyWalking 3**: APM for Distributed Systems, also known Distributed Tracing System.
@@ -30,7 +33,7 @@ Sky Walking | [中文](README_ZH.md)
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com.
# Screenshots
-- Topological graph of application clusters based on dubbox and [motan](https://github.com/weibocom/motan).
+- Discovery topological graph of application clusters automatically.
- Trace query.
diff --git a/README_ZH.md b/README_ZH.md
index f5b9c8c25..3d92f9357 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -19,7 +19,7 @@ Sky Walking | [English](README.md)
* 使用 [**@Trace**](docs/cn/Application-toolkit-trace-CN.md) 标注追踪业务方法
* 将 traceId 集成到 log4j, log4j2 或 logback这些日志组件中
* 纯Java后端Collector实现,提供RESTful和gRPC接口。兼容接受其他语言探针发送数据
- * [如何将探针的Metric和Trace数据上传到Collector?]()
+ * [如何将探针的Metric和Trace数据上传到Collector?](/docs/cn/How-to-communicate-with-the-collector-CN.md)
* UI工程请查看 [skywalking-ui](https://github.com/OpenSkywalking/skywalking-ui)
* 中文QQ群:392443393
@@ -33,7 +33,7 @@ Sky Walking | [English](README.md)
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com.
# Screenshots
-- 追踪基于 dubbox 和 [motan](https://github.com/weibocom/motan)的分布式系统,生成的拓扑截图
+- 分布式系统拓扑图自动发现
- 调用链查询
diff --git a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml
index 0435f8150..caabacf43 100644
--- a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml
@@ -23,7 +23,7 @@
apm-application-toolkit
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -49,6 +49,7 @@
attach-sources
+ none
jar
diff --git a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml
index 6905c7280..771ff003c 100644
--- a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml
@@ -23,7 +23,7 @@
apm-application-toolkit
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -49,6 +49,7 @@
attach-sources
+ none
jar
diff --git a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml
index d12c15ff0..f7d3bf63e 100644
--- a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml
@@ -23,7 +23,7 @@
apm-application-toolkit
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -49,6 +49,7 @@
attach-sources
+ none
jar
diff --git a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml
index 3d69a33cd..00caaec5c 100644
--- a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml
@@ -23,7 +23,7 @@
apm-application-toolkit
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-application-toolkit/apm-toolkit-trace/pom.xml b/apm-application-toolkit/apm-toolkit-trace/pom.xml
index 6750bfbac..ae895076a 100644
--- a/apm-application-toolkit/apm-toolkit-trace/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-trace/pom.xml
@@ -22,7 +22,7 @@
apm-application-toolkit
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -41,6 +41,7 @@
attach-sources
+ none
jar
diff --git a/apm-application-toolkit/pom.xml b/apm-application-toolkit/pom.xml
index b545efacb..ede8ebc01 100644
--- a/apm-application-toolkit/pom.xml
+++ b/apm-application-toolkit/pom.xml
@@ -21,7 +21,7 @@
apm
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
apm-application-toolkit
diff --git a/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-define/pom.xml b/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-define/pom.xml
index b5504230c..8da4d7cb9 100644
--- a/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-define/pom.xml
+++ b/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-define/pom.xml
@@ -23,11 +23,11 @@
apm-collector-agent-grpc
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
collector-agent-grpc-define
jar
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-provider/pom.xml b/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-provider/pom.xml
index da92a7319..8ada26c30 100644
--- a/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-provider/pom.xml
+++ b/apm-collector/apm-collector-agent-grpc/collector-agent-grpc-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-agent-grpc
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-agent-grpc/pom.xml b/apm-collector/apm-collector-agent-grpc/pom.xml
index c57e53acd..254e53d56 100644
--- a/apm-collector/apm-collector-agent-grpc/pom.xml
+++ b/apm-collector/apm-collector-agent-grpc/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -41,4 +41,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-define/pom.xml b/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-define/pom.xml
index f8f848969..1ba8202e4 100644
--- a/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-define/pom.xml
+++ b/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-define/pom.xml
@@ -23,11 +23,11 @@
apm-collector-agent-jetty
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
collector-agent-jetty-define
jar
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-provider/pom.xml b/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-provider/pom.xml
index 03bac8d60..ae9a4db0f 100644
--- a/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-provider/pom.xml
+++ b/apm-collector/apm-collector-agent-jetty/collector-agent-jetty-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-agent-jetty
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-agent-jetty/pom.xml b/apm-collector/apm-collector-agent-jetty/pom.xml
index 79454b956..4b9097910 100644
--- a/apm-collector/apm-collector-agent-jetty/pom.xml
+++ b/apm-collector/apm-collector-agent-jetty/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -41,4 +41,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-agent-stream/collector-agent-stream-define/pom.xml b/apm-collector/apm-collector-agent-stream/collector-agent-stream-define/pom.xml
index fb4fd771a..81a2baf24 100644
--- a/apm-collector/apm-collector-agent-stream/collector-agent-stream-define/pom.xml
+++ b/apm-collector/apm-collector-agent-stream/collector-agent-stream-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-agent-stream
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -37,4 +37,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/pom.xml b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/pom.xml
index be146f19a..2871b12dd 100644
--- a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/pom.xml
+++ b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-agent-stream
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -57,4 +57,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/parser/standardization/SegmentStandardizationWorker.java b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/parser/standardization/SegmentStandardizationWorker.java
index 0383d9327..428d66bec 100644
--- a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/parser/standardization/SegmentStandardizationWorker.java
+++ b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/parser/standardization/SegmentStandardizationWorker.java
@@ -42,7 +42,7 @@ public class SegmentStandardizationWorker extends AbstractLocalAsyncWorker {
@Override public int id() {
- return 0;
+ return 122;
}
public MemoryPoolMetricPersistenceWorker(ModuleManager moduleManager) {
diff --git a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/register/ApplicationRegisterRemoteWorker.java b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/register/ApplicationRegisterRemoteWorker.java
index 8d828766c..ef2022d66 100644
--- a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/register/ApplicationRegisterRemoteWorker.java
+++ b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/register/ApplicationRegisterRemoteWorker.java
@@ -40,7 +40,7 @@ public class ApplicationRegisterRemoteWorker extends AbstractRemoteWorker {
diff --git a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationComponentRemoteWorker.java b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationComponentRemoteWorker.java
index 334ede507..25d0d3a8f 100644
--- a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationComponentRemoteWorker.java
+++ b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationComponentRemoteWorker.java
@@ -36,7 +36,7 @@ public class ApplicationComponentRemoteWorker extends AbstractRemoteWorker {
diff --git a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationMappingRemoteWorker.java b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationMappingRemoteWorker.java
index bb6a6cca8..3c45ea16c 100644
--- a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationMappingRemoteWorker.java
+++ b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/application/ApplicationMappingRemoteWorker.java
@@ -36,7 +36,7 @@ public class ApplicationMappingRemoteWorker extends AbstractRemoteWorker {
diff --git a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/service/ServiceEntryPersistenceWorker.java b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/service/ServiceEntryPersistenceWorker.java
index f40d55b6e..433e93bde 100644
--- a/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/service/ServiceEntryPersistenceWorker.java
+++ b/apm-collector/apm-collector-agent-stream/collector-agent-stream-provider/src/main/java/org/skywalking/apm/collector/agent/stream/worker/trace/service/ServiceEntryPersistenceWorker.java
@@ -37,7 +37,7 @@ public class ServiceEntryPersistenceWorker extends PersistenceWorker
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -41,4 +41,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-alerting/collector-alerting-provider/src/main/java/org/skywalking/apm/collector/alerting/worker/AlertingListPersistenceWorker.java b/apm-collector/apm-collector-alerting/collector-alerting-provider/src/main/java/org/skywalking/apm/collector/alerting/worker/AlertingListPersistenceWorker.java
index a754f8e4f..75eb778ed 100644
--- a/apm-collector/apm-collector-alerting/collector-alerting-provider/src/main/java/org/skywalking/apm/collector/alerting/worker/AlertingListPersistenceWorker.java
+++ b/apm-collector/apm-collector-alerting/collector-alerting-provider/src/main/java/org/skywalking/apm/collector/alerting/worker/AlertingListPersistenceWorker.java
@@ -37,7 +37,7 @@ public class AlertingListPersistenceWorker extends PersistenceWorker
apm-collector-baseline
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
collector-baseline-computing-define
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-baseline/collector-baseline-computing-provider/pom.xml b/apm-collector/apm-collector-baseline/collector-baseline-computing-provider/pom.xml
index ad9b9d61e..9c03e91e0 100644
--- a/apm-collector/apm-collector-baseline/collector-baseline-computing-provider/pom.xml
+++ b/apm-collector/apm-collector-baseline/collector-baseline-computing-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-baseline
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -41,4 +41,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-baseline/collector-baseline-scheduler-define/pom.xml b/apm-collector/apm-collector-baseline/collector-baseline-scheduler-define/pom.xml
index 5a0cc49bf..e62699d50 100644
--- a/apm-collector/apm-collector-baseline/collector-baseline-scheduler-define/pom.xml
+++ b/apm-collector/apm-collector-baseline/collector-baseline-scheduler-define/pom.xml
@@ -23,11 +23,11 @@
apm-collector-baseline
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
collector-baseline-scheduler-define
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-baseline/pom.xml b/apm-collector/apm-collector-baseline/pom.xml
index 7c9c05140..366c73a11 100644
--- a/apm-collector/apm-collector-baseline/pom.xml
+++ b/apm-collector/apm-collector-baseline/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -42,4 +42,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-boot/pom.xml b/apm-collector/apm-collector-boot/pom.xml
index df8ceb3c8..3c1b5b26b 100644
--- a/apm-collector/apm-collector-boot/pom.xml
+++ b/apm-collector/apm-collector-boot/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-cache/collector-cache-define/pom.xml b/apm-collector/apm-collector-cache/collector-cache-define/pom.xml
index a8747780d..32f7b64a5 100644
--- a/apm-collector/apm-collector-cache/collector-cache-define/pom.xml
+++ b/apm-collector/apm-collector-cache/collector-cache-define/pom.xml
@@ -23,11 +23,11 @@
apm-collector-cache
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
collector-cache-define
jar
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-cache/collector-cache-guava-provider/pom.xml b/apm-collector/apm-collector-cache/collector-cache-guava-provider/pom.xml
index b6233486e..c595b9111 100644
--- a/apm-collector/apm-collector-cache/collector-cache-guava-provider/pom.xml
+++ b/apm-collector/apm-collector-cache/collector-cache-guava-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-cache
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -42,4 +42,4 @@
19.0
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-cache/pom.xml b/apm-collector/apm-collector-cache/pom.xml
index 2f544b299..c2cedfeda 100644
--- a/apm-collector/apm-collector-cache/pom.xml
+++ b/apm-collector/apm-collector-cache/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml
index 6aae47ecb..2e160ae56 100644
--- a/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml
+++ b/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-cluster
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml
index 93f498265..d00bf5cd5 100644
--- a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml
+++ b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-cluster
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml
index a20b3a6f0..337029850 100644
--- a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml
+++ b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-cluster
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml
index 23a1bb836..8b9fc780a 100644
--- a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml
+++ b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-cluster
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-cluster/pom.xml b/apm-collector/apm-collector-cluster/pom.xml
index 9675ace2c..a8dd0c3db 100644
--- a/apm-collector/apm-collector-cluster/pom.xml
+++ b/apm-collector/apm-collector-cluster/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -30,4 +30,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-component/client-component/pom.xml b/apm-collector/apm-collector-component/client-component/pom.xml
index 93c322fdf..18cedf712 100644
--- a/apm-collector/apm-collector-component/client-component/pom.xml
+++ b/apm-collector/apm-collector-component/client-component/pom.xml
@@ -5,7 +5,7 @@
apm-collector-component
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-component/pom.xml b/apm-collector/apm-collector-component/pom.xml
index c68c18766..c7c8bc985 100644
--- a/apm-collector/apm-collector-component/pom.xml
+++ b/apm-collector/apm-collector-component/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-component/server-component/pom.xml b/apm-collector/apm-collector-component/server-component/pom.xml
index 0ff3d1fcf..495ba9d79 100644
--- a/apm-collector/apm-collector-component/server-component/pom.xml
+++ b/apm-collector/apm-collector-component/server-component/pom.xml
@@ -5,7 +5,7 @@
apm-collector-component
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-core/pom.xml b/apm-collector/apm-collector-core/pom.xml
index 99b596a91..7d7f0ef1b 100644
--- a/apm-collector/apm-collector-core/pom.xml
+++ b/apm-collector/apm-collector-core/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphNodeFinder.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphNodeFinder.java
index 44a78edf0..471537d24 100644
--- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphNodeFinder.java
+++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphNodeFinder.java
@@ -30,25 +30,6 @@ public class GraphNodeFinder {
this.graph = graph;
}
- /**
- * Find an exist node to build the graph.
- *
- * @param handlerId of specific node in graph.
- * @param outputClass of the found node
- * @param type of given output class
- * @return Node instance.
- */
- public Node, NODEOUTPUT> findNode(int handlerId, Class outputClass) {
- ConcurrentHashMap graphNodeIndex = graph.getNodeIndex();
- Node node = graphNodeIndex.get(handlerId);
- if (node == null) {
- throw new NodeNotFoundException("Can't find node with handlerId="
- + handlerId
- + " in graph[" + graph.getId() + "]");
- }
- return node;
- }
-
public Next findNext(int handlerId) {
ConcurrentHashMap graphNodeIndex = graph.getNodeIndex();
Node node = graphNodeIndex.get(handlerId);
diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java
index 9cd994750..63a5ba5f3 100644
--- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java
+++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java
@@ -103,10 +103,12 @@ public class BootstrapFlow {
if (isAllRequiredModuleStarted) {
startupSequence.add(provider);
allProviders.remove(i);
+ i--;
}
} else {
startupSequence.add(provider);
allProviders.remove(i);
+ i--;
}
}
diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java
index c00b0c3cd..84d5bc0b5 100644
--- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java
+++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java
@@ -105,15 +105,6 @@ public class GraphManagerTest {
Next next = GraphManager.INSTANCE.findGraph(5).toFinder().findNext(3);
}
- @Test
- public void testFindNode() {
- Graph graph = GraphManager.INSTANCE.createIfAbsent(6, String.class);
- graph.addNode(new Node1Processor()).addNext(new Node2Processor());
-
- Node, Integer> foundNode = GraphManager.INSTANCE.findGraph(6).toFinder().findNode(2, Integer.class);
- foundNode.addNext(new Node4Processor());
- }
-
@Test
public void testDeadEndWay() {
Graph graph = GraphManager.INSTANCE.createIfAbsent(7, String.class);
diff --git a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml
index 204658b86..51c6348e8 100644
--- a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml
+++ b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-grpc-manager
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml
index 16e82e897..02be1c65a 100644
--- a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml
+++ b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-grpc-manager
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-grpc-manager/pom.xml b/apm-collector/apm-collector-grpc-manager/pom.xml
index 8f49f859b..10d4f76c3 100644
--- a/apm-collector/apm-collector-grpc-manager/pom.xml
+++ b/apm-collector/apm-collector-grpc-manager/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-instrument/pom.xml b/apm-collector/apm-collector-instrument/pom.xml
index 5ef52b736..2840344e3 100644
--- a/apm-collector/apm-collector-instrument/pom.xml
+++ b/apm-collector/apm-collector-instrument/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml
index 943717b19..5ebdb541e 100644
--- a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml
+++ b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-jetty-manager
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml
index bdc4e882a..e8c519b70 100644
--- a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml
+++ b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-jetty-manager
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-jetty-manager/pom.xml b/apm-collector/apm-collector-jetty-manager/pom.xml
index 0e731a269..79fd6a224 100644
--- a/apm-collector/apm-collector-jetty-manager/pom.xml
+++ b/apm-collector/apm-collector-jetty-manager/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-naming/collector-naming-define/pom.xml b/apm-collector/apm-collector-naming/collector-naming-define/pom.xml
index 6ec82d3fc..56f65c282 100644
--- a/apm-collector/apm-collector-naming/collector-naming-define/pom.xml
+++ b/apm-collector/apm-collector-naming/collector-naming-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-naming
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml b/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml
index 14cbc73c8..c6b2bc723 100644
--- a/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml
+++ b/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-naming
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-naming/pom.xml b/apm-collector/apm-collector-naming/pom.xml
index cf466c859..cc977eca0 100644
--- a/apm-collector/apm-collector-naming/pom.xml
+++ b/apm-collector/apm-collector-naming/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml b/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml
index 8c51bcff3..e45de8be4 100644
--- a/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml
+++ b/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-queue
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-queue/collector-queue-define/pom.xml b/apm-collector/apm-collector-queue/collector-queue-define/pom.xml
index 4a78d2312..c4381aa67 100644
--- a/apm-collector/apm-collector-queue/collector-queue-define/pom.xml
+++ b/apm-collector/apm-collector-queue/collector-queue-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-queue
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml b/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml
index e162ac72e..3f0e7a5e4 100644
--- a/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml
+++ b/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-queue
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-queue/pom.xml b/apm-collector/apm-collector-queue/pom.xml
index 5e1c53d62..61cfa7830 100644
--- a/apm-collector/apm-collector-queue/pom.xml
+++ b/apm-collector/apm-collector-queue/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -42,4 +42,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-remote/collector-remote-define/pom.xml b/apm-collector/apm-collector-remote/collector-remote-define/pom.xml
index 5a5c1b73f..87648efab 100644
--- a/apm-collector/apm-collector-remote/collector-remote-define/pom.xml
+++ b/apm-collector/apm-collector-remote/collector-remote-define/pom.xml
@@ -5,7 +5,7 @@
apm-collector-remote
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml b/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml
index 9131201cb..5ae0b6021 100644
--- a/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml
+++ b/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-remote
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml b/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml
index 48544db6d..487fcaed0 100644
--- a/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml
+++ b/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-remote
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-remote/pom.xml b/apm-collector/apm-collector-remote/pom.xml
index f125137d7..4c0474ca6 100644
--- a/apm-collector/apm-collector-remote/pom.xml
+++ b/apm-collector/apm-collector-remote/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -39,4 +39,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-storage/collector-storage-define/pom.xml b/apm-collector/apm-collector-storage/collector-storage-define/pom.xml
index 3411fc80a..cb33201b6 100644
--- a/apm-collector/apm-collector-storage/collector-storage-define/pom.xml
+++ b/apm-collector/apm-collector-storage/collector-storage-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-storage
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml b/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml
index d4ab6ac60..09479e9de 100644
--- a/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml
+++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-storage
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml b/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml
index 6b9093bb5..ad2260b51 100644
--- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml
+++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-storage
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-storage/pom.xml b/apm-collector/apm-collector-storage/pom.xml
index 2bc215c7e..c5c5f9557 100644
--- a/apm-collector/apm-collector-storage/pom.xml
+++ b/apm-collector/apm-collector-storage/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -34,4 +34,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-stream/pom.xml b/apm-collector/apm-collector-stream/pom.xml
index 41859a26d..815ad121b 100644
--- a/apm-collector/apm-collector-stream/pom.xml
+++ b/apm-collector/apm-collector-stream/pom.xml
@@ -23,7 +23,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -57,4 +57,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-ui/collector-ui-define/pom.xml b/apm-collector/apm-collector-ui/collector-ui-define/pom.xml
index 3de7600b9..cb558f01b 100644
--- a/apm-collector/apm-collector-ui/collector-ui-define/pom.xml
+++ b/apm-collector/apm-collector-ui/collector-ui-define/pom.xml
@@ -23,7 +23,7 @@
apm-collector-ui
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml
index 1480ae870..41bfdadcf 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml
@@ -23,7 +23,7 @@
apm-collector-ui
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -62,4 +62,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/apm-collector-ui/pom.xml b/apm-collector/apm-collector-ui/pom.xml
index ccdeed092..5da15b5ee 100644
--- a/apm-collector/apm-collector-ui/pom.xml
+++ b/apm-collector/apm-collector-ui/pom.xml
@@ -5,7 +5,7 @@
apm-collector
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -23,4 +23,4 @@
${project.version}
-
\ No newline at end of file
+
diff --git a/apm-collector/pom.xml b/apm-collector/pom.xml
index cad10f00c..ece26e15d 100644
--- a/apm-collector/pom.xml
+++ b/apm-collector/pom.xml
@@ -23,7 +23,7 @@
apm
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-commons/apm-datacarrier/pom.xml b/apm-commons/apm-datacarrier/pom.xml
index 92f452dd5..ab5813927 100644
--- a/apm-commons/apm-datacarrier/pom.xml
+++ b/apm-commons/apm-datacarrier/pom.xml
@@ -23,7 +23,7 @@
apm-commons
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-commons/apm-util/pom.xml b/apm-commons/apm-util/pom.xml
index 6dda94a57..a55233d6e 100644
--- a/apm-commons/apm-util/pom.xml
+++ b/apm-commons/apm-util/pom.xml
@@ -21,7 +21,7 @@
apm-commons
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-commons/pom.xml b/apm-commons/pom.xml
index 424427c72..b7b532ac6 100644
--- a/apm-commons/pom.xml
+++ b/apm-commons/pom.xml
@@ -21,7 +21,7 @@
apm
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-network/pom.xml b/apm-network/pom.xml
index 7e5419a26..6d190118e 100644
--- a/apm-network/pom.xml
+++ b/apm-network/pom.xml
@@ -23,7 +23,7 @@
apm
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
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 0151346e8..20476f96d 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
@@ -71,6 +71,11 @@ public class ComponentsDefine {
public static final OfficialComponent GRPC = new OfficialComponent(23, "GRPC");
+ public static final OfficialComponent ELASTIC_JOB = new OfficialComponent(24, "ElasticJob");
+
+ public static final OfficialComponent ROCKET_MQ = new OfficialComponent(25, "RocketMQ");
+
+
private static ComponentsDefine instance = new ComponentsDefine();
private String[] components;
@@ -80,7 +85,7 @@ public class ComponentsDefine {
}
public ComponentsDefine() {
- components = new String[24];
+ components = new String[26];
addComponent(TOMCAT);
addComponent(HTTPCLIENT);
addComponent(DUBBO);
@@ -104,6 +109,8 @@ public class ComponentsDefine {
addComponent(SHARDING_JDBC);
addComponent(POSTGRESQL);
addComponent(GRPC);
+ addComponent(ELASTIC_JOB);
+ addComponent(ROCKET_MQ);
}
private void addComponent(OfficialComponent component) {
diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml
index 8bcaf1e03..9229aa830 100644
--- a/apm-sniffer/apm-agent-core/pom.xml
+++ b/apm-sniffer/apm-agent-core/pom.xml
@@ -23,7 +23,7 @@
org.skywalking
apm-sniffer
- 3.3.0-2017
+ 5.0-2018-preview
apm-agent-core
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/match/HierarchyMatch.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/match/HierarchyMatch.java
index 0e747b172..b8375f80f 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/match/HierarchyMatch.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/match/HierarchyMatch.java
@@ -72,7 +72,9 @@ public class HierarchyMatch implements IndirectMatch {
matchHierarchyClass(implInterface, parentTypes);
}
- matchHierarchyClass(typeDescription.getSuperClass(), parentTypes);
+ if (typeDescription.getSuperClass() != null) {
+ matchHierarchyClass(typeDescription.getSuperClass(), parentTypes);
+ }
if (parentTypes.size() == 0) {
return true;
diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml
index d62b3673c..8fea10fe5 100644
--- a/apm-sniffer/apm-agent/pom.xml
+++ b/apm-sniffer/apm-agent/pom.xml
@@ -23,7 +23,7 @@
org.skywalking
apm-sniffer
- 3.3.0-2017
+ 5.0-2018-preview
apm-agent
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml
index f044205a5..2233c3b9d 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -148,6 +148,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/pom.xml
new file mode 100644
index 000000000..579f2dd03
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/pom.xml
@@ -0,0 +1,54 @@
+
+
+
+ apm-sdk-plugin
+ org.skywalking
+ 5.0-2018-preview
+
+ 4.0.0
+
+ apm-elastic-job-2.x-plugin
+ jar
+
+ elastic-job-2.x-plugin
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ com.dangdang
+ elastic-job-common-core
+ [2.0.0,3.0.0)
+ provided
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
+
diff --git a/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/java/org/skywalking/apm/plugin/esjob/JobExecutorInterceptor.java b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/java/org/skywalking/apm/plugin/esjob/JobExecutorInterceptor.java
new file mode 100644
index 000000000..735dbd56d
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/java/org/skywalking/apm/plugin/esjob/JobExecutorInterceptor.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.esjob;
+
+import com.dangdang.ddframe.job.api.ShardingContext;
+import com.dangdang.ddframe.job.executor.ShardingContexts;
+import com.google.common.base.Strings;
+import java.lang.reflect.Method;
+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;
+import org.skywalking.apm.network.trace.component.ComponentsDefine;
+
+/**
+ * {@link JobExecutorInterceptor} enhances {@link com.dangdang.ddframe.job.executor.AbstractElasticJobExecutor#process(ShardingContext)}
+ * ,creating a local span that records job execution.
+ *
+ * @author gaohongtao
+ */
+public class JobExecutorInterceptor implements InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ ShardingContexts shardingContexts = (ShardingContexts)allArguments[0];
+ Integer item = (Integer)allArguments[1];
+ ShardingContext shardingContext = new ShardingContext(shardingContexts, item);
+ String operateName = shardingContext.getJobName();
+ if (!Strings.isNullOrEmpty(shardingContext.getShardingParameter())) {
+ operateName += "-" + shardingContext.getShardingParameter();
+ }
+ AbstractSpan span = ContextManager.createLocalSpan(operateName);
+ span.setComponent(ComponentsDefine.ELASTIC_JOB);
+ span.tag("sharding_context", shardingContext.toString());
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ ContextManager.stopSpan();
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+ ContextManager.activeSpan().errorOccurred().log(t);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/java/org/skywalking/apm/plugin/esjob/define/JobExecutorInstrumentation.java b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/java/org/skywalking/apm/plugin/esjob/define/JobExecutorInstrumentation.java
new file mode 100644
index 000000000..eb29a9e3e
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/java/org/skywalking/apm/plugin/esjob/define/JobExecutorInstrumentation.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.esjob.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link JobExecutorInstrumentation} presents that skywalking intercepts {@link com.dangdang.ddframe.job.executor.AbstractElasticJobExecutor}.
+ *
+ * @author gaohongtao
+ */
+public class JobExecutorInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+
+ private static final String ENHANCE_CLASS = "com.dangdang.ddframe.job.executor.AbstractElasticJobExecutor";
+
+ private static final String JOB_EXECUTOR_INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.esjob.JobExecutorInterceptor";
+
+ @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[]{
+ new InstanceMethodsInterceptPoint() {
+
+ @Override public ElementMatcher getMethodsMatcher() {
+ return takesArgumentWithType(2, "com.dangdang.ddframe.job.event.type.JobExecutionEvent");
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return JOB_EXECUTOR_INTERCEPTOR_CLASS;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/resources/skywalking-plugin.def
new file mode 100644
index 000000000..7e8a4d707
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/main/resources/skywalking-plugin.def
@@ -0,0 +1 @@
+elastic-job-2.x=org.skywalking.apm.plugin.esjob.define.JobExecutorInstrumentation
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/test/java/org/skywalking/apm/plugin/esjob/JobExecutorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/test/java/org/skywalking/apm/plugin/esjob/JobExecutorInterceptorTest.java
new file mode 100644
index 000000000..6e946a709
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/test/java/org/skywalking/apm/plugin/esjob/JobExecutorInterceptorTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.esjob;
+
+import com.dangdang.ddframe.job.executor.ShardingContexts;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.skywalking.apm.agent.core.context.trace.TraceSegment;
+import org.skywalking.apm.agent.test.helper.SegmentHelper;
+import org.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+public class JobExecutorInterceptorTest {
+
+ @SegmentStoragePoint
+ private SegmentStorage segmentStorage;
+
+ @Rule
+ public AgentServiceRule serviceRule = new AgentServiceRule();
+
+ private JobExecutorInterceptor jobExecutorInterceptor;
+
+ @Before
+ public void setUp() throws SQLException {
+ jobExecutorInterceptor = new JobExecutorInterceptor();
+ }
+
+ @Test
+ public void assertSuccess() throws Throwable {
+ jobExecutorInterceptor.beforeMethod(null, null, new Object[]{mockShardingContext("fooJob", 1), 1}, null, null);
+ jobExecutorInterceptor.afterMethod(null, null, null, null, null);
+ TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(segment);
+ assertNotNull(spans);
+ assertThat(spans.size(), is(1));
+ assertThat(spans.get(0).transform().getOperationName(), is("fooJob-test"));
+ assertThat(spans.get(0).transform().getComponentId(), is(24));
+ assertThat(spans.get(0).transform().getTags(0).getKey(), is("sharding_context"));
+ assertThat(spans.get(0).transform().getTags(0).getValue(), is("ShardingContext(jobName=fooJob, taskId=fooJob1, shardingTotalCount=2, jobParameter=, shardingItem=1, shardingParameter=test)"));
+ }
+
+ @Test
+ public void assertSuccessWithoutSharding() throws Throwable {
+ jobExecutorInterceptor.beforeMethod(null, null, new Object[]{mockShardingContext("fooJob", 0), 0}, null, null);
+ jobExecutorInterceptor.afterMethod(null, null, null, null, null);
+ TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(segment);
+ assertNotNull(spans);
+ assertThat(spans.size(), is(1));
+ assertThat(spans.get(0).transform().getOperationName(), is("fooJob"));
+ assertThat(spans.get(0).transform().getTags(0).getValue(), is("ShardingContext(jobName=fooJob, taskId=fooJob0, shardingTotalCount=1, jobParameter=, shardingItem=0, shardingParameter=null)"));
+ }
+
+ @Test
+ public void assertError() throws Throwable {
+ jobExecutorInterceptor.beforeMethod(null, null, new Object[]{mockShardingContext("fooJob", 0), 0}, null, null);
+ jobExecutorInterceptor.handleMethodException(null, null, null, null, new Exception("fooError"));
+ jobExecutorInterceptor.afterMethod(null, null, null, null, null);
+ TraceSegment segment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(segment);
+ assertNotNull(spans);
+ assertThat(spans.size(), is(1));
+ assertThat(spans.get(0).transform().getIsError(), is(true));
+ assertThat(spans.get(0).transform().getLogs(0).getDataList().size(), is(4));
+ }
+
+ private ShardingContexts mockShardingContext(String jobName, int shardingItem) {
+ Map shardingMap = new HashMap(1);
+ if (shardingItem >= 1) {
+ shardingMap.put(shardingItem, "test");
+ }
+ return new ShardingContexts(jobName + shardingItem, jobName, shardingItem + 1, "", shardingMap);
+ }
+}
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml
index a888b8121..4cb816498 100644
--- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml
@@ -23,7 +23,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml
index daa0c5df4..e763959ce 100644
--- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
apm-grpc-1.x-plugin
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/ClientCallStartInterceptor.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/ClientCallStartInterceptor.java
index 9515364b3..470850902 100644
--- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/ClientCallStartInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/ClientCallStartInterceptor.java
@@ -19,39 +19,23 @@
package org.skywalking.apm.plugin.grpc.v1;
import io.grpc.Metadata;
-import io.grpc.MethodDescriptor;
import java.lang.reflect.Method;
import org.skywalking.apm.agent.core.context.CarrierItem;
import org.skywalking.apm.agent.core.context.ContextCarrier;
import org.skywalking.apm.agent.core.context.ContextManager;
-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.grpc.v1.vo.GRPCDynamicFields;
-/**
- * {@link ClientCallOnNextInterceptor} create a exist span when the grpc start call. it will stop span when the method
- * type is non-unary.
- *
- * @author zhangxin
- */
-public class ClientCallStartInterceptor
- implements InstanceMethodsAroundInterceptor {
-
+public class ClientCallStartInterceptor implements InstanceMethodsAroundInterceptor {
@Override
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
MethodInterceptResult result) throws Throwable {
- GRPCDynamicFields cachedObjects = (GRPCDynamicFields)objInst.getSkyWalkingDynamicField();
final Metadata headers = (Metadata)allArguments[1];
- final AbstractSpan span = ContextManager.createExitSpan(cachedObjects.getRequestMethodName(), cachedObjects.getAuthority());
- span.setComponent(ComponentsDefine.GRPC);
- SpanLayer.asRPCFramework(span);
+
final ContextCarrier contextCarrier = new ContextCarrier();
ContextManager.inject(contextCarrier);
-
CarrierItem contextItem = contextCarrier.items();
while (contextItem.hasNext()) {
contextItem = contextItem.next();
@@ -59,6 +43,7 @@ public class ClientCallStartInterceptor
headers.put(headerKey, contextItem.getHeadValue());
}
+ GRPCDynamicFields cachedObjects = (GRPCDynamicFields)objInst.getSkyWalkingDynamicField();
GRPCDynamicFields listenerCachedObject = new GRPCDynamicFields();
listenerCachedObject.setSnapshot(ContextManager.capture());
listenerCachedObject.setDescriptor(cachedObjects.getDescriptor());
@@ -68,15 +53,11 @@ public class ClientCallStartInterceptor
@Override
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
Object ret) throws Throwable {
-
- if (((GRPCDynamicFields)objInst.getSkyWalkingDynamicField()).getMethodType() != MethodDescriptor.MethodType.UNARY) {
- ContextManager.stopSpan();
- }
return ret;
}
@Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
Class>[] argumentsTypes, Throwable t) {
- ContextManager.activeSpan().errorOccurred().log(t);
+
}
}
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/ClientCallsMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/ClientCallsMethodInterceptor.java
new file mode 100644
index 000000000..f6773c2f3
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/ClientCallsMethodInterceptor.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.grpc.v1;
+
+import java.lang.reflect.Method;
+import org.skywalking.apm.agent.core.context.ContextManager;
+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.MethodInterceptResult;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsAroundInterceptor;
+import org.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.skywalking.apm.plugin.grpc.v1.vo.GRPCDynamicFields;
+
+/**
+ * {@link ClientCallOnNextInterceptor} create a exist span when the grpc start call. it will stop span when the method
+ * type is non-unary.
+ *
+ * @author zhangxin
+ */
+public class ClientCallsMethodInterceptor
+ implements StaticMethodsAroundInterceptor {
+
+ @Override public void beforeMethod(Class clazz, Method method, Object[] allArguments, Class>[] parameterTypes,
+ MethodInterceptResult result) {
+ EnhancedInstance clientCall = (EnhancedInstance)allArguments[0];
+ GRPCDynamicFields cachedObjects = (GRPCDynamicFields)clientCall.getSkyWalkingDynamicField();
+
+ final AbstractSpan span = ContextManager.createExitSpan(cachedObjects.getRequestMethodName(), cachedObjects.getAuthority());
+ span.setComponent(ComponentsDefine.GRPC);
+ SpanLayer.asRPCFramework(span);
+ }
+
+ @Override public Object afterMethod(Class clazz, Method method, Object[] allArguments, Class>[] parameterTypes,
+ Object ret) {
+ ContextManager.stopSpan();
+ return ret;
+ }
+
+ @Override
+ public void handleMethodException(Class clazz, Method method, Object[] allArguments, Class>[] parameterTypes,
+ Throwable t) {
+ ContextManager.activeSpan().errorOccurred().log(t);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/UnaryStreamToFutureConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/UnaryStreamToFutureConstructorInterceptor.java
new file mode 100644
index 000000000..d806c998f
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/UnaryStreamToFutureConstructorInterceptor.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.grpc.v1;
+
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
+
+/**
+ * {@link UnaryStreamToFutureConstructorInterceptor} stop the active span when the call end.
+ *
+ * @author zhangxin
+ */
+public class UnaryStreamToFutureConstructorInterceptor implements InstanceConstructorInterceptor {
+
+ @Override public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
+
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/ClientCallInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/ClientCallInstrumentation.java
index 02d0a8ffa..1eab3c4fa 100644
--- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/ClientCallInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/ClientCallInstrumentation.java
@@ -31,7 +31,7 @@ import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
/**
* {@link ClientCallInstrumentation} presents that skywalking intercept the start method in
- * io.grpc.internal.ClientCallImpl class by org.skywalking.apm.plugin.grpc.v1.ClientCallStartInterceptor
+ * io.grpc.internal.ClientCallImpl class by org.skywalking.apm.plugin.grpc.v1.ClientCallsMethodInterceptor
* and the constructor in io.grpc.internal.ClientCallImpl by org.skywalking.apm.plugin.grpc.v1.ClientCallIConstructorInterceptor
*
* @author zhangxin
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/ClientCallsInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/ClientCallsInstrumentation.java
new file mode 100644
index 000000000..f1ea18893
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/ClientCallsInstrumentation.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.grpc.v1.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.StaticMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassStaticMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class ClientCallsInstrumentation extends ClassStaticMethodsEnhancePluginDefine {
+ private static final String ENHANCE_CLASS = "io.grpc.stub.ClientCalls";
+
+ @Override protected StaticMethodsInterceptPoint[] getStaticMethodsInterceptPoints() {
+ return new StaticMethodsInterceptPoint[] {
+ new StaticMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return (named("asyncUnaryRequestCall").and(takesArgumentWithType(2,"io.grpc.ClientCall$Listener")))
+ .or(named("asyncStreamingRequestCall"))
+ .or(named("blockingUnaryCall"))
+ .or(named("futureUnaryCall"));
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return "org.skywalking.apm.plugin.grpc.v1.ClientCallsMethodInterceptor";
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/UnaryClientCallListenerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/UnaryClientCallListenerInstrumentation.java
index 42b4814a5..5a5a151df 100644
--- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/UnaryClientCallListenerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/define/UnaryClientCallListenerInstrumentation.java
@@ -25,42 +25,37 @@ import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsIntercept
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.any;
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
/**
* {@link UnaryClientCallListenerInstrumentation} indicates that skywalking enhance the onClose method in
- * io.grpc.stub.ClientCalls$UnaryStreamToFuture class by org.skywalking.apm.plugin.grpc.v1.UnaryClientOnCloseInterceptor
+ * io.grpc.stub.ClientCalls$UnaryStreamToFuture class by org.skywalking.apm.plugin.grpc.v1.UnaryStreamToFutureConstructorInterceptor
*
* @author zhangxin
*/
public class UnaryClientCallListenerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
private static final String ENHANCE_CLASS = "io.grpc.stub.ClientCalls$UnaryStreamToFuture";
- private static final String ENHANCE_METHOD = "onClose";
- public static final String INTERCEPT_CLASS = "org.skywalking.apm.plugin.grpc.v1.UnaryClientOnCloseInterceptor";
+ public static final String INTERCEPT_CLASS = "org.skywalking.apm.plugin.grpc.v1.UnaryStreamToFutureConstructorInterceptor";
@Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
- return new ConstructorInterceptPoint[0];
- }
-
- @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
- return new InstanceMethodsInterceptPoint[] {
- new InstanceMethodsInterceptPoint() {
- @Override public ElementMatcher getMethodsMatcher() {
- return named(ENHANCE_METHOD);
+ return new ConstructorInterceptPoint[] {
+ new ConstructorInterceptPoint() {
+ @Override public ElementMatcher getConstructorMatcher() {
+ return any();
}
- @Override public String getMethodsInterceptor() {
+ @Override public String getConstructorInterceptor() {
return INTERCEPT_CLASS;
}
-
- @Override public boolean isOverrideArgs() {
- return false;
- }
}
};
}
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[0];
+ }
+
@Override protected ClassMatch enhanceClass() {
return byName(ENHANCE_CLASS);
}
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/resources/skywalking-plugin.def
index 6dbb61d92..afe83e6e8 100644
--- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/resources/skywalking-plugin.def
@@ -2,6 +2,7 @@ grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.ClientCallInstrumentation
grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.UnaryClientCallListenerInstrumentation
grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.UnaryServerCallListenerInstrumentation
grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.UnaryServerCallHandlerInstrumentation
+grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.ClientCallsInstrumentation
grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.ManagedChannelInstrumentation
grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.StreamingServerCallHandlerInstrumentation
grpc-1.x=org.skywalking.apm.plugin.grpc.v1.define.StreamingServerCallListenerInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/test/java/org/skywalking/apm/plugin/grpc/v1/ClientCallStartInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/test/java/org/skywalking/apm/plugin/grpc/v1/ClientCallsMethodInterceptorTest.java
similarity index 65%
rename from apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/test/java/org/skywalking/apm/plugin/grpc/v1/ClientCallStartInterceptorTest.java
rename to apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/test/java/org/skywalking/apm/plugin/grpc/v1/ClientCallsMethodInterceptorTest.java
index a266a110e..4fb853a4d 100644
--- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/test/java/org/skywalking/apm/plugin/grpc/v1/ClientCallStartInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/test/java/org/skywalking/apm/plugin/grpc/v1/ClientCallsMethodInterceptorTest.java
@@ -18,10 +18,7 @@
package org.skywalking.apm.plugin.grpc.v1;
-import io.grpc.Metadata;
import io.grpc.MethodDescriptor;
-import io.grpc.Status;
-import io.grpc.StatusRuntimeException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -34,7 +31,6 @@ 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.test.helper.SegmentHelper;
-import org.skywalking.apm.agent.test.helper.SpanHelper;
import org.skywalking.apm.agent.test.tools.AgentServiceRule;
import org.skywalking.apm.agent.test.tools.SegmentStorage;
import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
@@ -49,7 +45,7 @@ import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-public class ClientCallStartInterceptorTest {
+public class ClientCallsMethodInterceptorTest {
@SegmentStoragePoint
private SegmentStorage segmentStorage;
@@ -57,8 +53,7 @@ public class ClientCallStartInterceptorTest {
@Rule
public AgentServiceRule agentServiceRule = new AgentServiceRule();
- private ClientCallStartInterceptor clientCallStartInterceptor;
- private UnaryClientOnCloseInterceptor unaryClientOnCloseInterceptor;
+ private ClientCallsMethodInterceptor clientCallStartInterceptor;
@Mock
private EnhancedInstance clientCallImpl;
@@ -72,8 +67,6 @@ public class ClientCallStartInterceptorTest {
@Mock
private GRPCDynamicFields streamCachedObjects;
- private Status exceptionStatus = Status.NOT_FOUND.withCause(new RuntimeException());
-
private Object[] arguments;
private Class[] argumentTypes;
@@ -87,20 +80,18 @@ public class ClientCallStartInterceptorTest {
when(streamCachedObjects.getAuthority()).thenReturn("localhost:500051");
when(streamCachedObjects.getMethodType()).thenReturn(MethodDescriptor.MethodType.SERVER_STREAMING);
- arguments = new Object[] {clientCallListener, new Metadata()};
- argumentTypes = new Class[] {clientCallListener.getClass(), Metadata.class};
+ arguments = new Object[] {clientCallImpl, clientCallListener};
+ argumentTypes = new Class[] {clientCallImpl.getClass(), clientCallListener.getClass()};
- clientCallStartInterceptor = new ClientCallStartInterceptor();
- unaryClientOnCloseInterceptor = new UnaryClientOnCloseInterceptor();
+ clientCallStartInterceptor = new ClientCallsMethodInterceptor();
}
@Test
public void testNormalUnaryCallStart() throws Throwable {
when(clientCallImpl.getSkyWalkingDynamicField()).thenReturn(unaryCachedObjects);
- clientCallStartInterceptor.beforeMethod(clientCallImpl, null, arguments, argumentTypes, null);
- clientCallStartInterceptor.afterMethod(clientCallImpl, null, arguments, argumentTypes, null);
- unaryClientOnCloseInterceptor.afterMethod(null, null, new Object[] {Status.OK, new Metadata()}, null, null);
+ clientCallStartInterceptor.beforeMethod(null, null, arguments, argumentTypes, null);
+ clientCallStartInterceptor.afterMethod(null, null, arguments, argumentTypes, null);
assertThat(segmentStorage.getTraceSegments().size(), is(1));
TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
@@ -111,30 +102,12 @@ public class ClientCallStartInterceptorTest {
SpanAssert.assertOccurException(abstractTracingSpan, false);
}
- @Test
- public void testUnaryCallStartWithException() throws Throwable {
- when(clientCallImpl.getSkyWalkingDynamicField()).thenReturn(unaryCachedObjects);
-
- clientCallStartInterceptor.beforeMethod(clientCallImpl, null, arguments, argumentTypes, null);
- clientCallStartInterceptor.afterMethod(clientCallImpl, null, arguments, argumentTypes, null);
- unaryClientOnCloseInterceptor.afterMethod(null, null, new Object[] {exceptionStatus, new Metadata()}, null, null);
-
- assertThat(segmentStorage.getTraceSegments().size(), is(1));
- TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
- assertThat(SegmentHelper.getSpans(traceSegment).size(), is(1));
- AbstractTracingSpan abstractTracingSpan = SegmentHelper.getSpans(traceSegment).get(0);
- SpanAssert.assertComponent(abstractTracingSpan, ComponentsDefine.GRPC);
- SpanAssert.assertLayer(abstractTracingSpan, SpanLayer.RPC_FRAMEWORK);
- SpanAssert.assertOccurException(abstractTracingSpan, true);
- SpanAssert.assertException(SpanHelper.getLogs(abstractTracingSpan).get(0), StatusRuntimeException.class, "NOT_FOUND");
- }
-
@Test
public void testNormalStreamCallStart() throws Throwable {
when(clientCallImpl.getSkyWalkingDynamicField()).thenReturn(streamCachedObjects);
- clientCallStartInterceptor.beforeMethod(clientCallImpl, null, arguments, argumentTypes, null);
- clientCallStartInterceptor.afterMethod(clientCallImpl, null, arguments, argumentTypes, null);
+ clientCallStartInterceptor.beforeMethod(null, null, arguments, argumentTypes, null);
+ clientCallStartInterceptor.afterMethod(null, null, arguments, argumentTypes, null);
assertThat(segmentStorage.getTraceSegments().size(), is(1));
TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml
index 3193c551a..ff87c3a72 100755
--- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -64,6 +64,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml
index 415900642..7ca3625b1 100644
--- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
apm-httpClient-4.x-plugin
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml
index 23f52cdf6..f1349a3ba 100755
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -58,6 +58,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/AbstractURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/AbstractURLParser.java
index 74a897dc6..2d5d69419 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/AbstractURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/AbstractURLParser.java
@@ -31,14 +31,14 @@ public abstract class AbstractURLParser implements ConnectionURLParser {
*
* @return index range that database hosts.
*/
- protected abstract int[] fetchDatabaseHostsIndexRange();
+ protected abstract URLLocation fetchDatabaseHostsIndexRange();
/**
* Fetch the index range that database name from connection url.
*
* @return index range that database name.
*/
- protected abstract int[] fetchDatabaseNameIndexRange();
+ protected abstract URLLocation fetchDatabaseNameIndexRange();
/**
* Fetch database host(s) from connection url.
@@ -46,8 +46,8 @@ public abstract class AbstractURLParser implements ConnectionURLParser {
* @return database host(s).
*/
protected String fetchDatabaseHostsFromURL() {
- int[] indexRange = fetchDatabaseHostsIndexRange();
- return url.substring(indexRange[0], indexRange[1]);
+ URLLocation hostsLocation = fetchDatabaseHostsIndexRange();
+ return url.substring(hostsLocation.startIndex(), hostsLocation.endIndex());
}
/**
@@ -56,8 +56,8 @@ public abstract class AbstractURLParser implements ConnectionURLParser {
* @return database name.
*/
protected String fetchDatabaseNameFromURL() {
- int[] indexRange = fetchDatabaseNameIndexRange();
- return url.substring(indexRange[0], indexRange[1]);
+ URLLocation hostsLocation = fetchDatabaseNameIndexRange();
+ return url.substring(hostsLocation.startIndex(), hostsLocation.endIndex());
}
/**
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java
index 416b48698..1e79d8e02 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java
@@ -55,20 +55,20 @@ public class H2URLParser extends AbstractURLParser {
}
@Override
- protected int[] fetchDatabaseHostsIndexRange() {
+ protected URLLocation fetchDatabaseHostsIndexRange() {
int hostLabelStartIndex = url.indexOf("//");
int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2);
- return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex};
+ return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex);
}
@Override
- protected int[] fetchDatabaseNameIndexRange() {
+ protected URLLocation fetchDatabaseNameIndexRange() {
int databaseStartTag = url.lastIndexOf("/");
int databaseEndTag = url.indexOf(";");
if (databaseEndTag == -1) {
databaseEndTag = url.length();
}
- return new int[] {databaseStartTag + 1, databaseEndTag};
+ return new URLLocation(databaseStartTag + 1, databaseEndTag);
}
@Override
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java
index 0f71dd8c5..d463c0568 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java
@@ -41,26 +41,26 @@ public class MysqlURLParser extends AbstractURLParser {
}
@Override
- protected int[] fetchDatabaseHostsIndexRange() {
+ protected URLLocation fetchDatabaseHostsIndexRange() {
int hostLabelStartIndex = url.indexOf("//");
int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2);
- return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex};
+ return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex);
}
@Override
- protected int[] fetchDatabaseNameIndexRange() {
+ protected URLLocation fetchDatabaseNameIndexRange() {
int databaseStartTag = url.lastIndexOf("/");
int databaseEndTag = url.indexOf("?", databaseStartTag);
if (databaseEndTag == -1) {
databaseEndTag = url.length();
}
- return new int[] {databaseStartTag + 1, databaseEndTag};
+ return new URLLocation(databaseStartTag + 1, databaseEndTag);
}
@Override
public ConnectionInfo parse() {
- int[] hostRangeIndex = fetchDatabaseHostsIndexRange();
- String hosts = url.substring(hostRangeIndex[0], hostRangeIndex[1]);
+ URLLocation location = fetchDatabaseHostsIndexRange();
+ String hosts = url.substring(location.startIndex(), location.endIndex());
String[] hostSegment = hosts.split(",");
if (hostSegment.length > 1) {
StringBuilder sb = new StringBuilder();
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java
index 78523dab4..bf3c91e22 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java
@@ -18,8 +18,11 @@
package org.skywalking.apm.plugin.jdbc.connectionurl.parser;
+import java.util.ArrayList;
+import java.util.List;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.skywalking.apm.util.StringUtil;
/**
* {@link OracleURLParser} presents that how to parse oracle connection url.
@@ -38,29 +41,61 @@ public class OracleURLParser extends AbstractURLParser {
private static final String DB_TYPE = "Oracle";
private static final int DEFAULT_PORT = 1521;
+ public static final String SERVICE_NAME_FLAG = "@//";
+ public static final String TNSNAME_URL_FLAG = "DESCRIPTION";
public OracleURLParser(String url) {
super(url);
}
@Override
- protected int[] fetchDatabaseHostsIndexRange() {
- int hostLabelStartIndex = url.indexOf("@");
+ protected URLLocation fetchDatabaseHostsIndexRange() {
+ int hostLabelStartIndex;
+ if (isServiceNameURL()) {
+ hostLabelStartIndex = url.indexOf(SERVICE_NAME_FLAG) + 3;
+ } else {
+ hostLabelStartIndex = url.indexOf("@") + 1;
+ }
int hostLabelEndIndex = url.lastIndexOf(":");
- return new int[] {hostLabelStartIndex + 1, hostLabelEndIndex};
+ return new URLLocation(hostLabelStartIndex, hostLabelEndIndex);
}
@Override
- protected int[] fetchDatabaseNameIndexRange() {
- return new int[0];
+ protected URLLocation fetchDatabaseNameIndexRange() {
+ int hostLabelStartIndex;
+ int hostLabelEndIndex = url.length();
+ if (isServiceNameURL()) {
+ hostLabelStartIndex = url.lastIndexOf("/") + 1;
+ } else if (isTNSNameURL()) {
+ hostLabelStartIndex = url.indexOf("=", url.indexOf("SERVICE_NAME")) + 1;
+ hostLabelEndIndex = url.indexOf(")", hostLabelStartIndex);
+ } else {
+ hostLabelStartIndex = url.lastIndexOf(":") + 1;
+ }
+ return new URLLocation(hostLabelStartIndex, hostLabelEndIndex);
+ }
+
+ private boolean isServiceNameURL() {
+ return url.contains(SERVICE_NAME_FLAG);
+ }
+
+ private boolean isTNSNameURL() {
+ return url.contains(TNSNAME_URL_FLAG);
}
@Override
public ConnectionInfo parse() {
- int[] hostRangeIndex = fetchDatabaseHostsIndexRange();
+ if (isTNSNameURL()) {
+ return tnsNameURLParse();
+ } else {
+ return commonsURLParse();
+ }
+ }
+
+ private ConnectionInfo commonsURLParse() {
String host = fetchDatabaseHostsFromURL();
String[] hostSegment = splitDatabaseAddress(host);
- String databaseName = url.substring(hostRangeIndex[1] + 1);
+ String databaseName = fetchDatabaseNameFromURL();
if (hostSegment.length == 1) {
return new ConnectionInfo(ComponentsDefine.ORACLE, DB_TYPE, host, DEFAULT_PORT, databaseName);
} else {
@@ -68,6 +103,40 @@ public class OracleURLParser extends AbstractURLParser {
}
}
+ private ConnectionInfo tnsNameURLParse() {
+ String host = parseDatabaseHostsFromURL();
+ String databaseName = fetchDatabaseNameFromURL();
+ return new ConnectionInfo(ComponentsDefine.ORACLE, DB_TYPE, host, databaseName);
+ }
+
+ private String parseDatabaseHostsFromURL() {
+ int beginIndex = url.indexOf("DESCRIPTION");
+ List hosts = new ArrayList();
+ do {
+ int hostStartIndex = url.indexOf("HOST", beginIndex);
+ if (hostStartIndex == -1) {
+ break;
+ }
+ int equalStartIndex = url.indexOf("=", hostStartIndex);
+ int hostEndIndex = url.indexOf(")", hostStartIndex);
+ String host = url.substring(equalStartIndex + 1, hostEndIndex);
+
+ int port = DEFAULT_PORT;
+ int portStartIndex = url.indexOf("PORT", hostEndIndex);
+ int portEndIndex = url.length();
+ if (portStartIndex != -1) {
+ int portEqualStartIndex = url.indexOf("=", portStartIndex);
+ portEndIndex = url.indexOf(")", portEqualStartIndex);
+ port = Integer.parseInt(url.substring(portEqualStartIndex + 1, portEndIndex).trim());
+ }
+ hosts.add(host.trim() + ":" + port);
+ beginIndex = portEndIndex;
+ }
+ while (true);
+
+ return StringUtil.join(',', hosts.toArray(new String[0]));
+ }
+
private String[] splitDatabaseAddress(String address) {
String[] hostSegment = address.split(":");
return hostSegment;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java
index 2b2451aec..4509d732d 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java
@@ -41,26 +41,26 @@ public class PostgreSQLURLParser extends AbstractURLParser {
}
@Override
- protected int[] fetchDatabaseHostsIndexRange() {
+ protected URLLocation fetchDatabaseHostsIndexRange() {
int hostLabelStartIndex = url.indexOf("//");
int hostLabelEndIndex = url.indexOf("/", hostLabelStartIndex + 2);
- return new int[] {hostLabelStartIndex + 2, hostLabelEndIndex};
+ return new URLLocation(hostLabelStartIndex + 2, hostLabelEndIndex);
}
@Override
- protected int[] fetchDatabaseNameIndexRange() {
+ protected URLLocation fetchDatabaseNameIndexRange() {
int databaseStartTag = url.lastIndexOf("/");
int databaseEndTag = url.indexOf("?", databaseStartTag);
if (databaseEndTag == -1) {
databaseEndTag = url.length();
}
- return new int[] {databaseStartTag + 1, databaseEndTag};
+ return new URLLocation(databaseStartTag + 1, databaseEndTag);
}
@Override
public ConnectionInfo parse() {
- int[] hostRangeIndex = fetchDatabaseHostsIndexRange();
- String hosts = url.substring(hostRangeIndex[0], hostRangeIndex[1]);
+ URLLocation location = fetchDatabaseHostsIndexRange();
+ String hosts = url.substring(location.startIndex(), location.endIndex());
String[] hostSegment = hosts.split(",");
if (hostSegment.length > 1) {
StringBuilder sb = new StringBuilder();
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/URLLocation.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/URLLocation.java
new file mode 100644
index 000000000..689087916
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/URLLocation.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.connectionurl.parser;
+
+public class URLLocation {
+ private final int startIndex;
+ private final int endIndex;
+
+ public URLLocation(int startIndex, int endIndex) {
+ this.startIndex = startIndex;
+ this.endIndex = endIndex;
+ }
+
+ public int startIndex() {
+ return startIndex;
+ }
+
+ public int endIndex() {
+ return endIndex;
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/StatementEnhanceInfos.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/define/StatementEnhanceInfos.java
similarity index 96%
rename from apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/StatementEnhanceInfos.java
rename to apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/define/StatementEnhanceInfos.java
index 4a6b8fbc4..739c63e77 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/StatementEnhanceInfos.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/skywalking/apm/plugin/jdbc/define/StatementEnhanceInfos.java
@@ -16,7 +16,7 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.jdbc.mysql.define;
+package org.skywalking.apm.plugin.jdbc.define;
import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
index 7f15d3392..2f7598847 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
@@ -73,6 +73,30 @@ public class URLParserTest {
assertThat(connectionInfo.getDatabasePeer(), is("localhost:1522"));
}
+ @Test
+ public void testParseOracleServiceName() {
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@//localhost:1521/orcl");
+ assertThat(connectionInfo.getDBType(), is("Oracle"));
+ assertThat(connectionInfo.getDatabaseName(), is("orcl"));
+ assertThat(connectionInfo.getDatabasePeer(), is("localhost:1521"));
+ }
+
+ @Test
+ public void testParseOracleTNSName() {
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= localhost )(PORT= 1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))");
+ assertThat(connectionInfo.getDBType(), is("Oracle"));
+ assertThat(connectionInfo.getDatabaseName(), is("orcl"));
+ assertThat(connectionInfo.getDatabasePeer(), is("localhost:1521"));
+ }
+
+ @Test
+ public void testParseOracleTNSNameWithMultiAddress() {
+ ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL= TCP)(HOST=hostA)(PORT= 1523 ))(ADDRESS=(PROTOCOL=TCP)(HOST=hostB)(PORT= 1521 )))(SOURCE_ROUTE=yes)(CONNECT_DATA=(SERVICE_NAME=orcl)))");
+ assertThat(connectionInfo.getDBType(), is("Oracle"));
+ assertThat(connectionInfo.getDatabaseName(), is("orcl"));
+ assertThat(connectionInfo.getDatabasePeer(), is("hostA:1523,hostB:1521"));
+ }
+
@Test
public void testParseOracleJDBCURLWithUserNameAndPassword() {
ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:scott/tiger@myhost:1521:orcl");
diff --git a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml
index a9009abaa..5b3905de8 100644
--- a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
apm-jedis-2.x-plugin
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml
index ed18ab4a3..649a2fd78 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml
@@ -21,7 +21,7 @@
jetty-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml
index 916c70d4e..7b93e0cb7 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml
@@ -21,7 +21,7 @@
jetty-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml
index 29ecd7e1e..387345c17 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
jetty-plugins
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
index 9f095c83c..c3b444c13 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
@@ -25,7 +25,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -60,6 +60,7 @@
attach-sources
+ none
jar
@@ -68,4 +69,4 @@
-
\ No newline at end of file
+
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml
index 8b89fe451..480318a97 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml
@@ -22,7 +22,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
apm-mongodb-3.x-plugin
@@ -54,6 +54,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml
index 40b3e67c2..a77029cab 100644
--- a/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml
index 4ee21d503..25701916f 100755
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -70,6 +70,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptor.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptor.java
index 5aaa176ab..cf07f9d83 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptor.java
@@ -22,7 +22,7 @@ import java.lang.reflect.Method;
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.plugin.jdbc.mysql.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptor.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptor.java
index ca4c7deed..2f41e3a5f 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptor.java
@@ -22,7 +22,7 @@ import java.lang.reflect.Method;
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.plugin.jdbc.mysql.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptor.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptor.java
index 564254b5c..490c1d9c1 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptor.java
@@ -22,7 +22,7 @@ import java.lang.reflect.Method;
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.plugin.jdbc.mysql.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptor.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptor.java
index 779ae38b0..015a3da30 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptor.java
@@ -26,7 +26,7 @@ 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.plugin.jdbc.mysql.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/ConnectionInstrumentation.java
index f90c97dfe..f4b8f93ed 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/ConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/ConnectionInstrumentation.java
@@ -35,7 +35,6 @@ import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_
import static org.skywalking.apm.plugin.jdbc.define.Constants.RELEASE_SAVE_POINT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.ROLLBACK_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INTERCEPT_CLASS;
-import static org.skywalking.apm.plugin.jdbc.mysql.define.MultiClassNameMatch.byMultiClassMatch;
/**
* {@link ConnectionInstrumentation} intercepts the following methods that the class which extend {@link
@@ -48,9 +47,7 @@ import static org.skywalking.apm.plugin.jdbc.mysql.define.MultiClassNameMatch.by
*
* @author zhangxin
*/
-public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
-
- public static final String ENHANCE_CLASS = "com.mysql.jdbc.ConnectionImpl";
+public abstract class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
@Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
return new ConstructorInterceptPoint[0];
@@ -114,7 +111,5 @@ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePlugin
}
- @Override protected ClassMatch enhanceClass() {
- return byMultiClassMatch(ENHANCE_CLASS, "com.mysql.cj.jdbc.ConnectionImpl", "com.mysql.jdbc.Connection");
- }
+ @Override protected abstract ClassMatch enhanceClass();
}
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/Mysql50ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/Mysql50ConnectionInstrumentation.java
new file mode 100644
index 000000000..315516202
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/Mysql50ConnectionInstrumentation.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.mysql.define;
+
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link Mysql50ConnectionInstrumentation} interceptor the {@link com.mysql.jdbc.Connection} class in the 5.0.x verison
+ * of mysql driver jar.
+ *
+ * @author zhangxin
+ */
+public class Mysql50ConnectionInstrumentation extends ConnectionInstrumentation {
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName("com.mysql.jdbc.Connection");
+ }
+
+ @Override protected String[] witnessClasses() {
+ return new String[] {"com.mysql.jdbc.CursorRowProvider"};
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/Mysql5xConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/Mysql5xConnectionInstrumentation.java
new file mode 100644
index 000000000..6829810e7
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/mysql/define/Mysql5xConnectionInstrumentation.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.mysql.define;
+
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static org.skywalking.apm.plugin.jdbc.mysql.define.MultiClassNameMatch.byMultiClassMatch;
+
+/**
+ * {@link Mysql5xConnectionInstrumentation } interceptor {@link com.mysql.cj.jdbc.ConnectionImpl} and
+ * com.mysql.jdbc.ConnectionImpl in mysql jdbc driver 5.1 and 5.1+
+ *
+ * @author zhangxin
+ */
+public class Mysql5xConnectionInstrumentation extends ConnectionInstrumentation {
+ public static final String ENHANCE_CLASS = "com.mysql.jdbc.ConnectionImpl";
+
+ public static final String CJ_JDBC_ENHANCE_CLASS = "com.mysql.cj.jdbc.ConnectionImpl";
+
+ @Override protected ClassMatch enhanceClass() {
+ return byMultiClassMatch(ENHANCE_CLASS, CJ_JDBC_ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/resources/skywalking-plugin.def
index f4f6b4c6e..2902f6972 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/resources/skywalking-plugin.def
@@ -1,5 +1,6 @@
mysql-5.x=org.skywalking.apm.plugin.jdbc.mysql.define.DriverInstrumentation
-mysql-5.x=org.skywalking.apm.plugin.jdbc.mysql.define.ConnectionInstrumentation
+mysql-5.x=org.skywalking.apm.plugin.jdbc.mysql.define.Mysql5xConnectionInstrumentation
+mysql-5.x=org.skywalking.apm.plugin.jdbc.mysql.define.Mysql50ConnectionInstrumentation
mysql-5.x=org.skywalking.apm.plugin.jdbc.mysql.define.CallableInstrumentation
mysql-5.x=org.skywalking.apm.plugin.jdbc.mysql.define.PreparedStatementInstrumentation
mysql-5.x=org.skywalking.apm.plugin.jdbc.mysql.define.StatementInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java
index 8c8425c6f..86efbe777 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java
@@ -37,7 +37,7 @@ import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
import org.skywalking.apm.agent.test.tools.SpanAssert;
import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
-import org.skywalking.apm.plugin.jdbc.mysql.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
import static org.hamcrest.CoreMatchers.is;
diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml
index 4af95a27c..3abdba125 100644
--- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml
@@ -21,7 +21,7 @@
nutz-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml
index 4ad215257..ea4318ebf 100644
--- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml
@@ -21,7 +21,7 @@
nutz-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml
index 55f1c8d5e..086419866 100644
--- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
nutz-plugins
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml
index 640e7896b..afa33ac42 100644
--- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml
@@ -23,7 +23,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml
index 9948a73dc..9bcb5b05f 100755
--- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -64,6 +64,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml
index 83f20f735..2bc29a894 100644
--- a/apm-sniffer/apm-sdk-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sniffer
- 3.3.0-2017
+ 5.0-2018-preview
apm-sdk-plugin
@@ -52,6 +52,8 @@
h2-1.x-plugin
postgresql-8.x-plugin
oracle-10.x-plugin
+ rocketMQ-4.x-plugin
+ elastic-job-2.x-plugin
mongodb-2.x-plugin
pom
@@ -143,6 +145,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml
index ce4c3a4ee..391323bf2 100755
--- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -64,6 +64,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreateCallableStatementInterceptor.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreateCallableStatementInterceptor.java
new file mode 100644
index 000000000..60f4d1512
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreateCallableStatementInterceptor.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.postgresql;
+
+import java.lang.reflect.Method;
+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.plugin.jdbc.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+/**
+ * {@link CreateStatementInterceptor} intercepts the {@link org.postgresql.jdbc.PgConnection#prepareCall} method in
+ * {@link org.postgresql.jdbc.PgConnection}, {@link org.postgresql.jdbc.PgConnection} or {@link org.postgresql.jdbc3.Jdbc3Connection} class.
+ *
+ * @author zhangxin
+ */
+public class CreateCallableStatementInterceptor implements InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ if (ret instanceof EnhancedInstance) {
+ ((EnhancedInstance)ret).setSkyWalkingDynamicField(new StatementEnhanceInfos((ConnectionInfo)objInst.getSkyWalkingDynamicField(), (String)allArguments[0], "CallableStatement"));
+ }
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreatePreparedStatementInterceptor.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreatePreparedStatementInterceptor.java
new file mode 100644
index 000000000..ea8972fc6
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreatePreparedStatementInterceptor.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.postgresql;
+
+import java.lang.reflect.Method;
+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.plugin.jdbc.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+/**
+ * {@link CreatePreparedStatementInterceptor} intercepts the {@link org.postgresql.jdbc.PgConnection#prepareStatement} method in
+ * {@link org.postgresql.jdbc.PgConnection}, {@link org.postgresql.jdbc.PgConnection} or {@link org.postgresql.jdbc3.Jdbc3Connection} class.
+ *
+ * @author zhangxin
+ */
+public class CreatePreparedStatementInterceptor implements InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ if (ret instanceof EnhancedInstance) {
+ ((EnhancedInstance)ret).setSkyWalkingDynamicField(new StatementEnhanceInfos((ConnectionInfo)objInst.getSkyWalkingDynamicField(), (String)allArguments[0], "PreparedStatement"));
+ }
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/UnaryClientOnCloseInterceptor.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreateStatementInterceptor.java
similarity index 65%
rename from apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/UnaryClientOnCloseInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreateStatementInterceptor.java
index efc04a116..c26f7acf1 100644
--- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/skywalking/apm/plugin/grpc/v1/UnaryClientOnCloseInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/CreateStatementInterceptor.java
@@ -16,24 +16,23 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.grpc.v1;
+package org.skywalking.apm.plugin.jdbc.postgresql;
-import io.grpc.Metadata;
-import io.grpc.Status;
import java.lang.reflect.Method;
-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.postgresql.jdbc.PgConnection;
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.plugin.jdbc.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
/**
- * {@link UnaryClientOnCloseInterceptor} stop the active span when the call end.
+ * {@link CreateStatementInterceptor} intercepts the {@link PgConnection#createStatement} method in
+ * {@link org.postgresql.jdbc.PgConnection}, {@link org.postgresql.jdbc.PgConnection} or {@link org.postgresql.jdbc3.Jdbc3Connection} class.
*
* @author zhangxin
*/
-public class UnaryClientOnCloseInterceptor implements InstanceMethodsAroundInterceptor {
+public class CreateStatementInterceptor implements InstanceMethodsAroundInterceptor {
@Override
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
MethodInterceptResult result) throws Throwable {
@@ -43,20 +42,16 @@ public class UnaryClientOnCloseInterceptor implements InstanceMethodsAroundInter
@Override
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
Object ret) throws Throwable {
- AbstractSpan activeSpan = ContextManager.activeSpan();
- Status status = (Status)allArguments[0];
- if (status != Status.OK) {
- activeSpan.errorOccurred().log(status.asRuntimeException((Metadata)allArguments[1]));
- Tags.STATUS_CODE.set(activeSpan, status.getCode().toString());
+ if (ret instanceof EnhancedInstance) {
+ ((EnhancedInstance)ret).setSkyWalkingDynamicField(new StatementEnhanceInfos((ConnectionInfo)objInst.getSkyWalkingDynamicField(), "", "CallableStatement"));
}
- ContextManager.stopSpan();
return ret;
}
@Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
Class>[] argumentsTypes, Throwable t) {
- ContextManager.activeSpan().errorOccurred().log(t);
+
}
}
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/StatementExecuteMethodsInterceptor.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/StatementExecuteMethodsInterceptor.java
new file mode 100644
index 000000000..aab57d395
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/StatementExecuteMethodsInterceptor.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.postgresql;
+
+import java.lang.reflect.Method;
+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.plugin.jdbc.define.StatementEnhanceInfos;
+import org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+/**
+ * {@link StatementExecuteMethodsInterceptor} create the exit span when the client call the interceptor methods.
+ *
+ * @author zhangxin
+ */
+public class StatementExecuteMethodsInterceptor implements InstanceMethodsAroundInterceptor {
+ @Override
+ public final void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)objInst.getSkyWalkingDynamicField();
+ ConnectionInfo connectInfo = cacheObject.getConnectionInfo();
+ AbstractSpan span = ContextManager.createExitSpan(buildOperationName(connectInfo, method.getName(), cacheObject.getStatementName()), connectInfo.getDatabasePeer());
+ Tags.DB_TYPE.set(span, "sql");
+ Tags.DB_INSTANCE.set(span, connectInfo.getDatabaseName());
+ Tags.DB_STATEMENT.set(span, cacheObject.getSql());
+ span.setComponent(connectInfo.getComponent());
+
+ SpanLayer.asDB(span);
+ }
+
+ @Override
+ public final Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)objInst.getSkyWalkingDynamicField();
+ if (cacheObject.getConnectionInfo() != null) {
+ ContextManager.stopSpan();
+ }
+ return ret;
+ }
+
+ @Override public final void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+ StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)objInst.getSkyWalkingDynamicField();
+ if (cacheObject.getConnectionInfo() != null) {
+ ContextManager.activeSpan().errorOccurred().log(t);
+ }
+ }
+
+ private String buildOperationName(ConnectionInfo connectionInfo, String methodName, String statementName) {
+ return connectionInfo.getDBType() + "/JDBI/" + statementName + "/" + methodName;
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/AbstractJdbc2StatementInstrumentation.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/AbstractJdbc2StatementInstrumentation.java
new file mode 100644
index 000000000..b46f90cb8
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/AbstractJdbc2StatementInstrumentation.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.postgresql.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link AbstractJdbc2StatementInstrumentation} intercept the following methods that the class which extend {@link
+ * org.postgresql.jdbc2.AbstractJdbc2Statement} by {@link org.skywalking.apm.plugin.jdbc.postgresql.StatementExecuteMethodsInterceptor}.
+ * 1. the execute with non parameter
+ * 2. the execute with one parameter
+ * 3. the executeBatch
+ * 4. the executeQuery with non parameter
+ * 5. the executeQuery with one parameter
+ * 6. the executeUpdate with non parameter
+ * 7. the executeUpdate with one parameter
+ * 8. the addBatch with non parameter
+ * 9. the addBatch with one parameter
+ *
+ * @author zhangxin
+ */
+public class AbstractJdbc2StatementInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+
+ private static final String ENHANCE_CLASS = "org.postgresql.jdbc2.AbstractJdbc2Statement";
+ private static final String INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.jdbc.postgresql.StatementExecuteMethodsInterceptor";
+
+ @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named("execute").and(takesArguments(0))
+ .or(named("execute").and(takesArguments(1)))
+ .or(named("executeBatch"))
+ .or(named("executeQuery").and(takesArguments(0)))
+ .or(named("executeQuery").and(takesArguments(1)))
+ .or(named("executeUpdate").and(takesArguments(0)))
+ .or(named("executeUpdate").and(takesArguments(1)))
+ .or(named("addBatch").and(takesArguments(1)))
+ .or(named("addBatch").and(takesArguments(0)));
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return INTERCEPTOR_CLASS;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/ConnectionInstrumentation.java
index df520a9e8..8c670cc15 100644
--- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/ConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/ConnectionInstrumentation.java
@@ -31,15 +31,15 @@ import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMat
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
import static org.skywalking.apm.plugin.jdbc.define.Constants.CLOSE_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.COMMIT_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.RELEASE_SAVE_POINT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.ROLLBACK_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INTERCEPT_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_STATEMENT_INTERCEPTOR_CLASS;
/**
* {@link ConnectionInstrumentation} intercept the following methods that the class which extend {@link
@@ -74,7 +74,7 @@ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePlugin
}
@Override public String getMethodsInterceptor() {
- return PREPARE_STATEMENT_INTERCEPT_CLASS;
+ return CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
@@ -100,7 +100,7 @@ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePlugin
}
@Override public String getMethodsInterceptor() {
- return PREPARE_CALL_INTERCEPT_CLASS;
+ return CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
@@ -113,7 +113,7 @@ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePlugin
}
@Override public String getMethodsInterceptor() {
- return CREATE_STATEMENT_INTERCEPT_CLASS;
+ return CREATE_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Constants.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Constants.java
new file mode 100644
index 000000000..78d3e7055
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Constants.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.jdbc.postgresql.define;
+
+/**
+ * Interceptor class name constant variable
+ *
+ * @author zhangxin
+ */
+public class Constants {
+ public static final String CREATE_STATEMENT_INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.jdbc.postgresql.CreateStatementInterceptor";
+ public static final String CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.jdbc.postgresql.CreatePreparedStatementInterceptor";
+ public static final String CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.jdbc.postgresql.CreateCallableStatementInterceptor";
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java
index 191d8607b..2c26d3436 100644
--- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java
@@ -30,15 +30,15 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
import static org.skywalking.apm.plugin.jdbc.define.Constants.CLOSE_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.COMMIT_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.RELEASE_SAVE_POINT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.ROLLBACK_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INTERCEPT_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_STATEMENT_INTERCEPTOR_CLASS;
/**
* {@link Jdbc3ConnectionInstrumentation} intercept the following methods that the class which extend {@link
@@ -69,7 +69,7 @@ public class Jdbc3ConnectionInstrumentation extends ClassInstanceMethodsEnhanceP
}
@Override public String getMethodsInterceptor() {
- return PREPARE_STATEMENT_INTERCEPT_CLASS;
+ return CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
@@ -82,7 +82,7 @@ public class Jdbc3ConnectionInstrumentation extends ClassInstanceMethodsEnhanceP
}
@Override public String getMethodsInterceptor() {
- return PREPARE_CALL_INTERCEPT_CLASS;
+ return CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
@@ -95,7 +95,7 @@ public class Jdbc3ConnectionInstrumentation extends ClassInstanceMethodsEnhanceP
}
@Override public String getMethodsInterceptor() {
- return CREATE_STATEMENT_INTERCEPT_CLASS;
+ return CREATE_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
@@ -104,7 +104,8 @@ public class Jdbc3ConnectionInstrumentation extends ClassInstanceMethodsEnhanceP
},
new InstanceMethodsInterceptPoint() {
@Override public ElementMatcher getMethodsMatcher() {
- return named(COMMIT_METHOD_NAME).or(named(ROLLBACK_METHOD_NAME)).or(named(CLOSE_METHOD_NAME)).or(named(RELEASE_SAVE_POINT_METHOD_NAME));
+ return named(COMMIT_METHOD_NAME).or(named(ROLLBACK_METHOD_NAME)).or(named(CLOSE_METHOD_NAME))
+ .or(named(RELEASE_SAVE_POINT_METHOD_NAME));
}
@Override public String getMethodsInterceptor() {
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc4ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc4ConnectionInstrumentation.java
index 7be5b62f6..c3507bc43 100644
--- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc4ConnectionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc4ConnectionInstrumentation.java
@@ -32,13 +32,13 @@ import static org.skywalking.apm.plugin.jdbc.define.Constants.CLOSE_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.COMMIT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_METHOD_NAME;
-import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_INTERCEPT_CLASS;
import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.RELEASE_SAVE_POINT_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.ROLLBACK_METHOD_NAME;
import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INTERCEPT_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
+import static org.skywalking.apm.plugin.jdbc.postgresql.define.Constants.CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
/**
* {@link Jdbc4ConnectionInstrumentation} intercept the following methods that the class which extend {@link
@@ -69,7 +69,7 @@ public class Jdbc4ConnectionInstrumentation extends ClassInstanceMethodsEnhanceP
}
@Override public String getMethodsInterceptor() {
- return PREPARE_STATEMENT_INTERCEPT_CLASS;
+ return CREATE_PREPARED_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
@@ -82,7 +82,7 @@ public class Jdbc4ConnectionInstrumentation extends ClassInstanceMethodsEnhanceP
}
@Override public String getMethodsInterceptor() {
- return PREPARE_CALL_INTERCEPT_CLASS;
+ return CREATE_CALLABLE_STATEMENT_INTERCEPTOR_CLASS;
}
@Override public boolean isOverrideArgs() {
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def
index 3fe0ad09b..b069baff8 100644
--- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def
@@ -2,3 +2,4 @@ postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.DriverInstrument
postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.Jdbc3ConnectionInstrumentation
postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.Jdbc4ConnectionInstrumentation
postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.ConnectionInstrumentation
+postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.AbstractJdbc2StatementInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml
index 5a5bcba1f..bb84b7754 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml
@@ -25,7 +25,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
apm-resin-3.x-plugin
@@ -63,6 +63,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml
index 7977f3c2a..70dc3ee65 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml
@@ -25,7 +25,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
apm-resin-4.x-plugin
@@ -63,6 +63,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml
new file mode 100644
index 000000000..05217420d
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+ apm-sdk-plugin
+ org.skywalking
+ 5.0-2018-preview
+
+ 4.0.0
+
+ apm-rocketmq-4.x-plugin
+ rocketMQ-4.x-plugin
+
+
+ UTF-8
+
+
+
+
+ org.apache.rocketmq
+ rocketmq-client
+ 4.1.0-incubating
+ provided
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/AbstractMessageConsumeInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/AbstractMessageConsumeInterceptor.java
new file mode 100644
index 000000000..b428759a8
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/AbstractMessageConsumeInterceptor.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import org.apache.rocketmq.common.message.MessageExt;
+import org.skywalking.apm.agent.core.context.CarrierItem;
+import org.skywalking.apm.agent.core.context.ContextCarrier;
+import org.skywalking.apm.agent.core.context.ContextManager;
+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 AbstractMessageConsumeInterceptor} create entry span when the consumeMessage in the {@link
+ * org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently} and {@link
+ * org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly} class.
+ *
+ * @author zhangxin
+ */
+public abstract class AbstractMessageConsumeInterceptor implements InstanceMethodsAroundInterceptor {
+
+ public static final String COMSUMER_OPERATION_NAME_PREFIX = "RocketMQ/";
+
+ @Override
+ public final void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ List msgs = (List)allArguments[0];
+
+ ContextCarrier contextCarrier = getContextCarrierFromMessage(msgs.get(0));
+ AbstractSpan span = ContextManager.createEntrySpan(COMSUMER_OPERATION_NAME_PREFIX + msgs.get(0).getTopic() + "/Consumer", contextCarrier);
+
+ span.setComponent(ComponentsDefine.ROCKET_MQ);
+ span.setLayer(SpanLayer.MQ);
+ for (int i = 1; i < msgs.size(); i++) {
+ ContextManager.extract(getContextCarrierFromMessage(msgs.get(i)));
+ }
+
+ }
+
+ @Override public final void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+ ContextManager.activeSpan().errorOccurred().log(t);
+ }
+
+ private ContextCarrier getContextCarrierFromMessage(MessageExt message) {
+ ContextCarrier contextCarrier = new ContextCarrier();
+
+ CarrierItem next = contextCarrier.items();
+ while (next.hasNext()) {
+ next = next.next();
+ next.setHeadValue(message.getUserProperty(next.getHeadKey()));
+ }
+
+ return contextCarrier;
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageConcurrentlyConsumeInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageConcurrentlyConsumeInterceptor.java
new file mode 100644
index 000000000..2e786e651
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageConcurrentlyConsumeInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.lang.reflect.Method;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
+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.plugin.interceptor.enhance.EnhancedInstance;
+
+/**
+ * {@link MessageConcurrentlyConsumeInterceptor} set the process status after the {@link
+ * org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently#consumeMessage(java.util.List,
+ * org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext)} method execute.
+ *
+ * @author zhang xin
+ */
+public class MessageConcurrentlyConsumeInterceptor extends AbstractMessageConsumeInterceptor {
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ ConsumeConcurrentlyStatus status = (ConsumeConcurrentlyStatus)ret;
+ if (status == ConsumeConcurrentlyStatus.RECONSUME_LATER) {
+ AbstractSpan activeSpan = ContextManager.activeSpan();
+ activeSpan.errorOccurred();
+ Tags.STATUS_CODE.set(activeSpan, status.name());
+ }
+ ContextManager.stopSpan();
+ return ret;
+ }
+}
+
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageOrderlyConsumeInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageOrderlyConsumeInterceptor.java
new file mode 100644
index 000000000..151bc8788
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageOrderlyConsumeInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.lang.reflect.Method;
+import org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyStatus;
+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.plugin.interceptor.enhance.EnhancedInstance;
+
+/**
+ * {@link MessageOrderlyConsumeInterceptor} set the process status after the {@link
+ * org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly#consumeMessage(java.util.List,
+ * org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyContext)} method execute.
+ *
+ * @author zhang xin
+ */
+public class MessageOrderlyConsumeInterceptor extends AbstractMessageConsumeInterceptor {
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+
+ ConsumeOrderlyStatus status = (ConsumeOrderlyStatus)ret;
+ if (status == ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT) {
+ AbstractSpan activeSpan = ContextManager.activeSpan();
+ activeSpan.errorOccurred();
+ Tags.STATUS_CODE.set(activeSpan, status.name());
+ }
+ ContextManager.stopSpan();
+ return ret;
+ }
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java
new file mode 100644
index 000000000..d8f9eae70
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.lang.reflect.Method;
+import org.apache.rocketmq.client.impl.CommunicationMode;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
+import org.skywalking.apm.agent.core.context.CarrierItem;
+import org.skywalking.apm.agent.core.context.ContextCarrier;
+import org.skywalking.apm.agent.core.context.ContextManager;
+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.rocketMQ.v4.define.SendCallBackEnhanceInfo;
+import org.skywalking.apm.util.StringUtil;
+
+import static org.apache.rocketmq.common.message.MessageDecoder.NAME_VALUE_SEPARATOR;
+import static org.apache.rocketmq.common.message.MessageDecoder.PROPERTY_SEPARATOR;
+
+/**
+ * {@link MessageSendInterceptor} create exit span when the method {@link org.apache.rocketmq.client.impl.MQClientAPIImpl#sendMessage(String,
+ * String, Message, org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader, long,
+ * org.apache.rocketmq.client.impl.CommunicationMode, org.apache.rocketmq.client.producer.SendCallback,
+ * org.apache.rocketmq.client.impl.producer.TopicPublishInfo, org.apache.rocketmq.client.impl.factory.MQClientInstance,
+ * int, org.apache.rocketmq.client.hook.SendMessageContext, org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl)}
+ * execute.
+ *
+ * @author zhang xin
+ */
+public class MessageSendInterceptor implements InstanceMethodsAroundInterceptor {
+
+ public static final String ASYNC_SEND_OPERATION_NAME_PREFIX = "RocketMQ/";
+
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ Message message = (Message)allArguments[2];
+ ContextCarrier contextCarrier = new ContextCarrier();
+ String namingServiceAddress = String.valueOf(objInst.getSkyWalkingDynamicField());
+ AbstractSpan span = ContextManager.createExitSpan(buildOperationName(message.getTopic()), contextCarrier, namingServiceAddress);
+ span.setComponent(ComponentsDefine.ROCKET_MQ);
+ span.setLayer(SpanLayer.MQ);
+ span.tag("brokerName", (String)allArguments[1]);
+ span.tag("tags", message.getTags());
+ span.tag("communication.mode", ((CommunicationMode)allArguments[5]).name());
+
+ SendMessageRequestHeader requestHeader = (SendMessageRequestHeader)allArguments[3];
+ StringBuilder properties = new StringBuilder(requestHeader.getProperties());
+ CarrierItem next = contextCarrier.items();
+ while (next.hasNext()) {
+ next = next.next();
+ if (!StringUtil.isEmpty(next.getHeadValue())) {
+ properties.append(next.getHeadKey());
+ properties.append(NAME_VALUE_SEPARATOR);
+ properties.append(next.getHeadValue());
+ properties.append(PROPERTY_SEPARATOR);
+ }
+ }
+ requestHeader.setProperties(properties.toString());
+
+ if (allArguments[6] != null) {
+ ((EnhancedInstance)allArguments[6]).setSkyWalkingDynamicField(new SendCallBackEnhanceInfo(message.getTopic(), ContextManager.capture()));
+ }
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ ContextManager.stopSpan();
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+ ContextManager.activeSpan().errorOccurred().log(t);
+ }
+
+ private String buildOperationName(String topicName) {
+ return ASYNC_SEND_OPERATION_NAME_PREFIX + topicName + "/Producer";
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptor.java
new file mode 100644
index 000000000..067303538
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptor.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.lang.reflect.Method;
+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;
+import org.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.skywalking.apm.plugin.rocketMQ.v4.define.SendCallBackEnhanceInfo;
+
+/**
+ * {@link OnExceptionInterceptor} create local span when the method {@link org.apache.rocketmq.client.producer.SendCallback#onException(Throwable)}
+ * execute.
+ *
+ * @author zhang xin
+ */
+public class OnExceptionInterceptor implements InstanceMethodsAroundInterceptor {
+
+ public static final String CALLBACK_OPERATION_NAME_PREFIX = "RocketMQ/";
+
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ SendCallBackEnhanceInfo enhanceInfo = (SendCallBackEnhanceInfo)objInst.getSkyWalkingDynamicField();
+ AbstractSpan activeSpan = ContextManager.createLocalSpan(CALLBACK_OPERATION_NAME_PREFIX + enhanceInfo.getTopicId() + "/Producer/Callback");
+ activeSpan.setComponent(ComponentsDefine.ROCKET_MQ);
+ activeSpan.errorOccurred().log((Throwable)allArguments[0]);
+ ContextManager.continued(enhanceInfo.getContextSnapshot());
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ ContextManager.stopSpan();
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+ ContextManager.activeSpan().log(t);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptor.java
new file mode 100644
index 000000000..cf927d46b
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptor.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.lang.reflect.Method;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.client.producer.SendStatus;
+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.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.rocketMQ.v4.define.SendCallBackEnhanceInfo;
+
+/**
+ * {@link OnSuccessInterceptor} create local span when the method {@link org.apache.rocketmq.client.producer.SendCallback#onSuccess(SendResult)}
+ * execute.
+ *
+ * @author zhang xin
+ */
+public class OnSuccessInterceptor implements InstanceMethodsAroundInterceptor {
+
+ public static final String CALLBACK_OPERATION_NAME_PREFIX = "RocketMQ/";
+
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ SendCallBackEnhanceInfo enhanceInfo = (SendCallBackEnhanceInfo)objInst.getSkyWalkingDynamicField();
+ AbstractSpan activeSpan = ContextManager.createLocalSpan(CALLBACK_OPERATION_NAME_PREFIX + enhanceInfo.getTopicId() + "/Producer/Callback");
+ activeSpan.setComponent(ComponentsDefine.ROCKET_MQ);
+ SendStatus sendStatus = ((SendResult)allArguments[0]).getSendStatus();
+ if (sendStatus != SendStatus.SEND_OK) {
+ activeSpan.errorOccurred();
+ Tags.STATUS_CODE.set(activeSpan, sendStatus.name());
+ }
+ ContextManager.continued(enhanceInfo.getContextSnapshot());
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ ContextManager.stopSpan();
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+ ContextManager.activeSpan().errorOccurred().log(t);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/UpdateNameServerInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/UpdateNameServerInterceptor.java
new file mode 100644
index 000000000..59d755e5e
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/UpdateNameServerInterceptor.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.lang.reflect.Method;
+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 UpdateNameServerInterceptor implements InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ objInst.setSkyWalkingDynamicField(allArguments[0]);
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageConcurrentlyInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageConcurrentlyInstrumentation.java
new file mode 100644
index 000000000..18214fe3e
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageConcurrentlyInstrumentation.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch;
+
+/**
+ * {@link ConsumeMessageConcurrentlyInstrumentation} intercepts the {@link org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently#consumeMessage(java.util.List,
+ * org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext)} method by using {@link
+ * org.skywalking.apm.plugin.rocketMQ.v4.MessageConcurrentlyConsumeInterceptor}.
+ *
+ * @author zhang xin
+ */
+public class ConsumeMessageConcurrentlyInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+ private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently";
+ private static final String CONSUMER_MESSAGE_METHOD = "consumeMessage";
+ private static final String INTERCEPTOR_CLASS = "org.apache.rocketmq.common.message.MessageConcurrentlyConsumeInterceptor";
+
+ @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named(CONSUMER_MESSAGE_METHOD);
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return INTERCEPTOR_CLASS;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byHierarchyMatch(new String[] {ENHANCE_CLASS});
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageOrderlyInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageOrderlyInstrumentation.java
new file mode 100644
index 000000000..968259ab6
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageOrderlyInstrumentation.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch;
+
+/**
+ * {@link ConsumeMessageOrderlyInstrumentation} intercepts the {@link org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly#consumeMessage(java.util.List,
+ * org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyContext)} method by using {@link
+ * org.skywalking.apm.plugin.rocketMQ.v4.MessageConcurrentlyConsumeInterceptor}.
+ *
+ * @author zhang xin
+ */
+public class ConsumeMessageOrderlyInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+ private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly";
+ private static final String ENHANCE_METHOD = "consumeMessage";
+ private static final String INTERCEPTOR_CLASS = "org.apache.rocketmq.common.message.MessageOrderlyConsumeInterceptor";
+
+ @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named(ENHANCE_METHOD);
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return INTERCEPTOR_CLASS;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byHierarchyMatch(new String[] {ENHANCE_CLASS});
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/MQClientAPIImplInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/MQClientAPIImplInstrumentation.java
new file mode 100644
index 000000000..5cf5d8a9f
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/MQClientAPIImplInstrumentation.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link MQClientAPIImplInstrumentation} intercepts the {@link org.apache.rocketmq.client.impl.MQClientAPIImpl#sendMessage(String,
+ * String, org.apache.rocketmq.common.message.Message, org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader,
+ * long, org.apache.rocketmq.client.impl.CommunicationMode, org.apache.rocketmq.client.producer.SendCallback,
+ * org.apache.rocketmq.client.impl.producer.TopicPublishInfo, org.apache.rocketmq.client.impl.factory.MQClientInstance,
+ * int, org.apache.rocketmq.client.hook.SendMessageContext, org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl)}
+ * method by using {@link org.skywalking.apm.plugin.rocketMQ.v4.MessageSendInterceptor}.
+ *
+ * @author zhang xin
+ */
+public class MQClientAPIImplInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+
+ private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.impl.MQClientAPIImpl";
+ private static final String SEND_MESSAGE_METHOD_NAME = "sendMessage";
+ private static final String ASYNC_METHOD_INTERCEPTOR = "org.skywalking.apm.plugin.rocketMQ.v4.MessageSendInterceptor";
+ public static final String UPDATE_NAME_SERVER_INTERCEPT_CLASS = "org.skywalking.apm.plugin.rocketMQ.v4.UpdateNameServerInterceptor";
+ public static final String UPDATE_NAME_SERVER_METHOD_NAME = "updateNameServerAddressList";
+
+ @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named(SEND_MESSAGE_METHOD_NAME).and(takesArguments(12));
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return ASYNC_METHOD_INTERCEPTOR;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named(UPDATE_NAME_SERVER_METHOD_NAME);
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return UPDATE_NAME_SERVER_INTERCEPT_CLASS;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/PathMappingCache.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/SendCallBackEnhanceInfo.java
similarity index 51%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/PathMappingCache.java
rename to apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/SendCallBackEnhanceInfo.java
index ea49c81d3..c5fb21728 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/PathMappingCache.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/SendCallBackEnhanceInfo.java
@@ -16,30 +16,29 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v4;
+package org.skywalking.apm.plugin.rocketMQ.v4.define;
-import java.lang.reflect.Method;
-import java.util.concurrent.ConcurrentHashMap;
+import org.skywalking.apm.agent.core.context.ContextSnapshot;
/**
- * The PathMappingCache represents a field
+ * {@link SendCallBackEnhanceInfo} saves the topic Id and {@link ContextSnapshot} instance for trace.
*
- * @author wusheng
+ * @author zhang xin
*/
-public class PathMappingCache {
- private String classPath = "";
+public class SendCallBackEnhanceInfo {
+ private String topicId;
+ private ContextSnapshot contextSnapshot;
- private ConcurrentHashMap methodPathMapping = new ConcurrentHashMap();
-
- public PathMappingCache(String classPath) {
- this.classPath = classPath;
+ public SendCallBackEnhanceInfo(String topicId, ContextSnapshot contextSnapshot) {
+ this.topicId = topicId;
+ this.contextSnapshot = contextSnapshot;
}
- public String findPathMapping(Method method) {
- return methodPathMapping.get(method);
+ public String getTopicId() {
+ return topicId;
}
- public void addPathMapping(Method method, String methodPath) {
- methodPathMapping.put(method, classPath + methodPath);
+ public ContextSnapshot getContextSnapshot() {
+ return contextSnapshot;
}
}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/SendCallbackInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/SendCallbackInstrumentation.java
new file mode 100644
index 000000000..d63c0a3d7
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/skywalking/apm/plugin/rocketMQ/v4/define/SendCallbackInstrumentation.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
+import static org.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch;
+
+/**
+ * {@link SendCallbackInstrumentation} intercepts {@link org.apache.rocketmq.client.producer.SendCallback#onSuccess(SendResult)}
+ * method by using {@link org.skywalking.apm.plugin.rocketMQ.v4.OnSuccessInterceptor} and also intercepts {@link
+ * org.apache.rocketmq.client.producer.SendCallback#onException(Throwable)} by using {@link
+ * org.skywalking.apm.plugin.rocketMQ.v4.OnExceptionInterceptor}.
+ *
+ * @author zhang xin
+ */
+public class SendCallbackInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+
+ private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.producer.SendCallback";
+ private static final String ON_SUCCESS_ENHANCE_METHOD = "onSuccess";
+ private static final String ON_SUCCESS_INTERCEPTOR = "org.skywalking.apm.plugin.rocketMQ.v4.OnSuccessInterceptor";
+ private static final String ON_EXCEPTION_METHOD = "onException";
+ private static final String ON_EXCEPTION_INTERCEPTOR = "org.skywalking.apm.plugin.rocketMQ.v4.OnExceptionInterceptor";
+
+ @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named(ON_SUCCESS_ENHANCE_METHOD).and(takesArgumentWithType(0, "org.apache.rocketmq.client.producer.SendResult"));
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return ON_SUCCESS_INTERCEPTOR;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ },
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named(ON_EXCEPTION_METHOD).and(takesArgumentWithType(0, "java.lang.Throwable"));
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return ON_EXCEPTION_INTERCEPTOR;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byHierarchyMatch(new String[] {ENHANCE_CLASS});
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/resources/skywalking-plugin.def
new file mode 100644
index 000000000..1accc2bff
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/resources/skywalking-plugin.def
@@ -0,0 +1,4 @@
+rocketMQ-4.x=org.skywalking.apm.plugin.rocketMQ.v4.define.ConsumeMessageConcurrentlyInstrumentation
+rocketMQ-4.x=org.skywalking.apm.plugin.rocketMQ.v4.define.ConsumeMessageOrderlyInstrumentation
+rocketMQ-4.x=org.skywalking.apm.plugin.rocketMQ.v4.define.MQClientAPIImplInstrumentation
+rocketMQ-4.x=org.skywalking.apm.plugin.rocketMQ.v4.define.SendCallbackInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptorTest.java
new file mode 100644
index 000000000..d4d783712
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptorTest.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.util.List;
+import org.apache.rocketmq.client.impl.CommunicationMode;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Matchers;
+import org.mockito.Mock;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+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.test.helper.SegmentHelper;
+import org.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.skywalking.apm.agent.test.tools.SpanAssert;
+import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.skywalking.apm.network.trace.component.ComponentsDefine;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.powermock.api.mockito.PowerMockito.when;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+public class MessageSendInterceptorTest {
+
+ private MessageSendInterceptor messageSendInterceptor;
+
+ @SegmentStoragePoint
+ private SegmentStorage segmentStorage;
+
+ @Rule
+ public AgentServiceRule serviceRule = new AgentServiceRule();
+
+ private Object[] arguments;
+
+ private Object[] argumentsWithoutCallback;
+
+ @Mock
+ private Message message;
+
+ @Mock
+ private SendMessageRequestHeader messageRequestHeader;
+
+ @Mock
+ private EnhancedInstance callBack;
+
+ private EnhancedInstance enhancedInstance;
+
+ @Before
+ public void setUp() {
+ messageSendInterceptor = new MessageSendInterceptor();
+ enhancedInstance = new EnhancedInstance() {
+ @Override public Object getSkyWalkingDynamicField() {
+ return "127.0.0.1:6543";
+ }
+
+ @Override public void setSkyWalkingDynamicField(Object value) {
+
+ }
+ };
+
+ arguments = new Object[] {"127.0.0.1", "test", message, messageRequestHeader, null, CommunicationMode.ASYNC, callBack};
+ argumentsWithoutCallback = new Object[] {"127.0.0.1", "test", message, messageRequestHeader, null, CommunicationMode.ASYNC, null};
+ when(messageRequestHeader.getProperties()).thenReturn("");
+ when(message.getTags()).thenReturn("TagA");
+ }
+
+ @Test
+ public void testSendMessage() throws Throwable {
+ messageSendInterceptor.beforeMethod(enhancedInstance, null, arguments, null, null);
+ messageSendInterceptor.afterMethod(enhancedInstance, null, arguments, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(traceSegment);
+ assertThat(spans.size(), is(1));
+
+ AbstractTracingSpan mqSpan = spans.get(0);
+
+ SpanAssert.assertLayer(mqSpan, SpanLayer.MQ);
+ SpanAssert.assertComponent(mqSpan, ComponentsDefine.ROCKET_MQ);
+ SpanAssert.assertTag(mqSpan, 0, "test");
+ SpanAssert.assertTag(mqSpan, 1, "TagA");
+ verify(messageRequestHeader, times(1)).setProperties(anyString());
+ verify(callBack, times(1)).setSkyWalkingDynamicField(Matchers.any());
+ }
+
+ @Test
+ public void testSendMessageWithoutCallBack() throws Throwable {
+ messageSendInterceptor.beforeMethod(enhancedInstance, null, argumentsWithoutCallback, null, null);
+ messageSendInterceptor.afterMethod(enhancedInstance, null, argumentsWithoutCallback, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(traceSegment);
+ assertThat(spans.size(), is(1));
+
+ AbstractTracingSpan mqSpan = spans.get(0);
+
+ SpanAssert.assertLayer(mqSpan, SpanLayer.MQ);
+ SpanAssert.assertComponent(mqSpan, ComponentsDefine.ROCKET_MQ);
+ SpanAssert.assertTag(mqSpan, 0, "test");
+ SpanAssert.assertTag(mqSpan, 1, "TagA");
+ verify(messageRequestHeader, times(1)).setProperties(anyString());
+ }
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptorTest.java
new file mode 100644
index 000000000..bc749493a
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptorTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.util.List;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.skywalking.apm.agent.core.context.ContextSnapshot;
+import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.skywalking.apm.agent.core.context.trace.TraceSegment;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.skywalking.apm.agent.test.helper.SegmentHelper;
+import org.skywalking.apm.agent.test.helper.SpanHelper;
+import org.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.skywalking.apm.agent.test.tools.SpanAssert;
+import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.skywalking.apm.plugin.rocketMQ.v4.define.SendCallBackEnhanceInfo;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.powermock.api.mockito.PowerMockito.when;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+public class OnExceptionInterceptorTest {
+
+ private OnExceptionInterceptor exceptionInterceptor;
+
+ @SegmentStoragePoint
+ private SegmentStorage segmentStorage;
+
+ @Rule
+ public AgentServiceRule serviceRule = new AgentServiceRule();
+
+ @Mock
+ private ContextSnapshot contextSnapshot;
+ private SendCallBackEnhanceInfo enhanceInfo;
+
+ @Mock
+ private EnhancedInstance enhancedInstance;
+
+ @Before
+ public void setUp() {
+ exceptionInterceptor = new OnExceptionInterceptor();
+
+ enhanceInfo = new SendCallBackEnhanceInfo("test", contextSnapshot);
+ when(enhancedInstance.getSkyWalkingDynamicField()).thenReturn(enhanceInfo);
+ }
+
+ @Test
+ public void testOnException() throws Throwable {
+ exceptionInterceptor.beforeMethod(enhancedInstance, null, new Object[] {new RuntimeException()}, null, null);
+ exceptionInterceptor.afterMethod(enhancedInstance, null, new Object[] {new RuntimeException()}, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(traceSegment);
+ assertThat(spans.size(), is(1));
+
+ AbstractTracingSpan exceptionSpan = spans.get(0);
+ SpanAssert.assertException(SpanHelper.getLogs(exceptionSpan).get(0), RuntimeException.class);
+ SpanAssert.assertOccurException(exceptionSpan, true);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptorTest.java
new file mode 100644
index 000000000..5fcbb0cf2
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptorTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.rocketMQ.v4;
+
+import java.util.List;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.client.producer.SendStatus;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.skywalking.apm.agent.core.context.ContextSnapshot;
+import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.skywalking.apm.agent.core.context.trace.TraceSegment;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.skywalking.apm.agent.test.helper.SegmentHelper;
+import org.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.skywalking.apm.agent.test.tools.SpanAssert;
+import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.skywalking.apm.plugin.rocketMQ.v4.define.SendCallBackEnhanceInfo;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.powermock.api.mockito.PowerMockito.when;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+public class OnSuccessInterceptorTest {
+
+ private OnSuccessInterceptor successInterceptor;
+
+ @SegmentStoragePoint
+ private SegmentStorage segmentStorage;
+
+ @Rule
+ public AgentServiceRule serviceRule = new AgentServiceRule();
+
+ @Mock
+ private ContextSnapshot contextSnapshot;
+ @Mock
+ private SendResult sendResult;
+
+ private SendCallBackEnhanceInfo enhanceInfo;
+
+ @Mock
+ private EnhancedInstance enhancedInstance;
+
+ @Before
+ public void setUp() {
+ successInterceptor = new OnSuccessInterceptor();
+
+ enhanceInfo = new SendCallBackEnhanceInfo("test", contextSnapshot);
+ when(enhancedInstance.getSkyWalkingDynamicField()).thenReturn(enhanceInfo);
+ when(sendResult.getSendStatus()).thenReturn(SendStatus.SEND_OK);
+ }
+
+ @Test
+ public void testOnSuccess() throws Throwable {
+ successInterceptor.beforeMethod(enhancedInstance, null, new Object[] {sendResult}, null, null);
+ successInterceptor.afterMethod(enhancedInstance, null, new Object[] {sendResult}, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(traceSegment);
+ assertThat(spans.size(), is(1));
+
+ AbstractTracingSpan successSpan = spans.get(0);
+
+ SpanAssert.assertComponent(successSpan, ComponentsDefine.ROCKET_MQ);
+
+ }
+
+ @Test
+ public void testOnSuccessWithErrorStatus() throws Throwable {
+ when(sendResult.getSendStatus()).thenReturn(SendStatus.FLUSH_SLAVE_TIMEOUT);
+ successInterceptor.beforeMethod(enhancedInstance, null, new Object[] {sendResult}, null, null);
+ successInterceptor.afterMethod(enhancedInstance, null, new Object[] {sendResult}, null, null);
+
+ assertThat(segmentStorage.getTraceSegments().size(), is(1));
+ TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
+ List spans = SegmentHelper.getSpans(traceSegment);
+ assertThat(spans.size(), is(1));
+
+ AbstractTracingSpan successSpan = spans.get(0);
+
+ SpanAssert.assertComponent(successSpan, ComponentsDefine.ROCKET_MQ);
+ SpanAssert.assertOccurException(successSpan, true);
+
+ }
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml
index a1a31447e..ed4f61289 100644
--- a/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml
@@ -23,7 +23,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -66,6 +66,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml
index ff4aa2760..868ed6f6f 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml
@@ -21,7 +21,7 @@
spring-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/EitherInterfaceMatch.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/EitherInterfaceMatch.java
index 632e04ec4..1e2abf20d 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/EitherInterfaceMatch.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/EitherInterfaceMatch.java
@@ -56,7 +56,10 @@ public abstract class EitherInterfaceMatch implements IndirectMatch {
matchHierarchyClazz(generic, matchResult);
}
- matchHierarchyClazz(typeDescription.getSuperClass(), matchResult);
+ if (typeDescription.getSuperClass() != null) {
+ matchHierarchyClazz(typeDescription.getSuperClass(), matchResult);
+ }
+
return matchResult.result();
}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/ListenableFutureCallbackMatch.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/ListenableFutureCallbackMatch.java
index 311a6c303..7de49c557 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/ListenableFutureCallbackMatch.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/concurrent/match/ListenableFutureCallbackMatch.java
@@ -44,7 +44,7 @@ public class ListenableFutureCallbackMatch implements IndirectMatch {
@Override
public ElementMatcher.Junction buildJunction() {
return not(nameStartsWith("org.springframework")).
- and(hasSuperType(named(LISTENABLE_FUTURE_CALLBACK_CLASS_NAME)));
+ and(hasSuperType(named(LISTENABLE_FUTURE_CALLBACK_CLASS_NAME)));
}
@Override
@@ -53,8 +53,12 @@ public class ListenableFutureCallbackMatch implements IndirectMatch {
for (TypeDescription.Generic generic : typeDescription.getInterfaces()) {
isMatch = isMatch || matchExactClass(generic);
}
-
- return isMatch || matchExactClass(typeDescription.getSuperClass());
+
+ if (typeDescription.getSuperClass() != null) {
+ return isMatch || matchExactClass(typeDescription.getSuperClass());
+ } else {
+ return isMatch;
+ }
}
private boolean matchExactClass(TypeDescription.Generic clazz) {
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/pom.xml
index 8a54de602..e60b0d157 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/pom.xml
@@ -23,7 +23,7 @@
spring-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml
index 4d13789f7..953149c62 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml
@@ -21,7 +21,7 @@
spring-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -50,5 +50,11 @@
3.0.1
provided
+
+ org.skywalking
+ apm-springmvc-annotation-commons
+ ${project.version}
+ provided
+
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java
index df1d1e9c6..634d0a506 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptor.java
@@ -20,6 +20,8 @@ package org.skywalking.apm.plugin.spring.mvc.v3;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
+import org.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
import org.springframework.web.bind.annotation.RequestMapping;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerMethodInterceptor.java
deleted file mode 100644
index 43f51dbd7..000000000
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerMethodInterceptor.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2017, OpenSkywalking Organization All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Project repository: https://github.com/OpenSkywalking/skywalking
- */
-
-package org.skywalking.apm.plugin.spring.mvc.v3;
-
-import java.lang.reflect.Method;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.skywalking.apm.agent.core.context.CarrierItem;
-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.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-/**
- * {@link ControllerMethodInterceptor} create entry span when the client call the method annotation with {@link
- * RequestMapping} in the class annotation with {@link org.springframework.stereotype.Controller}.
- *
- * @author zhangxin
- */
-public class ControllerMethodInterceptor implements InstanceMethodsAroundInterceptor {
- @Override
- public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
- MethodInterceptResult result) throws Throwable {
- EnhanceRequireObjectCache pathMappingCache = (EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField();
- String requestURL = pathMappingCache.findPathMapping(method);
- if (requestURL == null) {
- requestURL = getRequestURL(method);
- pathMappingCache.addPathMapping(method, requestURL);
- requestURL = pathMappingCache.findPathMapping(method);
- }
-
- HttpServletRequest request =
- ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
-
- ContextCarrier contextCarrier = new ContextCarrier();
- CarrierItem next = contextCarrier.items();
- while (next.hasNext()) {
- next = next.next();
- next.setHeadValue(request.getHeader(next.getHeadKey()));
- }
-
- AbstractSpan span = ContextManager.createEntrySpan(requestURL, contextCarrier);
- Tags.URL.set(span, request.getRequestURL().toString());
- Tags.HTTP.METHOD.set(span, request.getMethod());
- span.setComponent(ComponentsDefine.SPRING_MVC_ANNOTATION);
- SpanLayer.asHttp(span);
- }
-
- @Override
- public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
- Object ret) throws Throwable {
- HttpServletResponse response = ((EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField()).getHttpServletResponse();
- AbstractSpan span = ContextManager.activeSpan();
- if (response.getStatus() >= 400) {
- span.errorOccurred();
- Tags.STATUS_CODE.set(span, Integer.toString(response.getStatus()));
- }
- ContextManager.stopSpan();
- return ret;
- }
-
- @Override
- public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
- Class>[] argumentsTypes, Throwable t) {
- ContextManager.activeSpan().errorOccurred().log(t);
- }
-
- public String getRequestURL(Method method) {
- String requestURL = "";
- RequestMapping methodRequestMapping = method.getAnnotation(RequestMapping.class);
- if (methodRequestMapping.value().length > 0) {
- requestURL = methodRequestMapping.value()[0];
- }
- return requestURL;
- }
-}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java
index 52dd64a32..a4a3edfe3 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java
@@ -22,6 +22,7 @@ import java.lang.reflect.Method;
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.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
import org.springframework.web.context.request.NativeWebRequest;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/ControllerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/ControllerInstrumentation.java
index 4b22c7550..438980c62 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/ControllerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/ControllerInstrumentation.java
@@ -28,6 +28,7 @@ import static net.bytebuddy.matcher.ElementMatchers.any;
import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static org.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.byClassAnnotationMatch;
+import static org.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_MAPPING_METHOD_INTERCEPTOR;
/**
* {@link ControllerInstrumentation} intercept the constructor and the methods annotated with {@link
@@ -40,7 +41,6 @@ public class ControllerInstrumentation extends AbstractSpring3Instrumentation {
public static final String CONTROLLER_ENHANCE_ANNOTATION = "org.springframework.stereotype.Controller";
public static final String CONSTRUCTOR_INTERCEPTOR = "org.skywalking.apm.plugin.spring.mvc.v3.ControllerConstructorInterceptor";
public static final String REQUEST_MAPPING_ENHANCE_ANNOTATION = "org.springframework.web.bind.annotation.RequestMapping";
- public static final String REQUEST_MAPPING_METHOD_INTERCEPTOR = "org.skywalking.apm.plugin.spring.mvc.v3.ControllerMethodInterceptor";
@Override
protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/HandlerMethodInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/HandlerMethodInstrumentation.java
index 06819c1a9..6e481cd7d 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/HandlerMethodInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/HandlerMethodInstrumentation.java
@@ -26,6 +26,7 @@ import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+import static org.skywalking.apm.plugin.spring.mvc.commons.Constants.GET_BEAN_INTERCEPTOR;
/**
* {@link HandlerMethodInstrumentation} intercept the getBean method in the
@@ -36,7 +37,6 @@ import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
public class HandlerMethodInstrumentation extends AbstractSpring3Instrumentation {
public static final String ENHANCE_METHOD = "getBean";
- public static final String INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.spring.mvc.v3.GetBeanInterceptor";
public static final String ENHANCE_CLASS = "org.springframework.web.method.HandlerMethod";
@Override
@@ -55,7 +55,7 @@ public class HandlerMethodInstrumentation extends AbstractSpring3Instrumentation
@Override
public String getMethodsInterceptor() {
- return INTERCEPTOR_CLASS;
+ return GET_BEAN_INTERCEPTOR;
}
@Override
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/InvocableHandlerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/InvocableHandlerInstrumentation.java
index 0b87e8767..89b953972 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/InvocableHandlerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/InvocableHandlerInstrumentation.java
@@ -26,6 +26,7 @@ import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+import static org.skywalking.apm.plugin.spring.mvc.commons.Constants.INVOKE_FOR_REQUEST_INTERCEPTOR;
/**
* {@link InvocableHandlerInstrumentation} intercept the invokeForRequest method in the
@@ -36,7 +37,6 @@ import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
public class InvocableHandlerInstrumentation extends AbstractSpring3Instrumentation {
public static final String ENHANCE_METHOD = "invokeForRequest";
- public static final String INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.spring.mvc.v3.InvokeForRequestInterceptor";
public static final String ENHANCE_CLASS = "org.springframework.web.method.support.InvocableHandlerMethod";
@Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
@@ -53,7 +53,7 @@ public class InvocableHandlerInstrumentation extends AbstractSpring3Instrumentat
@Override
public String getMethodsInterceptor() {
- return INTERCEPTOR_CLASS;
+ return INVOKE_FOR_REQUEST_INTERCEPTOR;
}
@Override
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java
index 678a6bdea..a36a71edd 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java
@@ -24,6 +24,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
import org.springframework.web.bind.annotation.RequestMapping;
import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerMethodInterceptorTest.java
deleted file mode 100644
index e971815b4..000000000
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/ControllerMethodInterceptorTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright 2017, OpenSkywalking Organization All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Project repository: https://github.com/OpenSkywalking/skywalking
- */
-
-package org.skywalking.apm.plugin.spring.mvc.v3;
-
-import java.lang.reflect.Method;
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-import org.skywalking.apm.agent.core.context.SW3CarrierItem;
-import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
-import org.skywalking.apm.agent.core.context.trace.LogDataEntity;
-import org.skywalking.apm.agent.core.context.trace.SpanLayer;
-import org.skywalking.apm.agent.core.context.trace.TraceSegment;
-import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef;
-import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
-import org.skywalking.apm.agent.test.helper.SegmentHelper;
-import org.skywalking.apm.agent.test.helper.SegmentRefHelper;
-import org.skywalking.apm.agent.test.helper.SpanHelper;
-import org.skywalking.apm.agent.test.tools.AgentServiceRule;
-import org.skywalking.apm.agent.test.tools.SegmentStorage;
-import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
-import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
-import org.skywalking.apm.network.trace.component.ComponentsDefine;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.context.request.NativeWebRequest;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
-import static org.powermock.api.mockito.PowerMockito.when;
-import static org.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
-import static org.skywalking.apm.agent.test.tools.SpanAssert.assertException;
-import static org.skywalking.apm.agent.test.tools.SpanAssert.assertLayer;
-import static org.skywalking.apm.agent.test.tools.SpanAssert.assertTag;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({RequestContextHolder.class, ServletRequestAttributes.class})
-public class ControllerMethodInterceptorTest {
-
- @SegmentStoragePoint
- private SegmentStorage segmentStorage;
-
- @Rule
- public AgentServiceRule serviceRule = new AgentServiceRule();
-
- @Mock
- private EnhancedInstance enhancedInstance;
- @Mock
- private NativeWebRequest nativeWebRequest;
- @Mock
- private HttpServletResponse httpServletResponse;
- @Mock
- private ServletRequestAttributes servletRequestAttributes;
- @Mock
- private HttpServletRequest httpServletRequest;
-
- private Method method;
-
- private EnhanceRequireObjectCache enhanceRequireObjectCache;
- private ControllerMethodInterceptor controllerMethodInterceptor;
-
- @Before
- public void setUp() throws NoSuchMethodException {
- controllerMethodInterceptor = new ControllerMethodInterceptor();
- enhanceRequireObjectCache = new EnhanceRequireObjectCache();
- enhanceRequireObjectCache.setPathMappingCache(new PathMappingCache("/test"));
- method = ControllerMethodInterceptorTest.class.getDeclaredMethod("mockControllerService");
- enhanceRequireObjectCache.addPathMapping(method, "/test");
-
- enhanceRequireObjectCache.setNativeWebRequest(nativeWebRequest);
- enhanceRequireObjectCache.setPathMappingCache(new PathMappingCache("/test"));
-
- mockStatic(RequestContextHolder.class);
- when(servletRequestAttributes.getRequest()).thenReturn(httpServletRequest);
- when(nativeWebRequest.getNativeResponse()).thenReturn(httpServletResponse);
- when(enhancedInstance.getSkyWalkingDynamicField()).thenReturn(enhanceRequireObjectCache);
- when(RequestContextHolder.getRequestAttributes()).thenReturn(servletRequestAttributes);
- when(httpServletRequest.getMethod()).thenReturn("GET");
- when(httpServletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080/skywalking-test/test"));
- }
-
- @Test
- public void testWithoutSerializedContextData() throws Throwable {
- controllerMethodInterceptor.beforeMethod(enhancedInstance, method, null, null, null);
- controllerMethodInterceptor.afterMethod(enhancedInstance, method, null, null, null);
-
- assertThat(segmentStorage.getTraceSegments().size(), is(1));
- TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
-
- List spans = SegmentHelper.getSpans(traceSegment);
- assertThat(spans.size(), is(1));
- assertRequestSpan(spans.get(0));
- }
-
- @Test
- public void testWithSerializedContextData() throws Throwable {
- Mockito.when(httpServletRequest.getHeader(SW3CarrierItem.HEADER_NAME)).thenReturn("1.234.111|3|1|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*");
-
- controllerMethodInterceptor.beforeMethod(enhancedInstance, method, null, null, null);
- controllerMethodInterceptor.afterMethod(enhancedInstance, method, null, null, null);
-
- assertThat(segmentStorage.getTraceSegments().size(), is(1));
- TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
-
- List spans = SegmentHelper.getSpans(traceSegment);
- assertThat(spans.size(), is(1));
- assertRequestSpan(spans.get(0));
-
- List traceSegmentRefs = traceSegment.getRefs();
- assertThat(traceSegmentRefs.size(), is(1));
- assertTraceSegmentRef(traceSegmentRefs.get(0));
- }
-
- @Test
- public void testOccurException() throws Throwable {
- controllerMethodInterceptor.beforeMethod(enhancedInstance, method, null, null, null);
- controllerMethodInterceptor.handleMethodException(enhancedInstance, method, null, null, new RuntimeException());
- controllerMethodInterceptor.afterMethod(enhancedInstance, method, null, null, null);
-
- assertThat(segmentStorage.getTraceSegments().size(), is(1));
- TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
-
- List spans = SegmentHelper.getSpans(traceSegment);
- assertThat(spans.size(), is(1));
- assertRequestSpan(spans.get(0));
-
- List logDataEntities = SpanHelper.getLogs(spans.get(0));
- assertThat(logDataEntities.size(), is(1));
- assertException(logDataEntities.get(0), RuntimeException.class);
- }
-
- private void assertTraceSegmentRef(TraceSegmentRef ref) {
- assertThat(SegmentRefHelper.getEntryApplicationInstanceId(ref), is(1));
- assertThat(SegmentRefHelper.getSpanId(ref), is(3));
- assertThat(SegmentRefHelper.getTraceSegmentId(ref).toString(), is("1.234.111"));
- }
-
- private void assertRequestSpan(AbstractTracingSpan span) {
- assertThat(span.getOperationName(), is("/test/test"));
- assertComponent(span, ComponentsDefine.SPRING_MVC_ANNOTATION);
- assertTag(span, 0, "http://localhost:8080/skywalking-test/test");
- assertThat(span.isEntry(), is(true));
- assertLayer(span, SpanLayer.HTTP);
- }
-
- @RequestMapping("/test")
- public void mockControllerService() {
-
- }
-}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java
index d5b73d0b1..6dc0fd067 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java
@@ -25,6 +25,8 @@ import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.interceptor.GetBeanInterceptor;
import org.springframework.web.context.request.NativeWebRequest;
import static org.mockito.Mockito.times;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/InvokeForRequestInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/InvokeForRequestInterceptorTest.java
index 5cd45920a..b9bc6055a 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/InvokeForRequestInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v3/InvokeForRequestInterceptorTest.java
@@ -25,6 +25,7 @@ import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.skywalking.apm.plugin.spring.mvc.commons.interceptor.InvokeForRequestInterceptor;
import org.springframework.web.context.request.NativeWebRequest;
import static org.mockito.Mockito.times;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml
index 90f78f650..fba3f1480 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml
@@ -21,7 +21,7 @@
spring-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -50,5 +50,11 @@
3.0.1
provided
+
+ org.skywalking
+ apm-springmvc-annotation-commons
+ ${project.version}
+ provided
+
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java
index 83f72c466..1a79730f3 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptor.java
@@ -20,6 +20,8 @@ package org.skywalking.apm.plugin.spring.mvc.v4;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
+import org.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
import org.springframework.web.bind.annotation.RequestMapping;
/**
@@ -48,7 +50,8 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte
basePath = basePathRequestMapping.path()[0];
}
}
- PathMappingCache pathMappingCache = new PathMappingCache(basePath);
- objInst.setSkyWalkingDynamicField(pathMappingCache);
+ EnhanceRequireObjectCache enhanceRequireObjectCache = new EnhanceRequireObjectCache();
+ enhanceRequireObjectCache.setPathMappingCache(new PathMappingCache(basePath));
+ objInst.setSkyWalkingDynamicField(enhanceRequireObjectCache);
}
}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/AbstractControllerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/AbstractControllerInstrumentation.java
index e8259aec3..c0f224588 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/AbstractControllerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/AbstractControllerInstrumentation.java
@@ -22,13 +22,14 @@ import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
-import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.any;
import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static org.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.byClassAnnotationMatch;
+import static org.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_MAPPING_METHOD_INTERCEPTOR;
+import static org.skywalking.apm.plugin.spring.mvc.commons.Constants.REST_MAPPING_METHOD_INTERCEPTOR;
/**
* {@link ControllerInstrumentation} enhance all constructor and method annotated with
@@ -45,7 +46,7 @@ import static org.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.by
*
* @author zhangxin
*/
-public abstract class AbstractControllerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+public abstract class AbstractControllerInstrumentation extends AbstractSpring4Instrumentation {
@Override
protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
return new ConstructorInterceptPoint[] {
@@ -74,7 +75,7 @@ public abstract class AbstractControllerInstrumentation extends ClassInstanceMet
@Override
public String getMethodsInterceptor() {
- return "org.skywalking.apm.plugin.spring.mvc.v4.RequestMappingMethodInterceptor";
+ return REQUEST_MAPPING_METHOD_INTERCEPTOR;
}
@Override
@@ -94,7 +95,7 @@ public abstract class AbstractControllerInstrumentation extends ClassInstanceMet
@Override
public String getMethodsInterceptor() {
- return "org.skywalking.apm.plugin.spring.mvc.v4.RestMappingMethodInterceptor";
+ return REST_MAPPING_METHOD_INTERCEPTOR;
}
@Override
@@ -112,12 +113,4 @@ public abstract class AbstractControllerInstrumentation extends ClassInstanceMet
protected abstract String[] getEnhanceAnnotations();
- @Override protected String[] witnessClasses() {
- /**
- * @see {@link org.springframework.web.servlet.tags.ArgumentTag}
- */
- return new String[]{
- "org.springframework.web.servlet.tags.ArgumentTag"
- };
- }
}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/AbstractSpring4Instrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/AbstractSpring4Instrumentation.java
new file mode 100644
index 000000000..50ee39a55
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/AbstractSpring4Instrumentation.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.spring.mvc.v4.define;
+
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+
+public abstract class AbstractSpring4Instrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+ public static final String WITHNESS_CLASSES = "org.springframework.web.servlet.tags.ArgumentTag";
+
+ @Override
+ protected final String[] witnessClasses() {
+ return new String[] {WITHNESS_CLASSES};
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/HandlerMethodInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/HandlerMethodInstrumentation.java
new file mode 100644
index 000000000..51198dfc8
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/HandlerMethodInstrumentation.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.spring.mvc.v4.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+import static org.skywalking.apm.plugin.spring.mvc.commons.Constants.GET_BEAN_INTERCEPTOR;
+
+/**
+ * {@link HandlerMethodInstrumentation} intercept the getBean method in the
+ * org.springframework.web.method.HandlerMethod class.
+ *
+ * @author zhangxin
+ */
+public class HandlerMethodInstrumentation extends AbstractSpring4Instrumentation {
+
+ public static final String ENHANCE_METHOD = "getBean";
+ public static final String ENHANCE_CLASS = "org.springframework.web.method.HandlerMethod";
+
+ @Override
+ protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override
+ protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named(ENHANCE_METHOD);
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return GET_BEAN_INTERCEPTOR;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/InvocableHandlerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/InvocableHandlerInstrumentation.java
new file mode 100644
index 000000000..50704c80a
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/define/InvocableHandlerInstrumentation.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.spring.mvc.v4.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+import static org.skywalking.apm.plugin.spring.mvc.commons.Constants.INVOKE_FOR_REQUEST_INTERCEPTOR;
+
+/**
+ * {@link InvocableHandlerInstrumentation} intercept the invokeForRequest method in the
+ * org.springframework.web.method.support.InvocableHandlerMethod class.
+ *
+ * @author zhangxin
+ */
+public class InvocableHandlerInstrumentation extends AbstractSpring4Instrumentation {
+
+ public static final String ENHANCE_METHOD = "invokeForRequest";
+ public static final String ENHANCE_CLASS = "org.springframework.web.method.support.InvocableHandlerMethod";
+
+ @Override
+ protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override
+ protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override
+ public ElementMatcher getMethodsMatcher() {
+ return named(ENHANCE_METHOD);
+ }
+
+ @Override
+ public String getMethodsInterceptor() {
+ return INVOKE_FOR_REQUEST_INTERCEPTOR;
+ }
+
+ @Override
+ public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/resources/skywalking-plugin.def
index 9196c36f3..0cfc41c66 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/resources/skywalking-plugin.def
@@ -1,2 +1,4 @@
spring-mvc-annotation-4.x=org.skywalking.apm.plugin.spring.mvc.v4.define.ControllerInstrumentation
spring-mvc-annotation-4.x=org.skywalking.apm.plugin.spring.mvc.v4.define.RestControllerInstrumentation
+spring-mvc-annotation-4.x=org.skywalking.apm.plugin.spring.mvc.v4.define.HandlerMethodInstrumentation
+spring-mvc-annotation-4.x=org.skywalking.apm.plugin.spring.mvc.v4.define.InvocableHandlerInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
index 0e96121a0..d5bb84419 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
@@ -27,6 +27,7 @@ import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
import org.springframework.web.bind.annotation.RequestMapping;
@RunWith(PowerMockRunner.class)
@@ -45,7 +46,7 @@ public class ControllerConstructorInterceptorTest {
@Test
public void testOnConstruct_Accuracy1() throws Throwable {
controllerConstructorInterceptor.onConstruct(inst1, null);
- PathMappingCache cache = (PathMappingCache)inst1.getSkyWalkingDynamicField();
+ EnhanceRequireObjectCache cache = (EnhanceRequireObjectCache)inst1.getSkyWalkingDynamicField();
Assert.assertNotNull(cache);
Object obj = new Object();
@@ -58,7 +59,7 @@ public class ControllerConstructorInterceptorTest {
@Test
public void testOnConstruct_Accuracy2() throws Throwable {
controllerConstructorInterceptor.onConstruct(inst2, null);
- PathMappingCache cache = (PathMappingCache)inst2.getSkyWalkingDynamicField();
+ EnhanceRequireObjectCache cache = (EnhanceRequireObjectCache)inst2.getSkyWalkingDynamicField();
Assert.assertNotNull(cache);
Object obj = new Object();
@@ -71,7 +72,7 @@ public class ControllerConstructorInterceptorTest {
@Test
public void testOnConstruct_Accuracy3() throws Throwable {
controllerConstructorInterceptor.onConstruct(inst3, null);
- PathMappingCache cache = (PathMappingCache)inst3.getSkyWalkingDynamicField();
+ EnhanceRequireObjectCache cache = (EnhanceRequireObjectCache)inst3.getSkyWalkingDynamicField();
Assert.assertNotNull(cache);
Object obj = new Object();
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
index a0761b507..1f1f34dc6 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
@@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(TracingSegmentRunner.class)
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java
index 2ed195557..c534b93f9 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java
@@ -44,7 +44,11 @@ import org.skywalking.apm.agent.test.tools.SegmentStorage;
import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RequestMappingMethodInterceptor;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -84,6 +88,9 @@ public class RequestMappingMethodInterceptorTest {
private ControllerConstructorInterceptor controllerConstructorInterceptor;
+ @Mock
+ private NativeWebRequest nativeWebRequest;
+
@Before
public void setUp() throws Exception {
interceptor = new RequestMappingMethodInterceptor();
@@ -97,6 +104,7 @@ public class RequestMappingMethodInterceptorTest {
when(request.getRequestURI()).thenReturn("/test/testRequestURL");
when(request.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080/test/testRequestURL"));
when(response.getStatus()).thenReturn(200);
+ when(nativeWebRequest.getNativeResponse()).thenReturn(response);
arguments = new Object[] {request, response};
argumentType = new Class[] {request.getClass(), response.getClass()};
@@ -157,16 +165,18 @@ public class RequestMappingMethodInterceptorTest {
@RequestMapping(value = "/test")
private class MockEnhancedInstance1 implements EnhancedInstance {
- private Object value;
+ private EnhanceRequireObjectCache value = new EnhanceRequireObjectCache();
@Override
public Object getSkyWalkingDynamicField() {
+ value.setPathMappingCache(new PathMappingCache("/test"));
+ value.setNativeWebRequest(nativeWebRequest);
return value;
}
@Override
public void setSkyWalkingDynamicField(Object value) {
- this.value = value;
+
}
}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java
index 75db61abf..98b9603f1 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java
@@ -44,12 +44,16 @@ import org.skywalking.apm.agent.test.tools.SegmentStorage;
import org.skywalking.apm.agent.test.tools.SegmentStoragePoint;
import org.skywalking.apm.agent.test.tools.TracingSegmentRunner;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
+import org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RestMappingMethodInterceptor;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -80,6 +84,9 @@ public class RestMappingMethodInterceptorTest {
@Mock
private MethodInterceptResult methodInterceptResult;
+ @Mock
+ private NativeWebRequest nativeWebRequest;
+
private Object[] arguments;
private Class[] argumentType;
@@ -97,6 +104,7 @@ public class RestMappingMethodInterceptorTest {
when(request.getServerName()).thenReturn("localhost");
when(request.getServerPort()).thenReturn(8080);
when(response.getStatus()).thenReturn(200);
+ when(nativeWebRequest.getNativeResponse()).thenReturn(response);
arguments = new Object[] {request, response};
argumentType = new Class[] {request.getClass(), response.getClass()};
@@ -263,16 +271,17 @@ public class RestMappingMethodInterceptorTest {
@RequestMapping(value = "/test")
private class MockEnhancedInstance1 implements EnhancedInstance {
- private Object value;
+ private EnhanceRequireObjectCache value = new EnhanceRequireObjectCache();
@Override
public Object getSkyWalkingDynamicField() {
+ value.setPathMappingCache(new PathMappingCache("/test"));
+ value.setNativeWebRequest(nativeWebRequest);
return value;
}
@Override
public void setSkyWalkingDynamicField(Object value) {
- this.value = value;
}
}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java
index 1d245bb9c..8d99e4b33 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java
@@ -52,8 +52,8 @@ public class ControllerInstrumentationTest {
public void testGetInstanceMethodsInterceptPoints() throws Throwable {
InstanceMethodsInterceptPoint[] methodPoints = controllerInstrumentation.getInstanceMethodsInterceptPoints();
assertThat(methodPoints.length, is(2));
- assertThat(methodPoints[0].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.v4.RequestMappingMethodInterceptor"));
- assertThat(methodPoints[1].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.v4.RestMappingMethodInterceptor"));
+ assertThat(methodPoints[0].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RequestMappingMethodInterceptor"));
+ assertThat(methodPoints[1].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RestMappingMethodInterceptor"));
Assert.assertFalse(methodPoints[0].isOverrideArgs());
Assert.assertFalse(methodPoints[1].isOverrideArgs());
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java
index c67fa6978..7939dd626 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java
@@ -50,8 +50,8 @@ public class RestControllerInstrumentationTest {
public void testGetInstanceMethodsInterceptPoints() throws Throwable {
InstanceMethodsInterceptPoint[] methodPoints = restControllerInstrumentation.getInstanceMethodsInterceptPoints();
assertThat(methodPoints.length, is(2));
- assertThat(methodPoints[0].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.v4.RequestMappingMethodInterceptor"));
- assertThat(methodPoints[1].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.v4.RestMappingMethodInterceptor"));
+ assertThat(methodPoints[0].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RequestMappingMethodInterceptor"));
+ assertThat(methodPoints[1].getMethodsInterceptor(), is("org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RestMappingMethodInterceptor"));
Assert.assertFalse(methodPoints[0].isOverrideArgs());
Assert.assertFalse(methodPoints[1].isOverrideArgs());
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/pom.xml
new file mode 100644
index 000000000..36f4afd40
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/pom.xml
@@ -0,0 +1,54 @@
+
+
+
+
+ spring-plugins
+ org.skywalking
+ 5.0-2018-preview
+
+ 4.0.0
+
+ apm-springmvc-annotation-commons
+ jar
+
+ mvc-annotation-commons
+ http://maven.apache.org
+
+
+
+ org.springframework
+ spring-core
+ 4.3.10.RELEASE
+ provided
+
+
+ org.springframework
+ spring-webmvc
+ 4.3.8.RELEASE
+ provided
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.0.1
+ provided
+
+
+
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/Constants.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/Constants.java
new file mode 100644
index 000000000..3f89eef1e
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/Constants.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.spring.mvc.commons;
+
+/**
+ * Interceptor class name constant variables
+ *
+ * @author zhangxin
+ */
+public class Constants {
+ public static final String GET_BEAN_INTERCEPTOR = "org.skywalking.apm.plugin.spring.mvc.commons.interceptor.GetBeanInterceptor";
+
+ public static final String INVOKE_FOR_REQUEST_INTERCEPTOR = "org.skywalking.apm.plugin.spring.mvc.commons.interceptor.InvokeForRequestInterceptor";
+
+ public static final String REQUEST_MAPPING_METHOD_INTERCEPTOR = "org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RequestMappingMethodInterceptor";
+
+ public static final String REST_MAPPING_METHOD_INTERCEPTOR = "org.skywalking.apm.plugin.spring.mvc.commons.interceptor.RestMappingMethodInterceptor";
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/EnhanceRequireObjectCache.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java
similarity index 96%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/EnhanceRequireObjectCache.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java
index eb92f4848..2547b49bd 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/EnhanceRequireObjectCache.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java
@@ -16,7 +16,7 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v3;
+package org.skywalking.apm.plugin.spring.mvc.commons;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletResponse;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/PathMappingCache.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/PathMappingCache.java
similarity index 96%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/PathMappingCache.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/PathMappingCache.java
index 5c732ce2c..698ff6864 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/PathMappingCache.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/PathMappingCache.java
@@ -16,7 +16,7 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v3;
+package org.skywalking.apm.plugin.spring.mvc.commons;
import java.lang.reflect.Method;
import java.util.concurrent.ConcurrentHashMap;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/AbstractMethodInteceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInteceptor.java
similarity index 90%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/AbstractMethodInteceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInteceptor.java
index 62f02b6cf..0c8ecfa92 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/AbstractMethodInteceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInteceptor.java
@@ -16,7 +16,7 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v4;
+package org.skywalking.apm.plugin.spring.mvc.commons.interceptor;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
@@ -31,6 +31,7 @@ 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.spring.mvc.commons.EnhanceRequireObjectCache;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -43,7 +44,7 @@ public abstract class AbstractMethodInteceptor implements InstanceMethodsAroundI
@Override
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
MethodInterceptResult result) throws Throwable {
- PathMappingCache pathMappingCache = (PathMappingCache)objInst.getSkyWalkingDynamicField();
+ EnhanceRequireObjectCache pathMappingCache = (EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField();
String requestURL = pathMappingCache.findPathMapping(method);
if (requestURL == null) {
requestURL = getRequestURL(method);
@@ -70,7 +71,7 @@ public abstract class AbstractMethodInteceptor implements InstanceMethodsAroundI
@Override
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
Object ret) throws Throwable {
- HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
+ HttpServletResponse response = ((EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField()).getHttpServletResponse();
AbstractSpan span = ContextManager.activeSpan();
if (response.getStatus() >= 400) {
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java
similarity index 93%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java
index 7a771458a..7bfac0f2d 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java
@@ -16,12 +16,13 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v3;
+package org.skywalking.apm.plugin.spring.mvc.commons.interceptor;
import java.lang.reflect.Method;
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.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
import org.springframework.web.context.request.NativeWebRequest;
/**
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/InvokeForRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java
similarity index 96%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/InvokeForRequestInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java
index cc7cde4c7..846c0ac04 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/InvokeForRequestInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java
@@ -16,14 +16,15 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v3;
+package org.skywalking.apm.plugin.spring.mvc.commons.interceptor;
-import java.lang.reflect.Method;
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.springframework.web.context.request.NativeWebRequest;
+import java.lang.reflect.Method;
+
/**
* {@link InvokeForRequestInterceptor} pass the {@link NativeWebRequest} object into the {@link
* org.springframework.stereotype.Controller} object.
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/RequestMappingMethodInterceptor.java
similarity index 95%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/RequestMappingMethodInterceptor.java
index 4b1bdd4e5..1ecc8e2ae 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/RequestMappingMethodInterceptor.java
@@ -16,7 +16,7 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v4;
+package org.skywalking.apm.plugin.spring.mvc.commons.interceptor;
import java.lang.reflect.Method;
import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/RestMappingMethodInterceptor.java
similarity index 98%
rename from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptor.java
rename to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/RestMappingMethodInterceptor.java
index 571098b9e..9242d5bbb 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/skywalking/apm/plugin/spring/mvc/commons/interceptor/RestMappingMethodInterceptor.java
@@ -16,7 +16,7 @@
* Project repository: https://github.com/OpenSkywalking/skywalking
*/
-package org.skywalking.apm.plugin.spring.mvc.v4;
+package org.skywalking.apm.plugin.spring.mvc.commons.interceptor;
import java.lang.reflect.Method;
import org.springframework.web.bind.annotation.DeleteMapping;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml
index d6f934a5b..135278fe5 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
spring-plugins
@@ -35,6 +35,7 @@
spring-cloud
mvc-annotation-3.x-plugin
core-patch
+ mvc-annotation-commons
pom
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
index 53a8eeeba..1c625e9da 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
@@ -21,7 +21,7 @@
spring-plugins
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml
index dd289f4ef..afbfdf781 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
spring-cloud
- 3.3.0-2017
+ 5.0-2018-preview
netflix-plugins
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml
index 232969584..459a24fe0 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
netflix-plugins
- 3.3.0-2017
+ 5.0-2018-preview
apm-spring-cloud-feign-1.x-plugin
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml
index 9ba620471..d914c9283 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
spring-plugins
- 3.3.0-2017
+ 5.0-2018-preview
spring-cloud
diff --git a/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml
index 730981614..3a4f6818f 100644
--- a/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml
@@ -24,7 +24,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
apm-spymemcached-2.x-plugin
diff --git a/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml
index d832876eb..426f8b8bf 100644
--- a/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
@@ -65,6 +65,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml
index 8452dee90..50a750796 100644
--- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml
@@ -21,7 +21,7 @@
apm-sdk-plugin
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml
index 4e43bdb77..1025dd7df 100644
--- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml
@@ -23,7 +23,7 @@
org.skywalking
apm-sdk-plugin
- 3.3.0-2017
+ 5.0-2018-preview
apm-xmemcached-2.x-plugin
diff --git a/apm-sniffer/apm-test-tools/pom.xml b/apm-sniffer/apm-test-tools/pom.xml
index a8438029a..2d1fe357b 100644
--- a/apm-sniffer/apm-test-tools/pom.xml
+++ b/apm-sniffer/apm-test-tools/pom.xml
@@ -23,7 +23,7 @@
org.skywalking
apm-sniffer
- 3.3.0-2017
+ 5.0-2018-preview
apm-test-tools
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml
index 734621e65..fa3211700 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml
@@ -23,7 +23,7 @@
apm-toolkit-activation
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml
index 88cab4baf..b976f1ff6 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml
@@ -23,7 +23,7 @@
apm-toolkit-activation
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml
index a7ba9cd07..ff7c83ed2 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml
@@ -23,7 +23,7 @@
apm-toolkit-activation
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml
index 550a18432..97ee98e24 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml
@@ -23,7 +23,7 @@
apm-toolkit-activation
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml
index 4e1a3854f..0e079aeec 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml
@@ -23,7 +23,7 @@
apm-toolkit-activation
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/apm-sniffer/apm-toolkit-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/pom.xml
index eac10ee37..e66dc1570 100644
--- a/apm-sniffer/apm-toolkit-activation/pom.xml
+++ b/apm-sniffer/apm-toolkit-activation/pom.xml
@@ -23,7 +23,7 @@
apm-sniffer
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
pom
diff --git a/apm-sniffer/pom.xml b/apm-sniffer/pom.xml
index bdefb2570..09ed53288 100644
--- a/apm-sniffer/pom.xml
+++ b/apm-sniffer/pom.xml
@@ -23,7 +23,7 @@
apm
org.skywalking
- 3.3.0-2017
+ 5.0-2018-preview
4.0.0
diff --git a/docker-compose.yml b/docker-compose.yml
index 243f5fa2b..09db04f8e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,7 +1,7 @@
version: '2.1'
services:
skywalking-webui:
- image: skywalking/skywalking-ui:3.3.0-2017
+ image: skywalking/skywalking-ui:5.0-2018-preview
expose:
- "8080"
ports:
@@ -15,7 +15,7 @@ services:
- COLLECTOR_SERVERS=skywalking-collector:10800
skywalking-collector:
- image: skywalking/skywalking-collector:3.3.0-2017
+ image: skywalking/skywalking-collector:5.0-2018-preview
expose:
- "10800"
- "11800"
diff --git a/docs/Supported-list.md b/docs/Supported-list.md
index da388b973..54b5744dc 100644
--- a/docs/Supported-list.md
+++ b/docs/Supported-list.md
@@ -19,13 +19,15 @@
* Mysql Driver 5.x, 6.x
* Oracle Driver
* H2 Driver
- * [Sharding-JDBC 1.5.x](https://github.com/shardingjdbc/sharding-jdbc)
+ * [Sharding-JDBC](https://github.com/shardingjdbc/sharding-jdbc) 1.5.x
* PostgreSQL Driver 8.x, 9.x, 42.x
* RPC Frameworks
* [Dubbo](https://github.com/alibaba/dubbo) 2.5.3
* [Dubbox](https://github.com/dangdangdotcom/dubbox) 2.8.4
* [Motan](https://github.com/weibocom/motan) 0.2
* [gRPC](https://github.com/grpc/grpc-java) 1.6+
+* MQ
+ * [RocketMQ](https://github.com/apache/rocketmq) 4.x
* NoSQL
* Redis
* [Jedis](https://github.com/xetorthio/jedis) 2.8
@@ -37,6 +39,8 @@
* [Netflix Eureka](https://github.com/Netflix/eureka)
* Spring Ecosystem
* Spring Core Async SuccessCallback/FailureCallback/ListenableFutureCallback 4.x
+* Scheduler
+ * [Elastic Job](https://github.com/elasticjob/elastic-job) 2.x
* OpenTracing community supported
* Motan
* Hprose-java
diff --git a/docs/_config.yml b/docs/_config.yml
deleted file mode 100644
index 18854876c..000000000
--- a/docs/_config.yml
+++ /dev/null
@@ -1 +0,0 @@
-theme: jekyll-theme-midnight
\ No newline at end of file
diff --git a/docs/cn/Plugin-Development-Guide-CN.md b/docs/cn/Plugin-Development-Guide-CN.md
index 63bede5d7..faba4c536 100644
--- a/docs/cn/Plugin-Development-Guide-CN.md
+++ b/docs/cn/Plugin-Development-Guide-CN.md
@@ -1,5 +1,5 @@
## 插件开发指南
-本文档描述 [v3.2+](https://github.com/OpenTracing/skywalking/releases) 插件开发方法、使用的API,以及注意事项。3.2版本将在2017 CNUTCon之前发布。
+本文档描述 [v3.2+](https://github.com/OpenTracing/skywalking/releases) 插件开发方法、使用的API,以及注意事项。
### 核心概念
#### 一. Span
@@ -273,4 +273,4 @@ public interface InstanceMethodsAroundInterceptor {
1. 完善注释和测试用例
1. 在本地打包进行集成测试
1. 提交Pull Request到 wu-sheng/sky-walking,提供插件追踪的截图(拓扑和Trace明细),可独立运行的被追踪程序、docker镜像或docker-compose。
-1. sky-walking PMC( Project Management Committee) 成员完成插件审核,确定发布版本,并合并到主仓库。
\ No newline at end of file
+1. sky-walking PMC( Project Management Committee) 成员完成插件审核,确定发布版本,并合并到主仓库。
diff --git a/pom.xml b/pom.xml
index 1f92cfceb..474da33be 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
org.skywalking
apm
- 3.3.0-2017
+ 5.0-2018-preview
@@ -252,6 +252,7 @@
attach-sources
+ none
jar