From c64ce242f14f374fdb4b932e26b7cb22365744a9 Mon Sep 17 00:00:00 2001 From: wusheng Date: Mon, 14 Mar 2016 16:19:12 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=AE=8C=E6=88=90=E7=B1=BB=E6=9E=84=E9=80=A0?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E3=80=81=E6=96=B9=E6=B3=95=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E7=9A=84=E4=B8=BB=E8=A6=81=E4=BB=A3=E7=A0=81=E3=80=82#36?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skywalking/plugin/PluginBootstrap.java | 11 +-- .../plugin/PluginResourcesResolver.java | 10 ++- .../skywalking/plugin/TracingBootstrap.java | 12 ++- .../ClassConstructorInterceptor.java | 44 ++++++++++ .../interceptor/ClassMethodInterceptor.java | 59 +++++++++++++ .../interceptor/ConstructorContext.java | 13 +++ .../interceptor/EnhanceClazz4Interceptor.java | 84 ++++++++++++++++--- .../interceptor/IAroundInterceptor.java | 6 +- .../interceptor/InterceptorContext.java | 22 +++++ .../test/ai/cloud/bytebuddy/SimulateMain.java | 3 +- .../ai/cloud/plugin/BeInterceptedClass.java | 11 +++ .../test/ai/cloud/plugin/PluginMainTest.java | 19 +++++ .../cloud/plugin/TestAroundInterceptor.java | 25 ++++++ .../cloud/plugin/TestInterceptorDefine.java | 23 +++++ skywalking-api/src/test/resources/log4j2.xml | 25 +++--- .../src/test/resources/sky-walking.auth | 47 +++++++++++ .../src/test/resources/skywalking-plugin.def | 1 + .../resources/skywalking-plugin.properties | 0 18 files changed, 380 insertions(+), 35 deletions(-) create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassConstructorInterceptor.java create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ConstructorContext.java create mode 100644 skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorContext.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/plugin/BeInterceptedClass.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java create mode 100644 skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java create mode 100644 skywalking-api/src/test/resources/sky-walking.auth create mode 100644 skywalking-api/src/test/resources/skywalking-plugin.def delete mode 100644 skywalking-api/src/test/resources/skywalking-plugin.properties diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java index ffcda0f24a..5f542a023d 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java @@ -2,6 +2,7 @@ package com.ai.cloud.skywalking.plugin; import java.net.URL; import java.util.Enumeration; +import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -18,23 +19,23 @@ public class PluginBootstrap { } PluginResourcesResolver resolver = new PluginResourcesResolver(); - Enumeration resources = resolver.getResources(); + List resources = resolver.getResources(); - if (resources == null || !resources.hasMoreElements()) { + if (resources == null || resources.size() == 0) { logger.info("no plugin files (skywalking-plugin.properties) found, continue to start application."); return; } - while (resources.hasMoreElements()) { - URL pluginUrl = resources.nextElement(); + for (URL pluginUrl : resources) { try { PluginCfg.CFG.load(pluginUrl.openStream()); } catch (Throwable t) { logger.error("plugin [{}] init failure.", pluginUrl, t); } } - + EnhanceClazz4Interceptor enhanceClazz4Interceptor = new EnhanceClazz4Interceptor(); enhanceClazz4Interceptor.enhance(); + } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginResourcesResolver.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginResourcesResolver.java index c311cd689b..8f063cb14c 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginResourcesResolver.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginResourcesResolver.java @@ -2,7 +2,9 @@ package com.ai.cloud.skywalking.plugin; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; import java.util.Enumeration; +import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -10,10 +12,11 @@ import org.apache.logging.log4j.Logger; public class PluginResourcesResolver { private static Logger logger = LogManager.getLogger(PluginResourcesResolver.class); - public Enumeration getResources(){ + public List getResources(){ + List cfgUrlPaths = new ArrayList(); Enumeration urls; try { - urls = getDefaultClassLoader().getResources("skywalking-plugin.properties"); + urls = getDefaultClassLoader().getResources("skywalking-plugin.def"); if(!urls.hasMoreElements()){ logger.info("no plugin files (skywalking-plugin.properties) found"); @@ -21,10 +24,11 @@ public class PluginResourcesResolver { while(urls.hasMoreElements()){ URL pluginUrl = urls.nextElement(); + cfgUrlPaths.add(pluginUrl); logger.info("find skywalking plugin define in {}", pluginUrl); } - return urls; + return cfgUrlPaths; } catch (IOException e) { logger.error("read resources failure.", e); } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/TracingBootstrap.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/TracingBootstrap.java index 2d98aa1871..0872906491 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/TracingBootstrap.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/TracingBootstrap.java @@ -1,5 +1,8 @@ package com.ai.cloud.skywalking.plugin; +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -16,7 +19,9 @@ public class TracingBootstrap { private TracingBootstrap() { } - public static void main(String[] args) { + public static void main(String[] args) throws IllegalAccessException, + IllegalArgumentException, InvocationTargetException, + NoSuchMethodException, SecurityException, ClassNotFoundException { if (args.length == 0) { throw new RuntimeException( "bootstrap failure. need args[0] to be main class."); @@ -29,5 +34,10 @@ public class TracingBootstrap { logger.error("PluginBootstrap start failure.", t); } + String[] newArgs = Arrays.copyOfRange(args, 1, args.length); + + + Class.forName(args[0]).getMethod("main", String[].class) + .invoke(null, new Object[]{newArgs}); } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassConstructorInterceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassConstructorInterceptor.java new file mode 100644 index 0000000000..10b2cf445a --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassConstructorInterceptor.java @@ -0,0 +1,44 @@ +package com.ai.cloud.skywalking.plugin.interceptor; + +import net.bytebuddy.implementation.bind.annotation.AllArguments; +import net.bytebuddy.implementation.bind.annotation.FieldProxy; +import net.bytebuddy.implementation.bind.annotation.RuntimeType; +import net.bytebuddy.implementation.bind.annotation.This; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ClassConstructorInterceptor { + private static Logger logger = LogManager + .getLogger(ClassConstructorInterceptor.class); + + private IAroundInterceptor interceptor; + + public ClassConstructorInterceptor(IAroundInterceptor interceptor) { + this.interceptor = interceptor; + } + + @RuntimeType + public void intercept( + @This Object obj, + @FieldProxy(EnhanceClazz4Interceptor.contextAttrName) FieldSetter accessor, + @AllArguments Object[] allArguments) { + try { + accessor.setValue(new EnhancedClassInstanceContext()); + ConstructorContext interceptorContext = new ConstructorContext( + allArguments); + interceptor.onConstruct(null, interceptorContext); + } catch (Throwable t) { + logger.error("ClassConstructorInterceptor failue.", t); + } + + } + + public interface FieldGetter { + Object getValue(); + } + + public interface FieldSetter { + void setValue(Object value); + } +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java new file mode 100644 index 0000000000..35435799bd --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassMethodInterceptor.java @@ -0,0 +1,59 @@ +package com.ai.cloud.skywalking.plugin.interceptor; + +import java.lang.reflect.Method; +import java.util.concurrent.Callable; + +import net.bytebuddy.implementation.bind.annotation.AllArguments; +import net.bytebuddy.implementation.bind.annotation.FieldValue; +import net.bytebuddy.implementation.bind.annotation.Origin; +import net.bytebuddy.implementation.bind.annotation.RuntimeType; +import net.bytebuddy.implementation.bind.annotation.SuperCall; +import net.bytebuddy.implementation.bind.annotation.This; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * 类方法拦截、控制器 + * + * @author wusheng + * + */ +public class ClassMethodInterceptor { + private static Logger logger = LogManager + .getLogger(ClassMethodInterceptor.class); + + private IAroundInterceptor interceptor; + + public ClassMethodInterceptor(IAroundInterceptor interceptor) { + this.interceptor = interceptor; + } + + @RuntimeType + public Object intercept( + @This Object obj, + @AllArguments Object[] allArguments, + @Origin Method method, + @SuperCall Callable zuper, + @FieldValue(EnhanceClazz4Interceptor.contextAttrName) EnhancedClassInstanceContext instanceContext) + throws Exception { + InterceptorContext interceptorContext = new InterceptorContext(obj, + method.getName(), allArguments); + try { + interceptor.beforeMethod(instanceContext, interceptorContext); + } catch (Throwable t) { + logger.error("class[{}] before method[{}] intercept failue:{}", + obj.getClass(), method.getName(), t.getMessage(), t); + } + try { + return zuper.call(); + } finally { + try { + interceptor.afterMethod(instanceContext, interceptorContext); + } catch (Throwable t) { + logger.error("class[{}] after method[{}] intercept failue:{}", + obj.getClass(), method.getName(), t.getMessage(), t); + } + } + } +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ConstructorContext.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ConstructorContext.java new file mode 100644 index 0000000000..58d5b1ea92 --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ConstructorContext.java @@ -0,0 +1,13 @@ +package com.ai.cloud.skywalking.plugin.interceptor; + +public class ConstructorContext { + private Object[] allArguments; + + ConstructorContext(Object[] allArguments) { + this.allArguments = allArguments; + } + + public Object[] allArguments(){ + return this.allArguments; + } +} 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 6fa971f64a..e4116fcbb0 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 @@ -1,16 +1,26 @@ package com.ai.cloud.skywalking.plugin.interceptor; +import static net.bytebuddy.matcher.ElementMatchers.isConstructor; +import static net.bytebuddy.matcher.ElementMatchers.named; + import java.util.Set; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.ClassFileLocator; +import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; +import net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy; +import net.bytebuddy.implementation.MethodDelegation; +import net.bytebuddy.implementation.SuperMethodCall; +import net.bytebuddy.implementation.bind.annotation.FieldProxy; import net.bytebuddy.pool.TypePool; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.ai.cloud.skywalking.plugin.PluginCfg; +import com.ai.cloud.skywalking.plugin.interceptor.ClassConstructorInterceptor.FieldGetter; +import com.ai.cloud.skywalking.plugin.interceptor.ClassConstructorInterceptor.FieldSetter; public class EnhanceClazz4Interceptor { private static Logger logger = LogManager @@ -18,6 +28,8 @@ public class EnhanceClazz4Interceptor { private TypePool typePool; + public static final String contextAttrName = "_$EnhancedClassInstanceContext"; + public EnhanceClazz4Interceptor() { typePool = TypePool.Default.ofClassPath(); } @@ -36,29 +48,79 @@ public class EnhanceClazz4Interceptor { } } - private void enhance0(String interceptorDefineClassName) throws InstantiationException, IllegalAccessException, ClassNotFoundException { - InterceptorDefine define = (InterceptorDefine)Class.forName(interceptorDefineClassName).newInstance(); - + private void enhance0(String interceptorDefineClassName) + throws InstantiationException, IllegalAccessException, + ClassNotFoundException { + logger.debug("prepare to enhance class by {}.", + interceptorDefineClassName); + InterceptorDefine define = (InterceptorDefine) Class.forName( + interceptorDefineClassName).newInstance(); + String enhanceOriginClassName = define.getBeInterceptedClassName(); + + logger.debug("prepare to enhance class {} by {}.", + enhanceOriginClassName, interceptorDefineClassName); /** * rename origin class
* add '$$Origin' at the end of be enhanced classname
- * such as: class com.ai.cloud.TestClass to class com.ai.cloud.TestClass$$Origin + * such as: class com.ai.cloud.TestClass to class + * com.ai.cloud.TestClass$$Origin */ - new ByteBuddy() + String renameClassName = enhanceOriginClassName + "$$Origin"; + Class originClass = new ByteBuddy() .redefine(typePool.describe(enhanceOriginClassName).resolve(), ClassFileLocator.ForClassLoader.ofClassPath()) - .name(enhanceOriginClassName + "$$Origin") + .name(renameClassName) .make() .load(ClassLoader.getSystemClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded(); - + /** - * TODO: need to confirm - * define class as origin class name. and inject to classloader.
+ * to classloader.
+ * * new class need:
- * 1.add field '_$EnhancedClassInstanceContext' of type EnhancedClassInstanceContext
- * 2.intercept constructor and method if required by interceptorDefineClass. use '@FieldValue' get '_$EnhancedClassInstanceContext' ref
+ * 1.add field '_$EnhancedClassInstanceContext' of type + * EnhancedClassInstanceContext
+ * + * 2.intercept constructor and method if required by + * interceptorDefineClass. use '@FieldValue' get + * '_$EnhancedClassInstanceContext' ref
*/ + IAroundInterceptor interceptor = define.instance(); + + DynamicType.Builder newClassBuilder = new ByteBuddy().subclass( + originClass, ConstructorStrategy.Default.IMITATE_SUPER_CLASS); + newClassBuilder = newClassBuilder + .defineField(contextAttrName, + EnhancedClassInstanceContext.class) + .constructor(isConstructor()) + .intercept( + SuperMethodCall.INSTANCE.andThen(MethodDelegation.to( + new ClassConstructorInterceptor(interceptor)) + .appendParameterBinder( + FieldProxy.Binder.install( + FieldGetter.class, + FieldSetter.class)))); + + String[] methodNameList = define.getBeInterceptedMethods(); + for (String methodName : methodNameList) { + newClassBuilder = newClassBuilder.method(named(methodName)) + .intercept( + MethodDelegation.to(new ClassMethodInterceptor( + interceptor))); + } + + /** + * naming class as origin class name, make and load class to + * classloader. + */ + newClassBuilder + .name(enhanceOriginClassName) + .make() + .load(ClassLoader.getSystemClassLoader(), + ClassLoadingStrategy.Default.INJECTION).getLoaded(); + + logger.debug("enhance class {} by {} completely.", + enhanceOriginClassName, interceptorDefineClassName); } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java index 861fc41072..50cc929dac 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java @@ -1,11 +1,11 @@ package com.ai.cloud.skywalking.plugin.interceptor; public interface IAroundInterceptor { - public void onConstruct(EnhancedClassInstanceContext context); + public void onConstruct(EnhancedClassInstanceContext context, ConstructorContext interceptorContext); - public void beforeMethod(EnhancedClassInstanceContext context); + public void beforeMethod(EnhancedClassInstanceContext context, InterceptorContext interceptorContext); - public void afterMethod(EnhancedClassInstanceContext context); + public void afterMethod(EnhancedClassInstanceContext context, InterceptorContext interceptorContext); } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorContext.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorContext.java new file mode 100644 index 0000000000..15a82da716 --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorContext.java @@ -0,0 +1,22 @@ +package com.ai.cloud.skywalking.plugin.interceptor; + + +public class InterceptorContext { + private Object objInst; + private String methodName; + private Object[] allArguments; + + InterceptorContext(Object objInst, String methodName, Object[] allArguments) { + this.objInst = objInst; + this.methodName = methodName; + this.allArguments = allArguments; + } + + public Object[] allArguments(){ + return this.allArguments; + } + + public Object inst(){ + return objInst; + } +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/bytebuddy/SimulateMain.java b/skywalking-api/src/test/java/test/ai/cloud/bytebuddy/SimulateMain.java index e2e763ca57..aedb8829ca 100644 --- a/skywalking-api/src/test/java/test/ai/cloud/bytebuddy/SimulateMain.java +++ b/skywalking-api/src/test/java/test/ai/cloud/bytebuddy/SimulateMain.java @@ -5,6 +5,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.ClassFileLocator; import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; +import net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy; import net.bytebuddy.implementation.MethodDelegation; import net.bytebuddy.implementation.SuperMethodCall; import net.bytebuddy.pool.TypePool; @@ -25,7 +26,7 @@ public class SimulateMain { ClassLoadingStrategy.Default.INJECTION).getLoaded(); TestClass t22 = (TestClass) (new ByteBuddy() - .subclass(newClazz) + .subclass(newClazz, ConstructorStrategy.Default.IMITATE_SUPER_CLASS) .method(isMethod()) .intercept(MethodDelegation.to(new MethodInterceptor())) .constructor(isConstructor()) diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/BeInterceptedClass.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/BeInterceptedClass.java new file mode 100644 index 0000000000..7d67ce42cb --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/BeInterceptedClass.java @@ -0,0 +1,11 @@ +package test.ai.cloud.plugin; + +public class BeInterceptedClass { + public BeInterceptedClass(){ + System.out.println("BeInterceptedClass constructor."); + } + + public void printabc(){ + System.out.println("printabc"); + } +} 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 new file mode 100644 index 0000000000..77fc86b228 --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java @@ -0,0 +1,19 @@ +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{ + TracingBootstrap.main(new String[]{"test.ai.cloud.plugin.PluginMainTest"}); + } + + public static void main(String[] args){ + BeInterceptedClass inst = new BeInterceptedClass(); + inst.printabc(); + } +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java new file mode 100644 index 0000000000..0f9455f705 --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestAroundInterceptor.java @@ -0,0 +1,25 @@ +package test.ai.cloud.plugin; + +import com.ai.cloud.skywalking.plugin.interceptor.ConstructorContext; +import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; +import com.ai.cloud.skywalking.plugin.interceptor.InterceptorContext; + +public class TestAroundInterceptor implements IAroundInterceptor { + + @Override + public void onConstruct(EnhancedClassInstanceContext context, ConstructorContext interceptorContext) { + System.out.println("onConstruct, args size=" + interceptorContext.allArguments().length); + } + + @Override + public void beforeMethod(EnhancedClassInstanceContext context, InterceptorContext interceptorContext) { + System.out.println("beforeMethod : " + context); + } + + @Override + public void afterMethod(EnhancedClassInstanceContext context, InterceptorContext interceptorContext) { + System.out.println("afterMethod: " + context); + } + +} 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 new file mode 100644 index 0000000000..eacf32118c --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/TestInterceptorDefine.java @@ -0,0 +1,23 @@ +package test.ai.cloud.plugin; + +import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; +import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine; + +public class TestInterceptorDefine implements InterceptorDefine { + + @Override + public String getBeInterceptedClassName() { + return "test.ai.cloud.plugin.BeInterceptedClass"; + } + + @Override + public String[] getBeInterceptedMethods() { + return new String[] { "printabc" }; + } + + @Override + public IAroundInterceptor instance() { + return new TestAroundInterceptor(); + } + +} diff --git a/skywalking-api/src/test/resources/log4j2.xml b/skywalking-api/src/test/resources/log4j2.xml index 4559d6d69d..8526987624 100644 --- a/skywalking-api/src/test/resources/log4j2.xml +++ b/skywalking-api/src/test/resources/log4j2.xml @@ -1,13 +1,16 @@ - - - - - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/skywalking-api/src/test/resources/sky-walking.auth b/skywalking-api/src/test/resources/sky-walking.auth new file mode 100644 index 0000000000..5ff5360490 --- /dev/null +++ b/skywalking-api/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=false +#埋点异常的最大长度 +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-api/src/test/resources/skywalking-plugin.def b/skywalking-api/src/test/resources/skywalking-plugin.def new file mode 100644 index 0000000000..dcfaaef7dc --- /dev/null +++ b/skywalking-api/src/test/resources/skywalking-plugin.def @@ -0,0 +1 @@ +test.ai.cloud.plugin.TestInterceptorDefine \ No newline at end of file diff --git a/skywalking-api/src/test/resources/skywalking-plugin.properties b/skywalking-api/src/test/resources/skywalking-plugin.properties deleted file mode 100644 index e69de29bb2..0000000000 -- GitLab