From e0979ceed7beb8caeadbef9681809a811571d82c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Wed, 11 Jul 2018 15:53:33 -0700 Subject: [PATCH 01/47] Update version to RC (#1446) * Change version --- .../apm-toolkit-log4j-1.x/pom.xml | 2 +- .../apm-toolkit-log4j-2.x/pom.xml | 2 +- .../apm-toolkit-logback-1.x/pom.xml | 2 +- .../apm-toolkit-opentracing/pom.xml | 2 +- apm-application-toolkit/apm-toolkit-trace/pom.xml | 2 +- apm-application-toolkit/pom.xml | 2 +- apm-checkstyle/pom.xml | 2 +- .../agent-grpc/agent-grpc-define/pom.xml | 5 ++--- .../agent-grpc/agent-grpc-provider/pom.xml | 5 ++--- .../apm-collector-agent/agent-grpc/pom.xml | 5 ++--- .../agent-jetty/agent-jetty-define/pom.xml | 5 ++--- .../agent-jetty/agent-jetty-provider/pom.xml | 5 ++--- .../apm-collector-agent/agent-jetty/pom.xml | 5 ++--- apm-collector/apm-collector-agent/pom.xml | 5 ++--- .../analysis-alarm/alarm-define/pom.xml | 5 ++--- .../analysis-alarm/alarm-provider/pom.xml | 5 ++--- .../apm-collector-analysis/analysis-alarm/pom.xml | 5 ++--- .../baseline-computing-define/pom.xml | 5 ++--- .../baseline-computing-provider/pom.xml | 5 ++--- .../analysis-baseline/pom.xml | 5 ++--- .../analysis-jvm/jvm-define/pom.xml | 5 ++--- .../analysis-jvm/jvm-provider/pom.xml | 5 ++--- .../apm-collector-analysis/analysis-jvm/pom.xml | 5 ++--- .../analysis-metric/metric-define/pom.xml | 5 ++--- .../analysis-metric/metric-provider/pom.xml | 5 ++--- .../apm-collector-analysis/analysis-metric/pom.xml | 5 ++--- .../analysis-register/pom.xml | 5 ++--- .../analysis-register/register-define/pom.xml | 5 ++--- .../analysis-register/register-provider/pom.xml | 5 ++--- .../analysis-segment-parser/pom.xml | 5 ++--- .../segment-parser-define/pom.xml | 5 ++--- .../segment-parser-provider/pom.xml | 5 ++--- .../analysis-worker-model/pom.xml | 5 ++--- apm-collector/apm-collector-analysis/pom.xml | 5 ++--- apm-collector/apm-collector-boot/pom.xml | 5 ++--- .../collector-cache-caffeine-provider/pom.xml | 6 ++---- .../collector-cache-define/pom.xml | 5 ++--- .../collector-cache-guava-provider/pom.xml | 5 ++--- apm-collector/apm-collector-cache/pom.xml | 5 ++--- .../collector-cluster-define/pom.xml | 5 ++--- .../collector-cluster-redis-provider/pom.xml | 5 ++--- .../collector-cluster-standalone-provider/pom.xml | 5 ++--- .../collector-cluster-zookeeper-provider/pom.xml | 5 ++--- apm-collector/apm-collector-cluster/pom.xml | 5 ++--- .../client-component/pom.xml | 5 ++--- apm-collector/apm-collector-component/pom.xml | 5 ++--- .../server-component/pom.xml | 5 ++--- .../collector-configuration-define/pom.xml | 5 ++--- .../collector-configuration-provider/pom.xml | 5 ++--- apm-collector/apm-collector-configuration/pom.xml | 5 ++--- apm-collector/apm-collector-core/pom.xml | 5 ++--- .../collector-grpc-manager-define/pom.xml | 5 ++--- .../collector-grpc-manager-provider/pom.xml | 5 ++--- apm-collector/apm-collector-grpc-manager/pom.xml | 5 ++--- apm-collector/apm-collector-instrument/pom.xml | 8 +++----- .../collector-jetty-manager-define/pom.xml | 5 ++--- .../collector-jetty-manager-provider/pom.xml | 5 ++--- apm-collector/apm-collector-jetty-manager/pom.xml | 5 ++--- .../collector-naming-define/pom.xml | 5 ++--- .../collector-naming-jetty-provider/pom.xml | 5 ++--- apm-collector/apm-collector-naming/pom.xml | 5 ++--- .../collector-remote-define/pom.xml | 5 ++--- .../collector-remote-grpc-provider/pom.xml | 5 ++--- .../collector-remote-kafka-provider/pom.xml | 5 ++--- apm-collector/apm-collector-remote/pom.xml | 5 ++--- .../collector-storage-define/pom.xml | 5 ++--- .../collector-storage-es-provider/pom.xml | 5 ++--- .../collector-storage-h2-provider/pom.xml | 5 ++--- .../collector-storage-shardingjdbc-provider/pom.xml | 5 ++--- apm-collector/apm-collector-storage/pom.xml | 5 ++--- .../apm-collector-thirdparty-receiver/pom.xml | 6 ++---- .../receiver-zipkin/pom.xml | 6 ++---- .../receiver-zipkin/receiver-zipkin-define/pom.xml | 6 ++---- .../receiver-zipkin-provider/pom.xml | 6 ++---- .../apm-collector-ui/collector-ui-define/pom.xml | 5 ++--- .../apm-collector-ui/collector-ui-graphql/pom.xml | 5 ++--- .../collector-ui-jetty-provider/pom.xml | 5 ++--- .../collector/ui/service/ServiceNameService.java | 2 +- apm-collector/apm-collector-ui/pom.xml | 5 ++--- apm-collector/pom.xml | 5 ++--- apm-commons/apm-datacarrier/pom.xml | 2 +- apm-commons/apm-util/pom.xml | 2 +- apm-commons/pom.xml | 2 +- apm-dist/pom.xml | 13 ++++--------- apm-protocol/apm-network/pom.xml | 2 +- apm-protocol/apm-ui-protocol/pom.xml | 2 +- apm-protocol/pom.xml | 2 +- apm-sniffer/apm-agent-core/pom.xml | 8 ++++---- apm-sniffer/apm-agent/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml | 2 +- .../apm-sdk-plugin/elastic-job-2.x-plugin/pom.xml | 2 +- .../feign-default-http-9.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/httpClient-4.x-plugin/pom.xml | 2 +- .../httpasyncclient-4.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/hystrix-1.x-plugin/pom.xml | 6 ++---- apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml | 2 +- .../jetty-plugin/jetty-client-9.0-plugin/pom.xml | 2 +- .../jetty-plugin/jetty-client-9.x-plugin/pom.xml | 2 +- .../jetty-plugin/jetty-server-9.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/pom.xml | 2 +- .../apm-sdk-plugin/mongodb-2.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/mongodb-3.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml | 2 +- .../nutz-plugins/http-1.x-plugin/pom.xml | 2 +- .../nutz-plugins/mvc-annotation-1.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml | 2 +- .../apm-sdk-plugin/okhttp-3.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/oracle-10.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/pom.xml | 2 +- .../apm-sdk-plugin/postgresql-8.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/servicecomb-plugin/pom.xml | 6 ++---- .../servicecomb-java-chassis-0.x-plugin/pom.xml | 6 ++---- .../servicecomb-java-chassis-1.x-plugin/pom.xml | 6 ++---- .../sharding-jdbc-1.5.x-plugin/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml | 2 +- .../concurrent-util-4.x-plugin/pom.xml | 2 +- .../spring-plugins/core-patch/pom.xml | 2 +- .../mvc-annotation-3.x-plugin/pom.xml | 2 +- .../mvc-annotation-4.x-plugin/pom.xml | 2 +- .../spring-plugins/mvc-annotation-commons/pom.xml | 2 +- apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml | 2 +- .../spring-plugins/resttemplate-4.x-plugin/pom.xml | 2 +- .../spring-cloud/netflix-plugins/pom.xml | 2 +- .../spring-cloud-feign-1.x-plugin/pom.xml | 2 +- .../spring-plugins/spring-cloud/pom.xml | 2 +- .../apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/struts2-2.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml | 2 +- .../apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml | 2 +- apm-sniffer/apm-test-tools/pom.xml | 2 +- .../apm-toolkit-log4j-1.x-activation/pom.xml | 2 +- .../apm-toolkit-log4j-2.x-activation/pom.xml | 2 +- .../apm-toolkit-logback-1.x-activation/pom.xml | 2 +- .../apm-toolkit-opentracing-activation/pom.xml | 2 +- .../apm-toolkit-trace-activation/pom.xml | 2 +- apm-sniffer/apm-toolkit-activation/pom.xml | 2 +- .../optional-spring-plugins/pom.xml | 2 +- .../spring-annotation-plugin/pom.xml | 2 +- apm-sniffer/optional-plugins/pom.xml | 2 +- .../optional-plugins/trace-ignore-plugin/pom.xml | 5 ++--- apm-sniffer/pom.xml | 2 +- apm-webapp/pom.xml | 6 ++---- pom.xml | 2 +- 152 files changed, 237 insertions(+), 331 deletions(-) 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 9197f5753..bedd53ae8 100644 --- a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml @@ -21,7 +21,7 @@ apm-application-toolkit org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 eac70f3e4..d2ae4a721 100644 --- a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml @@ -21,7 +21,7 @@ apm-application-toolkit org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 63ac3c574..ab623fe11 100644 --- a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml @@ -21,7 +21,7 @@ apm-application-toolkit org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml index db3d4204c..7e59a691d 100644 --- a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml +++ b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml @@ -21,7 +21,7 @@ apm-application-toolkit org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-application-toolkit/apm-toolkit-trace/pom.xml b/apm-application-toolkit/apm-toolkit-trace/pom.xml index ad28aaead..e109cadbe 100644 --- a/apm-application-toolkit/apm-toolkit-trace/pom.xml +++ b/apm-application-toolkit/apm-toolkit-trace/pom.xml @@ -20,7 +20,7 @@ apm-application-toolkit org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-application-toolkit/pom.xml b/apm-application-toolkit/pom.xml index a91447da9..602622fff 100644 --- a/apm-application-toolkit/pom.xml +++ b/apm-application-toolkit/pom.xml @@ -20,7 +20,7 @@ apm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 apm-application-toolkit diff --git a/apm-checkstyle/pom.xml b/apm-checkstyle/pom.xml index 387be9e97..c6ee3475b 100644 --- a/apm-checkstyle/pom.xml +++ b/apm-checkstyle/pom.xml @@ -27,7 +27,7 @@ org.apache.skywalking apm-checkstyle - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT Module to hold Checkstyle for SkyWalking. diff --git a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-define/pom.xml b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-define/pom.xml index fa4ca292a..da8a55cfe 100644 --- a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-define/pom.xml +++ b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + agent-grpc org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/pom.xml b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/pom.xml index cd496ff97..8ec04729c 100644 --- a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/pom.xml +++ b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + agent-grpc org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-agent/agent-grpc/pom.xml b/apm-collector/apm-collector-agent/agent-grpc/pom.xml index 0c1af60b7..4e1490e3f 100644 --- a/apm-collector/apm-collector-agent/agent-grpc/pom.xml +++ b/apm-collector/apm-collector-agent/agent-grpc/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-agent org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-define/pom.xml b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-define/pom.xml index bd17d9c96..106bb02c2 100644 --- a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-define/pom.xml +++ b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + agent-jetty org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/pom.xml b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/pom.xml index 0220db32b..fbaa77c35 100644 --- a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/pom.xml +++ b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + agent-jetty org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-agent/agent-jetty/pom.xml b/apm-collector/apm-collector-agent/agent-jetty/pom.xml index 1dffb9b41..72b3963c2 100644 --- a/apm-collector/apm-collector-agent/agent-jetty/pom.xml +++ b/apm-collector/apm-collector-agent/agent-jetty/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-agent org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-agent/pom.xml b/apm-collector/apm-collector-agent/pom.xml index b515d74c4..89ca6227e 100644 --- a/apm-collector/apm-collector-agent/pom.xml +++ b/apm-collector/apm-collector-agent/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-define/pom.xml b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-define/pom.xml index 665532c11..f403a2165 100644 --- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-define/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-alarm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml index 8977b1126..9bf1a1e2d 100644 --- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-alarm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/pom.xml b/apm-collector/apm-collector-analysis/analysis-alarm/pom.xml index 5e358053f..f34432bbb 100644 --- a/apm-collector/apm-collector-analysis/analysis-alarm/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-alarm/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-analysis org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-define/pom.xml b/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-define/pom.xml index b8633afb0..7469dfb45 100644 --- a/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-define/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-baseline org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-provider/pom.xml b/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-provider/pom.xml index a0b586d0e..c7761ac35 100644 --- a/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-provider/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-baseline org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-baseline/pom.xml b/apm-collector/apm-collector-analysis/analysis-baseline/pom.xml index 232f1f621..b560e3d53 100644 --- a/apm-collector/apm-collector-analysis/analysis-baseline/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-baseline/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-analysis org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-jvm/jvm-define/pom.xml b/apm-collector/apm-collector-analysis/analysis-jvm/jvm-define/pom.xml index fd19cedbb..5e5a14142 100644 --- a/apm-collector/apm-collector-analysis/analysis-jvm/jvm-define/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-jvm/jvm-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-jvm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-jvm/jvm-provider/pom.xml b/apm-collector/apm-collector-analysis/analysis-jvm/jvm-provider/pom.xml index 937dc27d9..847daf4e7 100644 --- a/apm-collector/apm-collector-analysis/analysis-jvm/jvm-provider/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-jvm/jvm-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-jvm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-jvm/pom.xml b/apm-collector/apm-collector-analysis/analysis-jvm/pom.xml index 1a00f4c9d..2165fef36 100644 --- a/apm-collector/apm-collector-analysis/analysis-jvm/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-jvm/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-analysis org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-define/pom.xml b/apm-collector/apm-collector-analysis/analysis-metric/metric-define/pom.xml index 31bb45964..e40380a30 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-define/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-metric org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/pom.xml b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/pom.xml index 6d44b3e46..c10265d3c 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-metric org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-metric/pom.xml b/apm-collector/apm-collector-analysis/analysis-metric/pom.xml index bb4ac9bb1..cf947b25e 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-metric/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-analysis org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-register/pom.xml b/apm-collector/apm-collector-analysis/analysis-register/pom.xml index d961e9127..bcf9081be 100644 --- a/apm-collector/apm-collector-analysis/analysis-register/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-register/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-analysis org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-register/register-define/pom.xml b/apm-collector/apm-collector-analysis/analysis-register/register-define/pom.xml index b20b6eedb..05bdfb34a 100644 --- a/apm-collector/apm-collector-analysis/analysis-register/register-define/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-register/register-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-register org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-register/register-provider/pom.xml b/apm-collector/apm-collector-analysis/analysis-register/register-provider/pom.xml index 1d30145ae..6cc2fb047 100644 --- a/apm-collector/apm-collector-analysis/analysis-register/register-provider/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-register/register-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-register org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/pom.xml b/apm-collector/apm-collector-analysis/analysis-segment-parser/pom.xml index 39c87b2f2..e6efc9d9e 100644 --- a/apm-collector/apm-collector-analysis/analysis-segment-parser/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-analysis org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/pom.xml b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/pom.xml index 877302999..3b334a1f2 100644 --- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-segment-parser org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/pom.xml b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/pom.xml index f24047aa4..02ba6898c 100644 --- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + analysis-segment-parser org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/analysis-worker-model/pom.xml b/apm-collector/apm-collector-analysis/analysis-worker-model/pom.xml index 3721107b0..390f78441 100644 --- a/apm-collector/apm-collector-analysis/analysis-worker-model/pom.xml +++ b/apm-collector/apm-collector-analysis/analysis-worker-model/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-analysis org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-analysis/pom.xml b/apm-collector/apm-collector-analysis/pom.xml index caf6ece13..614b17390 100644 --- a/apm-collector/apm-collector-analysis/pom.xml +++ b/apm-collector/apm-collector-analysis/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-boot/pom.xml b/apm-collector/apm-collector-boot/pom.xml index 6a06ebc16..29d27671f 100644 --- a/apm-collector/apm-collector-boot/pom.xml +++ b/apm-collector/apm-collector-boot/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-cache/collector-cache-caffeine-provider/pom.xml b/apm-collector/apm-collector-cache/collector-cache-caffeine-provider/pom.xml index 46343a81f..ee07fc8ff 100644 --- a/apm-collector/apm-collector-cache/collector-cache-caffeine-provider/pom.xml +++ b/apm-collector/apm-collector-cache/collector-cache-caffeine-provider/pom.xml @@ -17,13 +17,11 @@ ~ --> - + apm-collector-cache org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 37aa17b3a..6283bf7d5 100644 --- a/apm-collector/apm-collector-cache/collector-cache-define/pom.xml +++ b/apm-collector/apm-collector-cache/collector-cache-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-cache org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 d8f69c853..d962bb6ba 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-cache org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-cache/pom.xml b/apm-collector/apm-collector-cache/pom.xml index 5e81fd886..4bbcdf2b3 100644 --- a/apm-collector/apm-collector-cache/pom.xml +++ b/apm-collector/apm-collector-cache/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 fe95fac89..e6ff34f05 100644 --- a/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml +++ b/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-cluster org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 270c575cc..3f5fee2f3 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-cluster org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 271ac6697..f9ea86907 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-cluster org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 08a648d56..00601d6bd 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-cluster org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-cluster/pom.xml b/apm-collector/apm-collector-cluster/pom.xml index 640a46ea1..756e3ac07 100644 --- a/apm-collector/apm-collector-cluster/pom.xml +++ b/apm-collector/apm-collector-cluster/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-component/client-component/pom.xml b/apm-collector/apm-collector-component/client-component/pom.xml index 25cf79e08..2f5a1b99c 100644 --- a/apm-collector/apm-collector-component/client-component/pom.xml +++ b/apm-collector/apm-collector-component/client-component/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-component org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-component/pom.xml b/apm-collector/apm-collector-component/pom.xml index 1d1961a03..ad69a5c3b 100644 --- a/apm-collector/apm-collector-component/pom.xml +++ b/apm-collector/apm-collector-component/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 ff6a6a07e..e59a097a2 100644 --- a/apm-collector/apm-collector-component/server-component/pom.xml +++ b/apm-collector/apm-collector-component/server-component/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-component org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-configuration/collector-configuration-define/pom.xml b/apm-collector/apm-collector-configuration/collector-configuration-define/pom.xml index 3e045acce..376ca7f49 100644 --- a/apm-collector/apm-collector-configuration/collector-configuration-define/pom.xml +++ b/apm-collector/apm-collector-configuration/collector-configuration-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-configuration org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-configuration/collector-configuration-provider/pom.xml b/apm-collector/apm-collector-configuration/collector-configuration-provider/pom.xml index 572c3dd40..3057dc235 100644 --- a/apm-collector/apm-collector-configuration/collector-configuration-provider/pom.xml +++ b/apm-collector/apm-collector-configuration/collector-configuration-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-configuration org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-configuration/pom.xml b/apm-collector/apm-collector-configuration/pom.xml index 1d531310e..ac116b8c7 100644 --- a/apm-collector/apm-collector-configuration/pom.xml +++ b/apm-collector/apm-collector-configuration/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-core/pom.xml b/apm-collector/apm-collector-core/pom.xml index 57e5ec7a6..3cd685f1a 100644 --- a/apm-collector/apm-collector-core/pom.xml +++ b/apm-collector/apm-collector-core/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 935e0ea69..7fd1e41d3 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-grpc-manager org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 dcd3ea47b..f4946c899 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-grpc-manager org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-grpc-manager/pom.xml b/apm-collector/apm-collector-grpc-manager/pom.xml index bfcbfa7b8..63e1ddb46 100644 --- a/apm-collector/apm-collector-grpc-manager/pom.xml +++ b/apm-collector/apm-collector-grpc-manager/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-instrument/pom.xml b/apm-collector/apm-collector-instrument/pom.xml index 94f99d607..a868e3a2b 100644 --- a/apm-collector/apm-collector-instrument/pom.xml +++ b/apm-collector/apm-collector-instrument/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 @@ -60,8 +59,7 @@ true true - + org.apache.skywalking.apm.collector.instrument.CollectorInstrumentAgent 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 4278bf19b..6c7da7a00 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-jetty-manager org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 36de0c362..10141204b 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-jetty-manager org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-jetty-manager/pom.xml b/apm-collector/apm-collector-jetty-manager/pom.xml index f3ab2e05b..8a9b5b212 100644 --- a/apm-collector/apm-collector-jetty-manager/pom.xml +++ b/apm-collector/apm-collector-jetty-manager/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 64f09cadc..a6277657c 100644 --- a/apm-collector/apm-collector-naming/collector-naming-define/pom.xml +++ b/apm-collector/apm-collector-naming/collector-naming-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-naming org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 47ada00fb..3fa0b1dd8 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-naming org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-naming/pom.xml b/apm-collector/apm-collector-naming/pom.xml index bb1b5ab50..bc7e38771 100644 --- a/apm-collector/apm-collector-naming/pom.xml +++ b/apm-collector/apm-collector-naming/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 6ffe7dda8..42edfa518 100644 --- a/apm-collector/apm-collector-remote/collector-remote-define/pom.xml +++ b/apm-collector/apm-collector-remote/collector-remote-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-remote org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 310a954c9..51830a798 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-remote org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 7e314da48..9c7f33e8b 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-remote org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-remote/pom.xml b/apm-collector/apm-collector-remote/pom.xml index 5f81043a8..b7fe70293 100644 --- a/apm-collector/apm-collector-remote/pom.xml +++ b/apm-collector/apm-collector-remote/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 a47eaaadd..580f6da46 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/pom.xml +++ b/apm-collector/apm-collector-storage/collector-storage-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-storage org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 b96607af0..3724356ad 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-storage org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 b933596b2..6e8d78c0b 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-storage org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml index 35133a522..aa13264cb 100644 --- a/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml +++ b/apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-storage org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-storage/pom.xml b/apm-collector/apm-collector-storage/pom.xml index 215abc100..7859470e4 100644 --- a/apm-collector/apm-collector-storage/pom.xml +++ b/apm-collector/apm-collector-storage/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-thirdparty-receiver/pom.xml b/apm-collector/apm-collector-thirdparty-receiver/pom.xml index 46264676d..996131667 100644 --- a/apm-collector/apm-collector-thirdparty-receiver/pom.xml +++ b/apm-collector/apm-collector-thirdparty-receiver/pom.xml @@ -17,13 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/pom.xml b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/pom.xml index 4ed7017b1..2768ae8d9 100644 --- a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/pom.xml +++ b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/pom.xml @@ -17,13 +17,11 @@ ~ --> - + apm-collector-thirdparty-receiver org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-define/pom.xml b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-define/pom.xml index e7d1282c3..706411e5c 100644 --- a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-define/pom.xml +++ b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-define/pom.xml @@ -17,13 +17,11 @@ ~ --> - + receiver-zipkin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/pom.xml b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/pom.xml index 816a14b1b..f94a30602 100644 --- a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/pom.xml +++ b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/pom.xml @@ -17,13 +17,11 @@ ~ --> - + receiver-zipkin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 2ca9ac29e..0f092fed4 100644 --- a/apm-collector/apm-collector-ui/collector-ui-define/pom.xml +++ b/apm-collector/apm-collector-ui/collector-ui-define/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-ui org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-ui/collector-ui-graphql/pom.xml b/apm-collector/apm-collector-ui/collector-ui-graphql/pom.xml index b9733094e..dcd1e4d5a 100644 --- a/apm-collector/apm-collector-ui/collector-ui-graphql/pom.xml +++ b/apm-collector/apm-collector-ui/collector-ui-graphql/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector-ui org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 5f35e75ae..aca079a29 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 @@ -17,12 +17,11 @@ ~ --> - + apm-collector-ui org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java index 8f2fa22a1..fe9aaba84 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java @@ -77,7 +77,7 @@ public class ServiceNameService { private long startTimeMillis() { int minuteMetricDataTTL = configService.minuteMetricDataTTL(); - return System.currentTimeMillis() - minuteMetricDataTTL * 60 * 60 * 100; + return System.currentTimeMillis() - minuteMetricDataTTL * 60 * 1000; } public ThroughputTrend getServiceThroughputTrend(int serviceId, Step step, long startTimeBucket, diff --git a/apm-collector/apm-collector-ui/pom.xml b/apm-collector/apm-collector-ui/pom.xml index 38be3754a..5d8c6f621 100644 --- a/apm-collector/apm-collector-ui/pom.xml +++ b/apm-collector/apm-collector-ui/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm-collector org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-collector/pom.xml b/apm-collector/pom.xml index 11beffb00..1d898ba53 100644 --- a/apm-collector/pom.xml +++ b/apm-collector/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-commons/apm-datacarrier/pom.xml b/apm-commons/apm-datacarrier/pom.xml index 8b93765e0..7b7112351 100644 --- a/apm-commons/apm-datacarrier/pom.xml +++ b/apm-commons/apm-datacarrier/pom.xml @@ -21,7 +21,7 @@ apm-commons org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-commons/apm-util/pom.xml b/apm-commons/apm-util/pom.xml index fb8fc053f..1ee3b676c 100644 --- a/apm-commons/apm-util/pom.xml +++ b/apm-commons/apm-util/pom.xml @@ -20,7 +20,7 @@ apm-commons org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-commons/pom.xml b/apm-commons/pom.xml index 16ab311da..76f8b1289 100644 --- a/apm-commons/pom.xml +++ b/apm-commons/pom.xml @@ -20,7 +20,7 @@ apm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-dist/pom.xml b/apm-dist/pom.xml index 1dd461bd9..0d2631e20 100644 --- a/apm-dist/pom.xml +++ b/apm-dist/pom.xml @@ -17,12 +17,11 @@ ~ --> - + apm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 @@ -84,12 +83,8 @@ - - + + diff --git a/apm-protocol/apm-network/pom.xml b/apm-protocol/apm-network/pom.xml index 50aac7c6a..56a554dc3 100644 --- a/apm-protocol/apm-network/pom.xml +++ b/apm-protocol/apm-network/pom.xml @@ -21,7 +21,7 @@ apm-protocol org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-protocol/apm-ui-protocol/pom.xml b/apm-protocol/apm-ui-protocol/pom.xml index 80ec7eea6..48b42cd19 100644 --- a/apm-protocol/apm-ui-protocol/pom.xml +++ b/apm-protocol/apm-ui-protocol/pom.xml @@ -21,7 +21,7 @@ apm-protocol org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-protocol/pom.xml b/apm-protocol/pom.xml index 4a52db39c..cbddc48ea 100644 --- a/apm-protocol/pom.xml +++ b/apm-protocol/pom.xml @@ -21,7 +21,7 @@ apm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml index c01184f01..569cfc806 100644 --- a/apm-sniffer/apm-agent-core/pom.xml +++ b/apm-sniffer/apm-agent-core/pom.xml @@ -22,7 +22,7 @@ org.apache.skywalking apm-sniffer - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-agent-core @@ -227,9 +227,9 @@ - - - + + + diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml index 9b5e4be71..dba932c66 100644 --- a/apm-sniffer/apm-agent/pom.xml +++ b/apm-sniffer/apm-agent/pom.xml @@ -22,7 +22,7 @@ org.apache.skywalking apm-sniffer - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 ea18d4930..16300f693 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 index 05fc7b393..26b29fbaf 100644 --- 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 @@ -21,7 +21,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 31f8ebe17..5a28b7c46 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 @@ -21,7 +21,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 625ef3f4e..c2ccbba2d 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 @@ -22,7 +22,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-grpc-1.x-plugin 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 3acc2a1b5..4ca2db1d2 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 @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 e076fb939..8ab3a636e 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 @@ -22,7 +22,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-httpClient-4.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml index 170c96c1c..45345ec70 100644 --- a/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml @@ -22,7 +22,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-httpasyncclient-4.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml index 22558b56e..87367bc0e 100644 --- a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml @@ -17,13 +17,11 @@ ~ --> - + apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml index e5d3c64b7..bf1597d87 100755 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 376edfa74..108f22d4e 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 @@ -22,7 +22,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-jedis-2.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/pom.xml index 8da9efcbb..84daf12ec 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/pom.xml @@ -20,7 +20,7 @@ jetty-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 c6d898fbf..8814ff185 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 @@ -20,7 +20,7 @@ jetty-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 51dfe4ba8..ba02b52b5 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 @@ -20,7 +20,7 @@ jetty-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 a4e0bccbb..e17a30bdd 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml @@ -23,7 +23,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT jetty-plugins diff --git a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/pom.xml index 93f4791f2..0af713b90 100644 --- a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 652416d9c..62969d81d 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 @@ -21,7 +21,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 8773019de..b4b9b66f5 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 @@ -21,7 +21,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-mongodb-3.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml index a176b12ad..cf6a5e314 100644 --- a/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 831a12c2e..04b40b998 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 @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 825433752..58a60f200 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 @@ -20,7 +20,7 @@ nutz-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 f21003bf3..6becd07d8 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 @@ -20,7 +20,7 @@ nutz-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 08ac7a6b3..c8436616a 100644 --- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml @@ -23,7 +23,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 aee12010b..841a855fd 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 @@ -21,7 +21,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 49e347596..6400261cd 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.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-beta2 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index e9f49b257..06a7b61a6 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -23,7 +23,7 @@ org.apache.skywalking apm-sniffer - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-sdk-plugin 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 ed9c326ac..5d7990e2a 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 @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 b4a564e7e..89660de28 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.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-beta2 apm-resin-3.x-plugin 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 16d04c0a2..b52fb1767 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.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-beta2 apm-resin-4.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml index c6321ea25..da0585973 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 index c7fd8a546..3d5028332 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/pom.xml index ba93d2e8a..82d533905 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/pom.xml @@ -17,13 +17,11 @@ ~ --> - + apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml index c9c8e58d2..01cc9acbe 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml @@ -17,13 +17,11 @@ ~ --> - + servicecomb-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml index 82741f498..39ab9419f 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml @@ -17,13 +17,11 @@ ~ --> - + servicecomb-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 b16367e0f..caeca2b5f 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 @@ -21,7 +21,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml index 33e4a528f..cd1f97dbc 100644 --- a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 97d828196..afa3bf43c 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 @@ -20,7 +20,7 @@ spring-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 76c2e2c28..0fb2f92dc 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 @@ -21,7 +21,7 @@ spring-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 45233077a..246f7cf25 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 @@ -20,7 +20,7 @@ spring-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 cbb0fcbea..117b1bfc3 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 @@ -20,7 +20,7 @@ spring-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 index 0819e17fd..222f67e83 100644 --- 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 @@ -20,7 +20,7 @@ spring-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml index 554fe685f..4bb1fb85a 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml @@ -23,7 +23,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT spring-plugins 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 b03de5807..6c642c025 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 @@ -20,7 +20,7 @@ spring-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 95f18f023..c1962da20 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 @@ -23,7 +23,7 @@ org.apache.skywalking spring-cloud - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 611249478..49d114fe3 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 @@ -23,7 +23,7 @@ org.apache.skywalking netflix-plugins - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 d2eef6a20..929e0e9d5 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 @@ -23,7 +23,7 @@ org.apache.skywalking spring-plugins - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 f66174fb1..a3951b46d 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 @@ -22,7 +22,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 266af0333..5703b9637 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 @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 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 cd6d4a846..8ab292ed5 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 @@ -20,7 +20,7 @@ apm-sdk-plugin org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 f6f7e68fd..ecf0d632b 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 @@ -21,7 +21,7 @@ org.apache.skywalking apm-sdk-plugin - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT apm-xmemcached-2.x-plugin diff --git a/apm-sniffer/apm-test-tools/pom.xml b/apm-sniffer/apm-test-tools/pom.xml index 88fb2eb0a..75d647fca 100644 --- a/apm-sniffer/apm-test-tools/pom.xml +++ b/apm-sniffer/apm-test-tools/pom.xml @@ -22,7 +22,7 @@ org.apache.skywalking apm-sniffer - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 d458b40e3..1b4dd3a20 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 @@ -21,7 +21,7 @@ apm-toolkit-activation org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 73d358ac8..c279e6e6e 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 @@ -21,7 +21,7 @@ apm-toolkit-activation org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 c385526ab..f285ea072 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 @@ -21,7 +21,7 @@ apm-toolkit-activation org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 6f880449d..5e68778b1 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 @@ -21,7 +21,7 @@ apm-toolkit-activation org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 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 7c026122a..4ff12c35a 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 @@ -21,7 +21,7 @@ apm-toolkit-activation org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/apm-toolkit-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/pom.xml index 46f232944..346463816 100644 --- a/apm-sniffer/apm-toolkit-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/pom.xml @@ -21,7 +21,7 @@ apm-sniffer org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 pom diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml b/apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml index bf573e83b..7f01cfacb 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml @@ -21,7 +21,7 @@ optional-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 pom diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml index dc8c4a902..6506a4f2d 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml @@ -21,7 +21,7 @@ optional-spring-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 jar diff --git a/apm-sniffer/optional-plugins/pom.xml b/apm-sniffer/optional-plugins/pom.xml index bd56ad773..977cd111f 100644 --- a/apm-sniffer/optional-plugins/pom.xml +++ b/apm-sniffer/optional-plugins/pom.xml @@ -21,7 +21,7 @@ apm-sniffer org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml b/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml index e92d681fc..feaffe9da 100644 --- a/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml +++ b/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml @@ -16,12 +16,11 @@ ~ --> - + optional-plugins org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-sniffer/pom.xml b/apm-sniffer/pom.xml index aa0aadeee..08c0a3ebb 100644 --- a/apm-sniffer/pom.xml +++ b/apm-sniffer/pom.xml @@ -21,7 +21,7 @@ apm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/apm-webapp/pom.xml b/apm-webapp/pom.xml index 9e171c418..3ec2a8d19 100644 --- a/apm-webapp/pom.xml +++ b/apm-webapp/pom.xml @@ -17,13 +17,11 @@ ~ --> - + apm org.apache.skywalking - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index aa5668a62..f25824190 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ org.apache.skywalking apm - 5.0.0-beta2-SNAPSHOT + 5.0.0-RC-SNAPSHOT org.apache From 1584eae6eb854774b44bf3b63b089f948258fe3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Wed, 11 Jul 2018 23:29:00 -0700 Subject: [PATCH 02/47] Update README.md (#1443) Add an announcement for 6.0 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e2b20d93a..996584115 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,9 @@ including: - [**Incubating**] Support accepting other tracer data formats. - Zipkin JSON, Thrift, Protobuf v1 and v2 formats, powered by [OpenZipkin](https://github.com/openzipkin/zipkin) libs - Jaeger in [Zipkin Thrift or JSON v1/v2 formats](https://github.com/jaegertracing/jaeger#backwards-compatibility-with-zipkin) + +# Announcement +After SkyWalking 5.0.0-beta2 released, all core features have been provided. For 5 series, we are trying to make them stable from now. At the same time, we have already begun our works for 6 series, in branch `6.0`. It will be a long way to have the first alpha release for it. So if you want to take part in the challengeable works, welcome, but don't consider to use that. Please read the [6.0 documents](https://github.com/apache/incubator-skywalking/blob/6.0/docs/README.md) first. # Document - [Documents in English](docs/README.md) From 86bb1c05e420b8e11ab137775fc0a0f0790cb28e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Thu, 12 Jul 2018 18:05:56 -0700 Subject: [PATCH 03/47] Add words in two License files. (#1450) --- LICENSE | 10 ++++++++++ apm-dist/release-docs/LICENSE | 1 + 2 files changed, 11 insertions(+) diff --git a/LICENSE b/LICENSE index 8dada3eda..8ae4ae55a 100644 --- a/LICENSE +++ b/LICENSE @@ -199,3 +199,13 @@ 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. + + ======================================================================= + Apache SkyWalking Subcomponents: + + The Apache SkyWalking project contains subcomponents with separate copyright + notices and license terms. Your use of the source code for the these + subcomponents is subject to the terms and conditions of the following + licenses. + + iconfont(from antd): https://github.com/ant-design/antd-init/tree/master/examples/local-iconfont MIT diff --git a/apm-dist/release-docs/LICENSE b/apm-dist/release-docs/LICENSE index 33a61371e..623bc1c9f 100644 --- a/apm-dist/release-docs/LICENSE +++ b/apm-dist/release-docs/LICENSE @@ -378,6 +378,7 @@ MIT licenses antv/data-set 0.8.6: https://github.com/antvis/data-set MIT add-dom-event-listener 1.0.2: https://github.com/yiminghe/add-dom-event-listener MIT antd 3.2.2: https://github.com/ant-design/ant-design MIT +iconfont(from antd): https://github.com/ant-design/antd-init/tree/master/examples/local-iconfont MIT ant-design-pro 1.3.0: https://github.com/ant-design/ant-design-pro MIT , declare license in package.json only. async-validator 1.8.2: https://github.com/yiminghe/async-validator MIT babel/polyfill 7.0.0-beta.42: https://github.com/babel/babel/tree/master/packages/babel-polyfill MIT , declare license in package.json only. From 6b99abffff801cc7bfd6ce32919329b1acb0bd8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Thu, 12 Jul 2018 22:48:37 -0700 Subject: [PATCH 04/47] [Agent] Apache http client plugin bug (#1448) (#1452) * #1447 Fixed the after method interceptor for the apache http client NPE error when the response is null cause by the doExecute method throw a exception. --- .../v4/HttpClientExecuteInterceptor.java | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java index 3688e390d..5d2cf2908 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java @@ -18,23 +18,14 @@ package org.apache.skywalking.apm.plugin.httpClient.v4; -import org.apache.http.HttpHost; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.skywalking.apm.agent.core.context.CarrierItem; -import org.apache.skywalking.apm.agent.core.context.ContextCarrier; -import org.apache.skywalking.apm.agent.core.context.ContextManager; -import org.apache.skywalking.apm.agent.core.context.tag.Tags; -import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; -import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; - import java.lang.reflect.Method; import java.net.URL; +import org.apache.http.*; +import org.apache.skywalking.apm.agent.core.context.*; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; +import org.apache.skywalking.apm.agent.core.context.trace.*; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.*; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterceptor { @@ -73,16 +64,19 @@ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterc return ret; } - HttpResponse response = (HttpResponse)ret; - StatusLine responseStatusLine = response.getStatusLine(); - if (responseStatusLine != null) { - int statusCode = responseStatusLine.getStatusCode(); - AbstractSpan span = ContextManager.activeSpan(); - if (statusCode >= 400) { - span.errorOccurred(); - Tags.STATUS_CODE.set(span, Integer.toString(statusCode)); + if (ret != null) { + HttpResponse response = (HttpResponse)ret; + StatusLine responseStatusLine = response.getStatusLine(); + if (responseStatusLine != null) { + int statusCode = responseStatusLine.getStatusCode(); + AbstractSpan span = ContextManager.activeSpan(); + if (statusCode >= 400) { + span.errorOccurred(); + Tags.STATUS_CODE.set(span, Integer.toString(statusCode)); + } } } + ContextManager.stopSpan(); return ret; } From 44fc3e0742549d1916094b9292e59c05618d1084 Mon Sep 17 00:00:00 2001 From: xinzhuxiansheng Date: Sat, 14 Jul 2018 14:22:50 +0800 Subject: [PATCH 05/47] Adjust and modify the catalog and doc under Supported-list.md (#1445) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * first commit * ad * add * add * add * add * add * add * add * add * add * add * add * 调整和修改中间件,框架与类库支持列表 目录文档 * add * add * 修改Incubating * add --- .../optional-plugins/trace-ignore-plugin/README_CN.md | 3 +-- docs/README_ZH.md | 11 ++++++++--- docs/cn/Optional-plugins-CN.md | 5 ----- .../Oracle-Resin-plugins-CN.md | 11 +++++++++++ .../Spring-bean-plugins-CN.md | 7 +++++++ 5 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 docs/cn/agent-optional-plugins-CN/Oracle-Resin-plugins-CN.md create mode 100644 docs/cn/agent-optional-plugins-CN/Spring-bean-plugins-CN.md diff --git a/apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md b/apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md index cc555ac80..3a21bec87 100644 --- a/apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md +++ b/apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md @@ -3,12 +3,11 @@ ## 介绍 - 这个插件的作用是对追踪的个性化服务过滤. -- 你可以设置多个需要忽略的路径, 意味着包含这些路径的`追踪信息`不会被`agent`发送到 `collector`. +- 你可以设置多个需要忽略的URL路径, 意味着包含这些路径的`追踪信息`不会被`agent`发送到 `collector`. - 当前的路径匹配规则是 `Ant Path`匹配风格 , 例如 `/path/*`, `/path/**`, `/path/?`. - 将`apm-trace-ignore-plugin-x.jar`拷贝到`agent/plugins`后,重启探针即可生效 - [Skywalking-使用可选插件 apm-trace-ignore-plugin](https://blog.csdn.net/u013095337/article/details/80452088) 有详细使用介绍 - ## 如何配置路径 有两种配置方式,可使用任意一种,配置生效的优先级从高到低 1. 在系统环境变量中配置,你需要在系统变量中添加`skywalking.trace.ignore_path`, 值是你需要忽略的路径,多个以`,`号分隔 diff --git a/docs/README_ZH.md b/docs/README_ZH.md index 55230f195..823c822ac 100644 --- a/docs/README_ZH.md +++ b/docs/README_ZH.md @@ -5,9 +5,14 @@ * 快速入门 * [快速入门](cn/Quick-start-CN.md) - * [中间件,框架与类库支持列表](Supported-list.md) - * [如何关闭特定插件](cn/How-to-disable-plugin-CN.md) - * [可选插件](cn/Optional-plugins-CN.md) + * [部署 javaagent](cn/Deploy-skywalking-agent-CN.md) + * [集群模式部署](cn/Deploy-backend-in-cluster-mode-CN.md) + * [中间件,框架与类库支持列表](Supported-list.md) + * [如何关闭特定插件?](cn/How-to-disable-plugin-CN.md) + * [可选插件](cn/Optional-plugins-CN.md) + * [Spring beans 插件](cn/agent-optional-plugins-CN/Spring-bean-plugins-CN.md) + * [Oracle and Resin 插件](cn/agent-optional-plugins-CN/Oracle-Resin-plugins-CN.md) + * [[**孵化特性**] 自定义配置忽略追踪信息](../apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md) * 高级特性 * [通过系统启动参数进行覆盖配置](cn/Setting-override-CN.md) * [服务直连(Direct uplink)及禁用名称服务(naming service)](cn/Direct-uplink-CN.md) diff --git a/docs/cn/Optional-plugins-CN.md b/docs/cn/Optional-plugins-CN.md index fea89817f..fb2c0c86f 100644 --- a/docs/cn/Optional-plugins-CN.md +++ b/docs/cn/Optional-plugins-CN.md @@ -3,12 +3,7 @@ 为了使用这些插件,你需要自己编译源代码,或将某些插件复制到`/plugins`。 -## Spring bean 插件 -这个插件允许在Spring上下文中追踪带有`@Bean`、 `@Service`、`@Component`和`@Repository`注解的bean的所有方法。 -- 为什么这个插件是可选的? -在Spring上下文中追踪所有方法会创建很多的span,也会消耗更多的CPU,内存和网络。 -当然你希望包含尽可能多的span,但请确保你的系统有效负载能够支持这些。 ## Oracle and Resin 插件 由于Oracle和Resin的License,这些插件无法在Apache发行版中提供。 diff --git a/docs/cn/agent-optional-plugins-CN/Oracle-Resin-plugins-CN.md b/docs/cn/agent-optional-plugins-CN/Oracle-Resin-plugins-CN.md new file mode 100644 index 000000000..1a86e7479 --- /dev/null +++ b/docs/cn/agent-optional-plugins-CN/Oracle-Resin-plugins-CN.md @@ -0,0 +1,11 @@ +## Oracle and Resin 插件 +由于Oracle和Resin的License,这些插件无法在Apache发行版中提供。 +如果你想了解详细信息,请阅读 [Apache license legal document](https://www.apache.org/legal/resolved.html) + +- 我们应该如何在本地构建这些可选插件? + +1. Resin 3: 下载Resin 3.0.9 并且把jar放在`/ci-dependencies/resin-3.0.9.jar`. +1. Resin 4: 下载Resin 4.0.41 并且把jar放在`/ci-dependencies/resin-4.0.41.jar`. +1. Oracle: 下载Oracle OJDBC-14 Driver 10.2.0.4.0 并且把jar放在`/ci-dependencies/ojdbc14-10.2.0.4.0.jar`. + +如果你找不到这些jar,请查看 [这里](https://github.com/OpenSkywalking/skywalking-ci-assist/tree/master/jars) diff --git a/docs/cn/agent-optional-plugins-CN/Spring-bean-plugins-CN.md b/docs/cn/agent-optional-plugins-CN/Spring-bean-plugins-CN.md new file mode 100644 index 000000000..b9da506d2 --- /dev/null +++ b/docs/cn/agent-optional-plugins-CN/Spring-bean-plugins-CN.md @@ -0,0 +1,7 @@ +## Spring bean 插件 +这个插件允许在Spring上下文中追踪带有`@Bean`、 `@Service`、`@Component`和`@Repository`注解的bean的所有方法。 + +- 为什么这个插件是可选的? + +在Spring上下文中追踪所有方法会创建很多的span,也会消耗更多的CPU,内存和网络。 +当然你希望包含尽可能多的span,但请确保你的系统有效负载能够支持这些。 From cc664175e29e7584960bf5b1f9eaa880602e4fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Mon, 16 Jul 2018 17:40:46 +0800 Subject: [PATCH 06/47] Update webappService.bat (#1460) Fix #1435 --- apm-dist/bin/webappService.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-dist/bin/webappService.bat b/apm-dist/bin/webappService.bat index 049164a8c..dbc324517 100644 --- a/apm-dist/bin/webappService.bat +++ b/apm-dist/bin/webappService.bat @@ -37,5 +37,5 @@ if not defined JAVA_HOME ( set _EXECJAVA=java ) -start "%WEBAPP_PROCESS_TITLE%" %_EXECJAVA% -jar %JARPATH%/skywalking-webapp.jar --spring.config.location=%JAR_PATH%/webapp.yml --logging.file=%LOG_FILE_LOCATION% +start "%WEBAPP_PROCESS_TITLE%" %_EXECJAVA% -jar %JARPATH%/skywalking-webapp.jar --spring.config.location=%JARPATH%/webapp.yml --logging.file=%LOG_FILE_LOCATION% endlocal From 7744911c32e7179ffdf6b9cbaed19ae019338fc6 Mon Sep 17 00:00:00 2001 From: "Jared.Tan" Date: Tue, 17 Jul 2018 12:36:20 +0800 Subject: [PATCH 07/47] Typo:fix some duplication problems in docs (#1465) * Typo:fix some duplication problems in docs * Update Direct-uplink-CN.md --- docs/cn/Direct-uplink-CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cn/Direct-uplink-CN.md b/docs/cn/Direct-uplink-CN.md index 096d570d5..60526f69c 100644 --- a/docs/cn/Direct-uplink-CN.md +++ b/docs/cn/Direct-uplink-CN.md @@ -19,7 +19,7 @@ 2. 在 `agent.config`中按照如下配置 ``` # Collector agent_gRPC/grpc 地址. -# 仅仅当不配置的"collector.servers"的时候生效,作为第二种配置地址选择. +# 当不配置"collector.servers"的时候,选择第二种配置地址生效. # 如果使用此配置,自动发现服务将无法使用,探针将直接使用此地址进行数据上报. # 仅仅当探针端无法连接到`collector`的集群 ip地址时,我们才推荐使用这种配置,比如: # 1. 探针和 `collector`在不同的私有云当中. From 630e62312ce1dc37d60780351d15f68ff47dd5f0 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Wed, 18 Jul 2018 10:19:35 +0800 Subject: [PATCH 08/47] Fix #1454: fix NPE issue about spring apo interceptor (#1467) --- .../apm/plugin/spring/patch/CreateAopProxyInterceptor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptor.java index 2186bc1b3..a7300e419 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptor.java @@ -44,7 +44,8 @@ public class CreateAopProxyInterceptor implements InstanceMethodsAroundIntercept Object ret) throws Throwable { AdvisedSupport advisedSupport = (AdvisedSupport)allArguments[0]; - if (EnhancedInstance.class.isAssignableFrom(advisedSupport.getTargetClass())) { + Class targetClass = advisedSupport.getTargetClass(); + if (targetClass != null && EnhancedInstance.class.isAssignableFrom(targetClass)) { return true; } return ret; From 06b6f0543854db4f5a238daa5ceea808f120fab1 Mon Sep 17 00:00:00 2001 From: mumu <84226733@qq.com> Date: Wed, 18 Jul 2018 11:10:56 +0800 Subject: [PATCH 09/47] Add how to build in eclipse (#1464) * Update How-to-build-CN.md --- docs/cn/How-to-build-CN.md | 75 ++++++++++++++++++++++++++++++++++++++ docs/en/How-to-build.md | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) diff --git a/docs/cn/How-to-build-CN.md b/docs/cn/How-to-build-CN.md index 461ca2d0f..f90e77505 100644 --- a/docs/cn/How-to-build-CN.md +++ b/docs/cn/How-to-build-CN.md @@ -28,6 +28,81 @@ 1. 设置gRPC的自动生成代码目录,为源码目录 - **apm-protocol/apm-network/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 - **apm-collector/apm-collector-remote/apm-remote-grpc-provider/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 + +## 在IntelliJ IDEA中编译工程 +上述步骤在命令行中,能够很好的编译工程,但导入到编译器中的工程依然会有一些报错,我们需要进行几步简单的操作。 +1. 在IntelliJ Terminal中,执行`mvn compile -Dmaven.test.skip=true`进行编译 +1. 设置gRPC的自动生成代码目录,为源码目录 + - **apm-protocol/apm-network/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 + - **apm-collector/apm-collector-remote/apm-remote-grpc-provider/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 + +## 在Eclipse IDE中编译工程 +1. 导入incubator-skywalking maven工程 +2. 在主目录incubator-skywalking/pom.xml文件中添加如下两个plugin配置,首先配置多源码目录支持,在build/plugins节点下添加如下配置: +``` + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + add-source + generate-sources + + add-source + + + + src/java/main + apm-protocol/apm-network/target/generated-sources/protobuf + apm-collector/apm-collector-remote/collector-remote-grpc-provider/target/generated-sources/protobuf + + + + + +``` +其次需要支持多source目录,但eclipse的m2e插件还没支持到execution,需要在在build节点下添加如下配置: +``` + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.codehaus.mojo + build-helper-maven-plugin + [1.8,) + + add-source + + + + + + + + + + ``` +3. 修改apm-collector-remote/collector-remote-grpc-provider/pom.xml文件,添加google guava的依赖 + ``` + + com.google.guava + guava + 24.0-jre + +``` +4. 执行`mvn compile -Dmaven.test.skip=true`进行编译 +5. 执行maven update,切记去掉勾选 Clean projects选项(会清掉complie生成的proto转化Java文件) +6. mvn compile 编译collector-remote-grpc-provider和apm-protocol工程并Refresh ## 编译Resin-3, Resin-4 和 Oracle JDBC 驱动插件 为了遵守Apache关于协议(License)的相关要求,不符合Apache相关要求的类库所对应的Plugin不会自动编译。如需编译对应的插件, diff --git a/docs/en/How-to-build.md b/docs/en/How-to-build.md index dbcef3979..06f187ac1 100644 --- a/docs/en/How-to-build.md +++ b/docs/en/How-to-build.md @@ -25,6 +25,75 @@ This document helps people to compile and build the project in your maven and se 1. Set **Generated Source Codes** folders. * `grpc-java` and `java` folders in **apm-protocol/apm-network/target/generated-sources/protobuf** * `grpc-java` and `java` folders in **apm-collector/apm-collector-remote/apm-remote-grpc-provider/target/generated-sources/protobuf** + +## Setup your Eclipse IDE +1. Import the project as a maven project +2. For supporting multiple source directories, you need to add the following configuration in `incubator-skywalking/pom.xml` file: +``` + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + add-source + generate-sources + + add-source + + + + src/java/main + apm-protocol/apm-network/target/generated-sources/protobuf + apm-collector/apm-collector-remote/collector-remote-grpc-provider/target/generated-sources/protobuf + + + + + +``` +3. Add the following configuration under to let eclipse's M2e plug-in supports execution's solution configuration +``` + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.codehaus.mojo + build-helper-maven-plugin + [1.8,) + + add-source + + + + + + + + + +``` +4. Adding Google guava dependency to apm-collector-remote/collector-remote-grpc-provider/pom.xml files +``` + + com.google.guava + guava + 24.0-jre + +``` +5. Run `mvn compile -Dmaven.test.skip=true` +6. Run `maven update`. Must remove the clean projects item before maven update(This will be clear the proto conversion Java file generated by the complie) +7. Run `mvn compile` complie collector-remote-grpc-provider and apm-protocol +8. Refresh project ## Building Resin-3, Resin-4, and OJDBC sdk plugins Due to license incompatibilities/restrictions these plugins under `apm-sniffer/apm-sdk-plugin/` are not built by default. From 1c3606a8328a795a1b4cf06db6f4cd95bb5f9a49 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Thu, 19 Jul 2018 07:21:49 +0800 Subject: [PATCH 10/47] Change the way to transmit the Request and Response (#1471) --- .../v3/HandlerMethodInvokerInterceptor.java | 6 ++-- .../spring/mvc/v3/GetBeanInterceptorTest.java | 8 +++++ .../RequestMappingMethodInterceptorTest.java | 4 +-- .../v4/RestMappingMethodInterceptorTest.java | 2 ++ .../spring/mvc/v4/SpringTestCaseHelper.java | 3 -- .../plugin/spring/mvc/commons/Constants.java | 4 --- .../commons/EnhanceRequireObjectCache.java | 23 +++++++++++++++ .../AbstractMethodInterceptor.java | 29 ++++++++++--------- .../interceptor/GetBeanInterceptor.java | 8 ++--- .../InvokeForRequestInterceptor.java | 9 ++---- .../InvokeHandlerMethodInterceptor.java | 9 ++---- 11 files changed, 60 insertions(+), 45 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java index 19f2f6e78..776904573 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java @@ -19,14 +19,12 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v3; import java.lang.reflect.Method; -import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.springframework.web.context.request.NativeWebRequest; -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; - /** * {@link HandlerMethodInvokerInterceptor} pass the {@link NativeWebRequest} object into the {@link * org.springframework.stereotype.Controller} object. @@ -39,7 +37,7 @@ public class HandlerMethodInvokerInterceptor implements InstanceMethodsAroundInt MethodInterceptResult result) throws Throwable { Object handler = allArguments[1]; if (handler instanceof EnhancedInstance) { - ContextManager.getRuntimeContext().put(RESPONSE_KEY_IN_RUNTIME_CONTEXT, ((NativeWebRequest)allArguments[2]).getNativeResponse()); + ((EnhanceRequireObjectCache)((EnhancedInstance)handler).getSkyWalkingDynamicField()).setNativeWebRequest((NativeWebRequest)allArguments[2]); } } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java index b4ec3f592..2eb525f04 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java @@ -61,4 +61,12 @@ public class GetBeanInterceptorTest { verify(enhanceRet, times(0)).setSkyWalkingDynamicField(Matchers.any()); } + + @Test + public void testResultIsEnhanceInstance() throws Throwable { + interceptor.afterMethod(enhancedInstance, null, null, null, enhanceRet); + + verify(enhanceRet, times(0)).setSkyWalkingDynamicField(Matchers.any()); + } + } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java index bedbae744..9d342d626 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java @@ -174,9 +174,9 @@ public class RequestMappingMethodInterceptorTest { @Override public Object getSkyWalkingDynamicField() { - value.setPathMappingCache(new PathMappingCache("/test")); - + value.setHttpResponse(response); + value.setNativeWebRequest(nativeWebRequest); return value; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java index ccff690c5..864872f9d 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java @@ -306,6 +306,8 @@ public class RestMappingMethodInterceptorTest { @Override public Object getSkyWalkingDynamicField() { value.setPathMappingCache(new PathMappingCache("/test")); + value.setHttpResponse(response); + value.setNativeWebRequest(nativeWebRequest); return value; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java index 34b257aeb..9940cd240 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java @@ -21,15 +21,12 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v4; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.skywalking.apm.agent.core.context.ContextManager; -import org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants; public final class SpringTestCaseHelper { public final static void createCaseHandler(HttpServletRequest request, HttpServletResponse response, CaseHandler a) throws Throwable { ContextManager.createLocalSpan("For-Test"); - ContextManager.getRuntimeContext().put(Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT, request); - ContextManager.getRuntimeContext().put(Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT, response); a.handleCase(); ContextManager.stopSpan(); } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java index 0b166ef04..91aaddb7c 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java @@ -34,10 +34,6 @@ public class Constants { public static final String HYSTRIX_COMMAND_ANNOTATION = "com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand"; - public static final String REQUEST_KEY_IN_RUNTIME_CONTEXT = "SW_REQUEST"; - - public static final String RESPONSE_KEY_IN_RUNTIME_CONTEXT = "SW_RESPONSE"; - public static final String ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT = "ISOLATE_STRATEGY"; public static final String FORWARD_REQUEST_FLAG = "SW_FORWARD_REQUEST_FLAG"; diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java index 8337591fb..cbadbfdab 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java @@ -18,15 +18,28 @@ package org.apache.skywalking.apm.plugin.spring.mvc.commons; +import org.springframework.web.context.request.NativeWebRequest; + +import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; public class EnhanceRequireObjectCache { private PathMappingCache pathMappingCache; + private ThreadLocal nativeWebRequest = new ThreadLocal(); + private ThreadLocal httpResponse = new ThreadLocal(); public void setPathMappingCache(PathMappingCache pathMappingCache) { this.pathMappingCache = pathMappingCache; } + public HttpServletResponse getHttpServletResponse() { + return httpResponse.get() == null ? (HttpServletResponse) nativeWebRequest.get().getNativeResponse() : httpResponse.get(); + } + + public void setNativeWebRequest(NativeWebRequest nativeWebRequest) { + this.nativeWebRequest.set(nativeWebRequest); + } + public String findPathMapping(Method method) { return pathMappingCache.findPathMapping(method); } @@ -38,4 +51,14 @@ public class EnhanceRequireObjectCache { public PathMappingCache getPathMappingCache() { return pathMappingCache; } + + public void setHttpResponse(HttpServletResponse httpResponse) { + this.httpResponse.set(httpResponse); + } + + public void clearRequestAndResponse() { + setNativeWebRequest(null); + setHttpResponse(null); + } + } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java index 4f9d9f2ba..5a5b14d5a 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java @@ -32,11 +32,11 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.FORWARD_REQUEST_FLAG; import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT; -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; /** * the abstract method inteceptor @@ -66,7 +66,7 @@ public abstract class AbstractMethodInterceptor implements InstanceMethodsAround } String hystrixIsolateStrategy = (String)ContextManager.getRuntimeContext().get(ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT); - HttpServletRequest request = (HttpServletRequest)ContextManager.getRuntimeContext().get(REQUEST_KEY_IN_RUNTIME_CONTEXT); + HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); if (hystrixIsolateStrategy != null) { ContextManager.createLocalSpan(requestURL); @@ -99,17 +99,20 @@ public abstract class AbstractMethodInterceptor implements InstanceMethodsAround } String hystrixIsolateStrategy = (String)ContextManager.getRuntimeContext().get(ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT); - HttpServletResponse response = (HttpServletResponse)ContextManager.getRuntimeContext().get(RESPONSE_KEY_IN_RUNTIME_CONTEXT); - - if (hystrixIsolateStrategy != null) { - ContextManager.stopSpan(); - } else if (response != null) { - AbstractSpan span = ContextManager.activeSpan(); - if (response.getStatus() >= 400) { - span.errorOccurred(); - Tags.STATUS_CODE.set(span, Integer.toString(response.getStatus())); + HttpServletResponse response = ((EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField()).getHttpServletResponse(); + try { + if (hystrixIsolateStrategy != null) { + ContextManager.stopSpan(); + } else if (response != null) { + AbstractSpan span = ContextManager.activeSpan(); + if (response.getStatus() >= 400) { + span.errorOccurred(); + Tags.STATUS_CODE.set(span, Integer.toString(response.getStatus())); + } + ContextManager.stopSpan(); } - ContextManager.stopSpan(); + } finally { + ((EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField()).clearRequestAndResponse(); } return ret; diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java index 613481fcd..9ea95132b 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java @@ -19,15 +19,11 @@ package org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor; import java.lang.reflect.Method; -import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.springframework.web.context.request.NativeWebRequest; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; /** * {@link GetBeanInterceptor} pass the {@link NativeWebRequest} object into the {@link @@ -45,7 +41,7 @@ public class GetBeanInterceptor implements InstanceMethodsAroundInterceptor { public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { if (ret instanceof EnhancedInstance) { - ContextManager.getRuntimeContext().put(REQUEST_KEY_IN_RUNTIME_CONTEXT, ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest()); + ((EnhanceRequireObjectCache)((EnhancedInstance)ret).getSkyWalkingDynamicField()).setNativeWebRequest((NativeWebRequest)objInst.getSkyWalkingDynamicField()); } return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java index f1762a934..1b3300e7b 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java @@ -16,19 +16,14 @@ * */ - package org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor; -import org.apache.skywalking.apm.agent.core.context.ContextManager; +import java.lang.reflect.Method; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.springframework.web.context.request.NativeWebRequest; -import java.lang.reflect.Method; - -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; - /** * {@link InvokeForRequestInterceptor} pass the {@link NativeWebRequest} object into the {@link * org.springframework.stereotype.Controller} object. @@ -39,7 +34,7 @@ public class InvokeForRequestInterceptor implements InstanceMethodsAroundInterce @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { - ContextManager.getRuntimeContext().put(RESPONSE_KEY_IN_RUNTIME_CONTEXT, ((NativeWebRequest)allArguments[0]).getNativeResponse()); + objInst.setSkyWalkingDynamicField(allArguments[0]); } @Override diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java index 33fbec273..b482a9426 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java @@ -19,21 +19,18 @@ package org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor; import java.lang.reflect.Method; -import org.apache.skywalking.apm.agent.core.context.ContextManager; +import javax.servlet.http.HttpServletResponse; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; - -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; +import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; public class InvokeHandlerMethodInterceptor implements InstanceMethodsAroundInterceptor { @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { if (allArguments[2] instanceof EnhancedInstance) { - ContextManager.getRuntimeContext().put(RESPONSE_KEY_IN_RUNTIME_CONTEXT, allArguments[1]); - ContextManager.getRuntimeContext().put(REQUEST_KEY_IN_RUNTIME_CONTEXT, allArguments[0]); + ((EnhanceRequireObjectCache)((EnhancedInstance)allArguments[2]).getSkyWalkingDynamicField()).setHttpResponse((HttpServletResponse)allArguments[1]); } } From 8635fd3bc60bb0e99acc276c2b57b39cfb9d5588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E6=B4=8B?= Date: Tue, 24 Jul 2018 09:17:59 +0800 Subject: [PATCH 11/47] Add Component-libraries-extend-CN.md (#1487) --- docs/README_ZH.md | 1 + docs/cn/Component-libraries-extend-CN.md | 59 ++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 docs/cn/Component-libraries-extend-CN.md diff --git a/docs/README_ZH.md b/docs/README_ZH.md index 823c822ac..a698e6e75 100644 --- a/docs/README_ZH.md +++ b/docs/README_ZH.md @@ -19,6 +19,7 @@ * [开启TLS](cn/TLS-CN.md) * [命名空间隔离](cn/Namespace-CN.md) * [基于Token认证](cn/Token-auth-CN.md) + * [添加自定义组件库](cn/Component-libraries-extend-CN.md) * 孵化特性 * [个性化服务过滤](../apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md) * [使用Shardingjdbc作为存储实现](cn/Use-ShardingJDBC-as-storage-implementor-CN.md) diff --git a/docs/cn/Component-libraries-extend-CN.md b/docs/cn/Component-libraries-extend-CN.md new file mode 100644 index 000000000..7ec9f2e28 --- /dev/null +++ b/docs/cn/Component-libraries-extend-CN.md @@ -0,0 +1,59 @@ +# 组件库设置 +组件库设置的作用是将自定义或第三方库添加到组件库中,并监听应用程序 + +在agent和SDK中,ID或者name都可以定义库的身份标识(例如 SpringMVC),不过collector对ID类型做了格式化数据处理,性能方面有所提高,存储占用更少 + +此外,collector会根据组件库的依赖包去推测远程服务名称,例如: 若MySQL驱动库作为组件库,那collector会推测远程服务为Mysql服务 + +针对这两个原因,collector需要在文件中添加两个地方的配置 +1. 组件库ID,名称和开发语言. +1. 基于本地库的远程服务映射. + +**必须要在文件中定义所有组件名称和ID** + +## 组件库id +被监控的应用程序中所定义的组件库的名称和ID,它们提供了双向映射,在agent或者SDK可以使用ID来表示上行链路数据的组件名称. + +- name: 组件名称 +- id: 唯一标识 +- languages: 组件的开发语言,若包含多个开发语言,请用`,`分割 + +### ID的保留规则 +- Java及多语言共享区间: (0, 3000] +- .NET平台保留区间: (3000, 4000] +- Node.js保留区间: (4000, 5000] +- Go 保留区间: (5000, 6000] +- PHP 保留区间: (6000, 7000] + +示例 +```yaml +Tomcat: + id: 1 + languages: Java +HttpClient: + id: 2 + languages: Java,C#,Node.js +Dubbo: + id: 3 + languages: Java +H2: + id: 4 + languages: Java +``` + +## 远程服务映射 + +本地组件可以推荐出远程服务,而这种映射关系是基于组件名称. + +- Key: 客户端组件库名称 +- Value: 服务端组件库名称 + +```yaml +Component-Server-Mappings: + Jedis: Redis + StackExchange.Redis: Redis + SqlClient: SqlServer + Npgsql: PostgreSQL + MySqlConnector: Mysql + EntityFrameworkCore.InMemory: InMemoryDatabase +``` \ No newline at end of file From 56d7fe4ed73a1d45647611b9cd32a75682d8e433 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Tue, 24 Jul 2018 14:39:56 +0800 Subject: [PATCH 12/47] Fix RuntimeContext cannot store anything when the trace is not creat (#1480) * Fix RuntimeContext cannot store anything when the trace is not create * Add RuntimecontextSnapshot and remove debug info --- .../conf/RuntimeContextConfiguration.java | 28 ++++++++ .../core/context/AbstractTracerContext.java | 4 -- .../agent/core/context/ContextManager.java | 12 ++-- .../core/context/IgnoredTracerContext.java | 14 ---- .../agent/core/context/RuntimeContext.java | 38 ++++++++++- .../core/context/RuntimeContextSnapshot.java | 35 ++++++++++ .../agent/core/context/TracingContext.java | 13 ---- .../v1/HystrixCommandRunInterceptor.java | 5 -- ...HystrixConcurrencyStrategyInterceptor.java | 45 +++++++++++++ .../SWHystrixConcurrencyStrategyWrapper.java | 64 +++++++++++++++++++ .../define/HystrixPluginsInstrumentation.java | 15 +++++ .../apm/plugin/jetty/v9/server/Constants.java | 24 +++++++ .../jetty/v9/server/ForwardInterceptor.java | 3 +- .../jetty/v9/server/HandleInterceptor.java | 1 + .../v3/HandlerMethodInvokerInterceptor.java | 6 +- .../spring/mvc/v3/GetBeanInterceptorTest.java | 8 --- .../RequestMappingMethodInterceptorTest.java | 2 - .../v4/RestMappingMethodInterceptorTest.java | 2 - .../spring/mvc/v4/SpringTestCaseHelper.java | 3 + .../plugin/spring/mvc/commons/Constants.java | 4 +- .../commons/EnhanceRequireObjectCache.java | 23 ------- .../AbstractMethodInterceptor.java | 23 +++---- .../interceptor/GetBeanInterceptor.java | 8 ++- .../InvokeForRequestInterceptor.java | 9 ++- .../InvokeHandlerMethodInterceptor.java | 11 +++- .../apm/plugin/tomcat78x/Constants.java | 24 +++++++ .../plugin/tomcat78x/ForwardInterceptor.java | 4 +- .../tomcat78x/TomcatInvokeInterceptor.java | 1 + 28 files changed, 322 insertions(+), 107 deletions(-) create mode 100644 apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/RuntimeContextConfiguration.java create mode 100644 apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContextSnapshot.java create mode 100644 apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixConcurrencyStrategyInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/SWHystrixConcurrencyStrategyWrapper.java create mode 100644 apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/Constants.java create mode 100644 apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/Constants.java diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/RuntimeContextConfiguration.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/RuntimeContextConfiguration.java new file mode 100644 index 000000000..f1b95a3ca --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/RuntimeContextConfiguration.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + * + */ + +package org.apache.skywalking.apm.agent.core.conf; + +public class RuntimeContextConfiguration { + + public static String[] NEED_PROPAGATE_CONTEXT_KEY = new String[] { + "SW_REQUEST", + "SW_RESPONSE" + }; +} diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java index adc6a3f50..a7c5453b1 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java @@ -105,8 +105,4 @@ public interface AbstractTracerContext { */ void stopSpan(AbstractSpan span); - /** - * @return the runtime context from current tracing context. - */ - RuntimeContext getRuntimeContext(); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java index e1ce82890..a2ea19aaa 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java @@ -42,6 +42,7 @@ import org.apache.skywalking.apm.util.StringUtil; public class ContextManager implements TracingContextListener, BootService, IgnoreTracerContextListener { private static final ILog logger = LogManager.getLogger(ContextManager.class); private static ThreadLocal CONTEXT = new ThreadLocal(); + private static ThreadLocal RUNTIME_CONTEXT = new ThreadLocal(); private static ContextManagerExtendService EXTEND_SERVICE; private static AbstractTracerContext getOrCreate(String operationName, boolean forceSampling) { @@ -198,11 +199,12 @@ public class ContextManager implements TracingContextListener, BootService, Igno } public static RuntimeContext getRuntimeContext() { - if (isActive()) { - return get().getRuntimeContext(); - } else { - throw new IllegalStateException("No active context"); + RuntimeContext runtimeContext = RUNTIME_CONTEXT.get(); + if (runtimeContext == null) { + runtimeContext = new RuntimeContext(RUNTIME_CONTEXT); + RUNTIME_CONTEXT.set(runtimeContext); } - } + return runtimeContext; + } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java index a52fd2efc..fd115e566 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java @@ -37,13 +37,6 @@ public class IgnoredTracerContext implements AbstractTracerContext { private int stackDepth; - /** - * Runtime context of the ignored context - * - * The context should work even no trace, in order to avoid the unexpected status. - */ - private RuntimeContext runtimeContext; - public IgnoredTracerContext() { this.stackDepth = 0; } @@ -102,13 +95,6 @@ public class IgnoredTracerContext implements AbstractTracerContext { } } - @Override public RuntimeContext getRuntimeContext() { - if (runtimeContext == null) { - runtimeContext = new RuntimeContext(); - } - return runtimeContext; - } - public static class ListenerManager { private static List LISTENERS = new LinkedList(); diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContext.java index 3bd79fd62..a96098fae 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContext.java @@ -18,8 +18,11 @@ package org.apache.skywalking.apm.agent.core.context; +import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.apache.skywalking.apm.agent.core.conf.RuntimeContextConfiguration; /** * RuntimeContext is alive during the tracing context. @@ -27,11 +30,16 @@ import java.util.concurrent.ConcurrentHashMap; * * In most cases, it means it only stays in a single thread for context propagation. * - * @author wusheng + * @author wusheng, ascrutae */ public class RuntimeContext { + private final ThreadLocal contextThreadLocal; private Map context = new ConcurrentHashMap(0); + public RuntimeContext(ThreadLocal contextThreadLocal) { + this.contextThreadLocal = contextThreadLocal; + } + public void put(Object key, Object value) { context.put(key, value); } @@ -43,4 +51,32 @@ public class RuntimeContext { public T get(Object key, Class type) { return (T)context.get(key); } + + public void remove(Object key) { + context.remove(key); + + if (context.isEmpty()) { + contextThreadLocal.remove(); + } + } + + public RuntimeContextSnapshot capture() { + Map runtimeContextMap = new HashMap(); + for (String key : RuntimeContextConfiguration.NEED_PROPAGATE_CONTEXT_KEY) { + Object value = this.get(key); + if (value != null) { + runtimeContextMap.put(key, value); + } + } + + return new RuntimeContextSnapshot(runtimeContextMap); + } + + public void accept(RuntimeContextSnapshot snapshot) { + Iterator iterator = snapshot.iterator(); + while (iterator.hasNext()) { + Map.Entry runtimeContextItem = iterator.next(); + ContextManager.getRuntimeContext().put(runtimeContextItem.getKey(), runtimeContextItem.getValue()); + } + } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContextSnapshot.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContextSnapshot.java new file mode 100644 index 000000000..5bc203776 --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/RuntimeContextSnapshot.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + * + */ + +package org.apache.skywalking.apm.agent.core.context; + +import java.util.Iterator; +import java.util.Map; + +public class RuntimeContextSnapshot { + private final Map map; + + public RuntimeContextSnapshot(Map map) { + this.map = map; + } + + public Iterator iterator() { + return map.entrySet().iterator(); + } +} diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java index e3d4f7c55..84552bd48 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java @@ -79,11 +79,6 @@ public class TracingContext implements AbstractTracerContext { */ private int spanIdGenerator; - /** - * Runtime context of the tracing context - */ - private RuntimeContext runtimeContext; - /** * Initialize all fields with default value. */ @@ -424,14 +419,6 @@ public class TracingContext implements AbstractTracerContext { } } - @Override - public RuntimeContext getRuntimeContext() { - if (runtimeContext == null) { - runtimeContext = new RuntimeContext(); - } - return runtimeContext; - } - /** * Finish this context, and notify all {@link TracingContextListener}s, managed by {@link * TracingContext.ListenerManager} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandRunInterceptor.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandRunInterceptor.java index 28dce1a39..1595f81f3 100644 --- a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandRunInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandRunInterceptor.java @@ -18,7 +18,6 @@ package org.apache.skywalking.apm.plugin.hystrix.v1; -import com.netflix.hystrix.HystrixCommand; import java.lang.reflect.Method; import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.context.ContextSnapshot; @@ -28,8 +27,6 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; -import static org.apache.skywalking.apm.plugin.hystrix.v1.Constants.ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT; - public class HystrixCommandRunInterceptor implements InstanceMethodsAroundInterceptor { @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, @@ -46,8 +43,6 @@ public class HystrixCommandRunInterceptor implements InstanceMethodsAroundInterc } // Because of `fall back` method running in other thread. so we need capture concurrent span for tracing. enhanceRequireObjectCache.setContextSnapshot(ContextManager.capture()); - - ContextManager.getRuntimeContext().put(ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT, ((HystrixCommand)objInst).getProperties().executionIsolationStrategy().get().name().toUpperCase()); } @Override diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixConcurrencyStrategyInterceptor.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixConcurrencyStrategyInterceptor.java new file mode 100644 index 000000000..8ccce2ffa --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixConcurrencyStrategyInterceptor.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + * + */ + +package org.apache.skywalking.apm.plugin.hystrix.v1; + +import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategy; +import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; + +public class HystrixConcurrencyStrategyInterceptor 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 { + return new SWHystrixConcurrencyStrategyWrapper((HystrixConcurrencyStrategy)ret); + } + + @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + + } +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/SWHystrixConcurrencyStrategyWrapper.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/SWHystrixConcurrencyStrategyWrapper.java new file mode 100644 index 000000000..102dc7c05 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/SWHystrixConcurrencyStrategyWrapper.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + * + */ + +package org.apache.skywalking.apm.plugin.hystrix.v1; + +import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategy; +import java.util.concurrent.Callable; +import org.apache.skywalking.apm.agent.core.conf.RuntimeContextConfiguration; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.RuntimeContextSnapshot; + +public class SWHystrixConcurrencyStrategyWrapper extends HystrixConcurrencyStrategy { + + private final HystrixConcurrencyStrategy delegate; + + public SWHystrixConcurrencyStrategyWrapper( + HystrixConcurrencyStrategy delegate) { + this.delegate = delegate; + } + + @Override + public Callable wrapCallable(Callable callable) { + return new WrappedCallable(ContextManager.getRuntimeContext().capture(), super.wrapCallable(callable)); + } + + static class WrappedCallable implements Callable { + + private final RuntimeContextSnapshot contextSnapshot; + private final Callable target; + + WrappedCallable(RuntimeContextSnapshot contextSnapshot, Callable target) { + this.contextSnapshot = contextSnapshot; + this.target = target; + } + + @Override public T call() throws Exception { + try { + ContextManager.getRuntimeContext().accept(contextSnapshot); + return target.call(); + } finally { + for (String key : RuntimeContextConfiguration.NEED_PROPAGATE_CONTEXT_KEY) { + ContextManager.getRuntimeContext().remove(key); + } + } + } + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixPluginsInstrumentation.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixPluginsInstrumentation.java index 0c59115d4..886620f7b 100644 --- a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixPluginsInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixPluginsInstrumentation.java @@ -32,6 +32,8 @@ public class HystrixPluginsInstrumentation extends ClassInstanceMethodsEnhancePl public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.hystrix.v1.HystrixPluginsInterceptor"; public static final String ENHANCE_METHOD = "getCommandExecutionHook"; + public static final String GET_CONCURRENCY_STRATEGY_METHOD = "getConcurrencyStrategy"; + public static final String GET_CONCURRENCY_STRATEGY_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.hystrix.v1.HystrixConcurrencyStrategyInterceptor"; public static final String ENHANCE_CLASS = "com.netflix.hystrix.strategy.HystrixPlugins"; @Override @@ -51,6 +53,19 @@ public class HystrixPluginsInstrumentation extends ClassInstanceMethodsEnhancePl return INTERCEPT_CLASS; } + @Override public boolean isOverrideArgs() { + return false; + } + }, + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(GET_CONCURRENCY_STRATEGY_METHOD); + } + + @Override public String getMethodsInterceptor() { + return GET_CONCURRENCY_STRATEGY_INTERCEPT_CLASS; + } + @Override public boolean isOverrideArgs() { return false; } diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/Constants.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/Constants.java new file mode 100644 index 000000000..e1e8d84d6 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/Constants.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + * + */ + +package org.apache.skywalking.apm.plugin.jetty.v9.server; + +public class Constants { + public static final String FORWARD_REQUEST_FLAG = "SW_FORWARD_REQUEST_FLAG"; +} diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/ForwardInterceptor.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/ForwardInterceptor.java index 0bce81b17..ea2e425b6 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/ForwardInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/ForwardInterceptor.java @@ -30,7 +30,6 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; public class ForwardInterceptor implements InstanceMethodsAroundInterceptor, InstanceConstructorInterceptor { - private static final String FORWARD_REQUEST_FLAG = "SW_FORWARD_REQUEST_FLAG"; @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, @@ -40,7 +39,7 @@ public class ForwardInterceptor implements InstanceMethodsAroundInterceptor, Ins Map eventMap = new HashMap(); eventMap.put("forward-url", (String)objInst.getSkyWalkingDynamicField()); abstractTracingSpan.log(System.currentTimeMillis(), eventMap); - ContextManager.getRuntimeContext().put(FORWARD_REQUEST_FLAG, true); + ContextManager.getRuntimeContext().put(Constants.FORWARD_REQUEST_FLAG, true); } } diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java index 0ed3ec6f1..6700cab1d 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptor.java @@ -67,6 +67,7 @@ public class HandleInterceptor implements InstanceMethodsAroundInterceptor { Tags.STATUS_CODE.set(span, Integer.toString(servletResponse.getStatus())); } ContextManager.stopSpan(); + ContextManager.getRuntimeContext().remove(Constants.FORWARD_REQUEST_FLAG); return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java index 776904573..19f2f6e78 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java @@ -19,12 +19,14 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v3; import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.springframework.web.context.request.NativeWebRequest; +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; + /** * {@link HandlerMethodInvokerInterceptor} pass the {@link NativeWebRequest} object into the {@link * org.springframework.stereotype.Controller} object. @@ -37,7 +39,7 @@ public class HandlerMethodInvokerInterceptor implements InstanceMethodsAroundInt MethodInterceptResult result) throws Throwable { Object handler = allArguments[1]; if (handler instanceof EnhancedInstance) { - ((EnhanceRequireObjectCache)((EnhancedInstance)handler).getSkyWalkingDynamicField()).setNativeWebRequest((NativeWebRequest)allArguments[2]); + ContextManager.getRuntimeContext().put(RESPONSE_KEY_IN_RUNTIME_CONTEXT, ((NativeWebRequest)allArguments[2]).getNativeResponse()); } } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java index 2eb525f04..b4ec3f592 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v3/GetBeanInterceptorTest.java @@ -61,12 +61,4 @@ public class GetBeanInterceptorTest { verify(enhanceRet, times(0)).setSkyWalkingDynamicField(Matchers.any()); } - - @Test - public void testResultIsEnhanceInstance() throws Throwable { - interceptor.afterMethod(enhancedInstance, null, null, null, enhanceRet); - - verify(enhanceRet, times(0)).setSkyWalkingDynamicField(Matchers.any()); - } - } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java index 9d342d626..db90da400 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java @@ -175,8 +175,6 @@ public class RequestMappingMethodInterceptorTest { @Override public Object getSkyWalkingDynamicField() { value.setPathMappingCache(new PathMappingCache("/test")); - value.setHttpResponse(response); - value.setNativeWebRequest(nativeWebRequest); return value; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java index 864872f9d..ccff690c5 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/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/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java @@ -306,8 +306,6 @@ public class RestMappingMethodInterceptorTest { @Override public Object getSkyWalkingDynamicField() { value.setPathMappingCache(new PathMappingCache("/test")); - value.setHttpResponse(response); - value.setNativeWebRequest(nativeWebRequest); return value; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java index 9940cd240..34b257aeb 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/SpringTestCaseHelper.java @@ -21,12 +21,15 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v4; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants; public final class SpringTestCaseHelper { public final static void createCaseHandler(HttpServletRequest request, HttpServletResponse response, CaseHandler a) throws Throwable { ContextManager.createLocalSpan("For-Test"); + ContextManager.getRuntimeContext().put(Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT, request); + ContextManager.getRuntimeContext().put(Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT, response); a.handleCase(); ContextManager.stopSpan(); } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java index 91aaddb7c..1ac245018 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/Constants.java @@ -32,9 +32,9 @@ public class Constants { public static final String REST_MAPPING_METHOD_INTERCEPTOR = "org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor.RestMappingMethodInterceptor"; - public static final String HYSTRIX_COMMAND_ANNOTATION = "com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand"; + public static final String REQUEST_KEY_IN_RUNTIME_CONTEXT = "SW_REQUEST"; - public static final String ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT = "ISOLATE_STRATEGY"; + public static final String RESPONSE_KEY_IN_RUNTIME_CONTEXT = "SW_RESPONSE"; public static final String FORWARD_REQUEST_FLAG = "SW_FORWARD_REQUEST_FLAG"; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java index cbadbfdab..8337591fb 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/EnhanceRequireObjectCache.java @@ -18,28 +18,15 @@ package org.apache.skywalking.apm.plugin.spring.mvc.commons; -import org.springframework.web.context.request.NativeWebRequest; - -import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; public class EnhanceRequireObjectCache { private PathMappingCache pathMappingCache; - private ThreadLocal nativeWebRequest = new ThreadLocal(); - private ThreadLocal httpResponse = new ThreadLocal(); public void setPathMappingCache(PathMappingCache pathMappingCache) { this.pathMappingCache = pathMappingCache; } - public HttpServletResponse getHttpServletResponse() { - return httpResponse.get() == null ? (HttpServletResponse) nativeWebRequest.get().getNativeResponse() : httpResponse.get(); - } - - public void setNativeWebRequest(NativeWebRequest nativeWebRequest) { - this.nativeWebRequest.set(nativeWebRequest); - } - public String findPathMapping(Method method) { return pathMappingCache.findPathMapping(method); } @@ -51,14 +38,4 @@ public class EnhanceRequireObjectCache { public PathMappingCache getPathMappingCache() { return pathMappingCache; } - - public void setHttpResponse(HttpServletResponse httpResponse) { - this.httpResponse.set(httpResponse); - } - - public void clearRequestAndResponse() { - setNativeWebRequest(null); - setHttpResponse(null); - } - } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java index 5a5b14d5a..b2cb54afe 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/AbstractMethodInterceptor.java @@ -32,11 +32,10 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.FORWARD_REQUEST_FLAG; -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT; +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; /** * the abstract method inteceptor @@ -65,12 +64,8 @@ public abstract class AbstractMethodInterceptor implements InstanceMethodsAround requestURL = pathMappingCache.findPathMapping(method); } - String hystrixIsolateStrategy = (String)ContextManager.getRuntimeContext().get(ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT); - HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); - - if (hystrixIsolateStrategy != null) { - ContextManager.createLocalSpan(requestURL); - } else if (request != null) { + HttpServletRequest request = (HttpServletRequest)ContextManager.getRuntimeContext().get(REQUEST_KEY_IN_RUNTIME_CONTEXT); + if (request != null) { ContextCarrier contextCarrier = new ContextCarrier(); CarrierItem next = contextCarrier.items(); while (next.hasNext()) { @@ -98,12 +93,9 @@ public abstract class AbstractMethodInterceptor implements InstanceMethodsAround return ret; } - String hystrixIsolateStrategy = (String)ContextManager.getRuntimeContext().get(ISOLATE_STRATEGY_KEY_IN_RUNNING_CONTEXT); - HttpServletResponse response = ((EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField()).getHttpServletResponse(); + HttpServletResponse response = (HttpServletResponse)ContextManager.getRuntimeContext().get(RESPONSE_KEY_IN_RUNTIME_CONTEXT); try { - if (hystrixIsolateStrategy != null) { - ContextManager.stopSpan(); - } else if (response != null) { + if (response != null) { AbstractSpan span = ContextManager.activeSpan(); if (response.getStatus() >= 400) { span.errorOccurred(); @@ -112,7 +104,8 @@ public abstract class AbstractMethodInterceptor implements InstanceMethodsAround ContextManager.stopSpan(); } } finally { - ((EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField()).clearRequestAndResponse(); + ContextManager.getRuntimeContext().remove(REQUEST_KEY_IN_RUNTIME_CONTEXT); + ContextManager.getRuntimeContext().remove(RESPONSE_KEY_IN_RUNTIME_CONTEXT); } return ret; diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java index 9ea95132b..613481fcd 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/GetBeanInterceptor.java @@ -19,11 +19,15 @@ package org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor; import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; /** * {@link GetBeanInterceptor} pass the {@link NativeWebRequest} object into the {@link @@ -41,7 +45,7 @@ public class GetBeanInterceptor implements InstanceMethodsAroundInterceptor { public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { if (ret instanceof EnhancedInstance) { - ((EnhanceRequireObjectCache)((EnhancedInstance)ret).getSkyWalkingDynamicField()).setNativeWebRequest((NativeWebRequest)objInst.getSkyWalkingDynamicField()); + ContextManager.getRuntimeContext().put(REQUEST_KEY_IN_RUNTIME_CONTEXT, ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest()); } return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java index 1b3300e7b..b02d98f08 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java @@ -19,11 +19,15 @@ package org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor; import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.springframework.web.context.request.NativeWebRequest; +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; + /** * {@link InvokeForRequestInterceptor} pass the {@link NativeWebRequest} object into the {@link * org.springframework.stereotype.Controller} object. @@ -34,12 +38,15 @@ public class InvokeForRequestInterceptor implements InstanceMethodsAroundInterce @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { - objInst.setSkyWalkingDynamicField(allArguments[0]); + ContextManager.getRuntimeContext().put(RESPONSE_KEY_IN_RUNTIME_CONTEXT, ((NativeWebRequest)allArguments[0]).getNativeResponse()); } @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { + ContextManager.getRuntimeContext().remove(RESPONSE_KEY_IN_RUNTIME_CONTEXT); + // clear request in this method + ContextManager.getRuntimeContext().remove(REQUEST_KEY_IN_RUNTIME_CONTEXT); return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java index b482a9426..858ee75e3 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java @@ -19,24 +19,29 @@ package org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor; import java.lang.reflect.Method; -import javax.servlet.http.HttpServletResponse; +import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; + +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; +import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; public class InvokeHandlerMethodInterceptor implements InstanceMethodsAroundInterceptor { @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { if (allArguments[2] instanceof EnhancedInstance) { - ((EnhanceRequireObjectCache)((EnhancedInstance)allArguments[2]).getSkyWalkingDynamicField()).setHttpResponse((HttpServletResponse)allArguments[1]); + ContextManager.getRuntimeContext().put(RESPONSE_KEY_IN_RUNTIME_CONTEXT, allArguments[1]); + ContextManager.getRuntimeContext().put(REQUEST_KEY_IN_RUNTIME_CONTEXT, allArguments[0]); } } @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { + ContextManager.getRuntimeContext().remove(RESPONSE_KEY_IN_RUNTIME_CONTEXT); + ContextManager.getRuntimeContext().remove(REQUEST_KEY_IN_RUNTIME_CONTEXT); return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/Constants.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/Constants.java new file mode 100644 index 000000000..64501083e --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/Constants.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + * + */ + +package org.apache.skywalking.apm.plugin.tomcat78x; + +public class Constants { + public static final String FORWARD_REQUEST_FLAG = "SW_FORWARD_REQUEST_FLAG"; +} diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java index 0c9ff83d2..f7b255ace 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java @@ -31,8 +31,6 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInt public class ForwardInterceptor implements InstanceMethodsAroundInterceptor, InstanceConstructorInterceptor { - private static final String FORWARD_REQUEST_FLAG = "SW_FORWARD_REQUEST_FLAG"; - @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { @@ -41,7 +39,7 @@ public class ForwardInterceptor implements InstanceMethodsAroundInterceptor, Ins Map eventMap = new HashMap(); eventMap.put("forward-url", (String)objInst.getSkyWalkingDynamicField()); abstractTracingSpan.log(System.currentTimeMillis(), eventMap); - ContextManager.getRuntimeContext().put(FORWARD_REQUEST_FLAG, true); + ContextManager.getRuntimeContext().put(Constants.FORWARD_REQUEST_FLAG, true); } } diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java index c8c247b05..649e5c712 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java @@ -81,6 +81,7 @@ public class TomcatInvokeInterceptor implements InstanceMethodsAroundInterceptor Tags.STATUS_CODE.set(span, Integer.toString(response.getStatus())); } ContextManager.stopSpan(); + ContextManager.getRuntimeContext().remove(Constants.FORWARD_REQUEST_FLAG); return ret; } From 6753478a7769f22ff82aaedbdec79da3a38058fc Mon Sep 17 00:00:00 2001 From: Alexander Wert Date: Thu, 26 Jul 2018 14:03:32 +0200 Subject: [PATCH 13/47] Added OpenAPM Badge to the readme file (#1493) * Added OpenAPM Badge to readme * Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 996584115..15698297e 100644 --- a/README.md +++ b/README.md @@ -82,5 +82,10 @@ Follow this [document](https://github.com/apache/incubator-skywalking/blob/maste [Submit new user case to us.](https://github.com/apache/incubator-skywalking/issues/443) +

+ +
Our project enriches the OpenAPM Landscape! +

+ # License [Apache 2.0 License.](/LICENSE) From d7fd23ff05ff11e1ce4ab2ed2f0007b0ed4280eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Fri, 27 Jul 2018 17:44:03 +0800 Subject: [PATCH 14/47] Update use cases (#1503) * Add a separated use case list * Update README_ZH.md * Create use-case-list.md Add use cases. * Update README.md * Update README_ZH.md * Update README_ZH.md --- README.md | 7 ++++--- README_ZH.md | 7 ++++--- docs/use-case-list.md | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 docs/use-case-list.md diff --git a/README.md b/README.md index 15698297e..394a6e11e 100644 --- a/README.md +++ b/README.md @@ -77,10 +77,11 @@ Follow this [document](https://github.com/apache/incubator-skywalking/blob/maste * [Gitter](https://gitter.im/openskywalking/Lobby) * QQ Group: 392443393 -# Users - +# Use cases + -[Submit new user case to us.](https://github.com/apache/incubator-skywalking/issues/443) +- [Use case list](docs/use-case-list.md) +- [Submit new use case to us.](https://github.com/apache/incubator-skywalking/issues/443)

diff --git a/README_ZH.md b/README_ZH.md index e64ff7356..74d97d6c9 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -73,10 +73,11 @@ This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDU * [Gitter](https://gitter.im/openskywalking/Lobby) * QQ群: 392443393 -# Users - +# Use cases + -[报告新的用户案例](https://github.com/apache/incubator-skywalking/issues/443) +- [用户案例](docs/use-case-list.md) +- [报告新的用户案例](https://github.com/apache/incubator-skywalking/issues/443) # License diff --git a/docs/use-case-list.md b/docs/use-case-list.md new file mode 100644 index 000000000..14388d89a --- /dev/null +++ b/docs/use-case-list.md @@ -0,0 +1,39 @@ +# Use cases + +All use cases are reported through direct message/mail or [online issue](https://github.com/apache/incubator-skywalking/issues/443), +if any entity(company or orgnization) has any doubt, please contact us by [any official channel](../README.md#contact-us). + +- 300.cn 中企动力科技股份有限公司 http://www.300.cn/ +- 4499.com 四三九九网络股份有限公司. http://www.4399.com/ +- AsiaInfo Inc. http://www.asiainfo.com.cn/ +- Baixing.com 百姓网 http://www.baixing.com/ +- Bizsaas.cn 北京商云科技发展有限公司. http://www.bizsaas.cn/ +- Chehejia Automotive. 北京车和家信息技术有限责任公司. https://www.chehejia.com/ +- Chinadaas. 北京中数智汇科技股份有限公司. https://www.chinadaas.com/ +- Dangdang.com. 当当网. http://www.dangdang.com/ +- DaoCloud. https://www.daocloud.io/ +- Deyoushenghuo in WeChat app. 河南有态度信息科技有限公司,微信小程序:得有生活 +- Eqxiu.com. 北京中网易企秀科技有限公司 http://www.eqxiu.com/ +- Haier. 海尔消费金融 https://www.haiercash.com/ +- Haoyunhu. 上海好运虎供应链管理有限公司 http://www.haoyunhu56.com/ +- Hundun YUNRONG Fintech. 杭州恒生云融网络科技有限公司 https://www.hsjry.com/ +- iFLYTEK. 科大讯飞股份有限公司-消费者BG http://www.iflytek.com/ +- Keking.cn 凯京集团. http://www.keking.cn +- GTrace System. (No company provided) +- Gdeng.cn 深圳谷登科技有限公司 http://www.gdeng.cn/ +- Huawei Inc. DevCloud. https://www.huaweicloud.com/devcloud/ +- laocaibao. 上海证大爱特金融信息服务有限公司 https://www.laocaibao.com/ +- Madecare. 北京美德远健科技有限公司. http://www.madecare.com/ +- Mxnavi. 沈阳美行科技有限公司 http://www.mxnavi.com/ +- Moji 墨叽(深圳)科技有限公司 https://www.mojivip.com +- Qsdjf.com 浙江钱宝网络科技有限公司 https://www.qsdjf.com/index.html +- Rongjinbao. 深圳融金宝互联网金融服务有限公司. http://www.rjb777.com +- Successchannel 苏州渠成易销网络科技有限公司. http://www.successchannel.com +- Today36524.com Today便利店 +- Tsfinance.com 重庆宜迅联供应链科技有限公司 https://www.tsfinance.com.cn/ +- VBill Payment Co., LTD. 随行付. https://www.vbill.cn/ +- Weier. 广州文尔软件科技有限公司. https://www.site0.cn +- Xiaomi. 小米. https://www.mi.com/en/ +- Yinji(shenzhen)Network Technology Co.,Ltd. 印记. http://www.yinjiyun.cn/ + +The list is in alphabeta order. From 4788ebda647dc474478d8260228fbde6db635bd8 Mon Sep 17 00:00:00 2001 From: "Jared.Tan" Date: Mon, 30 Jul 2018 13:26:19 +0800 Subject: [PATCH 15/47] add Architecture-CN.md doc. (#1499) * add Architecture-CN.md doc. * Typo:fix some problems in doc. --- docs/README_ZH.md | 1 + docs/cn/Architecture-CN.md | 104 +++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 docs/cn/Architecture-CN.md diff --git a/docs/README_ZH.md b/docs/README_ZH.md index a698e6e75..d97c0bf5a 100644 --- a/docs/README_ZH.md +++ b/docs/README_ZH.md @@ -13,6 +13,7 @@ * [Spring beans 插件](cn/agent-optional-plugins-CN/Spring-bean-plugins-CN.md) * [Oracle and Resin 插件](cn/agent-optional-plugins-CN/Oracle-Resin-plugins-CN.md) * [[**孵化特性**] 自定义配置忽略追踪信息](../apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md) + * [架构设计](cn/Architecture-CN.md) * 高级特性 * [通过系统启动参数进行覆盖配置](cn/Setting-override-CN.md) * [服务直连(Direct uplink)及禁用名称服务(naming service)](cn/Direct-uplink-CN.md) diff --git a/docs/cn/Architecture-CN.md b/docs/cn/Architecture-CN.md new file mode 100644 index 000000000..525c6e729 --- /dev/null +++ b/docs/cn/Architecture-CN.md @@ -0,0 +1,104 @@ +# 架构设计 +## 背景 +对于APM来说,自动探针和手动探针,只是关于如何实现监控的技术细节。这些和架构设计无关。因此在本文档中,我们将它们仅视为客户端库。 + + + +## 基本原则 +SkyWalking架构的基本设计原则包括**易于维护、可控和流式处理**。 + +为了实现这些目标,SkyWalking后端采用以下设计。 +1. 模块化设计。 +2. 多种客户端连接方式。 +3. 后端集群服务发现机制。 +4. 流模式。 +5. 可切换的存储模块。 + +## 模块化 +SkyWalking后端基于纯**模块化设计**。用户可以根据自己的需求切换或组装后端功能。 + +### 模块 + +模块定义了一组特性,这些特性可以包括技术库(如:gRPC/Jetty服务器管理)、跟踪分析(如:跟踪段或zipkin span解析器)或聚合特性。 +这些完全由模块定义及其模块实现来决定。 + +每个模块都可以在Java接口中定义它们的服务,每个模块的提供者都必须为这些服务提供实现者。 +提供者应该基于自己的实现定义依赖模块。这意味着,即使两个不同的模块实现者,也可以依赖不同的模块。 + +此外,后端模块化core还检查启动序列,如果没有发现周期依赖或依赖,后端应该被core终止。 + +后端启动所有模块,这些模块的配置在`application.yml`中是分离的。在这个yaml文件中: +- 根级别是模块名称,例如`cluster`、`naming`等。 +- 第二级别是模块的实现者的名称,例如`zookeeper`是`cluster`等模块。 +- 第三级是实现者的具体属性。例如`hostPort`和`sessionTimeout`是`zookepper`的必需属性。 + +_yaml文件的一部分举例_ +```yml +cluster: + zookeeper: + hostPort: localhost:2181 + sessionTimeout: 100000 +naming: + jetty: + #OS real network IP(binding required), for agent to find collector cluster + host: localhost + port: 10800 + contextPath: / +``` + +## 多种连接方式 +首先,后端提供两种类型的连接,也即提供两种协议(HTTP和gRPC): +1. HTTP中的命名服务,它返回后端群集中的所有可用collector地址。 +2. 在gRPC(SkyWalking原生探针的主要部分)和HTTP中使用上行链路服务,它将跟踪和度量数据上传到后端。 +每个客户端将只向单个collector发送监视数据(跟踪和度量)。如果与连接的后端在某个时刻断开连接将会尝试连接其它的后端。 + +比如在SkyWalking Java探针中 +1. `collector.servers`表示命名服务,将`naming/jetty/ip:port`映射为HTTP请求地址。 +2. `collector.direct_servers` 表示直接设置上行服务,并使用gRPC发送监控数据。 + + +_客户端库和后端集群之间的流程图_ +``` + Client lib Collector1 Collector2 Collector3 + (Set collector.servers=Collector2) (Collector 1,2,3 constitute the cluster) + | + +-----------> naming service ---------------------------->| + | + |<------- receive gRPC IP:Port(s) of Collector 1,2,3---<--| + | + |Select a random gRPC service + |For example collector 3 + | + |------------------------->Uplink gRPC service----------------------------------->| +``` + + +## Collector 集群发现 +当Collector以群集模式运行时,后端必须以某种方式相互发现。默认情况下,SkyWalking使用Zookeeper进行协调,并作为实例发现的注册中心。 + +通过以上部分([多个连接方式](#多种连接方式)),客户端库将不会使用Zookeeper来查找集群。我们建议客户不要这么做。因为集群发现机制是可切换的,由模块化核心提供。依赖它会破坏可切换能力。 +我们希望社区提供更多的实现者来进行集群发现,例如Eureka,Consul,Kubernate等。 + + +## 流模式 +流模式类似轻量级storm/spark的实现,它允许使用API​​构建流处理图(DAG)以及每个节点的输入/输出数据协定。 + +新模块可以查找和扩展现有的流程图。 + +处理中有三种情况 +1. 同步过程,传统方法调用。 +2. 异步过程,又叫做基于队列缓冲区的批处理。 +3. 远程过程,汇总后端的汇总。以这种方式,在节点中定义选择器以决定如何在集群中找到collector。(HashCode,Rolling,ForeverFirst是支持的三种方式) + +通过具备的这些功能,collector集群像流式网络一样运行着去聚合、度量标准监控信息,并且不依赖于存储模块的实现来支持并发地编写相同的度量id。 + +## 可切换存储实现器 +由于流模式负责并发,因此存储模块的实现的职责是提供高速写入和组合查询。 + +目前,我们支持ElasticSearch作为主要实现模块,H2用于预览版本,以及由Sharding Shpere项目管理的MySQL关系数据库集群。 + +# Web 界面 +除了后端设计的原则,UI是SkyWalking的另一个核心组件。它基于React,Antd和Zuul代理实现,提供后端集群发现、查询调度和可视化的功能。 + +Web UI以[多连接方式](#多种连接方式)中的相似的流程机制作为客户端的`1.naming`、`2.uplink`。唯一的区别是,在`ui/jetty/yaml`定义下的主机和端口上(默认值:localhost:12800)用HTTP绑定中的GraphQL查询协议替换上行。 + From eed6fa18c88ad14277d17149fea92946e9cb1b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=AA=E8=84=96=E5=A4=A7=E8=82=9A=E5=AD=90Q?= Date: Mon, 30 Jul 2018 17:58:49 +0800 Subject: [PATCH 16/47] add gzip support (#1506) * add gzip support --- .../provider/handler/SpanProcessor.java | 41 +++++++++++-------- .../provider/transform/SegmentBuilder.java | 5 ++- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java index 0e9fa61ba..7564ab1f8 100644 --- a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java +++ b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java @@ -21,36 +21,28 @@ package org.apache.skywalking.apm.collector.receiver.zipkin.provider.handler; import org.apache.skywalking.apm.collector.receiver.zipkin.provider.RegisterServices; import org.apache.skywalking.apm.collector.receiver.zipkin.provider.ZipkinReceiverConfig; import org.apache.skywalking.apm.collector.receiver.zipkin.provider.cache.CacheFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import zipkin2.Span; import zipkin2.codec.SpanBytesDecoder; -import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.List; +import java.util.zip.GZIPInputStream; public class SpanProcessor { - private final Logger logger = LoggerFactory.getLogger(SpanProcessor.class); - void convert(ZipkinReceiverConfig config, SpanBytesDecoder decoder, HttpServletRequest request, RegisterServices registerServices) throws IOException { - int len = request.getContentLength(); - ServletInputStream iii = request.getInputStream(); - byte[] buffer = new byte[len]; - - int readCntTotal = 0; + InputStream inputStream = getInputStream(request); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buffer = new byte[2048]; int readCntOnce; - while (readCntTotal < len) { - readCntOnce = iii.read(buffer, readCntTotal, len - readCntTotal); - if (readCntOnce <= 0) { - logger.error("Receive spans data failed."); - throw new IOException(); - } - readCntTotal += readCntOnce; + + while ((readCntOnce = inputStream.read(buffer)) >= 0) { + out.write(buffer, 0, readCntOnce); } - List spanList = decoder.decodeList(buffer); + List spanList = decoder.decodeList(out.toByteArray()); spanList.forEach(span -> { // In Zipkin, the local service name represents the application owner. @@ -65,4 +57,17 @@ public class SpanProcessor { CacheFactory.INSTANCE.get(config).addSpan(span); }); } + + private InputStream getInputStream(HttpServletRequest request) throws IOException { + InputStream requestInStream; + + String headEncoding = request.getHeader("accept-encoding"); + if (headEncoding != null && (headEncoding.indexOf("gzip") != -1)) { + requestInStream = new GZIPInputStream(request.getInputStream()); + } else { + requestInStream = request.getInputStream(); + } + + return requestInStream; + } } diff --git a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/transform/SegmentBuilder.java b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/transform/SegmentBuilder.java index 8266eac58..4f219b521 100644 --- a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/transform/SegmentBuilder.java +++ b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/transform/SegmentBuilder.java @@ -183,7 +183,10 @@ public class SegmentBuilder { } // microseconds in Zipkin -> milliseconds in SkyWalking long startTime = span.timestamp() / 1000; - long duration = span.duration() / 1000; + // Some implement of zipkin client not include duration field in its report + // package when duration's value be 0ms, Causing a null pointer exception here. + Long durationObj = span.duration(); + long duration = (durationObj == null) ? 0 : durationObj.longValue() / 1000; spanBuilder.setStartTime(startTime); spanBuilder.setEndTime(startTime + duration); From a5d261039278019b6d288d72a760ba3beda7444a Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Tue, 31 Jul 2018 22:36:40 +0800 Subject: [PATCH 17/47] Fix #1488: Fix NPE when the targetAop class is null (#1507) --- .../patch/AopExpressionMatchInterceptor.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptor.java index 9f46731d0..5c99a8869 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptor.java @@ -15,17 +15,15 @@ * limitations under the License. */ - package org.apache.skywalking.apm.plugin.spring.patch; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsAroundInterceptor; - import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsAroundInterceptor; /** * {@link AopExpressionMatchInterceptor} check if the method is match the enhanced method @@ -42,30 +40,33 @@ public class AopExpressionMatchInterceptor implements StaticMethodsAroundInterce } @Override - public void beforeMethod(Class clazz, Method method, Object[] allArguments, Class[] parameterTypes, MethodInterceptResult result) { + public void beforeMethod(Class clazz, Method method, Object[] allArguments, Class[] parameterTypes, + MethodInterceptResult result) { } @Override - public Object afterMethod(Class clazz, Method method, Object[] allArguments, Class[] parameterTypes, Object ret) { - Method targetAopMethod = (Method) allArguments[1]; - Class targetAopClass = (Class) allArguments[2]; - if (EnhancedInstance.class.isAssignableFrom(targetAopClass) && isEnhancedMethod(targetAopMethod)) { + public Object afterMethod(Class clazz, Method method, Object[] allArguments, Class[] parameterTypes, + Object ret) { + Method targetAopMethod = (Method)allArguments[1]; + Class targetAopClass = (Class)allArguments[2]; + if (targetAopClass != null && EnhancedInstance.class.isAssignableFrom(targetAopClass) && isEnhancedMethod(targetAopMethod)) { return false; } return ret; } @Override - public void handleMethodException(Class clazz, Method method, Object[] allArguments, Class[] parameterTypes, Throwable t) { + public void handleMethodException(Class clazz, Method method, Object[] allArguments, Class[] parameterTypes, + Throwable t) { } private boolean isEnhancedMethod(Method targetMethod) { for (Method method : methods) { if (method.getName().equals(targetMethod.getName()) - && method.getReturnType().equals(targetMethod.getReturnType()) - && equalParamTypes(method.getParameterTypes(), targetMethod.getParameterTypes())) { + && method.getReturnType().equals(targetMethod.getReturnType()) + && equalParamTypes(method.getParameterTypes(), targetMethod.getParameterTypes())) { return true; } } From c10fc67838545195b0df4f3a03a01ade0855b223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Thu, 2 Aug 2018 10:48:18 +0800 Subject: [PATCH 18/47] Fix typo (#1514) --- README.md | 20 ++++++++++---------- README_ZH.md | 8 ++++---- docs/{use-case-list.md => uses-list.md} | 0 3 files changed, 14 insertions(+), 14 deletions(-) rename docs/{use-case-list.md => uses-list.md} (100%) diff --git a/README.md b/README.md index 394a6e11e..584533532 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Apache SkyWalking Sky Walking logo -**SkyWalking**: APM (application performance monitor) tool for distributed systems, especially designed for +**SkyWalking**: APM (application performance monitor) tool for distributed systems, especially designed for microservices, cloud native and container-based (Docker, Kubernetes, Mesos) architectures. [![GitHub stars](https://img.shields.io/github/stars/apache/incubator-skywalking.svg?style=for-the-badge&label=Stars&logo=github)](https://github.com/apache/incubator-skywalking) @@ -16,7 +16,7 @@ microservices, cloud native and container-based (Docker, Kubernetes, Mesos) arch [![OpenTracing-1.x Badge](https://img.shields.io/badge/OpenTracing--1.x-enabled-blue.svg)](http://opentracing.io) # Abstract -**SkyWalking** started as a distributed tracing system in 2015. From 5.x, it evolved to the fully functional [Application Performance Management](https://en.wikipedia.org/wiki/Application_performance_management) +**SkyWalking** started as a distributed tracing system in 2015. From 5.x, it evolved to the fully functional [Application Performance Management](https://en.wikipedia.org/wiki/Application_performance_management) system. It is used for tracing, monitoring, diagnose distributed systems, especially based on microservices, cloud native and container, including: - Distributed tracing and context propagation @@ -28,10 +28,10 @@ including: - Performance optimization # Core features -- Multiple languages instrumentation agent or libraries +- Multiple languages instrumentation agent or libraries - Native Java auto instrumentation agent. Trace and monitor your cluster without changing any source codes - Community instrumentation agent or libraries - * [.NET Core](https://github.com/OpenSkywalking/skywalking-netcore) + * [.NET Core](https://github.com/OpenSkywalking/skywalking-netcore) * [Node.js](https://github.com/OpenSkywalking/skywalking-nodejs) - Multiple storage backends: ElasticSearch, H2 - [OpenTracing](http://opentracing.io/) compatible @@ -39,11 +39,11 @@ including: - Lightweight and powerful backend aggregation and analysis capabilities - Modern and cool Web UI - Log integration -- Alarm for slow or unstable(low SLA) application, instance and service +- Alarm for slow or unstable(low SLA) application, instance and service - [**Incubating**] Support accepting other tracer data formats. - Zipkin JSON, Thrift, Protobuf v1 and v2 formats, powered by [OpenZipkin](https://github.com/openzipkin/zipkin) libs - Jaeger in [Zipkin Thrift or JSON v1/v2 formats](https://github.com/jaegertracing/jaeger#backwards-compatibility-with-zipkin) - + # Announcement After SkyWalking 5.0.0-beta2 released, all core features have been provided. For 5 series, we are trying to make them stable from now. At the same time, we have already begun our works for 6 series, in branch `6.0`. It will be a long way to have the first alpha release for it. So if you want to take part in the challengeable works, welcome, but don't consider to use that. Please read the [6.0 documents](https://github.com/apache/incubator-skywalking/blob/6.0/docs/README.md) first. @@ -77,14 +77,14 @@ Follow this [document](https://github.com/apache/incubator-skywalking/blob/maste * [Gitter](https://gitter.im/openskywalking/Lobby) * QQ Group: 392443393 -# Use cases +# Users -- [Use case list](docs/use-case-list.md) -- [Submit new use case to us.](https://github.com/apache/incubator-skywalking/issues/443) +- [Users list](docs/uses-list.md) +- [Submit new user to us.](https://github.com/apache/incubator-skywalking/issues/443)

- +
Our project enriches the OpenAPM Landscape!

diff --git a/README_ZH.md b/README_ZH.md index 74d97d6c9..b643bbeae 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -29,7 +29,7 @@ Apache SkyWalking | [English](README.md) - 多语言探针或类库 - Java自动探针,追踪和监控程序时,不需要修改源码。 - 社区提供的其他多语言探针 - * [.NET Core](https://github.com/OpenSkywalking/skywalking-netcore) + * [.NET Core](https://github.com/OpenSkywalking/skywalking-netcore) * [Node.js](https://github.com/OpenSkywalking/skywalking-nodejs) - 多种后端存储: ElasticSearch, H2 - 支持[OpenTracing](http://opentracing.io/) @@ -39,7 +39,7 @@ Apache SkyWalking | [English](README.md) - 日志集成 - 应用、实例和服务的告警 - [**Incubating**]支持接口其他探针的数据 - - 接受Zipkin v1 v2格式数据,采用JSON, Thrift, Protobuf序列化方式。Powered by [OpenZipkin](https://github.com/openzipkin/zipkin) libs + - 接受Zipkin v1 v2格式数据,采用JSON, Thrift, Protobuf序列化方式。Powered by [OpenZipkin](https://github.com/openzipkin/zipkin) libs - 接受Jaeger 使用 [Zipkin Thrift 或 JSON v1/v2 格式](https://github.com/jaegertracing/jaeger#backwards-compatibility-with-zipkin) # Document @@ -73,10 +73,10 @@ This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDU * [Gitter](https://gitter.im/openskywalking/Lobby) * QQ群: 392443393 -# Use cases +# Users -- [用户案例](docs/use-case-list.md) +- [用户案例](docs/users-list.md) - [报告新的用户案例](https://github.com/apache/incubator-skywalking/issues/443) diff --git a/docs/use-case-list.md b/docs/uses-list.md similarity index 100% rename from docs/use-case-list.md rename to docs/uses-list.md From 20cee98fc2b6af5f715bd082a14b082be276c506 Mon Sep 17 00:00:00 2001 From: terranhu <271506255@qq.com> Date: Fri, 3 Aug 2018 09:56:00 +0800 Subject: [PATCH 19/47] Update ServiceNameService.java (#1515) resolve the Integer overflow,convert the value to Long type --- .../skywalking/apm/collector/ui/service/ServiceNameService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java index fe9aaba84..28830fa33 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java @@ -77,7 +77,7 @@ public class ServiceNameService { private long startTimeMillis() { int minuteMetricDataTTL = configService.minuteMetricDataTTL(); - return System.currentTimeMillis() - minuteMetricDataTTL * 60 * 1000; + return System.currentTimeMillis() - minuteMetricDataTTL * 60 * 1000L; } public ThroughputTrend getServiceThroughputTrend(int serviceId, Step step, long startTimeBucket, From 1d39614b0018a512afbeb04ba6eb34078953e12c Mon Sep 17 00:00:00 2001 From: XiaoFu Date: Sat, 4 Aug 2018 14:14:50 +0800 Subject: [PATCH 20/47] [Agent] Add plugin for ActiveMQ 5.x (#1513) * add activemq-plugin * fix update ActiveMQConsumerInstrumentation Enhance another class * refacor ActiveMQConsumerInstrumentation code * support both topic and queue * clear the code * add UnitTest add fix bug * fix obtain url bug * Refactor the ActiveMQProducerInstrumentation code * fix bug * fix ConstructorInterceptor BUG * add Licensed * Update application.yml Restore configuration * Restore configuration * perfect test * fix * fix License * fix Project Files * fix import class in instrumentation * fix test case * fix java doc * fix Trigger CI * fix ActiveMQConsumerAndProducerConstructorInterceptorTest * delete unit test * fix * fix * fix folder directory problem * Delete ActiveMQConsumerInstrumentation.java --- .../src/main/resources/application.yml | 2 +- .../main/resources/component-libraries.yml | 12 +- .../trace/component/ComponentsDefine.java | 10 +- .../apm/agent/core/context/tag/Tags.java | 5 + .../activemq-5.x-plugin/pom.xml | 63 +++ ...ctiveMQConsumerConstructorInterceptor.java | 34 ++ .../activemq/ActiveMQConsumerInterceptor.java | 81 ++++ ...ctiveMQProducerConstructorInterceptor.java | 34 ++ .../activemq/ActiveMQProducerInterceptor.java | 81 ++++ .../ActiveMQConsumerInstrumentation.java | 83 ++++ .../ActiveMQProducerInstrumentation.java | 83 ++++ .../src/main/resources/skywalking-plugin.def | 18 + ...AndProducerConstructorInterceptorTest.java | 219 +++++++++++ .../ActiveMQConsumerInterceptorTest.java | 151 ++++++++ .../ActiveMQProducerInterceptorTest.java | 365 ++++++++++++++++++ apm-sniffer/apm-sdk-plugin/pom.xml | 1 + 16 files changed, 1239 insertions(+), 3 deletions(-) create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerConstructorInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerConstructorInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQConsumerInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQProducerInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/resources/skywalking-plugin.def create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerAndProducerConstructorInterceptorTest.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptorTest.java create mode 100644 apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml index 7732967fc..047cf9301 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/application.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml @@ -111,4 +111,4 @@ configuration: # default: # host: localhost # port: 9411 -# contextPath: / \ No newline at end of file +# contextPath: / diff --git a/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml b/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml index 63ca19870..3fc6be5be 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml @@ -156,7 +156,15 @@ mongodb-driver: SOFARPC: id: 43 languages: Java - +ActiveMQ: + id: 44 + languages: Java +activemq-producer: + id: 45 + languages: Java +activemq-consumer: + id: 46 + languages: Java # .NET/.NET Core components # [3000, 4000) for C#/.NET only AspNetCore: @@ -223,6 +231,8 @@ Component-Server-Mappings: rocketMQ-consumer: RocketMQ kafka-producer: Kafka kafka-consumer: Kafka + activemq-producer: ActiveMQ + activemq-consumer: ActiveMQ postgresql-jdbc-driver: PostgreSQL Xmemcached: Memcached Spymemcached: Memcached diff --git a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java index 6c9c95254..02a6730d4 100644 --- a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java +++ b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java @@ -92,6 +92,10 @@ public class ComponentsDefine { public static final OfficialComponent SOFARPC = new OfficialComponent(43, "SOFARPC"); + public static final OfficialComponent ACTIVEMQ_PRODUCER = new OfficialComponent(45,"activemq-producer"); + + public static final OfficialComponent ACTIVEMQ_CONSUMER = new OfficialComponent(46,"activemq-consumer"); + private static ComponentsDefine INSTANCE = new ComponentsDefine(); private String[] components; @@ -101,7 +105,7 @@ public class ComponentsDefine { } public ComponentsDefine() { - components = new String[44]; + components = new String[47]; addComponent(TOMCAT); addComponent(HTTPCLIENT); addComponent(DUBBO); @@ -135,6 +139,10 @@ public class ComponentsDefine { addComponent(KAFKA_CONSUMER); addComponent(MONGO_DRIVER); addComponent(SOFARPC); + addComponent(ACTIVEMQ_PRODUCER); + addComponent(ACTIVEMQ_CONSUMER); + + } private void addComponent(OfficialComponent component) { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/tag/Tags.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/tag/Tags.java index e8802d472..3944a843e 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/tag/Tags.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/tag/Tags.java @@ -59,6 +59,11 @@ public final class Tags { */ public static final StringTag DB_BIND_VARIABLES = new StringTag("db.bind_vars"); + /** + * MQ_QUEUE records the queue name of message-middleware + */ + public static final StringTag MQ_QUEUE = new StringTag("mq.queue"); + /** * MQ_BROKER records the broker address of message-middleware */ diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml new file mode 100644 index 000000000..0e1525128 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml @@ -0,0 +1,63 @@ + + + + + + apm-sdk-plugin + org.apache.skywalking + 5.0.0-RC-SNAPSHOT + + 4.0.0 + + apm-activemq-5.x-plugin + activemq-5.x-plugin + jar + + + UTF-8 + + + + + org.apache.activemq + activemq-client + 5.14.5 + provided + + + + + + + org.apache.maven.plugins + maven-source-plugin + + + + attach-sources + none + + jar + + + + + + + diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerConstructorInterceptor.java new file mode 100644 index 000000000..638bc03ff --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerConstructorInterceptor.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq; + +import org.apache.activemq.ActiveMQSession; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; + +/** + * @author withlin + */ +public class ActiveMQConsumerConstructorInterceptor implements InstanceConstructorInterceptor { + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { + ActiveMQSession session = (ActiveMQSession)allArguments[0]; + objInst.setSkyWalkingDynamicField(session.getConnection().getTransport().getRemoteAddress().split("//")[1]); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java new file mode 100644 index 000000000..e0a6653cd --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq; + +import org.apache.activemq.command.MessageDispatch; +import org.apache.skywalking.apm.agent.core.context.CarrierItem; +import org.apache.skywalking.apm.agent.core.context.ContextCarrier; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; + +import java.lang.reflect.Method; + +/** + * @author withlin + */ +public class ActiveMQConsumerInterceptor implements InstanceMethodsAroundInterceptor { + + public static final String OPERATE_NAME_PREFIX = "ActiveMQ/"; + public static final String CONSUMER_OPERATE_NAME_SUFFIX = "/Consumer"; + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + ContextCarrier contextCarrier = new ContextCarrier(); + String url = (String) objInst.getSkyWalkingDynamicField(); + MessageDispatch messageDispatch = (MessageDispatch) allArguments[0]; + AbstractSpan activeSpan = null; + if (messageDispatch.getDestination().getDestinationType() == 1 || messageDispatch.getDestination().getDestinationType() == 5) { + activeSpan = ContextManager.createEntrySpan(OPERATE_NAME_PREFIX + "Queue/" + messageDispatch.getDestination().getPhysicalName() + CONSUMER_OPERATE_NAME_SUFFIX, null).start(System.currentTimeMillis()); + Tags.MQ_BROKER.set(activeSpan, url); + Tags.MQ_QUEUE.set(activeSpan, messageDispatch.getDestination().getPhysicalName()); + } else if (messageDispatch.getDestination().getDestinationType() == 2 || messageDispatch.getDestination().getDestinationType() == 6) { + activeSpan = ContextManager.createEntrySpan(OPERATE_NAME_PREFIX + "Topic/" + messageDispatch.getDestination().getPhysicalName() + CONSUMER_OPERATE_NAME_SUFFIX, null).start(System.currentTimeMillis()); + Tags.MQ_BROKER.set(activeSpan, url); + Tags.MQ_TOPIC.set(activeSpan, messageDispatch.getDestination().getPhysicalName()); + } + activeSpan.setComponent(ComponentsDefine.ACTIVEMQ_CONSUMER); + SpanLayer.asMQ(activeSpan); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + next.setHeadValue(messageDispatch.getMessage().getProperty(next.getHeadKey()).toString()); + } + ContextManager.extract(contextCarrier); + + + } + + + @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/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerConstructorInterceptor.java new file mode 100644 index 000000000..30b9e4cfb --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerConstructorInterceptor.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq; + +import org.apache.activemq.ActiveMQSession; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; + +/** + * @author withlin + */ +public class ActiveMQProducerConstructorInterceptor implements InstanceConstructorInterceptor { + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { + ActiveMQSession session = (ActiveMQSession)allArguments[0]; + objInst.setSkyWalkingDynamicField(session.getConnection().getTransport().getRemoteAddress().split("//")[1]); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java new file mode 100644 index 000000000..19acf56bf --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq; + +import org.apache.activemq.command.ActiveMQDestination; +import org.apache.skywalking.apm.agent.core.context.CarrierItem; +import org.apache.skywalking.apm.agent.core.context.ContextCarrier; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; + +import javax.jms.Message; +import java.lang.reflect.Method; + +/** + * @author withlin + */ +public class ActiveMQProducerInterceptor implements InstanceMethodsAroundInterceptor { + public static final String OPERATE_NAME_PREFIX = "ActiveMQ/"; + public static final String PRODUCER_OPERATE_NAME_SUFFIX = "/Producer"; + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + + ContextCarrier contextCarrier = new ContextCarrier(); + ActiveMQDestination activeMQDestination = (ActiveMQDestination) allArguments[0]; + Message message = (Message) allArguments[1]; + String url = (String) objInst.getSkyWalkingDynamicField(); + AbstractSpan activeSpan = null; + if (activeMQDestination.getDestinationType() == 1 || activeMQDestination.getDestinationType() == 5) { + activeSpan = ContextManager.createExitSpan(OPERATE_NAME_PREFIX + "Queue/" + activeMQDestination.getPhysicalName() + PRODUCER_OPERATE_NAME_SUFFIX, contextCarrier, url); + Tags.MQ_BROKER.set(activeSpan,url); + Tags.MQ_QUEUE.set(activeSpan,activeMQDestination.getPhysicalName()); + + } else if (activeMQDestination.getDestinationType() == 2 || activeMQDestination.getDestinationType() == 6) { + activeSpan = ContextManager.createExitSpan(OPERATE_NAME_PREFIX + "Topic/" + activeMQDestination.getPhysicalName() + PRODUCER_OPERATE_NAME_SUFFIX, contextCarrier, url); + Tags.MQ_BROKER.set(activeSpan, url); + Tags.MQ_TOPIC.set(activeSpan,activeMQDestination.getPhysicalName()); + } + SpanLayer.asMQ(activeSpan); + activeSpan.setComponent(ComponentsDefine.ACTIVEMQ_PRODUCER); + CarrierItem next = contextCarrier.items(); + + while (next.hasNext()) { + next = next.next(); + message.setStringProperty(next.getHeadKey(),next.getHeadValue()); + } + + } + + @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); + } +} \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQConsumerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQConsumerInstrumentation.java new file mode 100644 index 000000000..6357fa2ac --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQConsumerInstrumentation.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch; + + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; + +/** + * {@link ActiveMQConsumerInstrumentation} presents that skywalking intercepts {@link org.apache.activemq.ActiveMQMessageConsumer}. + * + * @author withlin + */ +public class ActiveMQConsumerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + public static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.activemq.ActiveMQConsumerInterceptor"; + public static final String ENHANCE_CLASS_CONSUMER = "org.apache.activemq.ActiveMQMessageConsumer"; + public static final String CONSTRUCTOR_INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.activemq.ActiveMQConsumerConstructorInterceptor"; + public static final String ENHANCE_METHOD_DISPATCH = "dispatch"; + public static final String CONSTRUCTOR_INTERCEPT_TYPE = "org.apache.activemq.ActiveMQSession"; + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[] { + new ConstructorInterceptPoint() { + @Override public ElementMatcher getConstructorMatcher() { + return takesArgumentWithType(0,CONSTRUCTOR_INTERCEPT_TYPE); + } + + @Override public String getConstructorInterceptor() { + return CONSTRUCTOR_INTERCEPTOR_CLASS; + } + } + }; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(ENHANCE_METHOD_DISPATCH); + } + + + @Override public String getMethodsInterceptor() { + return INTERCEPTOR_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override + protected ClassMatch enhanceClass() { + return MultiClassNameMatch.byMultiClassMatch(ENHANCE_CLASS_CONSUMER); + } +} \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQProducerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQProducerInstrumentation.java new file mode 100644 index 000000000..56b280ddb --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/define/ActiveMQProducerInstrumentation.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch; + + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; + +/** + * {@link ActiveMQProducerInstrumentation} presents that skywalking intercepts {@link org.apache.activemq.ActiveMQMessageProducer}. + * + * @author withlin + */ +public class ActiveMQProducerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + public static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.activemq.ActiveMQProducerInterceptor"; + public static final String ENHANCE_CLASS_PRODUCER = "org.apache.activemq.ActiveMQMessageProducer"; + public static final String CONSTRUCTOR_INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.activemq.ActiveMQProducerConstructorInterceptor"; + public static final String ENHANCE_METHOD = "send"; + public static final String CONSTRUCTOR_INTERCEPT_TYPE = "org.apache.activemq.ActiveMQSession"; + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[] { + new ConstructorInterceptPoint() { + @Override public ElementMatcher getConstructorMatcher() { + return takesArgumentWithType(0,CONSTRUCTOR_INTERCEPT_TYPE); + } + + @Override public String getConstructorInterceptor() { + return CONSTRUCTOR_INTERCEPTOR_CLASS; + } + } + }; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(ENHANCE_METHOD).and(takesArgumentWithType(0,"javax.jms.Destination")).and(takesArgumentWithType(1,"javax.jms.Message")); + } + + + @Override public String getMethodsInterceptor() { + return INTERCEPTOR_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override + protected ClassMatch enhanceClass() { + return MultiClassNameMatch.byMultiClassMatch(ENHANCE_CLASS_PRODUCER); + } +} \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/resources/skywalking-plugin.def new file mode 100644 index 000000000..d9528a6bd --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/resources/skywalking-plugin.def @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +activemq-5.x=org.apache.skywalking.apm.plugin.activemq.define.ActiveMQProducerInstrumentation +activemq-5.x=org.apache.skywalking.apm.plugin.activemq.define.ActiveMQConsumerInstrumentation diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerAndProducerConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerAndProducerConstructorInterceptorTest.java new file mode 100644 index 000000000..a0eba2b6c --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerAndProducerConstructorInterceptorTest.java @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq; + +import org.apache.activemq.ActiveMQConnection; +import org.apache.activemq.ActiveMQSession; +import org.apache.activemq.command.SessionId; +import org.apache.activemq.management.JMSStatsImpl; +import org.apache.activemq.transport.FutureResponse; +import org.apache.activemq.transport.ResponseCallback; +import org.apache.activemq.transport.Transport; +import org.apache.activemq.transport.TransportListener; +import org.apache.activemq.util.IdGenerator; +import org.apache.activemq.wireformat.WireFormat; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; + +import javax.jms.JMSException; +import java.io.IOException; +import java.net.URI; +import java.security.cert.X509Certificate; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + + +public class ActiveMQConsumerAndProducerConstructorInterceptorTest { + + @Mock + private ActiveMQConnection activeMQConnection; + + private IdGenerator idGenerator; + + private JMSStatsImpl jmsStats; + + + @Mock + private ActiveMQSession activeMQSession; + + private SessionId sessionId; + + + public class TransportTest implements Transport { + + private String remoteAddress; + @Override + public void oneway(Object o) throws IOException { + + } + + @Override + public FutureResponse asyncRequest(Object o, ResponseCallback responseCallback) throws IOException { + return null; + } + + @Override + public Object request(Object o) throws IOException { + return null; + } + + @Override + public Object request(Object o, int i) throws IOException { + return null; + } + + @Override + public TransportListener getTransportListener() { + return null; + } + + @Override + public void setTransportListener(TransportListener transportListener) { + + } + + @Override + public T narrow(Class aClass) { + return null; + } + + @Override + public String getRemoteAddress() { + return this.remoteAddress; + } + + public String setRemoteAddress(String remoteAddress) { + return this.remoteAddress = remoteAddress; + } + + @Override + public boolean isFaultTolerant() { + return false; + } + + @Override + public boolean isDisposed() { + return false; + } + + @Override + public boolean isConnected() { + return false; + } + + @Override + public boolean isReconnectSupported() { + return false; + } + + @Override + public boolean isUpdateURIsSupported() { + return false; + } + + @Override + public void reconnect(URI uri) throws IOException { + + } + + @Override + public void updateURIs(boolean b, URI[] uris) throws IOException { + + } + + @Override + public int getReceiveCounter() { + return 0; + } + + @Override + public X509Certificate[] getPeerCertificates() { + return new X509Certificate[0]; + } + + @Override + public void setPeerCertificates(X509Certificate[] x509Certificates) { + + } + + @Override + public WireFormat getWireFormat() { + return null; + } + + @Override + public void start() throws Exception { + + } + + @Override + public void stop() throws Exception { + + } + } + + public class TestConnection extends ActiveMQConnection { + + public TestConnection(Transport transport, IdGenerator clientIdGenerator, IdGenerator connectionIdGenerator, JMSStatsImpl factoryStats) throws Exception { + super(transport, clientIdGenerator, connectionIdGenerator, factoryStats); + } + } + + private class TestActiveMQSession extends ActiveMQSession { + + public TestActiveMQSession(ActiveMQConnection connection, SessionId sessionId, int acknowledgeMode, boolean asyncDispatch, boolean sessionAsyncDispatch) throws JMSException { + super(connection, sessionId, acknowledgeMode, asyncDispatch, sessionAsyncDispatch); + } + } + + private ActiveMQConsumerConstructorInterceptor activeMQConsumerAndProducerConstructorInterceptor; + + private EnhancedInstance enhancedInstance = new EnhancedInstance() { + private String test; + @Override + public Object getSkyWalkingDynamicField() { + return test; + } + + @Override + public void setSkyWalkingDynamicField(Object value) { + test = (String)value; + } + }; + @Before + public void setUp() throws Exception { + TransportTest transport = new TransportTest(); + transport.setRemoteAddress("tcp://127.0.0.1:61616"); + idGenerator = new IdGenerator("aaa"); + jmsStats = new JMSStatsImpl(); + activeMQConnection = new TestConnection(transport,idGenerator,idGenerator,jmsStats); + sessionId = new SessionId(); + activeMQSession = new TestActiveMQSession(activeMQConnection,sessionId,1,true,true); + } + + @Test + public void TestActiveMQConsumerAndProducerConstructorInterceptor() { + activeMQConsumerAndProducerConstructorInterceptor = new ActiveMQConsumerConstructorInterceptor(); + activeMQConsumerAndProducerConstructorInterceptor.onConstruct(enhancedInstance,new Object[] {activeMQSession}); + assertThat((String) enhancedInstance.getSkyWalkingDynamicField(), is("127.0.0.1:61616")); + } +} \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptorTest.java new file mode 100644 index 000000000..ea77903b6 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptorTest.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + + +package org.apache.skywalking.apm.plugin.activemq; + +import org.apache.activemq.command.ActiveMQDestination; +import org.apache.activemq.command.Message; +import org.apache.activemq.command.MessageDispatch; +import org.apache.activemq.command.Response; +import org.apache.activemq.state.CommandVisitor; +import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule; +import org.apache.skywalking.apm.agent.test.tools.SegmentStorage; +import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint; +import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner; +import org.junit.*; +import org.junit.runner.RunWith; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; +import javax.jms.JMSException; +import java.io.IOException; + +import java.util.List; + +import static org.hamcrest.CoreMatchers.is; + +import org.junit.Before; +import org.junit.Test; + +@RunWith(PowerMockRunner.class) +@PowerMockRunnerDelegate(TracingSegmentRunner.class) +public class ActiveMQConsumerInterceptorTest { + + @SegmentStoragePoint + private SegmentStorage segmentStorage; + + @Rule + public AgentServiceRule serviceRule = new AgentServiceRule(); + + private ActiveMQConsumerInterceptor activeMQConsumerInterceptor; + + private Object[] arguments; + + private Class[] argumentType; + + private MessageDispatch messageDispatch; + + public class Des extends ActiveMQDestination { + + @Override + protected String getQualifiedPrefix() { + return null; + } + + @Override + public byte getDestinationType() { + return 1; + } + + @Override + public byte getDataStructureType() { + return 0; + } + } + + public class Msg extends Message { + + @Override + public Message copy() { + return null; + } + + @Override + public void clearBody() throws JMSException { + + } + + @Override + public void storeContent() { + + } + + @Override + public void storeContentAndClear() { + + } + + @Override + public Response visit(CommandVisitor commandVisitor) throws Exception { + return null; + } + + @Override + public byte getDataStructureType() { + return 0; + } + } + + private EnhancedInstance enhancedInstance = new EnhancedInstance() { + @Override + public Object getSkyWalkingDynamicField() { + return "localhost:60601"; + } + + @Override + public void setSkyWalkingDynamicField(Object value) { + } + }; + + @Before + public void setUp() throws IOException { + activeMQConsumerInterceptor = new ActiveMQConsumerInterceptor(); + messageDispatch = new MessageDispatch(); + + Des des = new Des(); + des.setPhysicalName("test"); + messageDispatch.setDestination(des); + Message msg = new Msg(); + msg.setProperty("sw3",""); + messageDispatch.setMessage(msg); + arguments = new Object[] {messageDispatch}; + argumentType = null; + } + + @Test + public void testConsumerWithoutMessage() throws Throwable { + activeMQConsumerInterceptor.beforeMethod(enhancedInstance,null,arguments,null,null); + activeMQConsumerInterceptor.afterMethod(enhancedInstance, null, arguments, null, null); + + List traceSegments = segmentStorage.getTraceSegments(); + Assert.assertThat(traceSegments.size(), is(1)); + } + +} \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java new file mode 100644 index 000000000..46387d650 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java @@ -0,0 +1,365 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.activemq; + +import java.util.List; + +import org.apache.activemq.ActiveMQMessageProducer; +import org.apache.activemq.command.ActiveMQDestination; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan; +import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer; +import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.test.helper.SegmentHelper; +import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule; +import org.apache.skywalking.apm.agent.test.tools.SegmentStorage; +import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint; +import org.apache.skywalking.apm.agent.test.tools.SpanAssert; +import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner; +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 javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.Message; +import java.util.Enumeration; + +import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.ACTIVEMQ_PRODUCER; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +@RunWith(PowerMockRunner.class) +@PowerMockRunnerDelegate(TracingSegmentRunner.class) +public class ActiveMQProducerInterceptorTest { + + @SegmentStoragePoint + private SegmentStorage segmentStorage; + + @Rule + public AgentServiceRule serviceRule = new AgentServiceRule(); + + private ActiveMQProducerInterceptor producerInterceptor; + + private Object[] arguments; + + private Class[] argumentType; + + + private MQDestination mqDestination; + + + private Message message; + + + + private class MQDestination extends ActiveMQDestination { + + @Override + protected String getQualifiedPrefix() { + return null; + } + + @Override + public byte getDestinationType() { + return 1; + } + + @Override + public byte getDataStructureType() { + return 1; + } + } + + public class Msg implements Message { + + @Override + public String getJMSMessageID() throws JMSException { + return null; + } + + @Override + public void setJMSMessageID(String s) throws JMSException { + + } + + @Override + public long getJMSTimestamp() throws JMSException { + return 0; + } + + @Override + public void setJMSTimestamp(long l) throws JMSException { + + } + + @Override + public byte[] getJMSCorrelationIDAsBytes() throws JMSException { + return new byte[0]; + } + + @Override + public void setJMSCorrelationIDAsBytes(byte[] bytes) throws JMSException { + + } + + @Override + public void setJMSCorrelationID(String s) throws JMSException { + + } + + @Override + public String getJMSCorrelationID() throws JMSException { + return null; + } + + @Override + public Destination getJMSReplyTo() throws JMSException { + return null; + } + + @Override + public void setJMSReplyTo(Destination destination) throws JMSException { + + } + + @Override + public Destination getJMSDestination() throws JMSException { + return null; + } + + @Override + public void setJMSDestination(Destination destination) throws JMSException { + + } + + @Override + public int getJMSDeliveryMode() throws JMSException { + return 0; + } + + @Override + public void setJMSDeliveryMode(int i) throws JMSException { + + } + + @Override + public boolean getJMSRedelivered() throws JMSException { + return false; + } + + @Override + public void setJMSRedelivered(boolean b) throws JMSException { + + } + + @Override + public String getJMSType() throws JMSException { + return null; + } + + @Override + public void setJMSType(String s) throws JMSException { + + } + + @Override + public long getJMSExpiration() throws JMSException { + return 0; + } + + @Override + public void setJMSExpiration(long l) throws JMSException { + + } + + @Override + public int getJMSPriority() throws JMSException { + return 0; + } + + @Override + public void setJMSPriority(int i) throws JMSException { + + } + + @Override + public void clearProperties() throws JMSException { + + } + + @Override + public boolean propertyExists(String s) throws JMSException { + return false; + } + + @Override + public boolean getBooleanProperty(String s) throws JMSException { + return false; + } + + @Override + public byte getByteProperty(String s) throws JMSException { + return 0; + } + + @Override + public short getShortProperty(String s) throws JMSException { + return 0; + } + + @Override + public int getIntProperty(String s) throws JMSException { + return 0; + } + + @Override + public long getLongProperty(String s) throws JMSException { + return 0; + } + + @Override + public float getFloatProperty(String s) throws JMSException { + return 0; + } + + @Override + public double getDoubleProperty(String s) throws JMSException { + return 0; + } + + @Override + public String getStringProperty(String s) throws JMSException { + return null; + } + + @Override + public Object getObjectProperty(String s) throws JMSException { + return null; + } + + @Override + public Enumeration getPropertyNames() throws JMSException { + return null; + } + + @Override + public void setBooleanProperty(String s, boolean b) throws JMSException { + + } + + @Override + public void setByteProperty(String s, byte b) throws JMSException { + + } + + @Override + public void setShortProperty(String s, short i) throws JMSException { + + } + + @Override + public void setIntProperty(String s, int i) throws JMSException { + + } + + @Override + public void setLongProperty(String s, long l) throws JMSException { + + } + + @Override + public void setFloatProperty(String s, float v) throws JMSException { + + } + + @Override + public void setDoubleProperty(String s, double v) throws JMSException { + + } + + @Override + public void setStringProperty(String s, String s1) throws JMSException { + + } + + @Override + public void setObjectProperty(String s, Object o) throws JMSException { + + } + + @Override + public void acknowledge() throws JMSException { + + } + + @Override + public void clearBody() throws JMSException { + + } + } + + private EnhancedInstance enhancedInstance = new EnhancedInstance() { + @Override + public Object getSkyWalkingDynamicField() { + return "localhost:60601"; + } + + @Override + public void setSkyWalkingDynamicField(Object value) { + } + }; + + + @Before + public void setUp() { + producerInterceptor = new ActiveMQProducerInterceptor(); + mqDestination = new MQDestination(); + mqDestination.setPhysicalName("test"); + message = new Msg(); + arguments = new Object[] {mqDestination, message}; + argumentType = new Class[] {ActiveMQMessageProducer.class}; + + } + + @Test + public void testSendMessage() throws Throwable { + producerInterceptor.beforeMethod(enhancedInstance, null, arguments, null, null); + producerInterceptor.afterMethod(enhancedInstance, null, arguments, null, null); + + List traceSegmentList = segmentStorage.getTraceSegments(); + assertThat(traceSegmentList.size(), is(1)); + + TraceSegment segment = traceSegmentList.get(0); + List spans = SegmentHelper.getSpans(segment); + assertThat(spans.size(), is(1)); + assertMessageSpan(spans.get(0)); + } + + private void assertMessageSpan(AbstractTracingSpan span) { + SpanAssert.assertTag(span, 0, "localhost:60601"); + SpanAssert.assertTag(span, 1, "test"); + SpanAssert.assertComponent(span, ACTIVEMQ_PRODUCER); + SpanAssert.assertLayer(span, SpanLayer.MQ); + assertThat(span.getOperationName(), is("ActiveMQ/Queue/test/Producer")); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index 06a7b61a6..f18a16e65 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -57,6 +57,7 @@ servicecomb-plugin hystrix-1.x-plugin sofarpc-plugin + activemq-5.x-plugin pom From 789cdce7593140ac6549d8410de5b09ab8d141a4 Mon Sep 17 00:00:00 2001 From: XiaoFu Date: Sun, 5 Aug 2018 07:25:55 +0800 Subject: [PATCH 21/47] Update ActiveMQProducerInterceptor.java (#1522) --- .../plugin/activemq/ActiveMQProducerInterceptor.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java index 19acf56bf..37d1d0080 100644 --- a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptor.java @@ -39,6 +39,10 @@ import java.lang.reflect.Method; public class ActiveMQProducerInterceptor implements InstanceMethodsAroundInterceptor { public static final String OPERATE_NAME_PREFIX = "ActiveMQ/"; public static final String PRODUCER_OPERATE_NAME_SUFFIX = "/Producer"; + public static final byte QUEUE_TYPE = 1; + public static final byte TOPIC_TYPE = 2; + public static final byte TEMP_TOPIC_TYPE = 6; + public static final byte TEMP_QUEUE_TYPE = 5; @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { @@ -47,12 +51,12 @@ public class ActiveMQProducerInterceptor implements InstanceMethodsAroundInterce Message message = (Message) allArguments[1]; String url = (String) objInst.getSkyWalkingDynamicField(); AbstractSpan activeSpan = null; - if (activeMQDestination.getDestinationType() == 1 || activeMQDestination.getDestinationType() == 5) { + if (activeMQDestination.getDestinationType() == QUEUE_TYPE || activeMQDestination.getDestinationType() == TEMP_QUEUE_TYPE) { activeSpan = ContextManager.createExitSpan(OPERATE_NAME_PREFIX + "Queue/" + activeMQDestination.getPhysicalName() + PRODUCER_OPERATE_NAME_SUFFIX, contextCarrier, url); Tags.MQ_BROKER.set(activeSpan,url); Tags.MQ_QUEUE.set(activeSpan,activeMQDestination.getPhysicalName()); - } else if (activeMQDestination.getDestinationType() == 2 || activeMQDestination.getDestinationType() == 6) { + } else if (activeMQDestination.getDestinationType() == TOPIC_TYPE || activeMQDestination.getDestinationType() == TEMP_TOPIC_TYPE) { activeSpan = ContextManager.createExitSpan(OPERATE_NAME_PREFIX + "Topic/" + activeMQDestination.getPhysicalName() + PRODUCER_OPERATE_NAME_SUFFIX, contextCarrier, url); Tags.MQ_BROKER.set(activeSpan, url); Tags.MQ_TOPIC.set(activeSpan,activeMQDestination.getPhysicalName()); @@ -78,4 +82,4 @@ public class ActiveMQProducerInterceptor implements InstanceMethodsAroundInterce public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Throwable t) { ContextManager.activeSpan().errorOccurred().log(t); } -} \ No newline at end of file +} From 29c0a9725135ee0138dada6a82e13664dd09690c Mon Sep 17 00:00:00 2001 From: XiaoFu Date: Sun, 5 Aug 2018 08:47:28 +0800 Subject: [PATCH 22/47] Update ActiveMQConsumerInterceptor.java (#1523) --- .../apm/plugin/activemq/ActiveMQConsumerInterceptor.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java index e0a6653cd..be81bf58f 100644 --- a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQConsumerInterceptor.java @@ -39,17 +39,21 @@ public class ActiveMQConsumerInterceptor implements InstanceMethodsAroundInterce public static final String OPERATE_NAME_PREFIX = "ActiveMQ/"; public static final String CONSUMER_OPERATE_NAME_SUFFIX = "/Consumer"; + public static final byte QUEUE_TYPE = 1; + public static final byte TOPIC_TYPE = 2; + public static final byte TEMP_TOPIC_TYPE = 6; + public static final byte TEMP_QUEUE_TYPE = 5; @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { ContextCarrier contextCarrier = new ContextCarrier(); String url = (String) objInst.getSkyWalkingDynamicField(); MessageDispatch messageDispatch = (MessageDispatch) allArguments[0]; AbstractSpan activeSpan = null; - if (messageDispatch.getDestination().getDestinationType() == 1 || messageDispatch.getDestination().getDestinationType() == 5) { + if (messageDispatch.getDestination().getDestinationType() == QUEUE_TYPE || messageDispatch.getDestination().getDestinationType() == TEMP_QUEUE_TYPE) { activeSpan = ContextManager.createEntrySpan(OPERATE_NAME_PREFIX + "Queue/" + messageDispatch.getDestination().getPhysicalName() + CONSUMER_OPERATE_NAME_SUFFIX, null).start(System.currentTimeMillis()); Tags.MQ_BROKER.set(activeSpan, url); Tags.MQ_QUEUE.set(activeSpan, messageDispatch.getDestination().getPhysicalName()); - } else if (messageDispatch.getDestination().getDestinationType() == 2 || messageDispatch.getDestination().getDestinationType() == 6) { + } else if (messageDispatch.getDestination().getDestinationType() == TOPIC_TYPE || messageDispatch.getDestination().getDestinationType() == TEMP_TOPIC_TYPE) { activeSpan = ContextManager.createEntrySpan(OPERATE_NAME_PREFIX + "Topic/" + messageDispatch.getDestination().getPhysicalName() + CONSUMER_OPERATE_NAME_SUFFIX, null).start(System.currentTimeMillis()); Tags.MQ_BROKER.set(activeSpan, url); Tags.MQ_TOPIC.set(activeSpan, messageDispatch.getDestination().getPhysicalName()); From 98200127fdd98c8b9e18e6e52315009defeda8dd Mon Sep 17 00:00:00 2001 From: XiaoFu Date: Sun, 5 Aug 2018 09:20:35 +0800 Subject: [PATCH 23/47] add ActiveMQ support (#1524) --- docs/Supported-list.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Supported-list.md b/docs/Supported-list.md index 5cd527a8f..945b2be2c 100644 --- a/docs/Supported-list.md +++ b/docs/Supported-list.md @@ -33,6 +33,7 @@ * MQ * [RocketMQ](https://github.com/apache/rocketmq) 4.x * [Kafka](http://kafka.apache.org) 0.11.0.0 -> 1.0 + * [ActiveMQ](https://github.com/apache/activemq) 5.x * NoSQL * Redis * [Jedis](https://github.com/xetorthio/jedis) 2.x From d1684a74abd6d05e582b7e6db54be98c6f776ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E6=B4=8B?= Date: Sun, 5 Aug 2018 19:56:30 +0800 Subject: [PATCH 24/47] Add Abstract-CN.md (#1501) --- .../receiver-zipkin/docs/README-CN.md | 24 +++++++++++++++++++ docs/README_ZH.md | 3 ++- docs/cn/Incubating/Abstract-CN.md | 11 +++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md create mode 100644 docs/cn/Incubating/Abstract-CN.md diff --git a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md new file mode 100644 index 000000000..48229b575 --- /dev/null +++ b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md @@ -0,0 +1,24 @@ +# Zipkin接收器 +[Zipkin](http://zipkin.io/)接收器提供了接受Zipkin格式的span数据功能.SkyWalking可以分析、聚合并且将数据展示到可视化界面.因此,用户不需要了解SkyWalking的自动采集探针(Java, .NET, node.js)是如何工作的,或者这些用户因为某些原因不想改变已有的采集方式,例如Zipkin的集成工作已经完成. + +Zipkin接受器在SkyWalking中仅仅只是一个可选特性,即使到目前为止它依然是[孵化特性] +(../../../../docs/cn/Incubating/Abstract-CN.md). + +## 局限性 +作为孵化功能,它仍是一个原型.所以它包含以下几点局限: + +1. 不要在同一分布式系统中使用SkyWalking原生探针和Zipkin的类库。考虑到Zipkin和SkyWalking的HEADER不是共享/可互操作的,它们的两个不会相互传播context.这会导致已跟踪的链接中断 +1. 不支持集群模式. +1. 在进行链路分析时,基于链路会在制定时间内结束。默认链路执行时间不超过2分钟。SkyWalking使用了更复杂的header和context结构,来避免zipkin分析时的这个问题. + +## 打开Zipkin接收器 +Zipkin接收器是一个可选模块,默认是关闭.要打开它,在collector的application.yml配置文件中修改下面的配置项 +```yaml +receiver_zipkin: + default: + host: localhost + port: 9411 + contextPath: / + expireTime: 20 # 单位为秒 + maxCacheSize: 1000000 # traces buffer的大小 +``` diff --git a/docs/README_ZH.md b/docs/README_ZH.md index d97c0bf5a..d31902bf9 100644 --- a/docs/README_ZH.md +++ b/docs/README_ZH.md @@ -22,8 +22,9 @@ * [基于Token认证](cn/Token-auth-CN.md) * [添加自定义组件库](cn/Component-libraries-extend-CN.md) * 孵化特性 - * [个性化服务过滤](../apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md) + * [孵化特性的由来?](cn/Incubating/Abstract-CN.md) * [使用Shardingjdbc作为存储实现](cn/Use-ShardingJDBC-as-storage-implementor-CN.md) + * [接受Zipkin格式的span数据](../apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md) * APM相关介绍资料 * [OpenTracing中文版](https://github.com/opentracing-contrib/opentracing-specification-zh) * Application Toolkit,应用程序工具包 diff --git a/docs/cn/Incubating/Abstract-CN.md b/docs/cn/Incubating/Abstract-CN.md new file mode 100644 index 000000000..04ce589a2 --- /dev/null +++ b/docs/cn/Incubating/Abstract-CN.md @@ -0,0 +1,11 @@ +# 孵化特性 +孵化的功能特性是由SkyWalking社区人员开发和贡献代码. +目前代码还是原型,或者预览版本,并已经提交到主干代码,并进行发布。同时,功能开发者希望社区更多的开发者参与,对功能进行完善。 + +PMC和Committor团队会评估提交的特性,确保它是否具有移植性,是否兼容当前版本. + +下面是已知的,可能存在的孵化功能: +1. collector提供了新的存储实现,例如:支持 ElasticSearch REST API(HTTP协议),MYSQL...... +1. collector添加新的模块. +1. agent添加新的监控插件. +1. collector集成了一些新的功能和服务. From 42028e60ae132f85ca4ac41e2ba823b67a6ea08f Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Mon, 6 Aug 2018 16:23:38 +0800 Subject: [PATCH 25/47] Fix operation name is empty issue (#1525) --- .../v4/HttpClientExecuteInterceptor.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java index 5d2cf2908..af077b9dc 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java @@ -19,12 +19,21 @@ package org.apache.skywalking.apm.plugin.httpClient.v4; import java.lang.reflect.Method; +import java.net.MalformedURLException; import java.net.URL; -import org.apache.http.*; -import org.apache.skywalking.apm.agent.core.context.*; +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.skywalking.apm.agent.core.context.CarrierItem; +import org.apache.skywalking.apm.agent.core.context.ContextCarrier; +import org.apache.skywalking.apm.agent.core.context.ContextManager; import org.apache.skywalking.apm.agent.core.context.tag.Tags; -import org.apache.skywalking.apm.agent.core.context.trace.*; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.*; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterceptor { @@ -43,7 +52,8 @@ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterc "https".equals(httpHost.getSchemeName().toLowerCase()) ? 443 : 80); String uri = httpRequest.getRequestLine().getUri(); - String operationName = uri.startsWith("http") ? new URL(uri).getPath() : uri; + String requestURI = getRequestURI(uri); + String operationName = uri.startsWith("http") ? requestURI : uri; AbstractSpan span = ContextManager.createExitSpan(operationName, contextCarrier, remotePeer); span.setComponent(ComponentsDefine.HTTPCLIENT); @@ -76,7 +86,7 @@ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterc } } } - + ContextManager.stopSpan(); return ret; } @@ -87,4 +97,9 @@ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterc activeSpan.errorOccurred(); activeSpan.log(t); } + + private String getRequestURI(String uri) throws MalformedURLException { + String requestPath = new URL(uri).getPath(); + return requestPath != null && requestPath.length() > 0 ? requestPath : "/"; + } } From 6db0d08fb7632aacdc12ebead4522d1762bb79e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B2=8D=E4=BC=9F=E5=8D=8E?= Date: Thu, 9 Aug 2018 17:49:22 +0800 Subject: [PATCH 26/47] optimize code structure to economize computing resources (#1536) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 优化代码结构,减少不必要的计算,节省计算资源 * 优化代码结构,减少不必要的计算,节省计算资源 --- .../global/std/ResponseTimeDistributionSpanListener.java | 9 +++++---- .../ResponseTimeDistributionSpanListenerTestCase.java | 1 + .../service/IResponseTimeDistributionConfigService.java | 8 ++++++++ .../service/ResponseTimeDistributionConfigService.java | 7 +++++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java index ea14849fb..e467d5244 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java @@ -73,15 +73,16 @@ public class ResponseTimeDistributionSpanListener implements FirstSpanListener { } int getStep(int duration) { - int countOfResponseTimeSteps = configService.getResponseTimeStep() * configService.getCountOfResponseTimeSteps(); int responseTimeStep = configService.getResponseTimeStep(); + int countOfResponseTimeSteps = configService.getCountOfResponseTimeSteps(); + int totalTimeOfResponseTimeSteps = configService.getTotalTimeOfResponseTimeSteps(); - if (duration > countOfResponseTimeSteps) { - return countOfResponseTimeSteps / responseTimeStep; + if (duration > totalTimeOfResponseTimeSteps) { + return countOfResponseTimeSteps; } else if (duration <= responseTimeStep) { return 0; } else { - return (int)Math.ceil((double)duration / (double)responseTimeStep) - 1; + return (int) Math.ceil((double) duration / (double) responseTimeStep) - 1; } } diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java index 3a16c5753..8a8ddbff6 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java @@ -42,6 +42,7 @@ public class ResponseTimeDistributionSpanListenerTestCase { IResponseTimeDistributionConfigService service = Mockito.mock(IResponseTimeDistributionConfigService.class); Mockito.when(service.getResponseTimeStep()).thenReturn(50); Mockito.when(service.getCountOfResponseTimeSteps()).thenReturn(40); + Mockito.when(service.getTotalTimeOfResponseTimeSteps()).thenReturn(2050); ModuleDefine module = Mockito.mock(ModuleDefine.class); Whitebox.setInternalState(module, "loadedProviders", loadedProviders); diff --git a/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java b/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java index 7cec4c441..5a6d25e8c 100644 --- a/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java +++ b/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java @@ -28,4 +28,12 @@ public interface IResponseTimeDistributionConfigService extends Service { int getResponseTimeStep(); int getCountOfResponseTimeSteps(); + + /** + * Equals to getResponseTimeStep() * getCountOfResponseTimeSteps() ,just for economizes computing resources + * + * @return + */ + int getTotalTimeOfResponseTimeSteps(); + } diff --git a/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java b/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java index cc50be2d8..87ed2a2c3 100644 --- a/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java +++ b/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java @@ -25,10 +25,12 @@ public class ResponseTimeDistributionConfigService implements IResponseTimeDistr private final int responseTimeStep; private final int countOfResponseTimeSteps; + private final int totalTimeOfResponseTimeSteps; public ResponseTimeDistributionConfigService(int responseTimeStep, int countOfResponseTimeSteps) { this.responseTimeStep = responseTimeStep; this.countOfResponseTimeSteps = countOfResponseTimeSteps + 1; + this.totalTimeOfResponseTimeSteps = this.responseTimeStep * this.countOfResponseTimeSteps; } @Override public int getResponseTimeStep() { @@ -38,4 +40,9 @@ public class ResponseTimeDistributionConfigService implements IResponseTimeDistr @Override public int getCountOfResponseTimeSteps() { return countOfResponseTimeSteps; } + + @Override + public int getTotalTimeOfResponseTimeSteps() { + return totalTimeOfResponseTimeSteps; + } } From ae00944ccdff67bceeeaf983fe0777dab6c41c73 Mon Sep 17 00:00:00 2001 From: mgsheng Date: Fri, 10 Aug 2018 12:00:04 +0800 Subject: [PATCH 27/47] Update uses-list.md (#1537) --- docs/uses-list.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/uses-list.md b/docs/uses-list.md index 14388d89a..36e94d808 100644 --- a/docs/uses-list.md +++ b/docs/uses-list.md @@ -29,6 +29,7 @@ if any entity(company or orgnization) has any doubt, please contact us by [any o - Qsdjf.com 浙江钱宝网络科技有限公司 https://www.qsdjf.com/index.html - Rongjinbao. 深圳融金宝互联网金融服务有限公司. http://www.rjb777.com - Successchannel 苏州渠成易销网络科技有限公司. http://www.successchannel.com +- Shouqi Limousine & chauffeur Group 首约科技(北京)有限公司. https://www.01zhuanche.com/ - Today36524.com Today便利店 - Tsfinance.com 重庆宜迅联供应链科技有限公司 https://www.tsfinance.com.cn/ - VBill Payment Co., LTD. 随行付. https://www.vbill.cn/ From 86da565a91d39775c256761f84b49e2dc51092c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Sun, 12 Aug 2018 15:47:40 +0800 Subject: [PATCH 28/47] Update users (#1540) * Update users. --- README.md | 4 ++-- README_ZH.md | 4 ++-- docs/{uses-list.md => uses.md} | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) rename docs/{uses-list.md => uses.md} (89%) diff --git a/README.md b/README.md index 584533532..418b54f70 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,9 @@ Follow this [document](https://github.com/apache/incubator-skywalking/blob/maste * QQ Group: 392443393 # Users - + -- [Users list](docs/uses-list.md) +- [Users list](docs/uses.md) - [Submit new user to us.](https://github.com/apache/incubator-skywalking/issues/443)

diff --git a/README_ZH.md b/README_ZH.md index b643bbeae..5f265ce09 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -74,9 +74,9 @@ This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDU * QQ群: 392443393 # Users - + -- [用户案例](docs/users-list.md) +- [用户案例](docs/users.md) - [报告新的用户案例](https://github.com/apache/incubator-skywalking/issues/443) diff --git a/docs/uses-list.md b/docs/uses.md similarity index 89% rename from docs/uses-list.md rename to docs/uses.md index 36e94d808..c7f6aae69 100644 --- a/docs/uses-list.md +++ b/docs/uses.md @@ -1,7 +1,7 @@ -# Use cases +# Uses -All use cases are reported through direct message/mail or [online issue](https://github.com/apache/incubator-skywalking/issues/443), -if any entity(company or orgnization) has any doubt, please contact us by [any official channel](../README.md#contact-us). +All uses are reported through direct message/mail or [online issue](https://github.com/apache/incubator-skywalking/issues/443), +if any entity(company or organization) has any doubt, please contact us by [any official channel](../README.md#contact-us). - 300.cn 中企动力科技股份有限公司 http://www.300.cn/ - 4499.com 四三九九网络股份有限公司. http://www.4399.com/ From 6798686968526298d92b688c35a83c58c606da09 Mon Sep 17 00:00:00 2001 From: "Jared.Tan" Date: Thu, 16 Aug 2018 17:15:50 +0800 Subject: [PATCH 29/47] Typo:fix docs. (#1551) --- .../receiver-zipkin/docs/README-CN.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md index 48229b575..ca1025bf5 100644 --- a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md +++ b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/docs/README-CN.md @@ -1,18 +1,17 @@ # Zipkin接收器 -[Zipkin](http://zipkin.io/)接收器提供了接受Zipkin格式的span数据功能.SkyWalking可以分析、聚合并且将数据展示到可视化界面.因此,用户不需要了解SkyWalking的自动采集探针(Java, .NET, node.js)是如何工作的,或者这些用户因为某些原因不想改变已有的采集方式,例如Zipkin的集成工作已经完成. +[Zipkin](http://zipkin.io/)接收器提供了接受Zipkin格式的span数据功能。SkyWalking可以分析、聚合并且将数据展示到可视化界面。因此,用户不需要了解SkyWalking的自动采集探针(Java, .NET, node.js)是如何工作的,或者这些用户因为某些原因不想改变已有的采集方式,例如在Zipkin的集成工作已经完成的情况下。 -Zipkin接受器在SkyWalking中仅仅只是一个可选特性,即使到目前为止它依然是[孵化特性] -(../../../../docs/cn/Incubating/Abstract-CN.md). +Zipkin接受器在SkyWalking中仅仅只是一个可选特性,即使到目前为止它依然是[孵化特性](../../../../docs/cn/Incubating/Abstract-CN.md)。 ## 局限性 -作为孵化功能,它仍是一个原型.所以它包含以下几点局限: +作为孵化功能,它仍是一个原型。所以它包含以下几点局限: -1. 不要在同一分布式系统中使用SkyWalking原生探针和Zipkin的类库。考虑到Zipkin和SkyWalking的HEADER不是共享/可互操作的,它们的两个不会相互传播context.这会导致已跟踪的链接中断 -1. 不支持集群模式. -1. 在进行链路分析时,基于链路会在制定时间内结束。默认链路执行时间不超过2分钟。SkyWalking使用了更复杂的header和context结构,来避免zipkin分析时的这个问题. +1. 不要在同一分布式系统中使用SkyWalking原生探针和Zipkin的类库。考虑到Zipkin和SkyWalking的HEADER不是共享/可互操作的,它们两者之间不会相互传播context。这会导致已跟踪的链路中断。 +2. 不支持集群模式。 +3. 在进行链路分析时,由于链路会在指定时间内结束。默认链路执行时间不超过2分钟。SkyWalking使用了更复杂的header和context结构,来避免zipkin分析时的这个问题。 -## 打开Zipkin接收器 -Zipkin接收器是一个可选模块,默认是关闭.要打开它,在collector的application.yml配置文件中修改下面的配置项 +## 开启Zipkin接收器 +Zipkin接收器是一个可选模块,默认是关闭的。在collector的application.yml配置文件中修改下面的配置项来开启此功能: ```yaml receiver_zipkin: default: From 4d0032484736d3704d4300f4cdc04ef72d362251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Fri, 17 Aug 2018 17:15:06 +0800 Subject: [PATCH 30/47] Change file name. (#1553) --- README.md | 2 +- docs/{uses.md => users.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/{uses.md => users.md} (100%) diff --git a/README.md b/README.md index 418b54f70..00d9df9c3 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Follow this [document](https://github.com/apache/incubator-skywalking/blob/maste # Users -- [Users list](docs/uses.md) +- [Users list](docs/users.md) - [Submit new user to us.](https://github.com/apache/incubator-skywalking/issues/443)

diff --git a/docs/uses.md b/docs/users.md similarity index 100% rename from docs/uses.md rename to docs/users.md From 8302bbfdfd102a8462ccbc9d177037d7c99cade3 Mon Sep 17 00:00:00 2001 From: jinlong Date: Sat, 18 Aug 2018 08:37:20 +0800 Subject: [PATCH 31/47] add new user (#1557) add new user --- docs/users.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/users.md b/docs/users.md index c7f6aae69..c32247351 100644 --- a/docs/users.md +++ b/docs/users.md @@ -6,6 +6,7 @@ if any entity(company or organization) has any doubt, please contact us by [any - 300.cn 中企动力科技股份有限公司 http://www.300.cn/ - 4499.com 四三九九网络股份有限公司. http://www.4399.com/ - AsiaInfo Inc. http://www.asiainfo.com.cn/ +- Autohome. 汽车之家. http://www.autohome.com.cn - Baixing.com 百姓网 http://www.baixing.com/ - Bizsaas.cn 北京商云科技发展有限公司. http://www.bizsaas.cn/ - Chehejia Automotive. 北京车和家信息技术有限责任公司. https://www.chehejia.com/ From a29a8d7c09641b7c4e722d03c9816d15d68855c4 Mon Sep 17 00:00:00 2001 From: caoyixiong <32847163+IanCao@users.noreply.github.com> Date: Sun, 19 Aug 2018 10:50:06 +0800 Subject: [PATCH 32/47] Fix NPE in alarm content generation. (#1558) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update InstanceReferenceMetricAlarmAssertWorker.java 增加osInfo 判空 * Update InstanceReferenceMetricAlarmAssertWorker.java 增加osinfo 判空 --- .../instance/InstanceReferenceMetricAlarmAssertWorker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java index 997c93ee8..9f5ffc389 100644 --- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java +++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceReferenceMetricAlarmAssertWorker.java @@ -68,7 +68,7 @@ public class InstanceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker< Instance instance = instanceDAO.getInstance(alarm.getBehindInstanceId()); JsonObject osInfo = gson.fromJson(instance.getOsInfo(), JsonObject.class); String serverName = Const.UNKNOWN; - if (osInfo.has("hostName")) { + if (osInfo != null && osInfo.has("hostName")) { serverName = osInfo.get("hostName").getAsString(); } From dd942d15a30958483ccc939bf66b0121859cc243 Mon Sep 17 00:00:00 2001 From: caoyixiong <32847163+IanCao@users.noreply.github.com> Date: Tue, 21 Aug 2018 07:18:40 +0800 Subject: [PATCH 33/47] FIX NPE in tomcat plugin ForwardInterceptor (#1562) --- .../skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java index f7b255ace..68416c7ed 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/tomcat78x/ForwardInterceptor.java @@ -37,7 +37,7 @@ public class ForwardInterceptor implements InstanceMethodsAroundInterceptor, Ins if (ContextManager.isActive()) { AbstractSpan abstractTracingSpan = ContextManager.activeSpan(); Map eventMap = new HashMap(); - eventMap.put("forward-url", (String)objInst.getSkyWalkingDynamicField()); + eventMap.put("forward-url", objInst.getSkyWalkingDynamicField() == null ? "" : String.valueOf(objInst.getSkyWalkingDynamicField())); abstractTracingSpan.log(System.currentTimeMillis(), eventMap); ContextManager.getRuntimeContext().put(Constants.FORWARD_REQUEST_FLAG, true); } From 513b8d689bdb641c1355582f37b9e460a595e125 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Tue, 21 Aug 2018 10:09:49 +0800 Subject: [PATCH 34/47] add components for nodejs agent (#1565) * Add egg component * add koa component --- .../src/main/resources/component-libraries.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml b/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml index 3fc6be5be..141918f98 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml @@ -221,6 +221,12 @@ HttpServer: express: id: 4002 languages: Node.js +Egg: + id: 4003 + languages: Node.js +Koa: + id: 4004 + languages: Node.js # Component Server mapping defines the server display names of some components # e.g. From 0162fdd8ae38623a7554ed767db51177eda0a298 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Tue, 21 Aug 2018 13:53:00 +0800 Subject: [PATCH 35/47] Fix #1549 (#1568) --- .../mvc/commons/interceptor/InvokeForRequestInterceptor.java | 4 ---- .../commons/interceptor/InvokeHandlerMethodInterceptor.java | 2 -- 2 files changed, 6 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java index b02d98f08..b21a62868 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeForRequestInterceptor.java @@ -25,7 +25,6 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceM import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.springframework.web.context.request.NativeWebRequest; -import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT; import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT; /** @@ -44,9 +43,6 @@ public class InvokeForRequestInterceptor implements InstanceMethodsAroundInterce @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { - ContextManager.getRuntimeContext().remove(RESPONSE_KEY_IN_RUNTIME_CONTEXT); - // clear request in this method - ContextManager.getRuntimeContext().remove(REQUEST_KEY_IN_RUNTIME_CONTEXT); return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java index 858ee75e3..33fbec273 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/interceptor/InvokeHandlerMethodInterceptor.java @@ -40,8 +40,6 @@ public class InvokeHandlerMethodInterceptor implements InstanceMethodsAroundInte @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { - ContextManager.getRuntimeContext().remove(RESPONSE_KEY_IN_RUNTIME_CONTEXT); - ContextManager.getRuntimeContext().remove(REQUEST_KEY_IN_RUNTIME_CONTEXT); return ret; } From 46c0e76ef943ab4a4b89ec315a006107e069d54d Mon Sep 17 00:00:00 2001 From: chenqy Date: Tue, 21 Aug 2018 17:22:39 +0800 Subject: [PATCH 36/47] Fix the timeBucket equal to 0 problem (#1570) --- .../service/refmetric/ServiceReferenceMetricSpanListener.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java index fe0395445..15b655287 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java @@ -103,6 +103,10 @@ public class ServiceReferenceMetricSpanListener implements EntrySpanListener, Ex } @Override public void parseExit(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo) { + if (this.minuteTimeBucket == 0) { + this.minuteTimeBucket = segmentCoreInfo.getMinuteTimeBucket(); + } + ServiceReferenceMetric serviceReferenceMetric = new ServiceReferenceMetric(); int peerId = spanDecorator.getPeerId(); From 18d2d352fd432ffa645e024fbc9e34d6aaaca2f6 Mon Sep 17 00:00:00 2001 From: caoyixiong <32847163+IanCao@users.noreply.github.com> Date: Wed, 22 Aug 2018 14:30:58 +0800 Subject: [PATCH 37/47] Fix bug stop stopSpan when not createSpan in Spring Callback (#1572) * Fix bug stop stopSpan when not createSpan --- .../spring/concurrent/FailureCallbackInterceptor.java | 8 ++++++++ .../spring/concurrent/SuccessCallbackInterceptor.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/FailureCallbackInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/FailureCallbackInterceptor.java index a6879b418..234224ba3 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/FailureCallbackInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/FailureCallbackInterceptor.java @@ -51,12 +51,20 @@ public class FailureCallbackInterceptor implements InstanceMethodsAroundIntercep @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { + Object[] cacheValues = (Object[])objInst.getSkyWalkingDynamicField(); + if (cacheValues == null) { + return ret; + } ContextManager.stopSpan(); return ret; } @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Throwable t) { + Object[] cacheValues = (Object[])objInst.getSkyWalkingDynamicField(); + if (cacheValues == null) { + return; + } ContextManager.activeSpan().errorOccurred().log(t); } } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/SuccessCallbackInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/SuccessCallbackInterceptor.java index e0ff6c27e..dcacaab7a 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/SuccessCallbackInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/SuccessCallbackInterceptor.java @@ -51,12 +51,20 @@ public class SuccessCallbackInterceptor implements InstanceMethodsAroundIntercep @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { + Object[] cacheValues = (Object[])objInst.getSkyWalkingDynamicField(); + if (cacheValues == null) { + return ret; + } ContextManager.stopSpan(); return ret; } @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Throwable t) { + Object[] cacheValues = (Object[])objInst.getSkyWalkingDynamicField(); + if (cacheValues == null) { + return; + } ContextManager.activeSpan().errorOccurred().log(t); } } From 1c8431c86f0688dfb98eebb7adf9d88f939352c6 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Wed, 22 Aug 2018 17:43:57 +0800 Subject: [PATCH 38/47] Support ojdbc8 (#1571) --- ...redStatementExecuteMethodsInterceptor.java | 20 +++++++------ .../StatementExecuteMethodsInterceptor.java | 28 ++++++++++--------- .../define/ConnectionInstrumentation.java | 8 +++--- .../define/OracleCallableInstrumentation.java | 6 ++-- ...OraclePrepareStatementInstrumentation.java | 6 ++-- .../OracleStatementInstrumentation.java | 6 ++-- 6 files changed, 43 insertions(+), 31 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/PreparedStatementExecuteMethodsInterceptor.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/PreparedStatementExecuteMethodsInterceptor.java index 065333931..c85f2bc99 100644 --- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/PreparedStatementExecuteMethodsInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/PreparedStatementExecuteMethodsInterceptor.java @@ -39,14 +39,16 @@ public class PreparedStatementExecuteMethodsInterceptor implements InstanceMetho Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)objInst.getSkyWalkingDynamicField(); - ConnectionInfo connectInfo = cacheObject.getConnectionInfo(); + if (cacheObject != null && cacheObject.getConnectionInfo() != null) { + 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); + 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 @@ -54,9 +56,11 @@ public class PreparedStatementExecuteMethodsInterceptor implements InstanceMetho Class[] argumentsTypes, Object ret) throws Throwable { StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)objInst.getSkyWalkingDynamicField(); - if (cacheObject.getConnectionInfo() != null) { + + if (cacheObject != null && cacheObject.getConnectionInfo() != null) { ContextManager.stopSpan(); } + return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/StatementExecuteMethodsInterceptor.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/StatementExecuteMethodsInterceptor.java index df6668e39..b39fa3e48 100644 --- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/StatementExecuteMethodsInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/StatementExecuteMethodsInterceptor.java @@ -34,21 +34,23 @@ public class StatementExecuteMethodsInterceptor implements InstanceMethodsAround public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)objInst.getSkyWalkingDynamicField(); - ConnectionInfo connectInfo = cacheObject.getConnectionInfo(); + if (cacheObject != null && cacheObject.getConnectionInfo() != null) { + 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()); + 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()); - String sql = ""; - if (allArguments.length > 0) { - sql = (String)allArguments[0]; + String sql = ""; + if (allArguments.length > 0) { + sql = (String)allArguments[0]; + } + + Tags.DB_STATEMENT.set(span, sql); + span.setComponent(connectInfo.getComponent()); + + SpanLayer.asDB(span); } - - Tags.DB_STATEMENT.set(span, sql); - span.setComponent(connectInfo.getComponent()); - - SpanLayer.asDB(span); } @Override @@ -56,7 +58,7 @@ public class StatementExecuteMethodsInterceptor implements InstanceMethodsAround Class[] argumentsTypes, Object ret) throws Throwable { StatementEnhanceInfos cacheObject = (StatementEnhanceInfos)objInst.getSkyWalkingDynamicField(); - if (cacheObject.getConnectionInfo() != null) { + if (cacheObject != null && cacheObject.getConnectionInfo() != null) { ContextManager.stopSpan(); } return ret; diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/ConnectionInstrumentation.java index 9702c25b3..f51b02d73 100644 --- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/ConnectionInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/ConnectionInstrumentation.java @@ -24,7 +24,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; -import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch; +import org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch; import org.apache.skywalking.apm.plugin.jdbc.define.Constants; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -33,13 +33,12 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; /** * {@link ConnectionInstrumentation} define that the oracle plugin intercept the following methods that the class which * extend oracle.jdbc.driver.PhysicalConnection - * + * * 1. Enhance prepareStatement by org.apache.skywalking.apm.plugin.jdbc.oracle.CreatePreparedStatementInterceptor * 2. Enhance prepareCall by org.apache.skywalking.apm.plugin.jdbc.oracle.CreateCallableInterceptor * 3. Enhance createStatement by org.apache.skywalking.apm.plugin.jdbc.oracle.CreateStatementInterceptor * 4. Enhance commit, rollback, close, releaseSavepoint by org.apache.skywalking.apm.plugin.jdbc.define.ConnectionServiceMethodInterceptor * - * * @author zhangxin */ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { @@ -48,6 +47,7 @@ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePlugin public static final String PREPARED_STATEMENT_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.oracle.CreatePreparedStatementInterceptor"; public static final String CALLABLE_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.oracle.CreateCallableInterceptor"; public static final String CREATE_STATEMENT_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.oracle.CreateStatementInterceptor"; + public static final String T4C_CONNECTION_CLASS = "oracle.jdbc.driver.T4CConnection"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[0]; @@ -111,6 +111,6 @@ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePlugin } @Override protected ClassMatch enhanceClass() { - return NameMatch.byName(ENHANCE_CLASS); + return MultiClassNameMatch.byMultiClassMatch(ENHANCE_CLASS, T4C_CONNECTION_CLASS); } } diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java index d4f4a0c3f..1c2e50ddb 100644 --- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java @@ -24,14 +24,16 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch; import static net.bytebuddy.matcher.ElementMatchers.named; -import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; import static org.apache.skywalking.apm.plugin.jdbc.oracle.Constants.PREPARED_STATEMENT_INTERCEPT_CLASS; public class OracleCallableInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { public static final String ENHANCE_CLASS = "oracle.jdbc.driver.OracleCallableStatement"; + public static final String CALLABLE_STATEMENT_WRAPPER_CLASS = "oracle.jdbc.driver.OracleCallableStatementWrapper"; + public static final String T4C_CALLABLE_STATMENT_CLASS = "oracle.jdbc.driver.T4CCallableStatement"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[0]; @@ -58,6 +60,6 @@ public class OracleCallableInstrumentation extends ClassInstanceMethodsEnhancePl } @Override protected ClassMatch enhanceClass() { - return byName(ENHANCE_CLASS); + return MultiClassNameMatch.byMultiClassMatch(ENHANCE_CLASS, CALLABLE_STATEMENT_WRAPPER_CLASS, T4C_CALLABLE_STATMENT_CLASS); } } diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java index fe69675ee..5aceca289 100644 --- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java @@ -24,14 +24,16 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch; import static net.bytebuddy.matcher.ElementMatchers.named; -import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; import static org.apache.skywalking.apm.plugin.jdbc.oracle.Constants.PREPARED_STATEMENT_INTERCEPT_CLASS; public class OraclePrepareStatementInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { public static final String ENHANCE_CLASS = "oracle.jdbc.driver.OraclePreparedStatement"; + public static final String PREPARED_STATEMENT_WRAPPER_CLASS = "oracle.jdbc.driver.OraclePreparedStatementWrapper"; + public static final String T4C_PREPARED_STATEMENT_CLASS = "oracle.jdbc.driver.T4CPreparedStatement"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[0]; @@ -59,6 +61,6 @@ public class OraclePrepareStatementInstrumentation extends ClassInstanceMethodsE } @Override protected ClassMatch enhanceClass() { - return byName(ENHANCE_CLASS); + return MultiClassNameMatch.byMultiClassMatch(ENHANCE_CLASS, PREPARED_STATEMENT_WRAPPER_CLASS, T4C_PREPARED_STATEMENT_CLASS); } } diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java index e55f82f34..20784ac8c 100644 --- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java @@ -24,14 +24,16 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.agent.core.plugin.match.MultiClassNameMatch; import static net.bytebuddy.matcher.ElementMatchers.named; -import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; import static org.apache.skywalking.apm.plugin.jdbc.oracle.Constants.STATEMENT_INTERCEPT_CLASS; public class OracleStatementInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { public static final String ENHANCE_CLASS = "oracle.jdbc.driver.OracleStatement"; + public static final String STATEMENT_WRAPPER_CLASS = "oracle.jdbc.driver.OracleStatementWrapper"; + public static final String T4C_STATEMENT_CLASS = "oracle.jdbc.driver.T4CStatement"; @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[0]; @@ -62,6 +64,6 @@ public class OracleStatementInstrumentation extends ClassInstanceMethodsEnhanceP } @Override protected ClassMatch enhanceClass() { - return byName(ENHANCE_CLASS); + return MultiClassNameMatch.byMultiClassMatch(ENHANCE_CLASS, STATEMENT_WRAPPER_CLASS, T4C_STATEMENT_CLASS); } } From d0b951649ffeb44e7e7ae236ed39e3c02cc87978 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Wed, 22 Aug 2018 19:04:15 +0800 Subject: [PATCH 39/47] Moves to Maven wrapper to stabilize the version in use (#1569) * Moves to Maven wrapper to stabilize the version in use This will ensure those building will have similar experience due to having a fixed maven version. * Updates most plugin versions and removes redundant configuration * Sets up build enforcement for JDK 1.8 until further work occurs --- .gitignore | 1 + .mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .mvn/wrapper/maven-wrapper.properties | 1 + .travis.yml | 4 +- .../apm-toolkit-log4j-1.x/pom.xml | 22 -- .../apm-toolkit-log4j-2.x/pom.xml | 23 -- .../apm-toolkit-logback-1.x/pom.xml | 22 -- .../apm-toolkit-trace/pom.xml | 22 -- apm-collector/apm-collector-boot/pom.xml | 11 - .../apm-collector-instrument/pom.xml | 2 - .../collector-remote-grpc-provider/pom.xml | 8 - apm-dist/pom.xml | 2 - apm-protocol/apm-network/pom.xml | 8 - apm-sniffer/apm-agent-core/pom.xml | 11 - apm-sniffer/apm-agent/pom.xml | 3 - .../activemq-5.x-plugin/pom.xml | 19 -- .../apm-sdk-plugin/dubbo-plugin/pom.xml | 19 -- .../elastic-job-2.x-plugin/pom.xml | 15 - .../apm-sdk-plugin/grpc-1.x-plugin/pom.xml | 13 - .../apm-sdk-plugin/h2-1.x-plugin/pom.xml | 16 - .../httpClient-4.x-plugin/pom.xml | 12 - .../httpasyncclient-4.x-plugin/pom.xml | 18 -- .../apm-sdk-plugin/jdbc-commons/pom.xml | 16 - .../apm-sdk-plugin/jedis-2.x-plugin/pom.xml | 13 - .../apm-sdk-plugin/mongodb-2.x-plugin/pom.xml | 19 -- .../apm-sdk-plugin/mongodb-3.x-plugin/pom.xml | 20 -- .../apm-sdk-plugin/mysql-5.x-plugin/pom.xml | 16 - .../apm-sdk-plugin/oracle-10.x-plugin/pom.xml | 16 - apm-sniffer/apm-sdk-plugin/pom.xml | 26 -- .../postgresql-8.x-plugin/pom.xml | 16 - .../apm-sdk-plugin/resin-3.x-plugin/pom.xml | 20 -- .../apm-sdk-plugin/resin-4.x-plugin/pom.xml | 21 -- .../rocketMQ-3.x-plugin/pom.xml | 15 - .../rocketMQ-4.x-plugin/pom.xml | 15 - .../pom.xml | 19 -- .../pom.xml | 19 -- .../sharding-jdbc-1.5.x-plugin/pom.xml | 16 - .../apm-sdk-plugin/sofarpc-plugin/pom.xml | 20 -- .../apm-sdk-plugin/struts2-2.x-plugin/pom.xml | 19 -- apm-sniffer/apm-toolkit-activation/pom.xml | 3 - apm-sniffer/optional-plugins/pom.xml | 3 - .../trace-ignore-plugin/pom.xml | 1 - apm-webapp/pom.xml | 1 - docs/cn/How-to-build-CN.md | 14 +- docs/en/How-to-build.md | 10 +- docs/en/How-to-release.md | 10 +- mvnw | 286 ++++++++++++++++++ mvnw.cmd | 161 ++++++++++ pom.xml | 86 +++++- 49 files changed, 541 insertions(+), 592 deletions(-) create mode 100755 .mvn/wrapper/maven-wrapper.jar create mode 100755 .mvn/wrapper/maven-wrapper.properties create mode 100755 mvnw create mode 100755 mvnw.cmd diff --git a/.gitignore b/.gitignore index 8d6d2d3fd..6fabddb56 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ packages/ **/dependency-reduced-pom.xml /skywalking-agent/ /dist/ +.mvn/wrapper/MavenWrapperDownloader.java diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 - - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - 2.4 - - - 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 d2ae4a721..79503b77c 100644 --- a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml @@ -35,27 +35,4 @@ provided - - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - 2.4 - - - - 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 ab623fe11..8c58433e5 100644 --- a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml @@ -35,26 +35,4 @@ provided - - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - 2.4 - - - diff --git a/apm-application-toolkit/apm-toolkit-trace/pom.xml b/apm-application-toolkit/apm-toolkit-trace/pom.xml index e109cadbe..4aa2acee1 100644 --- a/apm-application-toolkit/apm-toolkit-trace/pom.xml +++ b/apm-application-toolkit/apm-toolkit-trace/pom.xml @@ -28,26 +28,4 @@ jar http://maven.apache.org - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - 2.4 - - - - diff --git a/apm-collector/apm-collector-boot/pom.xml b/apm-collector/apm-collector-boot/pom.xml index 29d27671f..c765cef59 100644 --- a/apm-collector/apm-collector-boot/pom.xml +++ b/apm-collector/apm-collector-boot/pom.xml @@ -212,17 +212,7 @@ - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins maven-jar-plugin - 2.3.2 application.yml @@ -232,7 +222,6 @@ - org.apache.maven.plugins maven-assembly-plugin diff --git a/apm-collector/apm-collector-instrument/pom.xml b/apm-collector/apm-collector-instrument/pom.xml index a868e3a2b..8e2bd5ae0 100644 --- a/apm-collector/apm-collector-instrument/pom.xml +++ b/apm-collector/apm-collector-instrument/pom.xml @@ -44,9 +44,7 @@ collector-instrument-agent - org.apache.maven.plugins maven-shade-plugin - 2.4.1 package 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 51830a798..52e351ec3 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 @@ -55,14 +55,6 @@ - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - org.xolstice.maven.plugins protobuf-maven-plugin diff --git a/apm-dist/pom.xml b/apm-dist/pom.xml index 0d2631e20..e824bd32c 100644 --- a/apm-dist/pom.xml +++ b/apm-dist/pom.xml @@ -51,7 +51,6 @@ apache-skywalking-apm-incubating - org.apache.maven.plugins maven-assembly-plugin @@ -73,7 +72,6 @@ - org.apache.maven.plugins maven-antrun-plugin diff --git a/apm-protocol/apm-network/pom.xml b/apm-protocol/apm-network/pom.xml index 56a554dc3..07bf52283 100644 --- a/apm-protocol/apm-network/pom.xml +++ b/apm-protocol/apm-network/pom.xml @@ -66,14 +66,6 @@ - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - org.xolstice.maven.plugins protobuf-maven-plugin diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml index 569cfc806..04ec423fa 100644 --- a/apm-sniffer/apm-agent-core/pom.xml +++ b/apm-sniffer/apm-agent-core/pom.xml @@ -133,17 +133,7 @@ - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins maven-shade-plugin - 3.0.0 package @@ -205,7 +195,6 @@ - org.apache.maven.plugins maven-antrun-plugin diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml index dba932c66..ff4bde04e 100644 --- a/apm-sniffer/apm-agent/pom.xml +++ b/apm-sniffer/apm-agent/pom.xml @@ -51,9 +51,7 @@ skywalking-agent - org.apache.maven.plugins maven-shade-plugin - 2.4.1 package @@ -96,7 +94,6 @@ - org.apache.maven.plugins maven-antrun-plugin diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml index 0e1525128..c779c7771 100644 --- a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml @@ -41,23 +41,4 @@ provided - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml index 16300f693..85f920279 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml @@ -42,23 +42,4 @@ provided - - - - - org.apache.maven.plugins - maven-source-plugin - - - - 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 index 26b29fbaf..7fd7d268f 100644 --- 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 @@ -47,23 +47,8 @@ - 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/grpc-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml index c2ccbba2d..8c343941d 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 @@ -41,17 +41,4 @@ provided - - - - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - - - 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 4ca2db1d2..d6c8a3178 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 @@ -52,24 +52,8 @@ - org.apache.maven.plugins maven-deploy-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - - 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 8ab3a636e..af1ef3964 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 @@ -56,16 +56,4 @@ test - - - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - - - diff --git a/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml index 45345ec70..4f6f37aa0 100644 --- a/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml @@ -42,22 +42,4 @@ provided - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - - jar - - - - - - diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml index bf1597d87..215653394 100755 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml @@ -46,24 +46,8 @@ - org.apache.maven.plugins maven-deploy-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - 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 108f22d4e..b881186a0 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 @@ -46,17 +46,4 @@ test - - - - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - - - 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 62969d81d..f50105042 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 @@ -46,23 +46,4 @@ provided - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - 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 b4b9b66f5..2ac43e4be 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 @@ -42,24 +42,4 @@ provided - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - 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 04b40b998..c4558a413 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 @@ -58,24 +58,8 @@ - org.apache.maven.plugins maven-deploy-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - 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 6400261cd..02275cde0 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 @@ -53,24 +53,8 @@ - org.apache.maven.plugins maven-deploy-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index f18a16e65..50979f9a5 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -98,9 +98,7 @@ - org.apache.maven.plugins maven-shade-plugin - 2.4.1 package @@ -123,30 +121,6 @@ - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - org.apache.maven.plugins maven-antrun-plugin 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 5d7990e2a..fec2fe60a 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 @@ -52,24 +52,8 @@ - org.apache.maven.plugins maven-deploy-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - 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 89660de28..b4b707623 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 @@ -52,24 +52,4 @@ provided - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - 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 b52fb1767..244ceb1a8 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 @@ -52,25 +52,4 @@ provided - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - - diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml index da0585973..218972974 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml @@ -44,23 +44,8 @@ - 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/pom.xml b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml index 3d5028332..e584a9a0f 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml @@ -44,23 +44,8 @@ - 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/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml index 01cc9acbe..38c1439bf 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml @@ -39,23 +39,4 @@ provided - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml index 39ab9419f..99c07ca91 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml @@ -40,23 +40,4 @@ provided - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - 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 caeca2b5f..73f3fb17b 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 @@ -53,24 +53,8 @@ - org.apache.maven.plugins maven-deploy-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - diff --git a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml index cd1f97dbc..81fb1c93b 100644 --- a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml @@ -41,25 +41,5 @@ 5.4.0 provided - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - 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 5703b9637..67e93d580 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 @@ -54,23 +54,4 @@ test - - - - - org.apache.maven.plugins - maven-source-plugin - - - - attach-sources - none - - jar - - - - - - diff --git a/apm-sniffer/apm-toolkit-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/pom.xml index 346463816..704159f66 100644 --- a/apm-sniffer/apm-toolkit-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/pom.xml @@ -65,9 +65,7 @@ - org.apache.maven.plugins maven-shade-plugin - 2.4.1 package @@ -103,7 +101,6 @@ - org.apache.maven.plugins maven-antrun-plugin diff --git a/apm-sniffer/optional-plugins/pom.xml b/apm-sniffer/optional-plugins/pom.xml index 977cd111f..ba3964304 100644 --- a/apm-sniffer/optional-plugins/pom.xml +++ b/apm-sniffer/optional-plugins/pom.xml @@ -66,9 +66,7 @@ - org.apache.maven.plugins maven-shade-plugin - 2.4.1 package @@ -91,7 +89,6 @@ - org.apache.maven.plugins maven-antrun-plugin diff --git a/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml b/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml index feaffe9da..a2361192c 100644 --- a/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml +++ b/apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml @@ -33,7 +33,6 @@ - org.apache.maven.plugins maven-antrun-plugin diff --git a/apm-webapp/pom.xml b/apm-webapp/pom.xml index 3ec2a8d19..601fa8b02 100644 --- a/apm-webapp/pom.xml +++ b/apm-webapp/pom.xml @@ -144,7 +144,6 @@ - org.apache.maven.plugins maven-resources-plugin ${project.build.sourceEncoding} diff --git a/docs/cn/How-to-build-CN.md b/docs/cn/How-to-build-CN.md index f90e77505..48f84cdda 100644 --- a/docs/cn/How-to-build-CN.md +++ b/docs/cn/How-to-build-CN.md @@ -13,25 +13,25 @@ 1. 切换到tag `git checkout [tagname]` (可选,当需要编译发行版本时,请是切换到指定分支) 1. `git submodule init` 1. `git submodule update` -1. 执行`mvn clean package -DskipTests` +1. 执行`./mvnw clean package -DskipTests` 1. 生成包在`/dist`目录下(.tar.gz是linux环境,.zip是windows环境) ### 从Apache源码镜像下载编译 1. 准备环境: jdk8,Maven -1. 执行`mvn clean package -DskipTests` +1. 执行`./mvnw clean package -DskipTests` 1. 生成包在`/dist`目录下(.tar.gz是linux环境,.zip是windows环境) ## 在IntelliJ IDEA中编译工程 上述步骤在命令行中,能够很好的编译工程,但导入到编译器中的工程依然会有一些报错,我们需要进行几步简单的操作。 -1. 在IntelliJ Terminal中,执行`mvn compile -Dmaven.test.skip=true`进行编译 +1. 在IntelliJ Terminal中,执行`./mvnw compile -Dmaven.test.skip=true`进行编译 1. 设置gRPC的自动生成代码目录,为源码目录 - **apm-protocol/apm-network/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 - **apm-collector/apm-collector-remote/apm-remote-grpc-provider/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 ## 在IntelliJ IDEA中编译工程 上述步骤在命令行中,能够很好的编译工程,但导入到编译器中的工程依然会有一些报错,我们需要进行几步简单的操作。 -1. 在IntelliJ Terminal中,执行`mvn compile -Dmaven.test.skip=true`进行编译 +1. 在IntelliJ Terminal中,执行`./mvnw compile -Dmaven.test.skip=true`进行编译 1. 设置gRPC的自动生成代码目录,为源码目录 - **apm-protocol/apm-network/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 - **apm-collector/apm-collector-remote/apm-remote-grpc-provider/target/generated-sources/protobuf**目录下的`grpc-java`和`java`目录 @@ -100,13 +100,13 @@ 24.0-jre ``` -4. 执行`mvn compile -Dmaven.test.skip=true`进行编译 +4. 执行`./mvnw compile -Dmaven.test.skip=true`进行编译 5. 执行maven update,切记去掉勾选 Clean projects选项(会清掉complie生成的proto转化Java文件) -6. mvn compile 编译collector-remote-grpc-provider和apm-protocol工程并Refresh +6. ./mvnw compile 编译collector-remote-grpc-provider和apm-protocol工程并Refresh ## 编译Resin-3, Resin-4 和 Oracle JDBC 驱动插件 为了遵守Apache关于协议(License)的相关要求,不符合Apache相关要求的类库所对应的Plugin不会自动编译。如需编译对应的插件, -需要手动下载驱动或类库,并将文件拷贝到`ci-dependencies/`中,运行`mvn package`进行编译。 +需要手动下载驱动或类库,并将文件拷贝到`ci-dependencies/`中,运行`./mvnw package`进行编译。 `ci-dependencies/`下对应的类库文件名为: * resin-3.0.9.jar diff --git a/docs/en/How-to-build.md b/docs/en/How-to-build.md index 06f187ac1..006ce4331 100644 --- a/docs/en/How-to-build.md +++ b/docs/en/How-to-build.md @@ -11,17 +11,17 @@ This document helps people to compile and build the project in your maven and se 1. Switch to the tag by using `git checkout [tagname]` (Optional, switch if want to build a release from source codes) 1. `git submodule init` 1. `git submodule update` -1. Run `mvn clean package -DskipTests` +1. Run `./mvnw clean package -DskipTests` 1. All packages are in `/dist`.(.tar.gz for Linux and .zip for Windows). ### Build from Apache source codes 1. Prepare JDK8 and maven3 -1. Run `mvn clean package -DskipTests` +1. Run `./mvnw clean package -DskipTests` 1. All packages are in `/dist`.(.tar.gz for Linux and .zip for Windows). ## Setup your IntelliJ IDEA 1. Import the project as a maven project -1. Run `mvn compile -Dmaven.test.skip=true` to compile project and generate source codes. Because we use gRPC and protobuf. +1. Run `./mvnw compile -Dmaven.test.skip=true` to compile project and generate source codes. Because we use gRPC and protobuf. 1. Set **Generated Source Codes** folders. * `grpc-java` and `java` folders in **apm-protocol/apm-network/target/generated-sources/protobuf** * `grpc-java` and `java` folders in **apm-collector/apm-collector-remote/apm-remote-grpc-provider/target/generated-sources/protobuf** @@ -90,9 +90,9 @@ This document helps people to compile and build the project in your maven and se 24.0-jre ``` -5. Run `mvn compile -Dmaven.test.skip=true` +5. Run `./mvnw compile -Dmaven.test.skip=true` 6. Run `maven update`. Must remove the clean projects item before maven update(This will be clear the proto conversion Java file generated by the complie) -7. Run `mvn compile` complie collector-remote-grpc-provider and apm-protocol +7. Run `./mvnw compile` complie collector-remote-grpc-provider and apm-protocol 8. Refresh project ## Building Resin-3, Resin-4, and OJDBC sdk plugins diff --git a/docs/en/How-to-release.md b/docs/en/How-to-release.md index 8ca7f5dbd..5663d9c3d 100644 --- a/docs/en/How-to-release.md +++ b/docs/en/How-to-release.md @@ -30,18 +30,18 @@ Use the following block as a template and place it in ~/.m2/settings.xml ## Test your settings ``` -mvn clean install -Papache-release (this will build artifacts, sources and sign) +./mvnw clean install -Papache-release (this will build artifacts, sources and sign) ``` ## Prepare the release ``` -mvn release:clean -mvn release:prepare -DautoVersionSubmodules=true +./mvnw release:clean +./mvnw release:prepare -DautoVersionSubmodules=true ``` ## Stage the release ``` -mvn release:perform -DskipTests -Ptravis-ci-submodule +./mvnw release:perform -DskipTests -Ptravis-ci-submodule ``` 1. Set version number as x.y.z, and tag as x.y.z-RCx. `x` in `RCx` is based the number of attempts release, aka `RELEASE_ROUND` in this doc, and starts with 1. 1. The release will automatically be inserted into a temporary staging repository for you. @@ -198,7 +198,7 @@ are in `https://dist.apache.org/repos/dist/dev/incubator/skywalking/x.y.z` with 1. `LICENSE` and `NOTICE` are in Source code and distribution package. 1. Check `shasum -c apache-skywalking-apm-incubating-x.y.z-src.tgz.sha512` 1. Build distribution from source code package (apache-skywalking-incubating-x.y.z-src.tar.gz) by following this [doc](https://github.com/apache/incubator-skywalking/blob/master/docs/en/How-to-build.md#build-from-apache-source-codes). -1. Apache RAT check. Run `mvn apache-rat:check`. (No binary in source codes) +1. Apache RAT check. Run `./mvnw apache-rat:check`. (No binary in source codes) 1. DISCLAIMER exists ## Call for a vote in Apache IPMC diff --git a/mvnw b/mvnw new file mode 100755 index 000000000..5551fde8e --- /dev/null +++ b/mvnw @@ -0,0 +1,286 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100755 index 000000000..48363fa60 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml index f25824190..a66b4be12 100644 --- a/pom.xml +++ b/pom.xml @@ -143,7 +143,70 @@ + + + + + io.takari + maven + 0.6.1 + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + maven-antrun-plugin + 1.8 + + + maven-deploy-plugin + 2.8.2 + + + maven-assembly-plugin + 3.1.0 + + + maven-failsafe-plugin + 2.22.0 + + + maven-surefire-plugin + 2.22.0 + + + maven-jar-plugin + 3.1.0 + + + maven-shade-plugin + 3.1.1 + + + + + maven-enforcer-plugin + 3.0.0-M2 + + + enforce-java + + enforce + + + + + + [1.8,9) + + + + + + org.apache.rat apache-rat-plugin @@ -203,6 +266,9 @@ skywalking-ui/package.json skywalking-ui/package-lock.json + + + .mvn/wrapper/maven-wrapper.properties @@ -215,19 +281,17 @@ - org.apache.maven.plugins maven-compiler-plugin + 3.8.0 ${compiler.version} ${compiler.version} ${project.build.sourceEncoding} - 3.6.1 - org.apache.maven.plugins maven-resources-plugin - 2.4.3 + 3.1.0 ${project.build.sourceEncoding} @@ -242,8 +306,8 @@ - org.apache.maven.plugins maven-source-plugin + 3.0.1 @@ -254,17 +318,16 @@ - 2.4 org.codehaus.mojo versions-maven-plugin - 2.3 + 2.5 org.eluder.coveralls coveralls-maven-plugin - 4.1.0 + 4.3.0 ${project.build.sourceDirectory} @@ -275,7 +338,7 @@ org.jacoco jacoco-maven-plugin - 0.7.9 + 0.8.1 *MethodAccess @@ -292,7 +355,7 @@ maven-checkstyle-plugin - 2.17 + 3.0.0 org.apache.skywalking @@ -337,7 +400,6 @@ org.codehaus.mojo exec-maven-plugin - 1.6.0 git submodule update @@ -374,7 +436,6 @@ org.codehaus.mojo exec-maven-plugin - 1.6.0 install-ojdbc @@ -424,7 +485,6 @@ org.codehaus.mojo exec-maven-plugin - 1.6.0 install-resin-4 From b3959202df421c5bb82bbfc3312c4f71dc54d849 Mon Sep 17 00:00:00 2001 From: oatiz <2278966200@qq.com> Date: Wed, 22 Aug 2018 20:23:43 +0800 Subject: [PATCH 40/47] [Agent] Provide plugin for Elasticsearch 5.x (#1500) * [Agent] Provide plugin for Elasticsearch 5.x Add [Agent] Elasticsearch transport client plugin fix component name add elasticsearch component add elasticSearch component into component-libraries.yml * update support list * update PlainListenableActionFutureInterceptor.java * fix set span attributes * clear runtimeContext * remove extra plugins --- .../main/resources/component-libraries.yml | 9 +- .../trace/component/ComponentsDefine.java | 7 +- .../apm/agent/core/conf/Config.java | 5 + .../elasticsearch-5.x-plugin/pom.xml | 51 ++++++ .../v5/ActionRequestBuilderInterceptor.java | 65 ++++++++ .../plugin/elasticsearch/v5/Constants.java | 46 ++++++ .../v5/ElasticSearchEnhanceInfo.java | 98 +++++++++++ ...lainListenableActionFutureInterceptor.java | 70 ++++++++ .../TransportActionNodeProxyInterceptor.java | 77 +++++++++ .../v5/TransportProxyClientInterceptor.java | 156 ++++++++++++++++++ .../apm/plugin/elasticsearch/v5/Util.java | 35 ++++ .../ActionRequestBuilderInstrumentation.java | 64 +++++++ ...ListenableActionFutureInstrumentation.java | 73 ++++++++ ...ansportActionNodeProxyInstrumentation.java | 73 ++++++++ .../TransportProxyClientInstrumentation.java | 88 ++++++++++ .../src/main/resources/skywalking-plugin.def | 20 +++ apm-sniffer/apm-sdk-plugin/pom.xml | 1 + docs/Supported-list.md | 2 + 18 files changed, 936 insertions(+), 4 deletions(-) create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/pom.xml create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ActionRequestBuilderInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Constants.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ElasticSearchEnhanceInfo.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/PlainListenableActionFutureInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportActionNodeProxyInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportProxyClientInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Util.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/ActionRequestBuilderInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/PlainListenableActionFutureInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportActionNodeProxyInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportProxyClientInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/resources/skywalking-plugin.def diff --git a/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml b/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml index 141918f98..7291c7f7e 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml @@ -165,6 +165,13 @@ activemq-producer: activemq-consumer: id: 46 languages: Java +Elasticsearch: + id: 47 + languages: Java +transport-client: + id: 48 + languages: Java + # .NET/.NET Core components # [3000, 4000) for C#/.NET only AspNetCore: @@ -254,4 +261,4 @@ Component-Server-Mappings: EntityFrameworkCore.Sqlite: SQLite Pomelo.EntityFrameworkCore.MySql: Mysql Npgsql.EntityFrameworkCore.PostgreSQL: PostgreSQL - + transport-client: Elasticsearch diff --git a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java index 02a6730d4..8c60442db 100644 --- a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java +++ b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java @@ -96,6 +96,8 @@ public class ComponentsDefine { public static final OfficialComponent ACTIVEMQ_CONSUMER = new OfficialComponent(46,"activemq-consumer"); + public static final OfficialComponent TRANSPORT_CLIENT = new OfficialComponent(48, "transport-client"); + private static ComponentsDefine INSTANCE = new ComponentsDefine(); private String[] components; @@ -105,7 +107,7 @@ public class ComponentsDefine { } public ComponentsDefine() { - components = new String[47]; + components = new String[49]; addComponent(TOMCAT); addComponent(HTTPCLIENT); addComponent(DUBBO); @@ -141,8 +143,7 @@ public class ComponentsDefine { addComponent(SOFARPC); addComponent(ACTIVEMQ_PRODUCER); addComponent(ACTIVEMQ_CONSUMER); - - + addComponent(TRANSPORT_CLIENT); } private void addComponent(OfficialComponent component) { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java index 893d1aa92..54949e281 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java @@ -164,5 +164,10 @@ public class Config { */ public static boolean TRACE_PARAM = false; } + + public static class Elasticsearch { + + public static boolean TRACE_DSL = false; + } } } diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/pom.xml new file mode 100644 index 000000000..cdcab79f7 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/pom.xml @@ -0,0 +1,51 @@ + + + + + apm-sdk-plugin + org.apache.skywalking + 5.0.0-RC-SNAPSHOT + + 4.0.0 + + apm-elasticsearch-5.x-plugin + jar + + elasticsearch-5.x-plugin + http://maven.apache.org + + + UTF-8 + 1.8 + ${java.version} + ${java.version} + + + + + org.elasticsearch.client + transport + 5.6.6 + provided + + + + \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ActionRequestBuilderInterceptor.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ActionRequestBuilderInterceptor.java new file mode 100644 index 000000000..880b36442 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ActionRequestBuilderInterceptor.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5; + +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +import org.elasticsearch.client.transport.TransportClient; + +import static org.apache.skywalking.apm.plugin.elasticsearch.v5.Constants.ES_ENHANCE_INFO; + +/** + * @author oatiz. + */ +public class ActionRequestBuilderInterceptor implements InstanceConstructorInterceptor { + + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { + ElasticSearchEnhanceInfo enhanceInfo = new ElasticSearchEnhanceInfo(); + + parseClientInfo(allArguments[0], enhanceInfo); + + ContextManager.getRuntimeContext().put(ES_ENHANCE_INFO, enhanceInfo); + } + + private void parseClientInfo(Object client, ElasticSearchEnhanceInfo enhanceInfo) { + + if (client instanceof TransportClient) { + TransportClient transportClient = (TransportClient) client; + + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < transportClient.transportAddresses().size(); i++) { + if (i != transportClient.transportAddresses().size() - 1) { + builder.append(transportClient.transportAddresses().get(i).toString()).append(","); + } else { + builder.append(transportClient.transportAddresses().get(i).toString()); + } + } + + enhanceInfo.setTransportAddress(builder.toString()); + } else { + // avoid NPE + enhanceInfo.setTransportAddress(""); + } + + + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Constants.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Constants.java new file mode 100644 index 000000000..45aed756d --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Constants.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5; + +/** + * @author oatiz. + */ +class Constants { + + static final String DB_TYPE = "Elasticsearch"; + + static final String ELASTICSEARCH_DB_OP_PREFIX = "Elasticsearch/"; + + static final String ES_ENHANCE_INFO = "es_enhance_info"; + + static final String BASE_FUTURE_METHOD = "actionGet"; + + static final String ES_NODE = "node.address"; + + static final String ES_INDEX = "es.indices"; + + static final String ES_TYPE = "es.types"; + + static final String ES_TOOK_MILLIS = "es.took_millis"; + + static final String ES_TOTAL_HITS = "es.total_hits"; + + static final String ES_INGEST_TOOK_MILLIS = "es.ingest_took_millis"; + +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ElasticSearchEnhanceInfo.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ElasticSearchEnhanceInfo.java new file mode 100644 index 000000000..1edcd7b29 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/ElasticSearchEnhanceInfo.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5; + +/** + * @author oatiz. + */ +public class ElasticSearchEnhanceInfo { + /** + * elasticsearch host and port + */ + private String transportAddress; + /** + * elasticsearch cluster name + */ + private String clusterName; + /** + * elasticsearch indices + */ + private String indices; + /** + * elasticsearch types + */ + private String types; + /** + * operation type: INDEX, CREATE, UPDATE, DELETE, BULK-bulkNum, defaultActionName + */ + private String opType; + /** + * source dsl + */ + private String source; + + public String getTransportAddress() { + return transportAddress; + } + + public void setTransportAddress(String transportAddress) { + this.transportAddress = transportAddress; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public String getIndices() { + return indices; + } + + public void setIndices(String indices) { + this.indices = indices; + } + + public String getTypes() { + return types; + } + + public void setTypes(String types) { + this.types = types; + } + + public String getOpType() { + return opType; + } + + public void setOpType(String opType) { + this.opType = opType; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/PlainListenableActionFutureInterceptor.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/PlainListenableActionFutureInterceptor.java new file mode 100644 index 000000000..016a2aba0 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/PlainListenableActionFutureInterceptor.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5; + +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; +import org.elasticsearch.action.bulk.BulkResponse; +import org.elasticsearch.action.search.SearchResponse; + +import java.lang.reflect.Method; + +import static org.apache.skywalking.apm.plugin.elasticsearch.v5.Constants.*; + +/** + * @author oatiz. + */ +public class PlainListenableActionFutureInterceptor implements InstanceMethodsAroundInterceptor { + + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + AbstractSpan span = ContextManager.createLocalSpan(ELASTICSEARCH_DB_OP_PREFIX + BASE_FUTURE_METHOD); + span.setComponent(ComponentsDefine.TRANSPORT_CLIENT); + Tags.DB_TYPE.set(span, DB_TYPE); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Object ret) throws Throwable { + AbstractSpan span = ContextManager.activeSpan(); + if (ret instanceof SearchResponse) { + SearchResponse response = (SearchResponse) ret; + span.tag(ES_TOOK_MILLIS, Long.toString(response.getTookInMillis())); + span.tag(ES_TOTAL_HITS, Long.toString(response.getHits().getTotalHits())); + } else if (ret instanceof BulkResponse) { + BulkResponse response = (BulkResponse) ret; + span.tag(ES_TOOK_MILLIS, Long.toString(response.getTookInMillis())); + span.tag(ES_INGEST_TOOK_MILLIS, Long.toString(response.getIngestTookInMillis())); + } + 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/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportActionNodeProxyInterceptor.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportActionNodeProxyInterceptor.java new file mode 100644 index 000000000..9f3a866d3 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportActionNodeProxyInterceptor.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5; + +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.tag.Tags; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; +import org.elasticsearch.cluster.node.DiscoveryNode; + +import java.lang.reflect.Method; + +import static org.apache.skywalking.apm.agent.core.conf.Config.Plugin.Elasticsearch.TRACE_DSL; +import static org.apache.skywalking.apm.plugin.elasticsearch.v5.Constants.*; +import static org.apache.skywalking.apm.plugin.elasticsearch.v5.Util.wrapperNullStringValue; + +/** + * @author oatiz. + */ +public class TransportActionNodeProxyInterceptor implements InstanceMethodsAroundInterceptor { + + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + + ElasticSearchEnhanceInfo enhanceInfo = (ElasticSearchEnhanceInfo) ContextManager.getRuntimeContext().get(ES_ENHANCE_INFO); + + String opType = allArguments[1].getClass().getSimpleName(); + String operationName = ELASTICSEARCH_DB_OP_PREFIX + opType; + AbstractSpan span = ContextManager.createExitSpan(operationName, enhanceInfo.getTransportAddress()); + span.setComponent(ComponentsDefine.TRANSPORT_CLIENT); + Tags.DB_TYPE.set(span, DB_TYPE); + Tags.DB_INSTANCE.set(span, enhanceInfo.getClusterName()); + if (TRACE_DSL) { + Tags.DB_STATEMENT.set(span, enhanceInfo.getSource()); + } + span.tag(ES_NODE, ((DiscoveryNode) allArguments[0]).getAddress().toString()); + span.tag(ES_INDEX, wrapperNullStringValue(enhanceInfo.getIndices())); + span.tag(ES_TYPE, wrapperNullStringValue(enhanceInfo.getTypes())); + SpanLayer.asDB(span); + ContextManager.getRuntimeContext().remove(ES_ENHANCE_INFO); + } + + @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/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportProxyClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportProxyClientInterceptor.java new file mode 100644 index 000000000..76b713a96 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/TransportProxyClientInterceptor.java @@ -0,0 +1,156 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5; + +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.logging.api.ILog; +import org.apache.skywalking.apm.agent.core.logging.api.LogManager; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.util.StringUtil; +import org.elasticsearch.action.delete.DeleteRequest; +import org.elasticsearch.action.get.GetRequest; +import org.elasticsearch.action.index.IndexRequest; +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.update.UpdateRequest; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.xcontent.XContentFactory; + +import java.io.IOException; +import java.lang.reflect.Method; + +import static org.apache.skywalking.apm.agent.core.conf.Config.Plugin.Elasticsearch.TRACE_DSL; +import static org.apache.skywalking.apm.plugin.elasticsearch.v5.Constants.ES_ENHANCE_INFO; +import static org.apache.skywalking.apm.plugin.elasticsearch.v5.Util.wrapperNullStringValue; + +/** + * @author oatiz. + */ +public class TransportProxyClientInterceptor implements InstanceConstructorInterceptor, InstanceMethodsAroundInterceptor { + + private static final ILog logger = LogManager.getLogger(TransportProxyClientInterceptor.class); + + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { + Settings settings = (Settings) allArguments[0]; + String clusterName = settings.get("cluster.name"); + objInst.setSkyWalkingDynamicField(wrapperNullStringValue(clusterName)); + } + + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + ElasticSearchEnhanceInfo enhanceInfo = (ElasticSearchEnhanceInfo) ContextManager.getRuntimeContext().get(ES_ENHANCE_INFO); + enhanceInfo.setClusterName((String) objInst.getSkyWalkingDynamicField()); + parseRequestInfo(allArguments[1], enhanceInfo); + } + + @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) { + ContextManager.activeSpan().errorOccurred().log(t); + } + + private void parseRequestInfo(Object request, ElasticSearchEnhanceInfo enhanceInfo) { + // search request + if (request instanceof SearchRequest) { + parseSearchRequest(request, enhanceInfo); + return; + } + // get request + if (request instanceof GetRequest) { + parseGetRequest(request, enhanceInfo); + return; + } + // index request + if (request instanceof IndexRequest) { + parseIndexRequest(request, enhanceInfo); + return; + } + // update request + if (request instanceof UpdateRequest) { + parseUpdateRequest(request, enhanceInfo); + return; + } + // delete request + if (request instanceof DeleteRequest) { + parseDeleteRequest(request, enhanceInfo); + } + } + + private void parseSearchRequest(Object request, ElasticSearchEnhanceInfo enhanceInfo) { + SearchRequest searchRequest = (SearchRequest) request; + enhanceInfo.setIndices(StringUtil.join(',', searchRequest.indices())); + enhanceInfo.setTypes(StringUtil.join(',', searchRequest.types())); + if (TRACE_DSL) { + enhanceInfo.setSource(null == searchRequest.source() ? "" : searchRequest.source().toString()); + } + } + + private void parseGetRequest(Object request, ElasticSearchEnhanceInfo enhanceInfo) { + GetRequest getRequest = (GetRequest) request; + enhanceInfo.setIndices(StringUtil.join(',', getRequest.indices())); + enhanceInfo.setTypes(getRequest.type()); + if (TRACE_DSL) { + enhanceInfo.setSource(getRequest.toString()); + } + } + + private void parseIndexRequest(Object request, ElasticSearchEnhanceInfo enhanceInfo) { + IndexRequest indexRequest = (IndexRequest) request; + enhanceInfo.setIndices(StringUtil.join(',', indexRequest.indices())); + enhanceInfo.setTypes(indexRequest.type()); + if (TRACE_DSL) { + enhanceInfo.setSource(indexRequest.toString()); + } + } + + private void parseUpdateRequest(Object request, ElasticSearchEnhanceInfo enhanceInfo) { + UpdateRequest updateRequest = (UpdateRequest) request; + enhanceInfo.setIndices(StringUtil.join(',', updateRequest.indices())); + enhanceInfo.setTypes(updateRequest.type()); + if (TRACE_DSL) { + String updateDsl = ""; + try { + updateDsl = updateRequest.toXContent(XContentFactory.jsonBuilder(), null).string(); + } catch (IOException e) { + logger.warn("trace update request dsl error: ", e); + } + enhanceInfo.setSource(updateDsl); + } + } + + private void parseDeleteRequest(Object request, ElasticSearchEnhanceInfo enhanceInfo) { + DeleteRequest deleteRequest = (DeleteRequest) request; + enhanceInfo.setIndices(StringUtil.join(',', deleteRequest.indices())); + enhanceInfo.setTypes(deleteRequest.type()); + if (TRACE_DSL) { + enhanceInfo.setSource(deleteRequest.toString()); + } + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Util.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Util.java new file mode 100644 index 000000000..293ed1a36 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/Util.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5; + +import static org.apache.skywalking.apm.util.StringUtil.isEmpty; + +/** + * @author oatiz. + */ +class Util { + + static String wrapperNullStringValue(String value) { + if (isEmpty(value)) { + return ""; + } + return value; + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/ActionRequestBuilderInstrumentation.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/ActionRequestBuilderInstrumentation.java new file mode 100644 index 000000000..b10c0f2bc --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/ActionRequestBuilderInstrumentation.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.any; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +/** + * @author oatiz. + */ +public class ActionRequestBuilderInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + + private static final String ENHANCE_CLASS = "org.apache.skywalking.apm.plugin.elasticsearch.v5.ActionRequestBuilderInterceptor"; + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[]{ + new ConstructorInterceptPoint() { + @Override + public ElementMatcher getConstructorMatcher() { + return any(); + } + + @Override + public String getConstructorInterceptor() { + return ENHANCE_CLASS; + } + } + }; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[0]; + } + + @Override + protected ClassMatch enhanceClass() { + return byName("org.elasticsearch.action.ActionRequestBuilder"); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/PlainListenableActionFutureInstrumentation.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/PlainListenableActionFutureInstrumentation.java new file mode 100644 index 000000000..a77b590a3 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/PlainListenableActionFutureInstrumentation.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.StaticMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +/** + * @author oatiz. + */ +public class PlainListenableActionFutureInstrumentation extends ClassEnhancePluginDefine { + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[]{ + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("actionGet"); + } + + @Override + public String getMethodsInterceptor() { + return "org.apache.skywalking.apm.plugin.elasticsearch.v5.PlainListenableActionFutureInterceptor"; + } + + @Override + public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override + protected StaticMethodsInterceptPoint[] getStaticMethodsInterceptPoints() { + return new StaticMethodsInterceptPoint[0]; + } + + @Override + protected ClassMatch enhanceClass() { + return byName("org.elasticsearch.action.support.PlainListenableActionFuture"); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportActionNodeProxyInstrumentation.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportActionNodeProxyInstrumentation.java new file mode 100644 index 000000000..9eb69512c --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportActionNodeProxyInstrumentation.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.StaticMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +/** + * @author oatiz. + */ +public class TransportActionNodeProxyInstrumentation extends ClassEnhancePluginDefine { + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[]{ + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("execute"); + } + + @Override + public String getMethodsInterceptor() { + return "org.apache.skywalking.apm.plugin.elasticsearch.v5.TransportActionNodeProxyInterceptor"; + } + + @Override + public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override + protected StaticMethodsInterceptPoint[] getStaticMethodsInterceptPoints() { + return new StaticMethodsInterceptPoint[0]; + } + + @Override + protected ClassMatch enhanceClass() { + return byName("org.elasticsearch.action.TransportActionNodeProxy"); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportProxyClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportProxyClientInstrumentation.java new file mode 100644 index 000000000..b3fa40ebe --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/elasticsearch/v5/define/TransportProxyClientInstrumentation.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * + */ + +package org.apache.skywalking.apm.plugin.elasticsearch.v5.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.StaticMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.any; +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +/** + * @author oatiz. + */ +public class TransportProxyClientInstrumentation extends ClassEnhancePluginDefine { + + private static final String ENHANCE_CLASS = "org.apache.skywalking.apm.plugin.elasticsearch.v5.TransportProxyClientInterceptor"; + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[]{ + new ConstructorInterceptPoint() { + @Override + public ElementMatcher getConstructorMatcher() { + return any(); + } + + @Override + public String getConstructorInterceptor() { + return ENHANCE_CLASS; + } + } + }; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[]{ + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("execute"); + } + + @Override + public String getMethodsInterceptor() { + return ENHANCE_CLASS; + } + + @Override + public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override + protected StaticMethodsInterceptPoint[] getStaticMethodsInterceptPoints() { + return new StaticMethodsInterceptPoint[0]; + } + + @Override + protected ClassMatch enhanceClass() { + return byName("org.elasticsearch.client.transport.TransportProxyClient"); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/resources/skywalking-plugin.def new file mode 100644 index 000000000..7cb6d6c80 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-5.x-plugin/src/main/resources/skywalking-plugin.def @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +elasticsearch-5.x=org.apache.skywalking.apm.plugin.elasticsearch.v5.define.ActionRequestBuilderInstrumentation +elasticsearch-5.x=org.apache.skywalking.apm.plugin.elasticsearch.v5.define.TransportProxyClientInstrumentation +elasticsearch-5.x=org.apache.skywalking.apm.plugin.elasticsearch.v5.define.TransportActionNodeProxyInstrumentation +elasticsearch-5.x=org.apache.skywalking.apm.plugin.elasticsearch.v5.define.PlainListenableActionFutureInstrumentation diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index 50979f9a5..2b4b76339 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -57,6 +57,7 @@ servicecomb-plugin hystrix-1.x-plugin sofarpc-plugin + elasticsearch-5.x-plugin activemq-5.x-plugin pom diff --git a/docs/Supported-list.md b/docs/Supported-list.md index 945b2be2c..243d69887 100644 --- a/docs/Supported-list.md +++ b/docs/Supported-list.md @@ -41,6 +41,8 @@ * Memcached Client * [Spymemcached](https://github.com/couchbase/spymemcached) 2.x * [Xmemcached](https://github.com/killme2008/xmemcached) 2.x + * [Elasticsearch](https://github.com/elastic/elasticsearch) + * [transport-client](https://github.com/elastic/elasticsearch/tree/master/client/transport) 5.2.x-5.6.x * Service Discovery * [Netflix Eureka](https://github.com/Netflix/eureka) * Spring Ecosystem From 15fed8cc26efcdfa480966f6daf34f581e804805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Thu, 23 Aug 2018 06:18:43 +0800 Subject: [PATCH 41/47] Remove jar from source (#1574) * Delete maven-wrapper.jar * Update .gitignore --- .gitignore | 2 +- .mvn/wrapper/maven-wrapper.jar | Bin 48337 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100755 .mvn/wrapper/maven-wrapper.jar diff --git a/.gitignore b/.gitignore index 6fabddb56..3ddaa8a94 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,4 @@ packages/ **/dependency-reduced-pom.xml /skywalking-agent/ /dist/ -.mvn/wrapper/MavenWrapperDownloader.java +.mvn/wrapper/*.jar diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar deleted file mode 100755 index 01e67997377a393fd672c7dcde9dccbedf0cb1e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48337 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 Date: Thu, 23 Aug 2018 13:06:05 +0800 Subject: [PATCH 42/47] Re-adds maven wrapper downloader so users won't crash if wget is missing (#1576) https://github.com/apache/incubator-skywalking/pull/1574 removed the maven wrapper jar. The shell script will try wget and then this downloader if missing. It is very likely in windows and small vms for people to not have wget installed, so this will prevent support problems (and is why the wrapper includes this) --- .mvn/wrapper/MavenWrapperDownloader.java | 110 +++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100755 .mvn/wrapper/MavenWrapperDownloader.java diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100755 index 000000000..fa4f7b499 --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,110 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +*/ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} From 31e4ceb0b110a312837360d0c470c8384ce58c67 Mon Sep 17 00:00:00 2001 From: caoyixiong <32847163+IanCao@users.noreply.github.com> Date: Thu, 23 Aug 2018 17:17:27 +0800 Subject: [PATCH 43/47] change the agent log level to millisecond (#1580) * Fix bug stop stopSpan when not createSpan * Fix bug stop stopSpan when not createSpan * change the agent log level to millisecond --- .../skywalking/apm/agent/core/logging/core/EasyLogger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java index c8e5845ad..4a21173c6 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java @@ -66,7 +66,7 @@ public class EasyLogger implements ILog { String format(LogLevel level, String message, Throwable t) { return StringUtil.join(' ', level.name(), - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()), targetClass.getSimpleName(), ": ", message, From 59fdc3bfe03e8912879c908c29b0998ed6599c48 Mon Sep 17 00:00:00 2001 From: Gao Hongtao Date: Thu, 23 Aug 2018 17:50:58 +0800 Subject: [PATCH 44/47] Submodule/ui (#1581) * Update submodule skywalking-ui * Update submodule skywalking-ui * Update submodule skywalking-ui * Update submodule skywalking-ui * Update submodule skywalking-ui * Update submodule skywaling-ui --- skywalking-ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skywalking-ui b/skywalking-ui index f9c602936..62b9835ea 160000 --- a/skywalking-ui +++ b/skywalking-ui @@ -1 +1 @@ -Subproject commit f9c602936ab4f386576bf16f203efac61962e424 +Subproject commit 62b9835eaef70f572f6ee810b100a5c3be91dfaa From 999762e19fb8b2f61293ad45b14453029776d0d1 Mon Sep 17 00:00:00 2001 From: Fatih ERDEM <93.fatiherdem@gmail.com> Date: Thu, 23 Aug 2018 17:02:16 +0300 Subject: [PATCH 45/47] Moved hardcoded dependency versions to properties tag in pom.xml (#1582) --- pom.xml | 67 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/pom.xml b/pom.xml index a66b4be12..25c256adb 100644 --- a/pom.xml +++ b/pom.xml @@ -111,21 +111,46 @@ 1.8 2.11.7 1.6.4 - 0.4.13 6.18 + 4.12 + 1.10.19 + + + 0.4.13 + 0.6.1 + 1.6.0 + 1.8 + 2.8.2 + 3.1.0 + 2.22.0 + 2.22.0 + 3.1.0 + 3.1.1 + 3.0.0-M2 + 0.12 + 3.8.0 + 3.1.0 + 3.0.1 + 2.5 + 4.3.0 + 0.8.1 + 3.0.0 + + + junit junit - 4.12 + ${junit.version} test org.mockito mockito-all - 1.10.19 + ${mockito-all.version} test @@ -149,47 +174,47 @@ io.takari maven - 0.6.1 + ${takari-maven-plugin.version} org.codehaus.mojo exec-maven-plugin - 1.6.0 + ${exec-maven-plugin.version} maven-antrun-plugin - 1.8 + ${maven-antrun-plugin.version} maven-deploy-plugin - 2.8.2 + ${maven-deploy-plugin.version} maven-assembly-plugin - 3.1.0 + ${maven-assembly-plugin.version} maven-failsafe-plugin - 2.22.0 + ${maven-failsafe-plugin.version} maven-surefire-plugin - 2.22.0 + ${maven-surefire-plugin.version} maven-jar-plugin - 3.1.0 + ${maven-jar-plugin.version} maven-shade-plugin - 3.1.1 + ${maven-shade-plugin.version} maven-enforcer-plugin - 3.0.0-M2 + ${maven-enforcer-plugin.version} enforce-java @@ -210,7 +235,7 @@ org.apache.rat apache-rat-plugin - 0.12 + ${apache-rat-plugin.version} **/target/** @@ -282,7 +307,7 @@ maven-compiler-plugin - 3.8.0 + ${maven-compiler-plugin.version} ${compiler.version} ${compiler.version} @@ -291,7 +316,7 @@ maven-resources-plugin - 3.1.0 + ${maven-resource-plugin.version} ${project.build.sourceEncoding} @@ -307,7 +332,7 @@ maven-source-plugin - 3.0.1 + ${maven-source-plugin.version} @@ -322,12 +347,12 @@ org.codehaus.mojo versions-maven-plugin - 2.5 + ${versions-maven-plugin.version} org.eluder.coveralls coveralls-maven-plugin - 4.3.0 + ${coveralls-maven-plugin.version} ${project.build.sourceDirectory} @@ -338,7 +363,7 @@ org.jacoco jacoco-maven-plugin - 0.8.1 + ${jacoco-maven-plugin.version} *MethodAccess @@ -355,7 +380,7 @@ maven-checkstyle-plugin - 3.0.0 + ${maven-checkstyle-plugin.version} org.apache.skywalking From 15263bce89f9affb62e3e93651573d8a9b8def7b Mon Sep 17 00:00:00 2001 From: Fatih ERDEM <93.fatiherdem@gmail.com> Date: Fri, 24 Aug 2018 04:28:25 +0300 Subject: [PATCH 46/47] Moved hardcoded dependency versions to properties tag in pom.xml (#1583) --- .../apm-toolkit-log4j-1.x/pom.xml | 6 +++++- .../apm-toolkit-log4j-2.x/pom.xml | 6 +++++- .../apm-toolkit-logback-1.x/pom.xml | 6 +++++- .../apm-toolkit-opentracing/pom.xml | 8 ++++++-- apm-checkstyle/pom.xml | 9 +++++++-- .../collector-remote-grpc-provider/pom.xml | 9 +++++++-- .../apm-collector-thirdparty-receiver/pom.xml | 3 +-- apm-protocol/apm-network/pom.xml | 11 +++++++---- apm-protocol/apm-ui-protocol/pom.xml | 6 +++++- apm-sniffer/apm-agent-core/pom.xml | 12 ++++++++---- .../apm-sdk-plugin/activemq-5.x-plugin/pom.xml | 3 ++- apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml | 3 ++- .../elasticsearch-5.x-plugin/pom.xml | 3 ++- apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml | 3 ++- apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml | 3 ++- .../apm-sdk-plugin/httpClient-4.x-plugin/pom.xml | 10 +++++++--- .../httpasyncclient-4.x-plugin/pom.xml | 3 ++- .../apm-sdk-plugin/hystrix-1.x-plugin/pom.xml | 6 +++++- .../apm-sdk-plugin/jedis-2.x-plugin/pom.xml | 8 ++++++-- .../jetty-plugin/jetty-client-9.0-plugin/pom.xml | 6 +++++- .../jetty-plugin/jetty-client-9.x-plugin/pom.xml | 6 +++++- .../jetty-plugin/jetty-server-9.x-plugin/pom.xml | 6 +++++- apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/pom.xml | 6 +++++- .../apm-sdk-plugin/mongodb-2.x-plugin/pom.xml | 5 +++-- .../apm-sdk-plugin/mongodb-3.x-plugin/pom.xml | 3 ++- apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml | 13 +++++++++---- .../apm-sdk-plugin/mysql-5.x-plugin/pom.xml | 3 ++- .../nutz-plugins/http-1.x-plugin/pom.xml | 6 +++++- .../nutz-plugins/mvc-annotation-1.x-plugin/pom.xml | 9 +++++++-- .../apm-sdk-plugin/oracle-10.x-plugin/pom.xml | 3 ++- apm-sniffer/apm-sdk-plugin/pom.xml | 7 +++++-- .../apm-sdk-plugin/postgresql-8.x-plugin/pom.xml | 3 ++- .../apm-sdk-plugin/resin-3.x-plugin/pom.xml | 6 ++++-- .../apm-sdk-plugin/resin-4.x-plugin/pom.xml | 6 ++++-- .../apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml | 3 ++- .../apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml | 3 ++- .../servicecomb-java-chassis-0.x-plugin/pom.xml | 6 +++++- .../servicecomb-java-chassis-1.x-plugin/pom.xml | 5 ++++- apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml | 3 ++- .../concurrent-util-4.x-plugin/pom.xml | 6 +++++- .../spring-plugins/core-patch/pom.xml | 6 +++++- .../mvc-annotation-3.x-plugin/pom.xml | 12 +++++++++--- .../mvc-annotation-4.x-plugin/pom.xml | 12 +++++++++--- .../spring-plugins/mvc-annotation-commons/pom.xml | 12 +++++++++--- .../spring-plugins/resttemplate-4.x-plugin/pom.xml | 6 +++++- .../spring-cloud-feign-1.x-plugin/pom.xml | 6 +++++- .../apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml | 3 ++- .../apm-sdk-plugin/struts2-2.x-plugin/pom.xml | 9 ++++++--- .../apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml | 6 ++++-- .../apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml | 4 +++- .../apm-toolkit-log4j-1.x-activation/pom.xml | 6 +++++- apm-sniffer/apm-toolkit-activation/pom.xml | 7 +++++-- .../spring-annotation-plugin/pom.xml | 6 +++++- apm-sniffer/optional-plugins/pom.xml | 7 +++++-- apm-webapp/pom.xml | 14 ++++++++++---- pom.xml | 3 --- 56 files changed, 258 insertions(+), 93 deletions(-) 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 0b6d90bf2..88820b978 100644 --- a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml @@ -27,11 +27,15 @@ apm-toolkit-log4j-1.x + + 1.2.17 + + log4j log4j - 1.2.17 + ${log4j.version} provided 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 79503b77c..a417d9e07 100644 --- a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml @@ -27,11 +27,15 @@ apm-toolkit-log4j-2.x + + 2.7 + + org.apache.logging.log4j log4j-core - 2.7 + ${log4j-core.version} provided 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 8c58433e5..df9ef86ab 100644 --- a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml @@ -27,11 +27,15 @@ apm-toolkit-logback-1.x + + 1.2.3 + + ch.qos.logback logback-classic - 1.2.3 + ${logback-classic.version} provided diff --git a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml index 7e59a691d..acaf1622a 100644 --- a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml +++ b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml @@ -27,16 +27,20 @@ apm-toolkit-opentracing + + 0.30.0 + + io.opentracing opentracing-api - 0.30.0 + ${opentracing.version} io.opentracing opentracing-noop - 0.30.0 + ${opentracing.version} diff --git a/apm-checkstyle/pom.xml b/apm-checkstyle/pom.xml index c6ee3475b..8f9f92693 100644 --- a/apm-checkstyle/pom.xml +++ b/apm-checkstyle/pom.xml @@ -30,13 +30,18 @@ 5.0.0-RC-SNAPSHOT Module to hold Checkstyle for SkyWalking. + + 0.7.9 + 4.1.0 + + org.jacoco jacoco-maven-plugin - 0.7.9 + ${jacoco-maven-plugin.version} prepare-agent @@ -49,7 +54,7 @@ org.eluder.coveralls coveralls-maven-plugin - 4.1.0 + ${coveralls-maven-plugin.version} xFwR2GqmxcMxV7tGEpW2NfwIrbCD4cQCS 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 52e351ec3..0e697c271 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 @@ -28,6 +28,11 @@ collector-remote-grpc-provider jar + + 1.4.1.Final + 0.5.0 + + org.apache.skywalking @@ -51,14 +56,14 @@ kr.motd.maven os-maven-plugin - 1.4.1.Final + ${os-maven-plugin.version} org.xolstice.maven.plugins protobuf-maven-plugin - 0.5.0 + ${protobuf-maven-plugin.version} com.weibo motan-core - 0.2.1 + ${motan.version} provided com.weibo motan-transport-netty - 0.2.1 + ${motan.version} provided com.weibo motan-springsupport - 0.2.1 + ${motan.version} provided org.springframework spring-context - 4.2.4.RELEASE + ${spring-context.version} test 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 c4558a413..f3ca2c157 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 @@ -32,13 +32,14 @@ UTF-8 + 5.1.36 mysql mysql-connector-java - 5.1.36 + ${mysql-connector-java.version} test 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 58a60f200..924f010a2 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 @@ -30,11 +30,15 @@ http-1.x-plugin http://maven.apache.org + + 1.r.62 + + org.nutz nutz - 1.r.62 + ${nutz.version} provided 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 6becd07d8..da5dc6429 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 @@ -30,17 +30,22 @@ mvc-annotation-1.x-plugin http://maven.apache.org + + 1.r.62 + 3.1.0 + + org.nutz nutz - 1.r.62 + ${nutz.version} provided javax.servlet javax.servlet-api - 3.1.0 + ${javax-servlet-api.version} provided 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 02275cde0..3ff2b20e4 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 @@ -33,13 +33,14 @@ UTF-8 + 10.2.0.4.0 com.oracle ojdbc14 - 10.2.0.4.0 + ${ojdbc14.version} provided diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index 2b4b76339..38cba1bf8 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -73,6 +73,9 @@ ${project.build.directory}${sdk.plugin.related.dir}/../../../../skywalking-agent ${agent.package.dest.dir}/plugins + + 1.0b3 + 1.8.1 @@ -148,7 +151,7 @@ ant-contrib ant-contrib - 1.0b3 + ${ant-contrib.version} ant @@ -159,7 +162,7 @@ org.apache.ant ant-nodeps - 1.8.1 + ${ant-nodeps.version} 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 fec2fe60a..b2692e2ee 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 @@ -32,13 +32,14 @@ UTF-8 + 42.0.0 org.postgresql postgresql - 42.0.0 + ${postgresql.version} provided 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 b4b707623..1bfcd1447 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 @@ -36,19 +36,21 @@ UTF-8 + 3.0.9 + 3.0.1 com.caucho resin - 3.0.9 + ${resin.version} provided javax.servlet javax.servlet-api - 3.0.1 + ${javax-servlet-api.version} provided 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 244ceb1a8..616deb213 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 @@ -36,19 +36,21 @@ UTF-8 + 4.0.41 + 3.0.1 com.caucho resin - 4.0.41 + ${resin.version} provided javax.servlet javax.servlet-api - 3.0.1 + ${javax-servlet-api.version} provided diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml index 218972974..80f3c7cfc 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml @@ -30,13 +30,14 @@ UTF-8 + 3.6.2.Final com.alibaba.rocketmq rocketmq-client - 3.6.2.Final + ${rocketmq-client.version} provided 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 index e584a9a0f..71fdc5246 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml @@ -30,13 +30,14 @@ UTF-8 + 4.1.0-incubating org.apache.rocketmq rocketmq-client - 4.1.0-incubating + ${rocketmq-client.version} provided diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml index 38c1439bf..db758d6d8 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml @@ -30,12 +30,16 @@ servicecomb-java-chassis-0.x-plugin http://maven.apache.org + + + 0.5.0 + io.servicecomb java-chassis-core - 0.5.0 + ${java-chassis-core.version} provided diff --git a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml index 99c07ca91..87fe7a658 100644 --- a/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml @@ -31,12 +31,15 @@ servicecomb-java-chassis-1.x-plugin http://maven.apache.org + + 1.0.0-m1 + org.apache.servicecomb java-chassis-core - 1.0.0-m1 + ${java-chassis-core.version} provided diff --git a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml index 81fb1c93b..68b5eb292 100644 --- a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml @@ -32,13 +32,14 @@ UTF-8 + 5.4.0 com.alipay.sofa sofa-rpc-all - 5.4.0 + ${sofa-rpc-all.version} provided 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 afa3bf43c..402e60fad 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 @@ -30,11 +30,15 @@ concurrent-util-4.x-plugin http://maven.apache.org + + 4.3.10.RELEASE + + org.springframework spring-core - 4.3.10.RELEASE + ${spring-core.version} provided 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 0fb2f92dc..e04f427f2 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 @@ -28,11 +28,15 @@ apm-spring-core-patch core-patch + + 3.2.9.RELEASE + + org.springframework spring-aop - 3.2.9.RELEASE + ${spring-aop.version} provided 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 246f7cf25..b24f66afb 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 @@ -30,23 +30,29 @@ mvc-annotation-3.x-plugin http://maven.apache.org + + 3.2.18.RELEASE + 3.2.18.RELEASE + 3.0.1 + + org.springframework spring-core - 3.2.18.RELEASE + ${spring-core.version} provided org.springframework spring-webmvc - 3.2.18.RELEASE + ${spring-webmvc.version} provided javax.servlet javax.servlet-api - 3.0.1 + ${javax-servlet-api.version} provided 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 117b1bfc3..c43435f9a 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 @@ -30,23 +30,29 @@ mvc-annotation-4.x-plugin http://maven.apache.org + + 4.3.10.RELEASE + 4.3.8.RELEASE + 3.0.1 + + org.springframework spring-core - 4.3.10.RELEASE + ${spring-core.version} provided org.springframework spring-webmvc - 4.3.8.RELEASE + ${spring-webmvc.version} provided javax.servlet javax.servlet-api - 3.0.1 + ${javax-servlet-api.version} provided 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 index 222f67e83..8e802bccf 100644 --- 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 @@ -30,23 +30,29 @@ mvc-annotation-commons http://maven.apache.org + + 4.3.10.RELEASE + 4.3.8.RELEASE + 3.0.1 + + org.springframework spring-core - 4.3.10.RELEASE + ${spring-core.version} provided org.springframework spring-webmvc - 4.3.8.RELEASE + ${spring-webmvc.version} provided javax.servlet javax.servlet-api - 3.0.1 + ${javax-servlet-api.version} provided 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 6c642c025..11027373d 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 @@ -30,11 +30,15 @@ resttemplate-4.3.x-plugin http://maven.apache.org + + 4.3.10.RELEASE + + org.springframework spring-web - 4.3.10.RELEASE + ${spring-web.version} provided 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 49d114fe3..969fef13c 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 @@ -33,11 +33,15 @@ spring-cloud-feign-1.x-plugin http://maven.apache.org + + 1.1.0.RELEASE + + org.springframework.cloud spring-cloud-starter-feign - 1.1.0.RELEASE + ${spring-cloud-starter-feign.version} provided 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 a3951b46d..94b84c6fe 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 @@ -32,6 +32,7 @@ UTF-8 2.11.1 + 2.4.1 @@ -44,7 +45,7 @@ org.apache.logging.log4j log4j-core - 2.4.1 + ${log4j-core.version} test 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 67e93d580..7973b8230 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 @@ -32,25 +32,28 @@ UTF-8 + 2.3.1 + 3.1.0 + 2.0 org.apache.struts struts2-core - 2.3.1 + ${struts2-core.version} provided javax.servlet javax.servlet-api - 3.1.0 + ${javax-servlet-api.version} provided javax.servlet jsp-api - 2.0 + ${jsp-api.version} test 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 8ab292ed5..eae8b203c 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 @@ -32,13 +32,15 @@ 8.0.36 + 4.12 + 4.5.2 junit junit - 4.12 + ${junit.version} test @@ -62,7 +64,7 @@ org.apache.httpcomponents httpclient - 4.5.2 + ${apache-httpclient.version} test 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 ecf0d632b..f0def7888 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 @@ -30,7 +30,9 @@ UTF-8 + 2.0.0 + 2.4.1 @@ -43,7 +45,7 @@ org.apache.logging.log4j log4j-core - 2.4.1 + ${log4j-core.version} test 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 1b4dd3a20..c88554516 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 @@ -27,11 +27,15 @@ apm-toolkit-log4j-1.x-activation + + 1.2.17 + + log4j log4j - 1.2.17 + ${log4j.version} test diff --git a/apm-sniffer/apm-toolkit-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/pom.xml index 704159f66..b081907ac 100644 --- a/apm-sniffer/apm-toolkit-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/pom.xml @@ -39,6 +39,9 @@ UTF-8 net.bytebuddy ${shade.package}.${shade.net.bytebuddy.source} + + 1.0b3 + 1.8.1 @@ -127,7 +130,7 @@ ant-contrib ant-contrib - 1.0b3 + ${ant-contrib.version} ant @@ -138,7 +141,7 @@ org.apache.ant ant-nodeps - 1.8.1 + ${ant-nodeps.version} diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml index 6506a4f2d..e8bd0efd6 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml @@ -28,11 +28,15 @@ apm-spring-annotation-plugin + + 3.2.0.RELEASE + + org.springframework spring-context - 3.2.0.RELEASE + ${spring-context.version} provided diff --git a/apm-sniffer/optional-plugins/pom.xml b/apm-sniffer/optional-plugins/pom.xml index ba3964304..34cf70549 100644 --- a/apm-sniffer/optional-plugins/pom.xml +++ b/apm-sniffer/optional-plugins/pom.xml @@ -35,6 +35,9 @@ ${project.build.directory}${sdk.plugin.related.dir}/../../../../skywalking-agent ${agent.package.dest.dir}/optional-plugins + + 1.0b3 + 1.8.1 @@ -114,7 +117,7 @@ ant-contrib ant-contrib - 1.0b3 + ${ant-contrib.version} ant @@ -125,7 +128,7 @@ org.apache.ant ant-nodeps - 1.8.1 + ${ant-nodeps.version} diff --git a/apm-webapp/pom.xml b/apm-webapp/pom.xml index 601fa8b02..cdfde64fb 100644 --- a/apm-webapp/pom.xml +++ b/apm-webapp/pom.xml @@ -27,11 +27,17 @@ apm-webapp jar + 1.8 UTF-8 1.5.11.RELEASE 2.6.2 + 2.8.2 + 4.5.3 + Edgware.SR1 + 1.6 + ${project.parent.basedir}/skywalking-ui @@ -40,7 +46,7 @@ org.springframework.cloud spring-cloud-dependencies - Edgware.SR1 + ${spring-cloud-dependencies.version} pom import @@ -71,12 +77,12 @@ com.google.code.gson gson - 2.8.2 + ${gson.version} org.apache.httpcomponents httpclient - 4.5.3 + ${apache-httpclient.version} org.springframework.cloud @@ -111,7 +117,7 @@ com.github.eirslett frontend-maven-plugin - 1.6 + ${frontend-maven-plugin.version} ${ui.path} v8.9.4 diff --git a/pom.xml b/pom.xml index 25c256adb..ce126141d 100644 --- a/pom.xml +++ b/pom.xml @@ -135,9 +135,6 @@ 4.3.0 0.8.1 3.0.0 - - - From 6e6e13b9f53214164abd0d707ebc9947bd6fa495 Mon Sep 17 00:00:00 2001 From: caoyixiong <32847163+IanCao@users.noreply.github.com> Date: Sat, 25 Aug 2018 19:00:27 +0800 Subject: [PATCH 47/47] add the function of the specified agent config (#1584) * Fix bug stop stopSpan when not createSpan * Fix bug stop stopSpan when not createSpan * change the agent log level to millisecond * add the function of the specified-agent-config * Update README_ZH.md * Use -D to set the specified config path * add docs * update docs * change method name * add link * change the function name * change the key * format doc --- .../core/conf/SnifferConfigInitializer.java | 17 +++++++---- docs/README.md | 1 + docs/README_ZH.md | 1 + docs/cn/Specified-agent-config-CN.md | 26 +++++++++++++++++ docs/en/Specified-agent-config.md | 29 +++++++++++++++++++ 5 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 docs/cn/Specified-agent-config-CN.md create mode 100644 docs/en/Specified-agent-config.md diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java index 477455b76..1509afb96 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java @@ -41,12 +41,14 @@ import org.apache.skywalking.apm.util.StringUtil; */ public class SnifferConfigInitializer { private static final ILog logger = LogManager.getLogger(SnifferConfigInitializer.class); - private static String CONFIG_FILE_NAME = "/config/agent.config"; + private static String SPECIFIED_CONFIG_PATH = "skywalking_config"; + private static String DEFAULT_CONFIG_FILE_NAME = "/config/agent.config"; private static String ENV_KEY_PREFIX = "skywalking."; private static boolean IS_INIT_COMPLETED = false; /** - * Try to locate `agent.config`, which should be in the /config dictionary of agent package. + * If the specified agent config path is set, the agent will try to locate the specified agent config. + * If the specified agent config path is not set , the agent will try to locate `agent.config`, which should be in the /config dictionary of agent package. *

* Also try to override the config by system.env and system.properties. All the keys in these two places should * start with {@link #ENV_KEY_PREFIX}. e.g. in env `skywalking.agent.application_code=yourAppName` to override @@ -58,7 +60,7 @@ public class SnifferConfigInitializer { InputStreamReader configFileStream; try { - configFileStream = loadConfigFromAgentFolder(); + configFileStream = loadConfig(); Properties properties = new Properties(); properties.load(configFileStream); ConfigInitializer.initialize(properties, Config.class); @@ -113,12 +115,15 @@ public class SnifferConfigInitializer { } /** - * Load the config file, where the agent jar is. + * Load the specified config file or default config file * * @return the config file {@link InputStream}, or null if not needEnhance. */ - private static InputStreamReader loadConfigFromAgentFolder() throws AgentPackageNotFoundException, ConfigNotFoundException, ConfigReadFailedException { - File configFile = new File(AgentPackagePath.getPath(), CONFIG_FILE_NAME); + private static InputStreamReader loadConfig() throws AgentPackageNotFoundException, ConfigNotFoundException, ConfigReadFailedException { + + String specifiedConfigPath = System.getProperties().getProperty(SPECIFIED_CONFIG_PATH); + File configFile = StringUtil.isEmpty(specifiedConfigPath) ? new File(AgentPackagePath.getPath(), DEFAULT_CONFIG_FILE_NAME) : new File(specifiedConfigPath); + if (configFile.exists() && configFile.isFile()) { try { logger.info("Config file found in {}.", configFile); diff --git a/docs/README.md b/docs/README.md index 0d3481c3a..d6c68b956 100644 --- a/docs/README.md +++ b/docs/README.md @@ -13,6 +13,7 @@ * [[**Incubating**] Filter traces through custom services](../apm-sniffer/optional-plugins/trace-ignore-plugin/README.md) * [Architecture Design](en/Architecture.md) * Advanced Features + * [Locate agent config file by system property](en/Specified-agent-config.md) * [Override settings through System.properties](en/Setting-override.md) * [Direct uplink and disable naming discovery](en/Direct-uplink.md) * [Open TLS](en/TLS.md) diff --git a/docs/README_ZH.md b/docs/README_ZH.md index d31902bf9..d1bd9e645 100644 --- a/docs/README_ZH.md +++ b/docs/README_ZH.md @@ -15,6 +15,7 @@ * [[**孵化特性**] 自定义配置忽略追踪信息](../apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md) * [架构设计](cn/Architecture-CN.md) * 高级特性 + * [自定义探针配置文件路径](cn/Specified-agent-config-CN.md) * [通过系统启动参数进行覆盖配置](cn/Setting-override-CN.md) * [服务直连(Direct uplink)及禁用名称服务(naming service)](cn/Direct-uplink-CN.md) * [开启TLS](cn/TLS-CN.md) diff --git a/docs/cn/Specified-agent-config-CN.md b/docs/cn/Specified-agent-config-CN.md new file mode 100644 index 000000000..67db7fa15 --- /dev/null +++ b/docs/cn/Specified-agent-config-CN.md @@ -0,0 +1,26 @@ +# 自定义探针配置文件路径 + +## 版本支持 + +5.0.0-RC+ + +## 什么是自定义探针配置文件路径? +默认情况下, SkyWalking 探针读取与 `SkyWalking-agent.jar` 同目录级别下的 `config` 目录下的 `agent.config` 配置文件。 +用户可以自定义探针配置文件的路径,让探针监控的每个服务都是用其特有文件目录的探针配置,用来统一管理一台物理机器上面的多个不同运行服务的探针配置。此自定义探针配置文件与[通过系统启动参数进行覆盖配置](Setting-override-CN.md)无任何冲突。 + +## 配置优先级 +自定义探针配置文件 > 默认的配置文件 + +## 自定义探针配置路径 + 自定义的探针配置文件内容格式必须与默认探针配置文件内容格式一致,这里所改变的仅仅只是配置文件的路径 + +**使用方式:使用 `启动参数(-D)` 的方式来设置探针配置文件路径** + + ``` + -Dskywalking_config=/path/to/agent.config + ``` + 其中的`/path/to/agent.config` 代表的是自定义探针配置文件的绝对路径 + + + + diff --git a/docs/en/Specified-agent-config.md b/docs/en/Specified-agent-config.md new file mode 100644 index 000000000..bd0b70641 --- /dev/null +++ b/docs/en/Specified-agent-config.md @@ -0,0 +1,29 @@ +# Locate agent config file by system property + +## Supported version + +5.0.0-RC+ + +## What is Locate agent config file by system property ? +In Default. The agent will try to locate `agent.config`, which should be in the `/config` dictionary of agent package. +If User sets the specified agent config file through system properties, The agent will try to load file from there. +By the way, This function has no conflict with [Setting Override](Setting-override.md) + +## Override priority +The specified agent config > The default agent config + +## How to use + +The content formats of the specified config must be same as the default config. + + +**Using `System.Properties(-D)` to set the specified config path** + + ``` + -Dskywalking_config=/path/to/agent.config + ``` + `/path/to/agent.config` is the absolute path of the specified config file + + + +