diff --git a/.gitignore b/.gitignore
index 32858aad3..f94a9ea9f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,7 @@
# Mobile Tools for Java (J2ME)
.mtj.tmp/
-# Package Files #
+# Package Files
*.jar
*.war
*.ear
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..c7e362198
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,13 @@
+language: java
+install:
+ - cd ci-dependencies
+ - mvn install:install-file -Dfile=jmxtools-1.2.1.jar -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar
+ - mvn install:install-file -Dfile=jmxri-1.2.1.jar -DgroupId=com.sun.jmx -DartifactId=jmxri -Dversion=1.2.1 -Dpackaging=jar
+ - mvn install:install-file -Dfile=dubbox-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbox -Dversion=2.8.4 -Dpackaging=jar
+ - cd ..
+
+script:
+ - mvn clean install -Dmaven.test.skip=true
+
+after_success:
+ - mvn clean cobertura:cobertura coveralls:report
\ No newline at end of file
diff --git a/README.md b/README.md
index 5ad844892..7648bd13c 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,10 @@
-# Sky Walking
+Sky Walking
+==========
+
SkyWalking: Large-Scale Distributed Systems Tracing Infrastructure, 是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。
+
+[](https://travis-ci.org/wu-sheng/sky-walking)
+
* 核心理论为[Google Dapper论文:Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html),英语有困难的同学可参考[国内翻译](http://duanple.blog.163.com/blog/static/70971767201329113141336/)
* 本分析系统能通过不修改或少量修改代码的模式,对现有的JAVA应用或J2EE应用进行监控和数据收集,并针对应用进场进行准实时告警。此外提供大量的调用性能分析功能,解决目前的监控系统主要监控进程、端口而非应用实际性能的问题。
* 支持国内常用的dubbo以及dubbox等常见RPC框架,支持应用异常的邮件告警
@@ -12,8 +17,9 @@ SkyWalking: Large-Scale Distributed Systems Tracing Infrastructure, 是一个对
|spring-plugin| spring配置文件 | - | - | - |
|jdbc-plugin| jdbc配置文件 | - | - | - |
|mysql-plugin| - | YES | - | - |
-|httpClient-4.x-plugin| - | YES | - | -
+|httpClient-4.x-plugin| - | YES | - | - |
|httpClient-4.x-plugin-dubbox-rest-attachment| - | YES | - | 需引用httpClient-4.x-plugin |
+|jedis-2.x-plugin| - | YES | - | - |
|httpclient-4.2.x-plugin| - | - | YES | 需要使用新提供的httpClient包装对象 |
|httpclient-4.3.x-plugin| - | - | YES | 需要使用新提供的httpClient包装对象 |
diff --git a/ci-dependencies/dubbox-2.8.4.jar b/ci-dependencies/dubbox-2.8.4.jar
new file mode 100644
index 000000000..5a207056e
Binary files /dev/null and b/ci-dependencies/dubbox-2.8.4.jar differ
diff --git a/ci-dependencies/jmxri-1.2.1.jar b/ci-dependencies/jmxri-1.2.1.jar
new file mode 100644
index 000000000..71428a6e1
Binary files /dev/null and b/ci-dependencies/jmxri-1.2.1.jar differ
diff --git a/ci-dependencies/jmxtools-1.2.1.jar b/ci-dependencies/jmxtools-1.2.1.jar
new file mode 100644
index 000000000..2e93c3b9d
Binary files /dev/null and b/ci-dependencies/jmxtools-1.2.1.jar differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 000000000..1dbb3628e
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,74 @@
+
+
+ 4.0.0
+
+ com.ai.cloud
+ skywalking
+ 1.0-SNAPSHOT
+
+ samples/skywalking-auth
+ skywalking-protocol
+ skywalking-api
+ skywalking-sdk-plugin
+ skywalking-server
+ skywalking-alarm
+ skywalking-analysis
+ skywalking-webui
+
+ pom
+
+ skywalking
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+ maven-compiler-plugin
+
+ 1.7
+ 1.7
+ ${project.build.sourceEncoding}
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.4.3
+
+ ${project.build.sourceEncoding}
+
+
+
+
+ org.eluder.coveralls
+ coveralls-maven-plugin
+ 4.1.0
+
+
+ org.codehaus.mojo
+ cobertura-maven-plugin
+ 2.7
+
+ xml
+ 256m
+
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-alarm/pom.xml b/skywalking-alarm/pom.xml
index 41c3063bc..1604c75ae 100644
--- a/skywalking-alarm/pom.xml
+++ b/skywalking-alarm/pom.xml
@@ -1,180 +1,205 @@
- 4.0.0
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
- com.ai.cloud
- skywalking-alarm
- 1.0-SNAPSHOT
- jar
+ com.ai.cloud
+ skywalking-alarm
+ 1.0-SNAPSHOT
+ jar
- skywalking-alarm
- http://maven.apache.org
+ skywalking-alarm
+ http://maven.apache.org
-
- UTF-8
-
+
+ UTF-8
+
-
-
- junit
- junit
- 4.12
- test
-
-
- org.apache.logging.log4j
- log4j-core
- 2.4.1
-
-
- redis.clients
- jedis
- 2.8.0
-
-
- com.sun.mail
- javax.mail
- 1.5.4
-
-
- org.freemarker
- freemarker
- 2.3.23
-
-
- org.apache.curator
- curator-framework
- 2.8.0
-
-
- org.apache.zookeeper
- zookeeper
- 3.4.0
-
-
- org.apache.curator
- curator-recipes
- 2.8.0
-
-
- com.google.code.gson
- gson
- 2.2.2
-
-
- mysql
- mysql-connector-java
- 5.1.37
-
-
- com.zaxxer
- HikariCP
- 2.4.3
-
-
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- 2.6
-
-
- copy-resources
- package
-
- copy-resources
-
-
- ${project.build.directory}/installer/config
-
-
- src/main/resources
- false
-
-
-
-
-
- copy-start-script
- package
-
- copy-resources
-
-
- ${project.build.directory}/installer/bin
-
-
- bin
- false
-
-
-
-
-
-
-
- maven-dependency-plugin
-
-
- copy-dependencies
- package
-
- copy-dependencies
-
-
-
-
- ${project.build.directory}/installer/lib
- false
- true
-
-
-
- maven-jar-plugin
-
-
- *.properties
- *.xml
-
- sky-alarm-server
- ${project.build.directory}/installer/lib
-
-
-
- maven-antrun-plugin
-
-
- clean
- package
-
- run
-
-
-
-
-
-
-
-
-
-
-
- maven-compiler-plugin
-
- 1.7
- 1.7
- ${project.build.sourceEncoding}
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- 2.4.3
-
- ${project.build.sourceEncoding}
-
-
-
-
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.4.1
+
+
+ redis.clients
+ jedis
+ 2.8.0
+
+
+ com.sun.mail
+ javax.mail
+ 1.5.4
+
+
+ org.freemarker
+ freemarker
+ 2.3.23
+
+
+ org.apache.curator
+ curator-framework
+ 2.8.0
+
+
+ org.apache.zookeeper
+ zookeeper
+ 3.4.0
+
+
+ org.apache.curator
+ curator-recipes
+ 2.8.0
+
+
+ com.google.code.gson
+ gson
+ 2.2.2
+
+
+ mysql
+ mysql-connector-java
+ 5.1.37
+
+
+ com.zaxxer
+ HikariCP
+ 2.4.3
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.6
+
+
+ copy-resources
+ package
+
+ copy-resources
+
+
+ ${project.build.directory}/installer/config
+
+
+ src/main/resources
+ false
+
+
+
+
+
+ copy-start-script
+ package
+
+ copy-resources
+
+
+ ${project.build.directory}/installer/bin
+
+
+ bin
+ false
+
+
+
+
+
+
+
+ maven-dependency-plugin
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+
+
+ ${project.build.directory}/installer/lib
+ false
+ true
+
+
+
+ maven-jar-plugin
+
+
+ *.properties
+ *.xml
+
+ sky-alarm-server
+ ${project.build.directory}/installer/lib
+
+
+
+ maven-antrun-plugin
+
+
+ clean
+ package
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+ maven-compiler-plugin
+
+ 1.7
+ 1.7
+ ${project.build.sourceEncoding}
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.4.3
+
+ ${project.build.sourceEncoding}
+
+
+
+
+
+
+
+ mvnrepository
+ mvnrepository
+ http://mvnrepository.com
+
+ true
+
+
+ true
+
+
+
+ jbossrepository
+ jboss repository
+ http://repository.jboss.com
+
+ true
+
+
+ true
+
+
+
diff --git a/skywalking-api/pom.xml b/skywalking-api/pom.xml
index 9521f94c2..931809f92 100644
--- a/skywalking-api/pom.xml
+++ b/skywalking-api/pom.xml
@@ -2,6 +2,12 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+
+ com.ai.cloud
+ skywalking
+ 1.0-SNAPSHOT
+
+
com.ai.cloud
skywalking-api
1.0-SNAPSHOT
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorException.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorException.java
new file mode 100644
index 000000000..7be0f8e02
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorException.java
@@ -0,0 +1,13 @@
+package com.ai.cloud.skywalking.plugin.interceptor;
+
+public class InterceptorException extends RuntimeException {
+ private static final long serialVersionUID = 7846035239994885019L;
+
+ public InterceptorException(String message) {
+ super(message);
+ }
+
+ public InterceptorException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/assist/FirstInvokeInterceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/assist/FirstInvokeInterceptor.java
new file mode 100644
index 000000000..c6dff6d27
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/assist/FirstInvokeInterceptor.java
@@ -0,0 +1,42 @@
+package com.ai.cloud.skywalking.plugin.interceptor.assist;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext;
+import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor;
+import com.ai.cloud.skywalking.plugin.interceptor.InterceptorException;
+
+/**
+ * 用于首次拦截方法调用,避免方法内部的方法调用被多次拦截。
+ *
+ * @author wusheng
+ *
+ */
+public abstract class FirstInvokeInterceptor implements IAroundInterceptor {
+ protected String invokeCounterKey = "__$invokeCounterKey";
+
+ protected Object invokeCounterInstLock = new Object();
+
+ public boolean isFirstBeforeMethod(EnhancedClassInstanceContext context) {
+ if (!context.isContain(invokeCounterKey)) {
+ synchronized (invokeCounterInstLock) {
+ if (!context.isContain(invokeCounterKey)) {
+ context.set(invokeCounterKey, new AtomicInteger(0));
+ }
+ }
+ }
+ AtomicInteger counter = context.get(invokeCounterKey,
+ AtomicInteger.class);
+ return counter.incrementAndGet() == 1;
+ }
+
+ public boolean isLastAfterMethod(EnhancedClassInstanceContext context) {
+ if (!context.isContain(invokeCounterKey)) {
+ throw new InterceptorException(
+ "key=invokeCounterKey not found is context. unexpected failue.");
+ }
+ AtomicInteger counter = context.get(invokeCounterKey,
+ AtomicInteger.class);
+ return counter.decrementAndGet() == 0;
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java
index bfd9fc661..873ed1c2d 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java
@@ -35,9 +35,10 @@ public final class BuriedPointMachineUtil {
if (StringUtil.isEmpty(IP)) {
InetAddress netAddress = getInetAddress();
if (null == netAddress) {
- return null;
+ IP = "N/A";
+ }else{
+ IP = netAddress.getHostAddress(); //get the ip address
}
- IP = netAddress.getHostAddress(); //get the ip address
}
return IP;
}
@@ -46,9 +47,10 @@ public final class BuriedPointMachineUtil {
if (StringUtil.isEmpty(hostName)) {
InetAddress netAddress = getInetAddress();
if (null == netAddress) {
- return null;
+ hostName = "N/A";
+ }else{
+ hostName = netAddress.getHostName(); //get the host address
}
- hostName = netAddress.getHostName(); //get the host address
}
return hostName;
}
diff --git a/skywalking-api/src/test/java/test/ai/cloud/api/TimeTest.java b/skywalking-api/src/test/java/test/ai/cloud/api/TimeTest.java
new file mode 100644
index 000000000..708386857
--- /dev/null
+++ b/skywalking-api/src/test/java/test/ai/cloud/api/TimeTest.java
@@ -0,0 +1,25 @@
+package test.ai.cloud.api;
+
+import org.junit.Test;
+
+import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
+import com.ai.cloud.skywalking.model.Identification;
+import com.ai.cloud.skywalking.model.Identification.IdentificationBuilder;
+
+public class TimeTest {
+ @Test
+ public void test(){
+ RPCBuriedPointSender sender = new RPCBuriedPointSender();
+ long start = System.currentTimeMillis();
+ for (int i = 0; i < 100; i++) {
+ IdentificationBuilder builder = Identification
+ .newBuilder()
+ .viewPoint("1111");
+ sender.beforeSend(builder.build());
+ sender.afterSend();
+ }
+ long end = System.currentTimeMillis();
+ System.out.println(end - start + "ms");
+ }
+
+}
diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java
index 9455dbae0..ed30c53be 100644
--- a/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java
+++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java
@@ -2,12 +2,9 @@ package test.ai.cloud.plugin;
import java.lang.reflect.InvocationTargetException;
-import org.junit.Test;
-
import com.ai.cloud.skywalking.plugin.TracingBootstrap;
public class PluginMainTest {
- @Test
public void testMain() throws IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
NoSuchMethodException, SecurityException, ClassNotFoundException {
diff --git a/skywalking-sdk-plugin/dubbo-plugin/pom.xml b/skywalking-sdk-plugin/dubbo-plugin/pom.xml
index 752835599..33119d72d 100644
--- a/skywalking-sdk-plugin/dubbo-plugin/pom.xml
+++ b/skywalking-sdk-plugin/dubbo-plugin/pom.xml
@@ -23,12 +23,6 @@
skywalking-api
${project.version}
-
- com.ai.cloud
- skywalking-auth
- ${project.version}
- test
-
com.ai.cloud
skywalking-api
@@ -94,18 +88,20 @@
0.7
test
+
-
-
-
-
-
+ -->
+
+ com.alibaba
+ dubbox
+ 2.8.4
+ compile
+
org.apache.httpcomponents
httpclient
diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml b/skywalking-sdk-plugin/dubbo-plugin/src/test/resources/log4j2.xml
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml
rename to skywalking-sdk-plugin/dubbo-plugin/src/test/resources/log4j2.xml
diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth b/skywalking-sdk-plugin/dubbo-plugin/src/test/resources/sky-walking.auth
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth
rename to skywalking-sdk-plugin/dubbo-plugin/src/test/resources/sky-walking.auth
diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml
rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml
diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java
rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java
diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def
rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def
diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java
rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java
diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/log4j2.xml b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/log4j2.xml
rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml
diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/sky-walking.auth b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/sky-walking.auth
rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth
diff --git a/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml b/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml
index 28bbbc348..6261a330d 100644
--- a/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml
+++ b/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml
@@ -31,14 +31,14 @@
org.apache.httpcomponents
httpclient
4.3
- test
+ compile
diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/pom.xml b/skywalking-sdk-plugin/jedis-2.x-plugin/pom.xml
similarity index 98%
rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/pom.xml
rename to skywalking-sdk-plugin/jedis-2.x-plugin/pom.xml
index 8fa4dc6aa..1df3d7c0f 100644
--- a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/pom.xml
+++ b/skywalking-sdk-plugin/jedis-2.x-plugin/pom.xml
@@ -30,6 +30,7 @@
redis.clients
jedis
2.8.1
+ compile
diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java
new file mode 100644
index 000000000..fc7d24e5f
--- /dev/null
+++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java
@@ -0,0 +1,82 @@
+package org.skywalking.jedis.v2.plugin;
+
+import java.net.URI;
+
+import redis.clients.jedis.JedisShardInfo;
+
+import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender;
+import com.ai.cloud.skywalking.model.Identification;
+import com.ai.cloud.skywalking.model.Identification.IdentificationBuilder;
+import com.ai.cloud.skywalking.plugin.interceptor.ConstructorInvokeContext;
+import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext;
+import com.ai.cloud.skywalking.plugin.interceptor.MethodInvokeContext;
+import com.ai.cloud.skywalking.plugin.interceptor.assist.FirstInvokeInterceptor;
+
+public class JedisInterceptor extends FirstInvokeInterceptor {
+ private static final String REDIS_CONN_INFO_KEY = "redisConnInfo";
+
+ private static RPCBuriedPointSender sender = new RPCBuriedPointSender();
+
+ @Override
+ public void onConstruct(EnhancedClassInstanceContext context,
+ ConstructorInvokeContext interceptorContext) {
+ String redisConnInfo = "";
+ if (interceptorContext.allArguments().length > 0) {
+ if (interceptorContext.allArguments()[0] instanceof String) {
+ redisConnInfo = (String) interceptorContext.allArguments()[0];
+ if (interceptorContext.allArguments().length > 1) {
+ redisConnInfo += ":"
+ + (Integer) interceptorContext.allArguments()[1];
+ }
+ } else if (interceptorContext.allArguments()[0] instanceof JedisShardInfo) {
+ JedisShardInfo shardInfo = (JedisShardInfo) interceptorContext
+ .allArguments()[0];
+ redisConnInfo = shardInfo.getHost() + ":" + shardInfo.getPort();
+ } else if (interceptorContext.allArguments()[0] instanceof URI) {
+ URI uri = (URI) interceptorContext.allArguments()[0];
+ redisConnInfo = uri.getHost() + ":" + uri.getPort();
+ }
+ }
+ context.set(REDIS_CONN_INFO_KEY, redisConnInfo);
+ }
+
+ @Override
+ public void beforeMethod(EnhancedClassInstanceContext context,
+ MethodInvokeContext interceptorContext) {
+ if (this.isFirstBeforeMethod(context)) {
+ /**
+ * redis server wouldn't process rpc context. ignore the
+ * return(ContextData) of sender's beforeSend
+ */
+ IdentificationBuilder builder = Identification
+ .newBuilder()
+ .viewPoint(
+ context.get(REDIS_CONN_INFO_KEY, String.class)
+ + " " + interceptorContext.methodName())
+ .spanType(RedisBuriedPointType.instance());
+ if (interceptorContext.allArguments().length > 0
+ && interceptorContext.allArguments()[0] instanceof String) {
+ builder.businessKey("key="
+ + interceptorContext.allArguments()[0]);
+ }
+ sender.beforeSend(builder.build());
+ }
+ }
+
+ @Override
+ public Object afterMethod(EnhancedClassInstanceContext context,
+ MethodInvokeContext interceptorContext, Object ret) {
+ if (this.isLastAfterMethod(context)) {
+ sender.afterSend();
+ }
+ return ret;
+ }
+
+ @Override
+ public void handleMethodException(Throwable t,
+ EnhancedClassInstanceContext context,
+ MethodInvokeContext interceptorContext, Object ret) {
+ sender.handleException(t);
+ }
+
+}
diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/RedisBuriedPointType.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/RedisBuriedPointType.java
new file mode 100644
index 000000000..b119f4549
--- /dev/null
+++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/RedisBuriedPointType.java
@@ -0,0 +1,29 @@
+package org.skywalking.jedis.v2.plugin;
+
+import com.ai.cloud.skywalking.api.IBuriedPointType;
+import com.ai.cloud.skywalking.protocol.CallType;
+
+public class RedisBuriedPointType implements IBuriedPointType {
+ private static RedisBuriedPointType redisBuriedPointType;
+
+ public static IBuriedPointType instance() {
+ if (redisBuriedPointType == null) {
+ redisBuriedPointType = new RedisBuriedPointType();
+ }
+
+ return redisBuriedPointType;
+ }
+
+
+ @Override
+ public String getTypeName() {
+ return "Redis";
+ }
+
+ @Override
+ public CallType getCallType() {
+ return CallType.SYNC;
+ }
+
+ private RedisBuriedPointType(){}
+}
diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java
rename to skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java
diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/resources/skywalking-plugin.def b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/resources/skywalking-plugin.def
similarity index 100%
rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/resources/skywalking-plugin.def
rename to skywalking-sdk-plugin/jedis-2.x-plugin/src/main/resources/skywalking-plugin.def
diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java
new file mode 100644
index 000000000..98e0e1948
--- /dev/null
+++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java
@@ -0,0 +1,38 @@
+package org.skywalking.jedis.v2.plugin;
+
+import java.lang.reflect.InvocationTargetException;
+import java.sql.SQLException;
+
+import org.junit.Test;
+
+import redis.clients.jedis.Jedis;
+
+import com.ai.cloud.skywalking.plugin.TracingBootstrap;
+
+public class JedisTest {
+ @Test
+ public void test() throws IllegalAccessException, IllegalArgumentException,
+ InvocationTargetException, NoSuchMethodException,
+ SecurityException, ClassNotFoundException {
+ TracingBootstrap
+ .main(new String[] { "org.skywalking.jedis.v2.plugin.JedisTest" });
+ }
+
+ public static void main(String[] args) throws ClassNotFoundException,
+ SQLException, InterruptedException {
+ try(Jedis jedis = new Jedis("10.1.241.18", 16379)){
+ long start = System.currentTimeMillis();
+ jedis.set("11111", "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
+ for (int i = 0; i < 1; i++) {
+ jedis.get("11111");
+ }
+ long end = System.currentTimeMillis();
+ System.out.println(end - start + "ms");
+ jedis.del("11111");
+ }
+ }
+
+ public void testNormal() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException, InterruptedException{
+ JedisTest.main(null);
+ }
+}
diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/log4j2.xml b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/log4j2.xml
new file mode 100644
index 000000000..4e2af7485
--- /dev/null
+++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/log4j2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/sky-walking.auth b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/sky-walking.auth
new file mode 100644
index 000000000..c794ea37c
--- /dev/null
+++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/sky-walking.auth
@@ -0,0 +1,47 @@
+#skyWalking用户ID
+skywalking.user_id=123
+#skyWalking应用编码
+skywalking.application_code=test
+#skywalking auth的环境变量名字
+skywalking.auth_system_env_name=SKYWALKING_RUN
+#skywalking数据编码
+skywalking.charset=UTF-8
+
+#是否打印数据
+buriedpoint.printf=true
+#埋点异常的最大长度
+buriedpoint.max_exception_stack_length=4000
+#业务字段的最大长度
+buriedpoint.businesskey_max_length=300
+#过滤异常
+buriedpoint.exclusive_exceptions=java.lang.RuntimeException
+
+#最大发送者的连接数阀比例
+sender.connect_percent=100
+#发送服务端配置
+sender.servers_addr=127.0.0.1:34000
+#最大发送的副本数量
+sender.max_copy_num=2
+#发送的最大长度
+sender.max_send_length=20000
+#当没有Sender时,尝试获取sender的等待周期
+sender.retry_get_sender_wait_interval=2000
+#是否开启发送消息
+sender.is_off=false
+
+
+#最大消费线程数
+consumer.max_consumer=2
+#消费者最大等待时间
+consumer.max_wait_time=5
+#发送失败等待时间
+consumer.consumer_fail_retry_wait_interval=50
+
+#每个Buffer的最大个数
+buffer.buffer_max_size=18000
+#Buffer池的最大长度
+buffer.pool_size=5
+
+#发送检查线程检查周期
+senderchecker.check_polling_time=200
+
diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java b/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java
deleted file mode 100644
index 297093150..000000000
--- a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.skywalking.jedis.v2.plugin;
-
-import com.ai.cloud.skywalking.plugin.interceptor.ConstructorInvokeContext;
-import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext;
-import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor;
-import com.ai.cloud.skywalking.plugin.interceptor.MethodInvokeContext;
-
-public class JedisInterceptor implements IAroundInterceptor{
-
- @Override
- public void onConstruct(EnhancedClassInstanceContext context,
- ConstructorInvokeContext interceptorContext) {
-
- }
-
- @Override
- public void beforeMethod(EnhancedClassInstanceContext context,
- MethodInvokeContext interceptorContext) {
-
- }
-
- @Override
- public Object afterMethod(EnhancedClassInstanceContext context,
- MethodInvokeContext interceptorContext, Object ret) {
- return ret;
- }
-
- @Override
- public void handleMethodException(Throwable t,
- EnhancedClassInstanceContext context,
- MethodInvokeContext interceptorContext, Object ret) {
-
- }
-
-}
diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java b/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java
deleted file mode 100644
index 3e8200564..000000000
--- a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.skywalking.jedis.v2.plugin;
-
-import java.lang.reflect.InvocationTargetException;
-import java.sql.SQLException;
-
-import org.junit.Test;
-
-import com.ai.cloud.skywalking.plugin.TracingBootstrap;
-
-public class JedisTest {
-
- @Test
- public void test() throws IllegalAccessException,
- IllegalArgumentException, InvocationTargetException,
- NoSuchMethodException, SecurityException, ClassNotFoundException {
- TracingBootstrap
- .main(new String[] { "org.skywalking.jedis.v2.plugin.JedisTest" });
- }
-
- public static void main(String[] args) throws ClassNotFoundException,
- SQLException, InterruptedException {}
-
-}
diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java
index 82ceaaafa..c9396f12e 100644
--- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java
+++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java
@@ -35,9 +35,10 @@ public class MachineUtil {
if (StringUtil.isEmpty(IP)) {
InetAddress netAddress = getInetAddress();
if (null == netAddress) {
- return null;
+ IP = "N/A";
+ }else{
+ IP = netAddress.getHostAddress(); //get the ip address
}
- IP = netAddress.getHostAddress(); //get the ip address
}
return IP;
}
@@ -46,9 +47,10 @@ public class MachineUtil {
if (StringUtil.isEmpty(hostName)) {
InetAddress netAddress = getInetAddress();
if (null == netAddress) {
- return null;
+ hostName = "N/A";
+ }else{
+ hostName = netAddress.getHostName(); //get the host address
}
- hostName = netAddress.getHostName(); //get the host address
}
return hostName;
}