use of com.navercorp.pinpoint.profiler.instrument.config.DefaultInstrumentMatcherCacheConfig in project pinpoint by naver.
the class DefaultTransformerMatcherTest method matchClass.
@Test
public void matchClass() throws Exception {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InstrumentMatcherCacheConfig config = new DefaultInstrumentMatcherCacheConfig();
TransformerMatcher matcher = new DefaultTransformerMatcher(config);
InternalClassMetadata stringClassMetadata = readClassMetadata(classLoader, String.class.getName());
InternalClassMetadata threadClassMetadata = readClassMetadata(classLoader, Thread.class.getName());
InternalClassMetadata inputStreamClassMetadata = readClassMetadata(classLoader, InputStream.class.getName());
MatcherOperand operand = null;
// single operand.
operand = new ClassInternalNameMatcherOperand("java/lang/String");
boolean result = matcher.match(classLoader, operand, stringClassMetadata);
assertTrue(result);
// not matched.
operand = new ClassInternalNameMatcherOperand("java/io/InputStream");
result = matcher.match(classLoader, operand, stringClassMetadata);
assertFalse(result);
// and operator
// package AND interface
operand = new PackageInternalNameMatcherOperand("java/lang").and(new InterfaceInternalNameMatcherOperand("java/lang/Runnable", false));
// java.lang.Thread
result = matcher.match(classLoader, operand, threadClassMetadata);
assertTrue(result);
// java.lang.String
result = matcher.match(classLoader, operand, stringClassMetadata);
assertFalse(result);
// or operator
// package OR interface
operand = new PackageInternalNameMatcherOperand("java/lang").or(new InterfaceInternalNameMatcherOperand("java/lang/Runnable", false));
// java.lang.Thread
result = matcher.match(classLoader, operand, threadClassMetadata);
assertTrue(result);
// java.lang.String
result = matcher.match(classLoader, operand, stringClassMetadata);
assertTrue(result);
// not operator
// NOT interface.
operand = new InterfaceInternalNameMatcherOperand("java/lang/Runnable", false);
operand = operand.not();
// java.lang.Thread
result = matcher.match(classLoader, operand, threadClassMetadata);
assertFalse(result);
// java.lang.String
result = matcher.match(classLoader, operand, stringClassMetadata);
assertTrue(result);
// complex operator
// (class or interface) AND (class or interface) ==> class, interface
operand = new ClassInternalNameMatcherOperand("java/lang/String").or(new InterfaceInternalNameMatcherOperand("java/lang/Runnable", false));
operand = operand.and(new ClassInternalNameMatcherOperand("java/lang/Thread").or(new InterfaceInternalNameMatcherOperand("java/lang/Comparable", false)));
result = matcher.match(classLoader, operand, stringClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, operand, threadClassMetadata);
assertTrue(result);
// (class AND interface) OR (class AND interface) ==> class, class
operand = new ClassInternalNameMatcherOperand("java/lang/String").and(new InterfaceInternalNameMatcherOperand("java/lang/Runnable", false));
operand = operand.or(new ClassInternalNameMatcherOperand("java/lang/Thread").and(new InterfaceInternalNameMatcherOperand("java/lang/Comparable", false)));
result = matcher.match(classLoader, operand, stringClassMetadata);
assertFalse(result);
result = matcher.match(classLoader, operand, threadClassMetadata);
assertFalse(result);
// package AND (interface OR annotation) ==> package
operand = new PackageInternalNameMatcherOperand("java/lang");
operand = operand.and(new InterfaceInternalNameMatcherOperand("java/lang/Runnable", false).or(new AnnotationInternalNameMatcherOperand("java/lang/Override", false)));
result = matcher.match(classLoader, operand, stringClassMetadata);
assertFalse(result);
result = matcher.match(classLoader, operand, threadClassMetadata);
assertTrue(result);
// class OR (interface AND NOT annotation)
operand = new ClassInternalNameMatcherOperand("java/lang/String");
operand = operand.or(new InterfaceInternalNameMatcherOperand("java/lang/Runnable", false).and(new AnnotationInternalNameMatcherOperand("java/lang/Override", false).not()));
result = matcher.match(classLoader, operand, stringClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, operand, threadClassMetadata);
assertTrue(result);
}
use of com.navercorp.pinpoint.profiler.instrument.config.DefaultInstrumentMatcherCacheConfig in project pinpoint by naver.
the class MatchableTransformerRegistryTest method findTransformer.
@Test
public void findTransformer() {
List<MatchableClassFileTransformer> matchableClassFileTransformerList = new ArrayList<>();
MockMatchableClassFileTransformer mock1 = new MockMatchableClassFileTransformer(Matchers.newPackageBasedMatcher("com.navercorp.pinpoint.profiler.plugin"));
MockMatchableClassFileTransformer mock2 = new MockMatchableClassFileTransformer(Matchers.newPackageBasedMatcher("com.navercorp.pinpoint.profiler.sender"));
matchableClassFileTransformerList.add(mock1);
matchableClassFileTransformerList.add(mock2);
MatchableTransformerRegistry registry = new MatchableTransformerRegistry(new DefaultInstrumentMatcherCacheConfig(), matchableClassFileTransformerList);
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Class<?> clazz = Foo.class;
byte[] classFileByteCodes = BytecodeUtils.getClassFile(classLoader, clazz.getName());
ClassFileTransformer classFileTransformer = registry.findTransformer(classLoader, "com/navercorp/pinpoint/profiler/plugin/Foo", classFileByteCodes);
clazz = Bar.class;
classFileByteCodes = BytecodeUtils.getClassFile(classLoader, clazz.getName());
classFileTransformer = registry.findTransformer(classLoader, "com/navercorp/pinpoint/profiler/sender/Bar", classFileByteCodes);
System.out.println(classFileTransformer.toString());
}
use of com.navercorp.pinpoint.profiler.instrument.config.DefaultInstrumentMatcherCacheConfig in project pinpoint by naver.
the class DefaultTransformerMatcherTest method considerHierarchy.
@Test
public void considerHierarchy() throws Exception {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InstrumentMatcherCacheConfig config = new DefaultInstrumentMatcherCacheConfig();
TransformerMatcher matcher = new DefaultTransformerMatcher(config);
boolean result = false;
InternalClassMetadata stringClassMetadata = readClassMetadata(classLoader, String.class.getName());
InternalClassMetadata threadClassMetadata = readClassMetadata(classLoader, Thread.class.getName());
InternalClassMetadata extendsThreadClassMetadata = readClassMetadata(classLoader, ExtendsThread.class.getName());
InternalClassMetadata extendsExtendsThreadClassMetadata = readClassMetadata(classLoader, ExtendsExtendsThread.class.getName());
InternalClassMetadata hasMetaAnnotationClassMetadata = readClassMetadata(classLoader, HasMetaAnnotation.class.getName());
InternalClassMetadata hasMetaMetaAnnotationClassMetadata = readClassMetadata(classLoader, HasMetaMetaAnnotation.class.getName());
// interface
InterfaceInternalNameMatcherOperand interfaceMatcherOperand = new InterfaceInternalNameMatcherOperand("java/lang/Runnable", true);
result = matcher.match(classLoader, interfaceMatcherOperand, extendsThreadClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, interfaceMatcherOperand, threadClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, interfaceMatcherOperand, stringClassMetadata);
assertFalse(result);
result = matcher.match(classLoader, interfaceMatcherOperand, extendsExtendsThreadClassMetadata);
assertTrue(result);
// super
SuperClassInternalNameMatcherOperand superMatcherOperand = new SuperClassInternalNameMatcherOperand("java/lang/Thread", true);
result = matcher.match(classLoader, superMatcherOperand, extendsExtendsThreadClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, superMatcherOperand, extendsThreadClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, superMatcherOperand, threadClassMetadata);
assertFalse(result);
result = matcher.match(classLoader, superMatcherOperand, stringClassMetadata);
assertFalse(result);
// annotation
AnnotationInternalNameMatcherOperand annotationMatcherOperand = new AnnotationInternalNameMatcherOperand("javax/annotation/Resource", true);
result = matcher.match(classLoader, annotationMatcherOperand, hasMetaAnnotationClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, annotationMatcherOperand, hasMetaMetaAnnotationClassMetadata);
assertTrue(result);
result = matcher.match(classLoader, annotationMatcherOperand, stringClassMetadata);
assertFalse(result);
result = matcher.match(classLoader, annotationMatcherOperand, threadClassMetadata);
assertFalse(result);
}
use of com.navercorp.pinpoint.profiler.instrument.config.DefaultInstrumentMatcherCacheConfig in project pinpoint by naver.
the class ConfigModule method configure.
@Override
protected void configure() {
logger.info("configure {}", this.getClass().getSimpleName());
binder().requireExplicitBindings();
binder().requireAtInjectOnConstructors();
binder().disableCircularProxies();
ProfilerConfig profilerConfig = agentOption.getProfilerConfig();
bind(ProfilerConfig.class).toInstance(profilerConfig);
Properties properties = profilerConfig.getProperties();
ConfigurationLoader configurationLoader = new ConfigurationLoader(properties);
ContextConfig contextConfig = new DefaultContextConfig();
configurationLoader.load(contextConfig);
logger.info("{}", contextConfig);
bind(ContextConfig.class).toInstance(contextConfig);
bindConstants(contextConfig);
PluginLoadingConfig pluginLoadingConfig = new DefaultPluginLoadingConfig();
configurationLoader.load(pluginLoadingConfig);
logger.info("{}", pluginLoadingConfig);
bind(PluginLoadingConfig.class).toInstance(pluginLoadingConfig);
InstrumentConfig instrumentConfig = new DefaultInstrumentConfig();
configurationLoader.load(instrumentConfig);
logger.info("{}", instrumentConfig);
bind(InstrumentConfig.class).toInstance(instrumentConfig);
InstrumentMatcherCacheConfig instrumentMatcherCacheConfig = new DefaultInstrumentMatcherCacheConfig();
configurationLoader.load(instrumentMatcherCacheConfig);
logger.info("{}", instrumentMatcherCacheConfig);
bind(InstrumentMatcherCacheConfig.class).toInstance(instrumentMatcherCacheConfig);
MonitorConfig monitorConfig = new DefaultMonitorConfig();
configurationLoader.load(monitorConfig);
logger.info("{}", monitorConfig);
bind(MonitorConfig.class).toInstance(monitorConfig);
bind(TransportModule.class).toInstance(profilerConfig.getTransportModule());
bind(Instrumentation.class).toInstance(agentOption.getInstrumentation());
bind(InterceptorRegistryBinder.class).toProvider(InterceptorRegistryBinderProvider.class).in(Scopes.SINGLETON);
TypeLiteral<List<String>> pluginJarFile = new TypeLiteral<List<String>>() {
};
bind(pluginJarFile).annotatedWith(PluginJarPaths.class).toInstance(agentOption.getPluginJars());
TypeLiteral<List<PluginJar>> pluginJars = new TypeLiteral<List<PluginJar>>() {
};
bind(pluginJars).annotatedWith(PluginJars.class).toProvider(PluginJarsProvider.class).in(Scopes.SINGLETON);
bindBootstrapCoreInformation();
bindAgentInformation(agentOption.getAgentId(), agentOption.getAgentName(), agentOption.getApplicationName(), agentOption.isContainer());
bindShutdownHook(contextConfig);
}
Aggregations