From f548b014d8aafd4da7e3c96d0c6137a917a37591 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Wed, 8 Jun 2016 15:13:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=92=88=E5=AF=B9=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=BF=AE=E9=A5=B0=E7=AC=A6=E5=92=8C=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=9A=84=E5=9F=8B=E7=82=B9=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/EnhanceClazz4Interceptor.java | 4 +- .../plugin/interceptor/InterceptorDefine.java | 2 +- .../plugin/interceptor/MethodMatcher.java | 93 +++++++++++++++++++ .../plugin/interceptor/MethodNameMatcher.java | 41 -------- .../interceptor/matcher/AnyMethodMatcher.java | 8 +- .../matcher/ExclusionNameMatcher.java | 39 -------- .../interceptor/matcher/FullNameMatcher.java | 38 -------- .../matcher/MethodExclusiveMatcher.java | 41 ++++++++ .../matcher/MethodRegexMatcher.java | 41 ++++++++ .../matcher/MethodsExclusiveMatcher.java | 49 ++++++++++ .../interceptor/matcher/RegexNameMatcher.java | 38 -------- .../matcher/SimpleMethodMatcher.java | 41 ++++++++ .../cloud/matcher/ExclusionMatcherTest.java | 18 ++++ .../cloud/matcher/TestAroundInterceptor.java | 32 +++++++ .../ai/cloud/matcher/TestMatcherClass.java | 28 ++++++ .../ai/cloud/matcher/TestMatcherDefine.java | 30 ++++++ .../cloud/plugin/TestInterceptorDefine.java | 8 +- .../DubboxRestHeadSetterAttachment.java | 4 +- .../AbstractHttpClientPluginDefine.java | 10 +- .../DefaultRequestDirectorPluginDefine.java | 10 +- .../InternalHttpClientPluginDefine.java | 8 +- .../define/MinimalHttpClientPluginDefine.java | 8 +- .../v2/plugin/define/JedisPluginDefine.java | 6 +- .../plugin/mysql/ConnectionPluginDefine.java | 16 ++-- 24 files changed, 415 insertions(+), 198 deletions(-) create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java delete mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodNameMatcher.java delete mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/ExclusionNameMatcher.java delete mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/FullNameMatcher.java create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java delete mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/RegexNameMatcher.java create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/SimpleMethodMatcher.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/matcher/ExclusionMatcherTest.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/matcher/TestAroundInterceptor.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherClass.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java index 01f77c835..8a4a0a9fe 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java @@ -116,11 +116,11 @@ public class EnhanceClazz4Interceptor { FieldGetter.class, FieldSetter.class)))); - MethodNameMatcher[] methodMatchers = define.getBeInterceptedMethodsMatchers(); + MethodMatcher[] methodMatchers = define.getBeInterceptedMethodsMatchers(); ClassMethodInterceptor classMethodInterceptor = new ClassMethodInterceptor( interceptor); - for (MethodNameMatcher methodMatcher : methodMatchers) { + for (MethodMatcher methodMatcher : methodMatchers) { logger.debug("prepare to enhance class {} method [{}] ", enhanceOriginClassName, methodMatcher.getMethodMatchDescribe()); newClassBuilder = newClassBuilder.method( diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java index e6dcdd1cd..5bd87b79d 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java @@ -13,7 +13,7 @@ public interface InterceptorDefine { * * @return */ - public MethodNameMatcher[] getBeInterceptedMethodsMatchers(); + public MethodMatcher[] getBeInterceptedMethodsMatchers(); /** * 返回增强拦截器的实现
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java new file mode 100644 index 000000000..a9d414eea --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java @@ -0,0 +1,93 @@ +package com.ai.cloud.skywalking.plugin.interceptor; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import static net.bytebuddy.matcher.ElementMatchers.*; + +public abstract class MethodMatcher { + + private String methodMatchDescribe; + + private int argNum = -1; + + private Class[] argTypeArray; + + private Modifier modifier; + + public MethodMatcher(String methodMatchDescribe) { + this(null, methodMatchDescribe); + } + + public MethodMatcher(Modifier modifier, String methodMatchDescribe) { + this.methodMatchDescribe = methodMatchDescribe; + this.modifier = modifier; + } + + + public MethodMatcher(String methodMatchDescribe, int argNum) { + this(null, methodMatchDescribe, argNum); + } + + public MethodMatcher(Modifier modifier, String methodMatchDescribe, int argNum) { + this.methodMatchDescribe = methodMatchDescribe; + this.argNum = argNum; + this.modifier = modifier; + } + + public MethodMatcher(String methodMatchDescribe, Class[] argTypeArray) { + this(null, methodMatchDescribe, argTypeArray); + } + + public MethodMatcher(Modifier modifier, String methodMatchDescribe, Class[] argTypeArray) { + this.argTypeArray = argTypeArray; + this.methodMatchDescribe = methodMatchDescribe; + this.modifier = modifier; + } + + public abstract ElementMatcher.Junction builderMatcher(); + + protected String getMethodMatchDescribe() { + return methodMatchDescribe; + } + + protected ElementMatcher.Junction mergeArgumentsIfNecessary(ElementMatcher.Junction matcher) { + if (argTypeArray != null) { + matcher = matcher.and(takesArguments(argTypeArray)); + } + + if (argNum > -1) { + matcher = matcher.and(takesArguments(argNum)); + } + + if (modifier != null) { + matcher = matcher.and(modifier.elementMatcher()); + } + + return matcher; + } + + public enum Modifier { + Public, Default, Private, Protected; + + private ElementMatcher elementMatcher() { + switch (this) { + case Private: { + return isPrivate(); + } + case Default: { + return isPackagePrivate(); + } + case Public: { + return isPublic(); + } + case Protected: { + return isProtected(); + } + default: + return isPublic(); + } + } + } + +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodNameMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodNameMatcher.java deleted file mode 100644 index 759f3e958..000000000 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodNameMatcher.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ai.cloud.skywalking.plugin.interceptor; - -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.matcher.ElementMatcher; - -public abstract class MethodNameMatcher { - - private String methodMatchDescribe; - - private int argNum = -1; - - private Class[] argTypeArray; - - public MethodNameMatcher(String methodMatchDescribe) { - this.methodMatchDescribe = methodMatchDescribe; - } - - public MethodNameMatcher(String methodMatchDescribe, int argNum) { - this.methodMatchDescribe = methodMatchDescribe; - this.argNum = argNum; - } - - public MethodNameMatcher(String methodMatchDescribe, Class[] argTypeArray) { - this.argTypeArray = argTypeArray; - this.methodMatchDescribe = methodMatchDescribe; - } - - public abstract ElementMatcher builderMatcher(); - - protected String getMethodMatchDescribe() { - return methodMatchDescribe; - } - - protected int getArgNum() { - return argNum; - } - - protected Class[] getArgTypeArray() { - return argTypeArray; - } -} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java index 682a5b12a..7ff417286 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java @@ -1,19 +1,19 @@ package com.ai.cloud.skywalking.plugin.interceptor.matcher; -import static net.bytebuddy.matcher.ElementMatchers.any; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; +import static net.bytebuddy.matcher.ElementMatchers.any; -public class AnyMethodMatcher extends MethodNameMatcher { +public class AnyMethodMatcher extends MethodMatcher { public AnyMethodMatcher() { super("*"); } @Override - public ElementMatcher builderMatcher() { + public ElementMatcher.Junction builderMatcher() { return any(); } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/ExclusionNameMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/ExclusionNameMatcher.java deleted file mode 100644 index 476df8340..000000000 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/ExclusionNameMatcher.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.ai.cloud.skywalking.plugin.interceptor.matcher; - -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.matcher.ElementMatcher; - -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; - -public class ExclusionNameMatcher extends MethodNameMatcher { - - public ExclusionNameMatcher(String methodMatchDescribe) { - super(methodMatchDescribe); - } - - public ExclusionNameMatcher(String methodMatchDescribe, int argNum) { - super(methodMatchDescribe, argNum); - } - - public ExclusionNameMatcher(String methodMatchDescribe, Class[] argTypeArray) { - super(methodMatchDescribe, argTypeArray); - } - - @Override - public ElementMatcher builderMatcher() { - ElementMatcher.Junction matcher = not(named(getMethodMatchDescribe())); - - if (getArgTypeArray() != null) { - matcher.and(takesArguments(getArgTypeArray())); - } - - if (getArgNum() > -1) { - matcher.and(takesArguments(getArgNum())); - } - - return matcher; - } -} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/FullNameMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/FullNameMatcher.java deleted file mode 100644 index 76aca82e8..000000000 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/FullNameMatcher.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ai.cloud.skywalking.plugin.interceptor.matcher; - -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.matcher.ElementMatcher; - -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; - -public class FullNameMatcher extends MethodNameMatcher { - - public FullNameMatcher(String methodName) { - super(methodName); - } - - public FullNameMatcher(String methodName, int argNum) { - super(methodName, argNum); - } - - public FullNameMatcher(String methodName, Class... args) { - super(methodName, args); - } - - @Override - public ElementMatcher builderMatcher() { - ElementMatcher.Junction matcher = named(getMethodMatchDescribe()); - - if (getArgTypeArray() != null) { - matcher.and(takesArguments(getArgTypeArray())); - } - - if (getArgNum() > -1) { - matcher.and(takesArguments(getArgNum())); - } - - return matcher; - } -} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java new file mode 100644 index 000000000..5ea3cbb83 --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java @@ -0,0 +1,41 @@ +package com.ai.cloud.skywalking.plugin.interceptor.matcher; + +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.not; + +public class MethodExclusiveMatcher extends MethodMatcher { + + public MethodExclusiveMatcher(String methodMatchDescribe) { + super(methodMatchDescribe); + } + + public MethodExclusiveMatcher(String methodMatchDescribe, int argNum) { + super(methodMatchDescribe, argNum); + } + + public MethodExclusiveMatcher(String methodMatchDescribe, Class[] argTypeArray) { + super(methodMatchDescribe, argTypeArray); + } + + public MethodExclusiveMatcher(Modifier modifier, String methodMatchDescribe) { + super(modifier, methodMatchDescribe); + } + + public MethodExclusiveMatcher(Modifier modifier, String methodMatchDescribe, int argNum) { + super(modifier, methodMatchDescribe, argNum); + } + + public MethodExclusiveMatcher(Modifier modifier, String methodMatchDescribe, Class[] argTypeArray) { + super(modifier, methodMatchDescribe, argTypeArray); + } + + @Override + public ElementMatcher.Junction builderMatcher() { + ElementMatcher.Junction matcher = named(getMethodMatchDescribe()); + return not(mergeArgumentsIfNecessary(matcher)); + } +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java new file mode 100644 index 000000000..047eba467 --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java @@ -0,0 +1,41 @@ +package com.ai.cloud.skywalking.plugin.interceptor.matcher; + +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import static net.bytebuddy.matcher.ElementMatchers.nameMatches; + +public class MethodRegexMatcher extends MethodMatcher { + + public MethodRegexMatcher(String methodMatchDescribe) { + super(methodMatchDescribe); + } + + public MethodRegexMatcher(String methodMatchDescribe, int argNum) { + super(methodMatchDescribe, argNum); + } + + public MethodRegexMatcher(String methodMatchDescribe, Class[] argTypeArray) { + super(methodMatchDescribe, argTypeArray); + } + + public MethodRegexMatcher(Modifier modifier, String methodMatchDescribe) { + super(modifier, methodMatchDescribe); + } + + public MethodRegexMatcher(Modifier modifier, String methodMatchDescribe, int argNum) { + super(modifier, methodMatchDescribe, argNum); + } + + public MethodRegexMatcher(Modifier modifier, String methodMatchDescribe, Class[] argTypeArray) { + super(modifier, methodMatchDescribe, argTypeArray); + } + + + @Override + public ElementMatcher.Junction builderMatcher() { + ElementMatcher.Junction matcher = nameMatches(getMethodMatchDescribe()); + return mergeArgumentsIfNecessary(matcher); + } +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java new file mode 100644 index 000000000..96e411bef --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java @@ -0,0 +1,49 @@ +package com.ai.cloud.skywalking.plugin.interceptor.matcher; + +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static net.bytebuddy.matcher.ElementMatchers.not; + +/** + * Created by xin on 16-6-8. + */ +public class MethodsExclusiveMatcher extends MethodMatcher { + + private List matchers = new ArrayList(); + + public MethodsExclusiveMatcher(String... methodNames) { + super("Exclusive method name: " + methodNames.toString()); + for (String methodName : methodNames) { + matchers.add(new SimpleMethodMatcher(methodName)); + } + } + + public MethodsExclusiveMatcher(MethodMatcher... matchers) { + super("Exclusive methods description :" + matchers.toString()); + this.matchers.addAll(Arrays.asList(matchers)); + } + + @Override + public ElementMatcher.Junction builderMatcher() { + + ElementMatcher.Junction result = null; + + for (MethodMatcher matcher : matchers) { + if (result == null) { + result = matcher.builderMatcher(); + continue; + } + + result = result.or(matcher.builderMatcher()); + } + + return not(result); + } + +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/RegexNameMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/RegexNameMatcher.java deleted file mode 100644 index 5723be32e..000000000 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/RegexNameMatcher.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ai.cloud.skywalking.plugin.interceptor.matcher; - -import static net.bytebuddy.matcher.ElementMatchers.nameMatches; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.matcher.ElementMatcher; - -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; - -public class RegexNameMatcher extends MethodNameMatcher { - - public RegexNameMatcher(String methodMatchDescribe) { - super(methodMatchDescribe); - } - - public RegexNameMatcher(String methodMatchDescribe, int argNum) { - super(methodMatchDescribe, argNum); - } - - public RegexNameMatcher(String methodMatchDescribe, Class[] argTypeArray) { - super(methodMatchDescribe, argTypeArray); - } - - @Override - public ElementMatcher builderMatcher() { - ElementMatcher.Junction matcher = nameMatches(getMethodMatchDescribe()); - - if (getArgTypeArray() != null) { - matcher.and(takesArguments(getArgTypeArray())); - } - - if (getArgNum() > -1) { - matcher.and(takesArguments(getArgNum())); - } - - return matcher; - } -} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/SimpleMethodMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/SimpleMethodMatcher.java new file mode 100644 index 000000000..612a48c1f --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/SimpleMethodMatcher.java @@ -0,0 +1,41 @@ +package com.ai.cloud.skywalking.plugin.interceptor.matcher; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import static net.bytebuddy.matcher.ElementMatchers.named; + +public class SimpleMethodMatcher extends com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher { + + public SimpleMethodMatcher(String methodName) { + super(methodName); + } + + public SimpleMethodMatcher(String methodName, int argNum) { + super(methodName, argNum); + } + + public SimpleMethodMatcher(String methodName, Class... args) { + super(methodName, args); + } + + + public SimpleMethodMatcher(Modifier modifier, String methodMatchDescribe) { + super(modifier, methodMatchDescribe); + } + + public SimpleMethodMatcher(Modifier modifier, String methodMatchDescribe, int argNum) { + super(modifier, methodMatchDescribe, argNum); + } + + public SimpleMethodMatcher(Modifier modifier, String methodMatchDescribe, Class[] argTypeArray) { + super(modifier, methodMatchDescribe, argTypeArray); + } + + + @Override + public ElementMatcher.Junction builderMatcher() { + ElementMatcher.Junction matcher = named(getMethodMatchDescribe()); + return mergeArgumentsIfNecessary(matcher); + } +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/matcher/ExclusionMatcherTest.java b/skywalking-api/src/test/java/test/ai/cloud/matcher/ExclusionMatcherTest.java new file mode 100644 index 000000000..949dc0a91 --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/matcher/ExclusionMatcherTest.java @@ -0,0 +1,18 @@ +package test.ai.cloud.matcher; + +import com.ai.cloud.skywalking.plugin.PluginBootstrap; + +public class ExclusionMatcherTest { + + + public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException { + new PluginBootstrap().start(); + TestMatcherClass testMatcherClass = (TestMatcherClass) Class.forName("test.ai.cloud.matcher.TestMatcherClass").newInstance(); + + testMatcherClass.set(); + testMatcherClass.seta("a"); + testMatcherClass.get("a"); + testMatcherClass.find(); + } + +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/matcher/TestAroundInterceptor.java b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestAroundInterceptor.java new file mode 100644 index 000000000..e9c1019b9 --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestAroundInterceptor.java @@ -0,0 +1,32 @@ +package test.ai.cloud.matcher; + +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; + +/** + * Created by xin on 16-6-8. + */ +public class TestAroundInterceptor implements IAroundInterceptor { + @Override + public void onConstruct(EnhancedClassInstanceContext context, ConstructorInvokeContext interceptorContext) { + + } + + @Override + public void beforeMethod(EnhancedClassInstanceContext context, MethodInvokeContext interceptorContext) { + System.out.println("before method"); + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, MethodInvokeContext interceptorContext, Object ret) { + System.out.println("after method"); + return ret; + } + + @Override + public void handleMethodException(Throwable t, EnhancedClassInstanceContext context, MethodInvokeContext interceptorContext, Object ret) { + + } +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherClass.java b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherClass.java new file mode 100644 index 000000000..9a72887c6 --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherClass.java @@ -0,0 +1,28 @@ +package test.ai.cloud.matcher; + +/** + * Created by xin on 16-6-8. + */ +public class TestMatcherClass { + + public void set() { + System.out.println("set()"); + } + + public void seta(String a) { + set(a); + } + + private void set(String a) { + System.out.println("set(String a)"); + } + + public void get(String a) { + System.out.println("get(String a)"); + } + + public void find() { + System.out.println("find()"); + } + +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java new file mode 100644 index 000000000..6af67b91e --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java @@ -0,0 +1,30 @@ +package test.ai.cloud.matcher; + +import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; +import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.MethodsExclusiveMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; + +/** + * Created by xin on 16-6-8. + */ +public class TestMatcherDefine implements InterceptorDefine { + @Override + public String getBeInterceptedClassName() { + return "test.ai.cloud.matcher.TestMatcherClass"; + } + + @Override + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[]{ + new MethodsExclusiveMatcher("set", "get"), + new SimpleMethodMatcher(MethodMatcher.Modifier.Private, "set") + }; + } + + @Override + public IAroundInterceptor instance() { + return new TestAroundInterceptor(); + } +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java index bdfaf0305..a84ae48a3 100644 --- a/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java +++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java @@ -2,8 +2,8 @@ package test.ai.cloud.plugin; import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; -import com.ai.cloud.skywalking.plugin.interceptor.matcher.FullNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; public class TestInterceptorDefine implements InterceptorDefine { @@ -13,8 +13,8 @@ public class TestInterceptorDefine implements InterceptorDefine { } @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { - return new MethodNameMatcher[] { new FullNameMatcher("printabc") }; + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[] { new SimpleMethodMatcher("printabc") }; } @Override diff --git a/skywalking-sdk-plugin/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 index 48881e5fa..3cc30cb9b 100644 --- a/skywalking-sdk-plugin/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 @@ -4,7 +4,7 @@ import org.skywalking.httpClient.v4.plugin.HttpClientExecuteInterceptor; import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; public class DubboxRestHeadSetterAttachment implements InterceptorDefine { @@ -20,7 +20,7 @@ public class DubboxRestHeadSetterAttachment implements InterceptorDefine { } @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { + public MethodMatcher[] getBeInterceptedMethodsMatchers() { return null; } diff --git a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/AbstractHttpClientPluginDefine.java b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/AbstractHttpClientPluginDefine.java index 5e393eeb6..6b43ad2d1 100644 --- a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/AbstractHttpClientPluginDefine.java +++ b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/AbstractHttpClientPluginDefine.java @@ -1,7 +1,7 @@ package org.skywalking.httpClient.v4.plugin.define; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; -import com.ai.cloud.skywalking.plugin.interceptor.matcher.FullNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; public class AbstractHttpClientPluginDefine extends HttpClientPluginDefine { @@ -17,8 +17,8 @@ public class AbstractHttpClientPluginDefine extends HttpClientPluginDefine { * */ @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { - return new MethodNameMatcher[] { - new FullNameMatcher("doExecute")}; + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[] { + new SimpleMethodMatcher("doExecute")}; } } diff --git a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/DefaultRequestDirectorPluginDefine.java b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/DefaultRequestDirectorPluginDefine.java index 75e32dfc2..3197d6fd3 100644 --- a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/DefaultRequestDirectorPluginDefine.java +++ b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/DefaultRequestDirectorPluginDefine.java @@ -1,7 +1,7 @@ package org.skywalking.httpClient.v4.plugin.define; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; -import com.ai.cloud.skywalking.plugin.interceptor.matcher.FullNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; public class DefaultRequestDirectorPluginDefine extends HttpClientPluginDefine { /** @@ -15,9 +15,9 @@ public class DefaultRequestDirectorPluginDefine extends HttpClientPluginDefine { } @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { - return new MethodNameMatcher[] { - new FullNameMatcher("execute")}; + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[] { + new SimpleMethodMatcher("execute")}; } } diff --git a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/InternalHttpClientPluginDefine.java b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/InternalHttpClientPluginDefine.java index 990c8f946..35612d41e 100644 --- a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/InternalHttpClientPluginDefine.java +++ b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/InternalHttpClientPluginDefine.java @@ -1,12 +1,12 @@ package org.skywalking.httpClient.v4.plugin.define; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; -import com.ai.cloud.skywalking.plugin.interceptor.matcher.FullNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; public class InternalHttpClientPluginDefine extends HttpClientPluginDefine { @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { - return new MethodNameMatcher[]{new FullNameMatcher("doExecute")}; + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[]{new SimpleMethodMatcher("doExecute")}; } @Override diff --git a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/MinimalHttpClientPluginDefine.java b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/MinimalHttpClientPluginDefine.java index a0aa7750c..b7ff63272 100644 --- a/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/MinimalHttpClientPluginDefine.java +++ b/skywalking-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/httpClient/v4/plugin/define/MinimalHttpClientPluginDefine.java @@ -1,12 +1,12 @@ package org.skywalking.httpClient.v4.plugin.define; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; -import com.ai.cloud.skywalking.plugin.interceptor.matcher.FullNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; public class MinimalHttpClientPluginDefine extends HttpClientPluginDefine { @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { - return new MethodNameMatcher[]{new FullNameMatcher("doExecute")}; + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[]{new SimpleMethodMatcher("doExecute")}; } @Override diff --git a/skywalking-sdk-plugin/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 index 430444b69..1b9551972 100644 --- a/skywalking-sdk-plugin/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 @@ -4,7 +4,7 @@ import org.skywalking.jedis.v2.plugin.JedisInterceptor; import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; import com.ai.cloud.skywalking.plugin.interceptor.matcher.AnyMethodMatcher; public class JedisPluginDefine implements InterceptorDefine { @@ -15,8 +15,8 @@ public class JedisPluginDefine implements InterceptorDefine { } @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { - return new MethodNameMatcher[] { new AnyMethodMatcher() }; + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[] { new AnyMethodMatcher() }; } @Override diff --git a/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionPluginDefine.java b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionPluginDefine.java index 5137681bb..19cf72f06 100644 --- a/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionPluginDefine.java +++ b/skywalking-sdk-plugin/mysql-plugin/src/main/java/com/ai/cloud/skywalking/plugin/mysql/ConnectionPluginDefine.java @@ -2,8 +2,8 @@ package com.ai.cloud.skywalking.plugin.mysql; import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine; -import com.ai.cloud.skywalking.plugin.interceptor.MethodNameMatcher; -import com.ai.cloud.skywalking.plugin.interceptor.matcher.FullNameMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; public class ConnectionPluginDefine implements InterceptorDefine { @@ -13,12 +13,12 @@ public class ConnectionPluginDefine implements InterceptorDefine { } @Override - public MethodNameMatcher[] getBeInterceptedMethodsMatchers() { - return new MethodNameMatcher[] { new FullNameMatcher("createStatement", 2), - new FullNameMatcher("prepareStatement", 3), - new FullNameMatcher("prepareCall", 3), - new FullNameMatcher("commit"), new FullNameMatcher("rollback"), - new FullNameMatcher("close") }; + public MethodMatcher[] getBeInterceptedMethodsMatchers() { + return new MethodMatcher[] { new SimpleMethodMatcher("createStatement", 2), + new SimpleMethodMatcher("prepareStatement", 3), + new SimpleMethodMatcher("prepareCall", 3), + new SimpleMethodMatcher("commit"), new SimpleMethodMatcher("rollback"), + new SimpleMethodMatcher("close") }; } @Override