Merge branch 'master' of kimjh008/pinpoint_redis_interceptor

from pull-request 25

* refs/heads/master:
  Merge branch 'master' of http://yobi.navercorp.com/pinpoint/pinpoint
  Merge branch 'master' of http://yobi.navercorp.com/pinpoint/pinpoint
  Merge branch 'master' of http://kimjh008@yobi.navercorp.com/kimjh008/pinpoint_redis_interceptor
  #7 fix comment & try catched unexpected exception
  #7 add properties - redis/nbaseArc enabled
  Merge branch 'master' of http://yobi.navercorp.com/pinpoint/pinpoint
  Merge branch 'master' of http://kimjh008@yobi.navercorp.com/kimjh008/pinpoint_redis_interceptor
  #7 need merge ...
  #7 add pipeline & trace destination id
  #7 redis&nBase-ARC interceptor
This commit is contained in:
Jaehong Kim
2014-09-25 14:01:23 +09:00
1298 changed files with 131780 additions and 129557 deletions
+49 -49
View File
@@ -1,50 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="pinpoint-bootstrap-build" basedir="." default="deploy">
<property environment="env"/>
<property name="pinpoint.version" value="1.0.2"/>
<property name="pinpoint.bootstrap.jar" value="pinpoint-bootstrap-${pinpoint.version}.jar"/>
<property name="maven.dir" value="${env.M2_HOME}"/>
<property name="agent.dir" value="${basedir}/../deploy/pinpoint-agent/"/>
<property name="target.dir" value="${basedir}/target/"/>
<target name="deploy" depends="mvn.build.install, copy.agent">
</target>
<target name="copy.agent">
<copy file="${target.dir}/${pinpoint.bootstrap.jar}" tofile="${agent.dir}/${pinpoint.bootstrap.jar}" overwrite="true">
</copy>
</target>
<target name="mvn.build.install">
<exec executable="${maven.dir}/bin/mvn.bat ">
<arg value="-Dmaven.test.skip=true"/>
<arg value="clean"/>
<arg value="install"/>
<!--<arg value="compile"/>-->
<!--<arg value="jar:jar"/>-->
</exec>
</target>
<target name="mvn.build.package">
<exec executable="${maven.dir}/bin/mvn.bat ">
<arg value="-Dmaven.test.skip=true"/>
<arg value="package"/>
<!--<arg value="compile"/>-->
<!--<arg value="jar:jar"/>-->
</exec>
</target>
<!--<target name="clean" >-->
<!--<delete dir="${class.dir}/class/*"/>-->
<!--<delete dir="${jar.dir}/jar/*"/>-->
<!--<delete dir="${javadoc.dir}/doc/*"/>-->
<!--</target>-->
<?xml version="1.0" encoding="UTF-8"?>
<project name="pinpoint-bootstrap-build" basedir="." default="deploy">
<property environment="env"/>
<property name="pinpoint.version" value="1.0.2"/>
<property name="pinpoint.bootstrap.jar" value="pinpoint-bootstrap-${pinpoint.version}.jar"/>
<property name="maven.dir" value="${env.M2_HOME}"/>
<property name="agent.dir" value="${basedir}/../deploy/pinpoint-agent/"/>
<property name="target.dir" value="${basedir}/target/"/>
<target name="deploy" depends="mvn.build.install, copy.agent">
</target>
<target name="copy.agent">
<copy file="${target.dir}/${pinpoint.bootstrap.jar}" tofile="${agent.dir}/${pinpoint.bootstrap.jar}" overwrite="true">
</copy>
</target>
<target name="mvn.build.install">
<exec executable="${maven.dir}/bin/mvn.bat ">
<arg value="-Dmaven.test.skip=true"/>
<arg value="clean"/>
<arg value="install"/>
<!--<arg value="compile"/>-->
<!--<arg value="jar:jar"/>-->
</exec>
</target>
<target name="mvn.build.package">
<exec executable="${maven.dir}/bin/mvn.bat ">
<arg value="-Dmaven.test.skip=true"/>
<arg value="package"/>
<!--<arg value="compile"/>-->
<!--<arg value="jar:jar"/>-->
</exec>
</target>
<!--<target name="clean" >-->
<!--<delete dir="${class.dir}/class/*"/>-->
<!--<delete dir="${jar.dir}/jar/*"/>-->
<!--<delete dir="${javadoc.dir}/doc/*"/>-->
<!--</target>-->
</project>
+12 -12
View File
@@ -1,13 +1,13 @@
<FindBugsFilter>
<!--
<Match> <Class name="com.foobar.ClassWithSomeBugsMatched" /> <Bug
code="DE,UrF,SIC" /> </Match>
-->
<!--<Match>-->
<!--<Class name="com.nhncorp.usf.core.result.RedirectResult" />-->
<!--<Bug pattern="DM_CONVERT_CASE" />-->
<!--</Match>-->
<!--
Match all XYZ violations. <Match> <Bug code="XYZ" /> </Match>
-->
<FindBugsFilter>
<!--
<Match> <Class name="com.foobar.ClassWithSomeBugsMatched" /> <Bug
code="DE,UrF,SIC" /> </Match>
-->
<!--<Match>-->
<!--<Class name="com.nhncorp.usf.core.result.RedirectResult" />-->
<!--<Bug pattern="DM_CONVERT_CASE" />-->
<!--</Match>-->
<!--
Match all XYZ violations. <Match> <Bug code="XYZ" /> </Match>
-->
</FindBugsFilter>
@@ -1,9 +1,9 @@
package com.nhn.pinpoint;
/**
* @author emeroad
*/
public final class ProductInfo {
public static final String NAME = "pinpoint";
public static final String CAMEL_NAME = "Pinpoint";
}
package com.nhn.pinpoint;
/**
* @author emeroad
*/
public final class ProductInfo {
public static final String NAME = "pinpoint";
public static final String CAMEL_NAME = "Pinpoint";
}
@@ -1,22 +1,22 @@
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
/**
* @author emeroad
* @author hyungil.jeong
*/
public interface Agent {
void start();
void stop();
void addConnector(String protocol, int port);
TraceContext getTraceContext();
ProfilerConfig getProfilerConfig();
}
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
/**
* @author emeroad
* @author hyungil.jeong
*/
public interface Agent {
void start();
void stop();
void addConnector(String protocol, int port);
TraceContext getTraceContext();
ProfilerConfig getProfilerConfig();
}
@@ -1,101 +1,101 @@
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.concurrent.Callable;
/**
* @author emeroad
*/
public class AgentClassLoader {
private URLClassLoader classLoader;
private String bootClass;
private Agent agentBootStrap;
private ContextClassLoaderExecuteTemplate executeTemplate;
public AgentClassLoader(URL[] urls) {
if (urls == null) {
throw new NullPointerException("urls");
}
ClassLoader bootStrapClassLoader = AgentClassLoader.class.getClassLoader();
this.classLoader = new PinpointURLClassLoader(urls, bootStrapClassLoader);
this.executeTemplate = new ContextClassLoaderExecuteTemplate(classLoader);
}
public void setBootClass(String bootClass) {
this.bootClass = bootClass;
}
public void boot(final String agentArgs, final Instrumentation instrumentation, final ProfilerConfig profilerConfig) {
final Class<?> bootStrapClazz = getBootStrapClass();
agentBootStrap = (Agent) executeTemplate.execute(new Callable<Object>() {
@Override
public Object call() throws Exception {
try {
Constructor<?> constructor = bootStrapClazz.getConstructor(String.class, Instrumentation.class, ProfilerConfig.class);
return constructor.newInstance(agentArgs, instrumentation, profilerConfig);
} catch (InstantiationException e) {
throw new BootStrapException("boot create fail. Caused:" + e.getMessage(), e);
} catch (IllegalAccessException e) {
throw new BootStrapException("boot method invoke fail. Caused:" + e.getMessage(), e);
}
}
});
}
private Class<?> getBootStrapClass() {
try {
return this.classLoader.loadClass(bootClass);
} catch (ClassNotFoundException e) {
throw new BootStrapException("boot class not found. Caused:" + e.getMessage(), e);
}
}
@Deprecated
public Object initializeLoggerBinder() {
if (agentBootStrap != null) {
return reflectionInvoke(this.agentBootStrap, "initializeLogger", null, null);
}
return null;
}
private Object reflectionInvoke(Object target, String method, Class[] type, final Object[] args) {
final Method findMethod = findMethod(target.getClass(), method, type);
return executeTemplate.execute(new Callable() {
@Override
public Object call() {
try {
return findMethod.invoke(agentBootStrap, args);
} catch (InvocationTargetException e) {
throw new BootStrapException(findMethod.getName() + "() fail. Caused:" + e.getMessage(), e);
} catch (IllegalAccessException e) {
throw new BootStrapException("boot method invoke fail. Caused:" + e.getMessage(), e);
}
}
});
}
private Method findMethod(Class<?> clazz, String method, Class[] type) {
try {
return clazz.getDeclaredMethod(method, type);
} catch (NoSuchMethodException e) {
throw new BootStrapException("(" + method + ") boot method not found. Caused:" + e.getMessage(), e);
}
}
}
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.concurrent.Callable;
/**
* @author emeroad
*/
public class AgentClassLoader {
private URLClassLoader classLoader;
private String bootClass;
private Agent agentBootStrap;
private ContextClassLoaderExecuteTemplate executeTemplate;
public AgentClassLoader(URL[] urls) {
if (urls == null) {
throw new NullPointerException("urls");
}
ClassLoader bootStrapClassLoader = AgentClassLoader.class.getClassLoader();
this.classLoader = new PinpointURLClassLoader(urls, bootStrapClassLoader);
this.executeTemplate = new ContextClassLoaderExecuteTemplate(classLoader);
}
public void setBootClass(String bootClass) {
this.bootClass = bootClass;
}
public void boot(final String agentArgs, final Instrumentation instrumentation, final ProfilerConfig profilerConfig) {
final Class<?> bootStrapClazz = getBootStrapClass();
agentBootStrap = (Agent) executeTemplate.execute(new Callable<Object>() {
@Override
public Object call() throws Exception {
try {
Constructor<?> constructor = bootStrapClazz.getConstructor(String.class, Instrumentation.class, ProfilerConfig.class);
return constructor.newInstance(agentArgs, instrumentation, profilerConfig);
} catch (InstantiationException e) {
throw new BootStrapException("boot create fail. Caused:" + e.getMessage(), e);
} catch (IllegalAccessException e) {
throw new BootStrapException("boot method invoke fail. Caused:" + e.getMessage(), e);
}
}
});
}
private Class<?> getBootStrapClass() {
try {
return this.classLoader.loadClass(bootClass);
} catch (ClassNotFoundException e) {
throw new BootStrapException("boot class not found. Caused:" + e.getMessage(), e);
}
}
@Deprecated
public Object initializeLoggerBinder() {
if (agentBootStrap != null) {
return reflectionInvoke(this.agentBootStrap, "initializeLogger", null, null);
}
return null;
}
private Object reflectionInvoke(Object target, String method, Class[] type, final Object[] args) {
final Method findMethod = findMethod(target.getClass(), method, type);
return executeTemplate.execute(new Callable() {
@Override
public Object call() {
try {
return findMethod.invoke(agentBootStrap, args);
} catch (InvocationTargetException e) {
throw new BootStrapException(findMethod.getName() + "() fail. Caused:" + e.getMessage(), e);
} catch (IllegalAccessException e) {
throw new BootStrapException("boot method invoke fail. Caused:" + e.getMessage(), e);
}
}
});
}
private Method findMethod(Class<?> clazz, String method, Class[] type) {
try {
return clazz.getDeclaredMethod(method, type);
} catch (NoSuchMethodException e) {
throw new BootStrapException("(" + method + ") boot method not found. Caused:" + e.getMessage(), e);
}
}
}
@@ -1,17 +1,17 @@
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.exception.PinpointException;
/**
* @author emeroad
*/
public class BootStrapException extends PinpointException {
public BootStrapException(String message, Throwable cause) {
super(message, cause);
}
public BootStrapException(String message) {
super(message);
}
}
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.exception.PinpointException;
/**
* @author emeroad
*/
public class BootStrapException extends PinpointException {
public BootStrapException(String message, Throwable cause) {
super(message, cause);
}
public BootStrapException(String message) {
super(message);
}
}
@@ -1,195 +1,195 @@
package com.nhn.pinpoint.bootstrap;
import java.io.File;
import java.io.FileFilter;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author emeroad
*/
public class ClassPathResolver {
private final Logger logger = Logger.getLogger(this.getClass().getName());
private static final Pattern DEFAULT_AGENT_PATTERN = Pattern.compile("pinpoint-bootstrap(-[0-9]+\\.[0-9]+\\.[0-9]+(\\-SNAPSHOT)?)?\\.jar");
private String classPath;
private String agentJarName;
private String agentJarFullPath;
private String agentDirPath;
private Pattern agentPattern;
private List<String> fileExtensionList;
public ClassPathResolver() {
this(getClassPathFromSystemProperty());
}
public ClassPathResolver(String classPath) {
this.classPath = classPath;
this.agentPattern = DEFAULT_AGENT_PATTERN;
this.fileExtensionList = getDefaultFileExtensionList();
}
public List<String> getDefaultFileExtensionList() {
List<String> extensionList = new ArrayList<String>();
extensionList.add("jar");
extensionList.add("xml");
extensionList.add("properties");
return extensionList;
}
public ClassPathResolver(String classPath, String agentPattern) {
this.classPath = classPath;
this.agentPattern = Pattern.compile(agentPattern);
}
public void setClassPath(String classPath) {
this.classPath = classPath;
}
public void setClassPathFromSystemProperty() {
this.classPath = getClassPathFromSystemProperty();
}
public static String getClassPathFromSystemProperty() {
return System.getProperty("java.class.path");
}
public boolean findAgentJar() {
Matcher matcher = agentPattern.matcher(classPath);
if (!matcher.find()) {
return false;
}
this.agentJarName = parseAgentJar(matcher);
this.agentJarFullPath = parseAgentJarPath(classPath, agentJarName);
if (agentJarFullPath == null) {
return false;
}
this.agentDirPath = parseAgentDirPath(agentJarFullPath);
return true;
}
private String parseAgentJar(Matcher matcher) {
int start = matcher.start();
int end = matcher.end();
return this.classPath.substring(start, end);
}
public String getAgentJarName() {
return this.agentJarName;
}
private String parseAgentJarPath(String classPath, String agentJar) {
String[] classPathList = classPath.split(File.pathSeparator);
for (String findPath : classPathList) {
boolean find = findPath.contains(agentJar);
if (find) {
return findPath;
}
}
return null;
}
public String getAgentJarFullPath() {
return agentJarFullPath;
}
public String getAgentLibPath() {
return this.agentDirPath + File.separator + "lib";
}
public String getAgentLogFilePath() {
return this.agentDirPath + File.separator + "log";
}
public List<URL> resolveLib() {
String agentLibPath = getAgentLibPath();
File libDir = new File(agentLibPath);
if (!libDir.exists()) {
logger.warning(agentLibPath + " not found");
return Collections.emptyList();
}
if (!libDir.isDirectory()) {
logger.warning(agentLibPath + " not Directory");
return Collections.emptyList();
}
final List<URL> jarURLList = new ArrayList<URL>();
final File[] findJarList = findjar(libDir);
if (findJarList != null) {
for (File file : findJarList) {
URL url = toURI(file);
if (url != null) {
jarURLList.add(url);
}
}
}
// agentDir 패스도 넣어야 xml을 찾을 때 해당 패스에서 찾음.
URL agentDirUri = toURI(new File(agentLibPath));
if (agentDirUri != null) {
jarURLList.add(agentDirUri);
}
return jarURLList;
}
private URL toURI(File file) {
URI uri = file.toURI();
try {
return uri.toURL();
} catch (MalformedURLException e) {
logger.log(Level.WARNING, file.getName() + ".toURL() fail. Caused:" + e.getMessage(), e);
return null;
}
}
private File[] findjar(File libDir) {
return libDir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
String path = pathname.getName();
for (String extension : fileExtensionList) {
if (path.lastIndexOf("." + extension) != -1) {
return true;
}
}
return false;
}
});
}
public String parseAgentDirPath(String agentJarFullPath) {
int index1 = agentJarFullPath.lastIndexOf("/");
int index2 = agentJarFullPath.lastIndexOf("\\");
int max = Math.max(index1, index2);
if (max == -1) {
return null;
}
return agentJarFullPath.substring(0, max);
}
public String getAgentDirPath() {
return agentDirPath;
}
public String getAgentConfigPath() {
return agentDirPath + File.separator + "pinpoint.config";
}
}
package com.nhn.pinpoint.bootstrap;
import java.io.File;
import java.io.FileFilter;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author emeroad
*/
public class ClassPathResolver {
private final Logger logger = Logger.getLogger(this.getClass().getName());
private static final Pattern DEFAULT_AGENT_PATTERN = Pattern.compile("pinpoint-bootstrap(-[0-9]+\\.[0-9]+\\.[0-9]+(\\-SNAPSHOT)?)?\\.jar");
private String classPath;
private String agentJarName;
private String agentJarFullPath;
private String agentDirPath;
private Pattern agentPattern;
private List<String> fileExtensionList;
public ClassPathResolver() {
this(getClassPathFromSystemProperty());
}
public ClassPathResolver(String classPath) {
this.classPath = classPath;
this.agentPattern = DEFAULT_AGENT_PATTERN;
this.fileExtensionList = getDefaultFileExtensionList();
}
public List<String> getDefaultFileExtensionList() {
List<String> extensionList = new ArrayList<String>();
extensionList.add("jar");
extensionList.add("xml");
extensionList.add("properties");
return extensionList;
}
public ClassPathResolver(String classPath, String agentPattern) {
this.classPath = classPath;
this.agentPattern = Pattern.compile(agentPattern);
}
public void setClassPath(String classPath) {
this.classPath = classPath;
}
public void setClassPathFromSystemProperty() {
this.classPath = getClassPathFromSystemProperty();
}
public static String getClassPathFromSystemProperty() {
return System.getProperty("java.class.path");
}
public boolean findAgentJar() {
Matcher matcher = agentPattern.matcher(classPath);
if (!matcher.find()) {
return false;
}
this.agentJarName = parseAgentJar(matcher);
this.agentJarFullPath = parseAgentJarPath(classPath, agentJarName);
if (agentJarFullPath == null) {
return false;
}
this.agentDirPath = parseAgentDirPath(agentJarFullPath);
return true;
}
private String parseAgentJar(Matcher matcher) {
int start = matcher.start();
int end = matcher.end();
return this.classPath.substring(start, end);
}
public String getAgentJarName() {
return this.agentJarName;
}
private String parseAgentJarPath(String classPath, String agentJar) {
String[] classPathList = classPath.split(File.pathSeparator);
for (String findPath : classPathList) {
boolean find = findPath.contains(agentJar);
if (find) {
return findPath;
}
}
return null;
}
public String getAgentJarFullPath() {
return agentJarFullPath;
}
public String getAgentLibPath() {
return this.agentDirPath + File.separator + "lib";
}
public String getAgentLogFilePath() {
return this.agentDirPath + File.separator + "log";
}
public List<URL> resolveLib() {
String agentLibPath = getAgentLibPath();
File libDir = new File(agentLibPath);
if (!libDir.exists()) {
logger.warning(agentLibPath + " not found");
return Collections.emptyList();
}
if (!libDir.isDirectory()) {
logger.warning(agentLibPath + " not Directory");
return Collections.emptyList();
}
final List<URL> jarURLList = new ArrayList<URL>();
final File[] findJarList = findjar(libDir);
if (findJarList != null) {
for (File file : findJarList) {
URL url = toURI(file);
if (url != null) {
jarURLList.add(url);
}
}
}
// agentDir 패스도 넣어야 xml을 찾을 때 해당 패스에서 찾음.
URL agentDirUri = toURI(new File(agentLibPath));
if (agentDirUri != null) {
jarURLList.add(agentDirUri);
}
return jarURLList;
}
private URL toURI(File file) {
URI uri = file.toURI();
try {
return uri.toURL();
} catch (MalformedURLException e) {
logger.log(Level.WARNING, file.getName() + ".toURL() fail. Caused:" + e.getMessage(), e);
return null;
}
}
private File[] findjar(File libDir) {
return libDir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
String path = pathname.getName();
for (String extension : fileExtensionList) {
if (path.lastIndexOf("." + extension) != -1) {
return true;
}
}
return false;
}
});
}
public String parseAgentDirPath(String agentJarFullPath) {
int index1 = agentJarFullPath.lastIndexOf("/");
int index2 = agentJarFullPath.lastIndexOf("\\");
int max = Math.max(index1, index2);
if (max == -1) {
return null;
}
return agentJarFullPath.substring(0, max);
}
public String getAgentDirPath() {
return agentDirPath;
}
public String getAgentConfigPath() {
return agentDirPath + File.separator + "pinpoint.config";
}
}
@@ -1,37 +1,37 @@
package com.nhn.pinpoint.bootstrap;
import java.util.concurrent.Callable;
/**
* contextClassLoader에 별도의 classLoader를 세팅하고 실행하는 template
* @author emeroad
*/
public class ContextClassLoaderExecuteTemplate<V> {
private final ClassLoader classLoader;
public ContextClassLoaderExecuteTemplate(ClassLoader classLoader) {
if (classLoader == null) {
throw new NullPointerException("classLoader must not be null");
}
this.classLoader = classLoader;
}
public V execute(Callable<V> callable) throws BootStrapException {
try {
final Thread currentThread = Thread.currentThread();
final ClassLoader before = currentThread.getContextClassLoader();
currentThread.setContextClassLoader(ContextClassLoaderExecuteTemplate.this.classLoader);
try {
return callable.call();
} finally {
// null일 경우도 다시 원복하는게 맞음.
// getContextClassLoader 호출시 에러가 발생하였을 경우 여기서 호출당하지 않으므로 이부분에서 원복하는게 맞음.
currentThread.setContextClassLoader(before);
}
} catch (BootStrapException ex){
throw ex;
} catch (Exception ex) {
throw new BootStrapException("execute fail. Caused:" + ex.getMessage(), ex);
}
}
}
package com.nhn.pinpoint.bootstrap;
import java.util.concurrent.Callable;
/**
* contextClassLoader에 별도의 classLoader를 세팅하고 실행하는 template
* @author emeroad
*/
public class ContextClassLoaderExecuteTemplate<V> {
private final ClassLoader classLoader;
public ContextClassLoaderExecuteTemplate(ClassLoader classLoader) {
if (classLoader == null) {
throw new NullPointerException("classLoader must not be null");
}
this.classLoader = classLoader;
}
public V execute(Callable<V> callable) throws BootStrapException {
try {
final Thread currentThread = Thread.currentThread();
final ClassLoader before = currentThread.getContextClassLoader();
currentThread.setContextClassLoader(ContextClassLoaderExecuteTemplate.this.classLoader);
try {
return callable.call();
} finally {
// null일 경우도 다시 원복하는게 맞음.
// getContextClassLoader 호출시 에러가 발생하였을 경우 여기서 호출당하지 않으므로 이부분에서 원복하는게 맞음.
currentThread.setContextClassLoader(before);
}
} catch (BootStrapException ex){
throw ex;
} catch (Exception ex) {
throw new BootStrapException("execute fail. Caused:" + ex.getMessage(), ex);
}
}
}
@@ -1,196 +1,196 @@
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.ProductInfo;
import com.nhn.pinpoint.common.PinpointConstants;
import com.nhn.pinpoint.common.util.TransactionIdUtils;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import java.io.UnsupportedEncodingException;
import java.lang.instrument.Instrumentation;
import java.net.URL;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
/**
* @author emeroad
* @author netspider
*/
public class PinpointBootStrap {
private static final Logger logger = Logger.getLogger(PinpointBootStrap.class.getName());
private static final int LIMIT_LENGTH = 24;
private static final String DELIMITER = TransactionIdUtils.TRANSACTION_ID_DELIMITER;
public static final String BOOT_CLASS = "com.nhn.pinpoint.profiler.DefaultAgent";
public static final String BOOT_STRAP_LOAD_STATE = "com.nhn.pinpoint.bootstrap.load.state";
public static final String BOOT_STRAP_LOAD_STATE_LOADING = "LOADING";
public static final String BOOT_STRAP_LOAD_STATE_COMPLETE = "COMPLETE";
public static final String BOOT_STRAP_LOAD_STATE_ERROR = "ERROR";
private static final Pattern validIdPattern = Pattern.compile("[^a-zA-Z0-9._(\\-)]");
public static void premain(String agentArgs, Instrumentation instrumentation) {
if (agentArgs != null) {
logger.info(ProductInfo.CAMEL_NAME + " agentArgs:" + agentArgs);
}
final boolean duplicated = checkDuplicateLoadState();
if (duplicated) {
// 중복 케이스는 내가 처리하면 안됨. 아래와 같은 코드는 없어야 한다.
//loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
ClassPathResolver classPathResolver = new ClassPathResolver();
boolean agentJarNotFound = classPathResolver.findAgentJar();
if (!agentJarNotFound) {
// TODO 이거 변경해야 함.
logger.severe("pinpoint-bootstrap-x.x.x.jar not found.");
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
if (!isValidId("pinpoint.agentId", PinpointConstants.AGENT_NAME_MAX_LEN)) {
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
if (!isValidId("pinpoint.applicationName", PinpointConstants.APPLICATION_NAME_MAX_LEN)) {
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
String configPath = getConfigPath(classPathResolver);
if (configPath == null ) {
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
// 설정파일을 못찾으므로 종료.
return;
}
// 로그가 저장될 위치를 시스템 properties로 저장한다.
saveLogFilePath(classPathResolver);
try {
// 설정파일 로드 이게 bootstrap에 있어야 되나는게 맞나?
ProfilerConfig profilerConfig = new ProfilerConfig();
profilerConfig.readConfigFile(configPath);
// 이게 로드할 lib List임.
List<URL> libUrlList = resolveLib(classPathResolver);
AgentClassLoader agentClassLoader = new AgentClassLoader(libUrlList.toArray(new URL[libUrlList.size()]));
agentClassLoader.setBootClass(BOOT_CLASS);
logger.info("pinpoint agent start.");
agentClassLoader.boot(agentArgs, instrumentation, profilerConfig);
logger.info("pinpoint agent start success.");
loadStateChange(BOOT_STRAP_LOAD_STATE_COMPLETE);
} catch (Exception e) {
logger.log(Level.SEVERE, ProductInfo.CAMEL_NAME + " start fail. Caused:" + e.getMessage(), e);
// 위에서 리턴하는거에서 세는게 이
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
}
}
private static void loadStateChange(String loadState) {
System.setProperty(BOOT_STRAP_LOAD_STATE, loadState);
}
private static boolean checkDuplicateLoadState() {
final String exist = System.getProperty(BOOT_STRAP_LOAD_STATE);
if (exist == null) {
loadStateChange(BOOT_STRAP_LOAD_STATE_LOADING);
} else {
if (logger.isLoggable(Level.SEVERE)) {
logger.severe("pinpoint-bootstrap already started. skip agent loading. loadState:" + exist);
}
return true;
}
return false;
}
private static boolean isValidId(String propertyName, int maxSize) {
logger.info("check -D" + propertyName);
String value = System.getProperty(propertyName);
if (value != null) {
// 문자열 앞뒤에 공백은 허용되지 않음.
value = value.trim();
if (validIdPattern.matcher(value).find()) {
logger.severe("invalid Id. " + propertyName + " can only contain alphanumeric, dot, dash and underscore. value:" + value);
return false;
}
final byte[] bytes;
try {
bytes = toBytes(value);
} catch (UnsupportedEncodingException e) {
logger.severe("toBytes() fail. propertyName:" + propertyName + " propertyValue:" + value);
return false;
}
if (bytes.length == 0) {
logger.severe("invalid " + propertyName + ". agentId is empty. length:" + bytes.length + " value:" + value);
return false;
}
if (bytes.length > maxSize) {
logger.severe("invalid " + propertyName + ". too large bytes. length:" + bytes.length + " value:" + value);
return false;
}
logger.info("check success. -D" + propertyName + ":" + value + " length:" + bytes.length);
return true;
} else {
logger.severe("-D" + propertyName + " is null.");
return false;
}
}
private static byte[] toBytes(String property) throws UnsupportedEncodingException {
return property.getBytes("UTF-8");
}
private static void saveLogFilePath(ClassPathResolver classPathResolver) {
String agentLogFilePath = classPathResolver.getAgentLogFilePath();
logger.info("logPath:" + agentLogFilePath);
System.setProperty(ProductInfo.NAME + ".log", agentLogFilePath);
}
private static String getConfigPath(ClassPathResolver classPathResolver) {
final String configName = ProductInfo.NAME + ".config";
String pinpointConfigFormSystemProperty = System.getProperty(configName);
if (pinpointConfigFormSystemProperty != null) {
logger.info(configName + " systemProperty found. " + pinpointConfigFormSystemProperty);
return pinpointConfigFormSystemProperty;
}
String classPathAgentConfigPath = classPathResolver.getAgentConfigPath();
if (classPathAgentConfigPath != null) {
logger.info("classpath " + configName + " found. " + classPathAgentConfigPath);
return classPathAgentConfigPath;
}
logger.severe(configName + " file not found.");
return null;
}
private static List<URL> resolveLib(ClassPathResolver classPathResolver) {
// 절대경로만 처리되지 않나함. 상대 경로(./../agentlib/lib등)일 경우의 처리가 있어야 될것 같음.
String agentJarFullPath = classPathResolver.getAgentJarFullPath();
String agentLibPath = classPathResolver.getAgentLibPath();
List<URL> urlList = classPathResolver.resolveLib();
String agentConfigPath = classPathResolver.getAgentConfigPath();
if (logger.isLoggable(Level.INFO)) {
logger.info("agentJarPath:" + agentJarFullPath);
logger.info("agentLibPath:" + agentLibPath);
logger.info("agent lib list:" + urlList);
logger.info("agent config:" + agentConfigPath);
}
return urlList;
}
}
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.ProductInfo;
import com.nhn.pinpoint.common.PinpointConstants;
import com.nhn.pinpoint.common.util.TransactionIdUtils;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import java.io.UnsupportedEncodingException;
import java.lang.instrument.Instrumentation;
import java.net.URL;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
/**
* @author emeroad
* @author netspider
*/
public class PinpointBootStrap {
private static final Logger logger = Logger.getLogger(PinpointBootStrap.class.getName());
private static final int LIMIT_LENGTH = 24;
private static final String DELIMITER = TransactionIdUtils.TRANSACTION_ID_DELIMITER;
public static final String BOOT_CLASS = "com.nhn.pinpoint.profiler.DefaultAgent";
public static final String BOOT_STRAP_LOAD_STATE = "com.nhn.pinpoint.bootstrap.load.state";
public static final String BOOT_STRAP_LOAD_STATE_LOADING = "LOADING";
public static final String BOOT_STRAP_LOAD_STATE_COMPLETE = "COMPLETE";
public static final String BOOT_STRAP_LOAD_STATE_ERROR = "ERROR";
private static final Pattern validIdPattern = Pattern.compile("[^a-zA-Z0-9._(\\-)]");
public static void premain(String agentArgs, Instrumentation instrumentation) {
if (agentArgs != null) {
logger.info(ProductInfo.CAMEL_NAME + " agentArgs:" + agentArgs);
}
final boolean duplicated = checkDuplicateLoadState();
if (duplicated) {
// 중복 케이스는 내가 처리하면 안됨. 아래와 같은 코드는 없어야 한다.
//loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
ClassPathResolver classPathResolver = new ClassPathResolver();
boolean agentJarNotFound = classPathResolver.findAgentJar();
if (!agentJarNotFound) {
// TODO 이거 변경해야 함.
logger.severe("pinpoint-bootstrap-x.x.x.jar not found.");
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
if (!isValidId("pinpoint.agentId", PinpointConstants.AGENT_NAME_MAX_LEN)) {
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
if (!isValidId("pinpoint.applicationName", PinpointConstants.APPLICATION_NAME_MAX_LEN)) {
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
return;
}
String configPath = getConfigPath(classPathResolver);
if (configPath == null ) {
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
// 설정파일을 못찾으므로 종료.
return;
}
// 로그가 저장될 위치를 시스템 properties로 저장한다.
saveLogFilePath(classPathResolver);
try {
// 설정파일 로드 이게 bootstrap에 있어야 되나는게 맞나?
ProfilerConfig profilerConfig = new ProfilerConfig();
profilerConfig.readConfigFile(configPath);
// 이게 로드할 lib List임.
List<URL> libUrlList = resolveLib(classPathResolver);
AgentClassLoader agentClassLoader = new AgentClassLoader(libUrlList.toArray(new URL[libUrlList.size()]));
agentClassLoader.setBootClass(BOOT_CLASS);
logger.info("pinpoint agent start.");
agentClassLoader.boot(agentArgs, instrumentation, profilerConfig);
logger.info("pinpoint agent start success.");
loadStateChange(BOOT_STRAP_LOAD_STATE_COMPLETE);
} catch (Exception e) {
logger.log(Level.SEVERE, ProductInfo.CAMEL_NAME + " start fail. Caused:" + e.getMessage(), e);
// 위에서 리턴하는거에서 세는게 이
loadStateChange(BOOT_STRAP_LOAD_STATE_ERROR);
}
}
private static void loadStateChange(String loadState) {
System.setProperty(BOOT_STRAP_LOAD_STATE, loadState);
}
private static boolean checkDuplicateLoadState() {
final String exist = System.getProperty(BOOT_STRAP_LOAD_STATE);
if (exist == null) {
loadStateChange(BOOT_STRAP_LOAD_STATE_LOADING);
} else {
if (logger.isLoggable(Level.SEVERE)) {
logger.severe("pinpoint-bootstrap already started. skip agent loading. loadState:" + exist);
}
return true;
}
return false;
}
private static boolean isValidId(String propertyName, int maxSize) {
logger.info("check -D" + propertyName);
String value = System.getProperty(propertyName);
if (value != null) {
// 문자열 앞뒤에 공백은 허용되지 않음.
value = value.trim();
if (validIdPattern.matcher(value).find()) {
logger.severe("invalid Id. " + propertyName + " can only contain alphanumeric, dot, dash and underscore. value:" + value);
return false;
}
final byte[] bytes;
try {
bytes = toBytes(value);
} catch (UnsupportedEncodingException e) {
logger.severe("toBytes() fail. propertyName:" + propertyName + " propertyValue:" + value);
return false;
}
if (bytes.length == 0) {
logger.severe("invalid " + propertyName + ". agentId is empty. length:" + bytes.length + " value:" + value);
return false;
}
if (bytes.length > maxSize) {
logger.severe("invalid " + propertyName + ". too large bytes. length:" + bytes.length + " value:" + value);
return false;
}
logger.info("check success. -D" + propertyName + ":" + value + " length:" + bytes.length);
return true;
} else {
logger.severe("-D" + propertyName + " is null.");
return false;
}
}
private static byte[] toBytes(String property) throws UnsupportedEncodingException {
return property.getBytes("UTF-8");
}
private static void saveLogFilePath(ClassPathResolver classPathResolver) {
String agentLogFilePath = classPathResolver.getAgentLogFilePath();
logger.info("logPath:" + agentLogFilePath);
System.setProperty(ProductInfo.NAME + ".log", agentLogFilePath);
}
private static String getConfigPath(ClassPathResolver classPathResolver) {
final String configName = ProductInfo.NAME + ".config";
String pinpointConfigFormSystemProperty = System.getProperty(configName);
if (pinpointConfigFormSystemProperty != null) {
logger.info(configName + " systemProperty found. " + pinpointConfigFormSystemProperty);
return pinpointConfigFormSystemProperty;
}
String classPathAgentConfigPath = classPathResolver.getAgentConfigPath();
if (classPathAgentConfigPath != null) {
logger.info("classpath " + configName + " found. " + classPathAgentConfigPath);
return classPathAgentConfigPath;
}
logger.severe(configName + " file not found.");
return null;
}
private static List<URL> resolveLib(ClassPathResolver classPathResolver) {
// 절대경로만 처리되지 않나함. 상대 경로(./../agentlib/lib등)일 경우의 처리가 있어야 될것 같음.
String agentJarFullPath = classPathResolver.getAgentJarFullPath();
String agentLibPath = classPathResolver.getAgentLibPath();
List<URL> urlList = classPathResolver.resolveLib();
String agentConfigPath = classPathResolver.getAgentConfigPath();
if (logger.isLoggable(Level.INFO)) {
logger.info("agentJarPath:" + agentJarFullPath);
logger.info("agentLibPath:" + agentLibPath);
logger.info("agent lib list:" + urlList);
logger.info("agent config:" + agentConfigPath);
}
return urlList;
}
}
@@ -1,60 +1,60 @@
package com.nhn.pinpoint.bootstrap;
import java.net.URL;
import java.net.URLClassLoader;
/**
* profiler lib 디렉토리의 jar의 경우 delegation하지 않고 자기 자신에게 로드하도록 함.
* standalone java 일 경우 dead lock문제가 발생할수 있어, 자기자신이 load할 class일 경우 parent로 넘기지 않음.
* @author emeroad
*/
public class PinpointURLClassLoader extends URLClassLoader {
private final ClassLoader parent;
private final ProfilerLibClass profilerLibClass = new ProfilerLibClass();
public PinpointURLClassLoader(URL[] urls, ClassLoader parent) {
super(urls, parent);
if (parent == null) {
throw new NullPointerException("parent must not be null");
}
// parent가 null인 케이스는 지원하지 않는다.
this.parent = parent;
}
@Override
protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
// First, check if the class has already been loaded
Class clazz = findLoadedClass(name);
if (clazz == null) {
if (onLoadClass(name)) {
// 나한테 있어야 하는 class의 경우 그냥 로드.
clazz = findClass(name);
} else {
try {
// 부모를 찾고.
clazz = parent.loadClass(name);
} catch (ClassNotFoundException e) {
// class를 못찾음.
}
if (clazz == null) {
// 없으면 나한테 로드 시도.
clazz = findClass(name);
}
}
}
if (resolve) {
resolveClass(clazz);
}
return clazz;
}
// for test
boolean onLoadClass(String name) {
return profilerLibClass.onLoadClass(name);
}
}
package com.nhn.pinpoint.bootstrap;
import java.net.URL;
import java.net.URLClassLoader;
/**
* profiler lib 디렉토리의 jar의 경우 delegation하지 않고 자기 자신에게 로드하도록 함.
* standalone java 일 경우 dead lock문제가 발생할수 있어, 자기자신이 load할 class일 경우 parent로 넘기지 않음.
* @author emeroad
*/
public class PinpointURLClassLoader extends URLClassLoader {
private final ClassLoader parent;
private final ProfilerLibClass profilerLibClass = new ProfilerLibClass();
public PinpointURLClassLoader(URL[] urls, ClassLoader parent) {
super(urls, parent);
if (parent == null) {
throw new NullPointerException("parent must not be null");
}
// parent가 null인 케이스는 지원하지 않는다.
this.parent = parent;
}
@Override
protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
// First, check if the class has already been loaded
Class clazz = findLoadedClass(name);
if (clazz == null) {
if (onLoadClass(name)) {
// 나한테 있어야 하는 class의 경우 그냥 로드.
clazz = findClass(name);
} else {
try {
// 부모를 찾고.
clazz = parent.loadClass(name);
} catch (ClassNotFoundException e) {
// class를 못찾음.
}
if (clazz == null) {
// 없으면 나한테 로드 시도.
clazz = findClass(name);
}
}
}
if (resolve) {
resolveClass(clazz);
}
return clazz;
}
// for test
boolean onLoadClass(String name) {
return profilerLibClass.onLoadClass(name);
}
}
@@ -1,31 +1,31 @@
package com.nhn.pinpoint.bootstrap;
/**
* @author emeroad
*/
public class ProfilerLibClass {
private static final String[] PINPOINT_PROFILER_CLASS = new String[] {
"com.nhn.pinpoint.profiler",
"com.nhn.pinpoint.thrift",
"com.nhn.pinpoint.rpc",
"javassist",
"org.slf4j",
"org.apache.thrift",
"org.jboss.netty",
"com.google.common",
"org.apache.commons.lang",
"org.apache.log4j",
"com.codahale.metrics"
};
public boolean onLoadClass(String clazzName) {
final int length = PINPOINT_PROFILER_CLASS.length;
for (int i = 0; i < length; i++) {
if (clazzName.startsWith(PINPOINT_PROFILER_CLASS[i])) {
return true;
}
}
return false;
}
}
package com.nhn.pinpoint.bootstrap;
/**
* @author emeroad
*/
public class ProfilerLibClass {
private static final String[] PINPOINT_PROFILER_CLASS = new String[] {
"com.nhn.pinpoint.profiler",
"com.nhn.pinpoint.thrift",
"com.nhn.pinpoint.rpc",
"javassist",
"org.slf4j",
"org.apache.thrift",
"org.jboss.netty",
"com.google.common",
"org.apache.commons.lang",
"org.apache.log4j",
"com.codahale.metrics"
};
public boolean onLoadClass(String clazzName) {
final int length = PINPOINT_PROFILER_CLASS.length;
for (int i = 0; i < length; i++) {
if (clazzName.startsWith(PINPOINT_PROFILER_CLASS[i])) {
return true;
}
}
return false;
}
}
@@ -1,20 +1,20 @@
package com.nhn.pinpoint.bootstrap.config;
/**
* @author emeroad
*/
public enum DumpType {
// NONE(-1), 의 경우 이미 더 앞단에서 할지 말지를 결정하므로 중복설정이라 주석처리함.
ALWAYS(0), EXCEPTION(1);
private int code;
private DumpType(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
package com.nhn.pinpoint.bootstrap.config;
/**
* @author emeroad
*/
public enum DumpType {
// NONE(-1), 의 경우 이미 더 앞단에서 할지 말지를 결정하므로 중복설정이라 주석처리함.
ALWAYS(0), EXCEPTION(1);
private int code;
private DumpType(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
@@ -70,6 +70,11 @@ public class ProfilerConfig {
private boolean ibatis = true;
private boolean mybatis = true;
private boolean redis = true;
private boolean redisPipeline = true;
private boolean nbaseArc = true;
private boolean nbaseArcPipeline = true;
/**
* apache http client
@@ -460,6 +465,23 @@ public class ProfilerConfig {
public boolean isMyBatisEnabled() {
return mybatis;
}
public boolean isRedisEnabled() {
return redis;
}
public boolean isRedisPipelineEnabled() {
return redisPipeline;
}
public boolean isNbaseArcEnabled() {
return nbaseArc;
}
public boolean isNbaseArcPipelineEnabled() {
return nbaseArcPipeline;
}
/**
* TODO remove this. 테스트 장비에서 call stack view가 잘 보이는지 테스트 하려고 추가함.
@@ -583,6 +605,12 @@ public class ProfilerConfig {
this.ningAsyncHttpClientProfileParamDumpSize = readInt(prop, "profiler.ning.asynchttpclient.param.dumpsize", 1024);
this.ningAsyncHttpClientProfileParamSamplingRate = readInt(prop, "profiler.asynchttpclient.param.sampling.rate", 1);
// redis & nBase-ARC
this.redis = readBoolean(prop, "profiler.redis", true);
this.redisPipeline = readBoolean(prop, "profiler.redis.pipeline", true);
this.nbaseArc = readBoolean(prop, "profiler.nbase_arc", true);
this.nbaseArcPipeline = readBoolean(prop, "profiler.nbase_arc.pipeline", true);
//
// FIXME 임시용, line game netty configuration
//
@@ -595,7 +623,7 @@ public class ProfilerConfig {
this.samplingEnable = readBoolean(prop, "profiler.sampling.enable", true);
this.samplingRate = readInt(prop, "profiler.sampling.rate", 1);
// 샘플링 + io 조절 bufferSize 결정
this.ioBufferingEnable = readBoolean(prop, "profiler.io.buffering.enable", true);
// 버퍼 사이즈는 여기에 있는것은 문제가 있는것도 같음. 설정 조정의 필요성이 있음.
@@ -752,6 +780,10 @@ public class ProfilerConfig {
sb.append(", arucsKeyTrace=").append(arucsKeyTrace);
sb.append(", memcached=").append(memcached);
sb.append(", memcachedKeyTrace=").append(memcachedKeyTrace);
sb.append(", redis=").append(redis);
sb.append(", redisPipeline=").append(redisPipeline);
sb.append(", nbaseArc=").append(nbaseArc);
sb.append(", nbaseArcPipeline=").append(nbaseArcPipeline);
sb.append(", ibatis=").append(ibatis);
sb.append(", mybatis=").append(mybatis);
sb.append(", apacheHttpClient4Profile=").append(apacheHttpClient4Profile);
@@ -1,58 +1,58 @@
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.common.AnnotationKey;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.bootstrap.interceptor.MethodDescriptor;
import java.util.TimerTask;
/**
* @author emeroad
*/
public interface AsyncTrace {
public static final int STATE_INIT = 0;
public static final int STATE_FIRE = 1;
public static final int STATE_TIMEOUT = 2;
int getState();
boolean fire();
void setTimeoutTask(TimerTask timeoutTask);
void setAsyncId(int asyncId);
int getAsyncId();
Object getAttachObject();
void setAttachObject(Object attachObject);
void traceBlockBegin();
void markBeforeTime();
long getBeforeTime();
void traceBlockEnd();
void markAfterTime();
void recordApi(MethodDescriptor methodDescriptor);
void recordException(Object result);
void recordAttribute(AnnotationKey key, String value);
void recordAttribute(AnnotationKey key, int value);
void recordAttribute(AnnotationKey key, Object value);
void recordServiceType(ServiceType serviceType);
void recordRpcName(String rpcName);
void recordDestinationId(String destinationId);
// TODO: final String... endPoint로 받으면 합치는데 비용이 들어가 그냥 한번에 받는게 나을것 같음.
void recordEndPoint(String endPoint);
}
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.common.AnnotationKey;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.bootstrap.interceptor.MethodDescriptor;
import java.util.TimerTask;
/**
* @author emeroad
*/
public interface AsyncTrace {
public static final int STATE_INIT = 0;
public static final int STATE_FIRE = 1;
public static final int STATE_TIMEOUT = 2;
int getState();
boolean fire();
void setTimeoutTask(TimerTask timeoutTask);
void setAsyncId(int asyncId);
int getAsyncId();
Object getAttachObject();
void setAttachObject(Object attachObject);
void traceBlockBegin();
void markBeforeTime();
long getBeforeTime();
void traceBlockEnd();
void markAfterTime();
void recordApi(MethodDescriptor methodDescriptor);
void recordException(Object result);
void recordAttribute(AnnotationKey key, String value);
void recordAttribute(AnnotationKey key, int value);
void recordAttribute(AnnotationKey key, Object value);
void recordServiceType(ServiceType serviceType);
void recordRpcName(String rpcName);
void recordDestinationId(String destinationId);
// TODO: final String... endPoint로 받으면 합치는데 비용이 들어가 그냥 한번에 받는게 나을것 같음.
void recordEndPoint(String endPoint);
}
@@ -1,24 +1,24 @@
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.common.ServiceType;
import java.util.List;
/**
* @author emeroad
*/
public interface DatabaseInfo {
List<String> getHost();
String getMultipleHost();
String getDatabaseId();
String getRealUrl();
String getUrl();
ServiceType getType();
ServiceType getExecuteQueryType();
}
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.common.ServiceType;
import java.util.List;
/**
* @author emeroad
*/
public interface DatabaseInfo {
List<String> getHost();
String getMultipleHost();
String getDatabaseId();
String getRealUrl();
String getUrl();
ServiceType getType();
ServiceType getExecuteQueryType();
}
@@ -1,7 +1,7 @@
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface Metric {
}
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface Metric {
}
@@ -1,75 +1,75 @@
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.bootstrap.interceptor.MethodDescriptor;
import com.nhn.pinpoint.common.AnnotationKey;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public interface RecordableTrace {
void markBeforeTime();
long getBeforeTime();
void markAfterTime();
long getAfterTime();
TraceId getTraceId();
boolean canSampled();
boolean isRoot();
void recordException(Throwable throwable);
void recordApi(MethodDescriptor methodDescriptor);
void recordApi(MethodDescriptor methodDescriptor, Object[] args);
void recordApi(MethodDescriptor methodDescriptor, Object args, int index);
void recordApi(MethodDescriptor methodDescriptor, Object[] args, int start, int end);
void recordApiCachedString(MethodDescriptor methodDescriptor, String args, int index);
ParsingResult recordSqlInfo(String sql);
void recordSqlParsingResult(ParsingResult parsingResult);
void recordSqlParsingResult(ParsingResult parsingResult, String bindValue);
void recordAttribute(AnnotationKey key, String value);
void recordAttribute(AnnotationKey key, int value);
void recordAttribute(AnnotationKey key, Object value);
void recordServiceType(ServiceType serviceType);
void recordRpcName(String rpc);
void recordDestinationId(String destinationId);
void recordEndPoint(String endPoint);
void recordRemoteAddress(String remoteAddress);
void recordNextSpanId(long spanId);
void recordParentApplication(String parentApplicationName, short parentApplicationType);
/**
* WAS_A -> WAS_B 호출 관계일 때 WAS_B에서 WAS_A가 보내준 호출 정보를 통해 자기 자신의 정보를 추출하여 저장
* 이 데이터는 서버맵에서 WAS끼리 호출관계를 알아낼 떄 필요하다.
*
* @param host host 값은 WAS를 호출한 URL상의 host를 가져와야 한다.
*/
void recordAcceptorHost(String host);
int getStackFrameId();
}
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.bootstrap.interceptor.MethodDescriptor;
import com.nhn.pinpoint.common.AnnotationKey;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public interface RecordableTrace {
void markBeforeTime();
long getBeforeTime();
void markAfterTime();
long getAfterTime();
TraceId getTraceId();
boolean canSampled();
boolean isRoot();
void recordException(Throwable throwable);
void recordApi(MethodDescriptor methodDescriptor);
void recordApi(MethodDescriptor methodDescriptor, Object[] args);
void recordApi(MethodDescriptor methodDescriptor, Object args, int index);
void recordApi(MethodDescriptor methodDescriptor, Object[] args, int start, int end);
void recordApiCachedString(MethodDescriptor methodDescriptor, String args, int index);
ParsingResult recordSqlInfo(String sql);
void recordSqlParsingResult(ParsingResult parsingResult);
void recordSqlParsingResult(ParsingResult parsingResult, String bindValue);
void recordAttribute(AnnotationKey key, String value);
void recordAttribute(AnnotationKey key, int value);
void recordAttribute(AnnotationKey key, Object value);
void recordServiceType(ServiceType serviceType);
void recordRpcName(String rpc);
void recordDestinationId(String destinationId);
void recordEndPoint(String endPoint);
void recordRemoteAddress(String remoteAddress);
void recordNextSpanId(long spanId);
void recordParentApplication(String parentApplicationName, short parentApplicationType);
/**
* WAS_A -> WAS_B 호출 관계일 때 WAS_B에서 WAS_A가 보내준 호출 정보를 통해 자기 자신의 정보를 추출하여 저장
* 이 데이터는 서버맵에서 WAS끼리 호출관계를 알아낼 떄 필요하다.
*
* @param host host 값은 WAS를 호출한 URL상의 host를 가져와야 한다.
*/
void recordAcceptorHost(String host);
int getStackFrameId();
}
@@ -1,22 +1,22 @@
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface StackOperation {
public static final int DEFAULT_STACKID = -1;
public static final int ROOT_STACKID = 0;
void traceBlockBegin();
void traceBlockBegin(int stackId);
// traceRootBlockBegin을 명시적으로 빼내야 되듯함.
void traceRootBlockEnd();
void traceBlockEnd();
void traceBlockEnd(int stackId);
}
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface StackOperation {
public static final int DEFAULT_STACKID = -1;
public static final int ROOT_STACKID = 0;
void traceBlockBegin();
void traceBlockBegin(int stackId);
// traceRootBlockBegin을 명시적으로 빼내야 되듯함.
void traceRootBlockEnd();
void traceBlockEnd();
void traceBlockEnd(int stackId);
}
@@ -1,13 +1,13 @@
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface Trace extends RecordableTrace, StackOperation {
}
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface Trace extends RecordableTrace, StackOperation {
}
@@ -1,64 +1,64 @@
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.interceptor.MethodDescriptor;
/**
* @author emeroad
*/
public interface TraceContext {
Trace currentTraceObject();
/**
* sampling rate를 추가적으로 확인해야 되는 trace를 리턴한다.
* @return
*/
Trace currentRawTraceObject();
Trace continueTraceObject(TraceId traceID);
Trace newTraceObject();
void detachTraceObject();
// ActiveThreadCounter getActiveThreadCounter();
String getAgentId();
String getApplicationName();
long getAgentStartTime();
short getServerTypeCode();
String getServerType();
int cacheApi(MethodDescriptor methodDescriptor);
int cacheString(String value);
ParsingResult parseSql(String sql);
DatabaseInfo parseJdbcUrl(String sql);
DatabaseInfo createDatabaseInfo(ServiceType type, ServiceType executeQueryType, String url, int port, String databaseId);
TraceId createTraceId(String transactionId, long parentSpanID, long spanID, short flags);
Trace disableSampling();
ProfilerConfig getProfilerConfig();
Metric getRpcMetric(ServiceType serviceType);
void recordContextMetricIsError();
void recordContextMetric(int elapsedTime);
void recordAcceptResponseTime(String parentApplicationName, short parentApplicationType, int elapsedTime);
void recordUserAcceptResponseTime(int elapsedTime);
}
package com.nhn.pinpoint.bootstrap.context;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.interceptor.MethodDescriptor;
/**
* @author emeroad
*/
public interface TraceContext {
Trace currentTraceObject();
/**
* sampling rate를 추가적으로 확인해야 되는 trace를 리턴한다.
* @return
*/
Trace currentRawTraceObject();
Trace continueTraceObject(TraceId traceID);
Trace newTraceObject();
void detachTraceObject();
// ActiveThreadCounter getActiveThreadCounter();
String getAgentId();
String getApplicationName();
long getAgentStartTime();
short getServerTypeCode();
String getServerType();
int cacheApi(MethodDescriptor methodDescriptor);
int cacheString(String value);
ParsingResult parseSql(String sql);
DatabaseInfo parseJdbcUrl(String sql);
DatabaseInfo createDatabaseInfo(ServiceType type, ServiceType executeQueryType, String url, int port, String databaseId);
TraceId createTraceId(String transactionId, long parentSpanID, long spanID, short flags);
Trace disableSampling();
ProfilerConfig getProfilerConfig();
Metric getRpcMetric(ServiceType serviceType);
void recordContextMetricIsError();
void recordContextMetric(int elapsedTime);
void recordAcceptResponseTime(String parentApplicationName, short parentApplicationType, int elapsedTime);
void recordUserAcceptResponseTime(int elapsedTime);
}
@@ -1,25 +1,25 @@
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface TraceId {
TraceId getNextTraceId();
long getSpanId();
String getTransactionId();
String getAgentId();
long getAgentStartTime();
long getTransactionSequence();
long getParentSpanId();
short getFlags();
boolean isRoot();
}
package com.nhn.pinpoint.bootstrap.context;
/**
* @author emeroad
*/
public interface TraceId {
TraceId getNextTraceId();
long getSpanId();
String getTransactionId();
String getAgentId();
long getAgentStartTime();
long getTransactionSequence();
long getParentSpanId();
short getFlags();
boolean isRoot();
}
@@ -1,9 +1,9 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* precompile level의 methodDescriptor를 setting 받을수 있게 한다.
* @author emeroad
*/
public interface ByteCodeMethodDescriptorSupport {
void setMethodDescriptor(MethodDescriptor descriptor);
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* precompile level의 methodDescriptor를 setting 받을수 있게 한다.
* @author emeroad
*/
public interface ByteCodeMethodDescriptorSupport {
void setMethodDescriptor(MethodDescriptor descriptor);
}
@@ -1,22 +1,22 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public class EmptyParameterExtractor implements ParameterExtractor {
public static final ParameterExtractor INSTANCE = new EmptyParameterExtractor();
private EmptyParameterExtractor() {
}
@Override
public int getIndex() {
return NOT_FOUND;
}
@Override
public Object extractObject(Object[] parameterList) {
return NULL;
}
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public class EmptyParameterExtractor implements ParameterExtractor {
public static final ParameterExtractor INSTANCE = new EmptyParameterExtractor();
private EmptyParameterExtractor() {
}
@Override
public int getIndex() {
return NOT_FOUND;
}
@Override
public Object extractObject(Object[] parameterList) {
return NULL;
}
}
@@ -1,7 +1,7 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface Interceptor {
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface Interceptor {
}
@@ -1,48 +1,48 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.util.StringUtils;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author emeroad
*/
public class LoggingInterceptor implements StaticAroundInterceptor, SimpleAroundInterceptor {
private final Logger logger;
public LoggingInterceptor(String loggerName) {
this.logger = Logger.getLogger(loggerName);
}
@Override
public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("before " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args));
}
}
@Override
public void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("after " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args) + " result:" + result + " Throwable:" + throwable);
}
}
@Override
public void before(Object target, Object[] args) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("before " + StringUtils.toString(target) + " args:" + Arrays.toString(args) );
}
}
@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("after " + StringUtils.toString(target) + " args:" + Arrays.toString(args) + " result:" + result + " Throwable:" + throwable);
}
}
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.util.StringUtils;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author emeroad
*/
public class LoggingInterceptor implements StaticAroundInterceptor, SimpleAroundInterceptor {
private final Logger logger;
public LoggingInterceptor(String loggerName) {
this.logger = Logger.getLogger(loggerName);
}
@Override
public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("before " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args));
}
}
@Override
public void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("after " + StringUtils.toString(target) + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args) + " result:" + result + " Throwable:" + throwable);
}
}
@Override
public void before(Object target, Object[] args) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("before " + StringUtils.toString(target) + " args:" + Arrays.toString(args) );
}
}
@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
if (logger.isLoggable(Level.FINE)) {
logger.fine("after " + StringUtils.toString(target) + " args:" + Arrays.toString(args) + " result:" + result + " Throwable:" + throwable);
}
}
}
@@ -1,26 +1,26 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface MethodDescriptor {
String getMethodName();
String getClassName();
String[] getParameterTypes();
String[] getParameterVariableName();
String getParameterDescriptor();
int getLineNumber();
String getFullName();
void setApiId(int apiId);
int getApiId();
String getApiDescriptor();
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface MethodDescriptor {
String getMethodName();
String getClassName();
String[] getParameterTypes();
String[] getParameterVariableName();
String getParameterDescriptor();
int getLineNumber();
String getFullName();
void setApiId(int apiId);
int getApiId();
String getApiDescriptor();
}
@@ -1,15 +1,15 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* 객체 생성을 줄이기 위해서 객체를 리턴하지 않고 c 스타일 api로 디자인함.
* @author emeroad
*/
public interface ParameterExtractor {
public static final Object NULL = new Object();
public static final int NOT_FOUND = -1;
int getIndex();
Object extractObject(Object[] parameterList);
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* 객체 생성을 줄이기 위해서 객체를 리턴하지 않고 c 스타일 api로 디자인함.
* @author emeroad
*/
public interface ParameterExtractor {
public static final Object NULL = new Object();
public static final int NOT_FOUND = -1;
int getIndex();
Object extractObject(Object[] parameterList);
}
@@ -1,8 +1,8 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface ParameterExtractorSupport {
void setParameterExtractor(ParameterExtractor parameterExtractor);
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface ParameterExtractorSupport {
void setParameterExtractor(ParameterExtractor parameterExtractor);
}
@@ -1,12 +1,12 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.common.ServiceType;
/**
* @author emeroad
*/
public interface ServiceTypeSupport {
void setServiceType(ServiceType serviceType);
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.common.ServiceType;
/**
* @author emeroad
*/
public interface ServiceTypeSupport {
void setServiceType(ServiceType serviceType);
}
@@ -1,11 +1,11 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface SimpleAroundInterceptor extends Interceptor {
void before(Object target, Object[] args);
void after(Object target, Object[] args, Object result, Throwable throwable);
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface SimpleAroundInterceptor extends Interceptor {
void before(Object target, Object[] args);
void after(Object target, Object[] args, Object result, Throwable throwable);
}
@@ -1,111 +1,111 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.RecordableTrace;
import com.nhn.pinpoint.bootstrap.context.Trace;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
import com.nhn.pinpoint.bootstrap.logging.PLogger;
import com.nhn.pinpoint.bootstrap.logging.PLoggerFactory;
/**
* @author emeroad
*/
public abstract class SpanEventSimpleAroundInterceptor implements SimpleAroundInterceptor, ByteCodeMethodDescriptorSupport, TraceContextSupport {
protected final PLogger logger;
protected final boolean isDebug;
private MethodDescriptor descriptor;
private TraceContext traceContext;
protected SpanEventSimpleAroundInterceptor(Class<? extends SpanEventSimpleAroundInterceptor> childClazz) {
this.logger = PLoggerFactory.getLogger(childClazz);
this.isDebug = logger.isDebugEnabled();
}
@Override
public void before(Object target, Object[] args) {
if (isDebug) {
logBeforeInterceptor(target, args);
}
prepareBeforeTrace(target, args);
final Trace trace = traceContext.currentTraceObject();
if (trace == null) {
return;
}
try {
// blockBegin 인터페이스 분리가 필요함.
trace.traceBlockBegin();
doInBeforeTrace(trace, target, args);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("before. Caused:{}", th.getMessage(), th);
}
}
}
protected void logBeforeInterceptor(Object target, Object[] args) {
logger.beforeInterceptor(target, args);
}
protected void prepareBeforeTrace(Object target, Object[] args) {
}
protected abstract void doInBeforeTrace(final RecordableTrace trace, final Object target, final Object[] args);
@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
if (isDebug) {
logAfterInterceptor(target, args, result, throwable);
}
prepareAfterTrace(target, args, result, throwable);
final Trace trace = traceContext.currentTraceObject();
if (trace == null) {
return;
}
try {
doInAfterTrace(trace, target, args, result, throwable);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("after error. Caused:{}", th.getMessage(), th);
}
} finally {
trace.traceBlockEnd();
}
}
protected void logAfterInterceptor(Object target, Object[] args, Object result, Throwable throwable) {
logger.afterInterceptor(target, args, result, throwable);
}
protected void prepareAfterTrace(Object target, Object[] args, Object result, Throwable throwable) {
}
protected abstract void doInAfterTrace(final RecordableTrace trace, final Object target, final Object[] args, final Object result, Throwable throwable);
@Override
public void setMethodDescriptor(MethodDescriptor descriptor) {
this.descriptor = descriptor;
this.traceContext.cacheApi(descriptor);
}
public MethodDescriptor getMethodDescriptor() {
return descriptor;
}
@Override
public void setTraceContext(TraceContext traceContext) {
this.traceContext = traceContext;
}
public TraceContext getTraceContext() {
return traceContext;
}
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.RecordableTrace;
import com.nhn.pinpoint.bootstrap.context.Trace;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
import com.nhn.pinpoint.bootstrap.logging.PLogger;
import com.nhn.pinpoint.bootstrap.logging.PLoggerFactory;
/**
* @author emeroad
*/
public abstract class SpanEventSimpleAroundInterceptor implements SimpleAroundInterceptor, ByteCodeMethodDescriptorSupport, TraceContextSupport {
protected final PLogger logger;
protected final boolean isDebug;
private MethodDescriptor descriptor;
private TraceContext traceContext;
protected SpanEventSimpleAroundInterceptor(Class<? extends SpanEventSimpleAroundInterceptor> childClazz) {
this.logger = PLoggerFactory.getLogger(childClazz);
this.isDebug = logger.isDebugEnabled();
}
@Override
public void before(Object target, Object[] args) {
if (isDebug) {
logBeforeInterceptor(target, args);
}
prepareBeforeTrace(target, args);
final Trace trace = traceContext.currentTraceObject();
if (trace == null) {
return;
}
try {
// blockBegin 인터페이스 분리가 필요함.
trace.traceBlockBegin();
doInBeforeTrace(trace, target, args);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("before. Caused:{}", th.getMessage(), th);
}
}
}
protected void logBeforeInterceptor(Object target, Object[] args) {
logger.beforeInterceptor(target, args);
}
protected void prepareBeforeTrace(Object target, Object[] args) {
}
protected abstract void doInBeforeTrace(final RecordableTrace trace, final Object target, final Object[] args);
@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
if (isDebug) {
logAfterInterceptor(target, args, result, throwable);
}
prepareAfterTrace(target, args, result, throwable);
final Trace trace = traceContext.currentTraceObject();
if (trace == null) {
return;
}
try {
doInAfterTrace(trace, target, args, result, throwable);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("after error. Caused:{}", th.getMessage(), th);
}
} finally {
trace.traceBlockEnd();
}
}
protected void logAfterInterceptor(Object target, Object[] args, Object result, Throwable throwable) {
logger.afterInterceptor(target, args, result, throwable);
}
protected void prepareAfterTrace(Object target, Object[] args, Object result, Throwable throwable) {
}
protected abstract void doInAfterTrace(final RecordableTrace trace, final Object target, final Object[] args, final Object result, Throwable throwable);
@Override
public void setMethodDescriptor(MethodDescriptor descriptor) {
this.descriptor = descriptor;
this.traceContext.cacheApi(descriptor);
}
public MethodDescriptor getMethodDescriptor() {
return descriptor;
}
@Override
public void setTraceContext(TraceContext traceContext) {
this.traceContext = traceContext;
}
public TraceContext getTraceContext() {
return traceContext;
}
}
@@ -1,101 +1,101 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.RecordableTrace;
import com.nhn.pinpoint.bootstrap.context.Trace;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
import com.nhn.pinpoint.bootstrap.logging.PLogger;
import com.nhn.pinpoint.bootstrap.logging.PLoggerFactory;
/**
* @author emeroad
*/
public abstract class SpanSimpleAroundInterceptor implements SimpleAroundInterceptor, ByteCodeMethodDescriptorSupport, TraceContextSupport {
protected final PLogger logger;
protected final boolean isDebug;
private MethodDescriptor methodDescriptor;
private TraceContext traceContext;
protected SpanSimpleAroundInterceptor(Class<? extends SpanSimpleAroundInterceptor> childClazz) {
this.logger = PLoggerFactory.getLogger(childClazz);
this.isDebug = logger.isDebugEnabled();
}
@Override
public void before(Object target, Object[] args) {
if (isDebug) {
logger.beforeInterceptor(target, args);
}
try {
final Trace trace = createTrace(target, args);
if (trace == null) {
return;
}
// TODO STATDISABLE 일단 통계 저장기능을 disable하기 위해 아래 로직을 추가함.
if (!trace.canSampled()) {
return;
}
//------------------------------------------------------
doInBeforeTrace(trace, target, args);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("before. Caused:{}", th.getMessage(), th);
}
}
}
protected abstract void doInBeforeTrace(final RecordableTrace trace, Object target, final Object[] args);
protected abstract Trace createTrace(final Object target, final Object[] args);
@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
if (isDebug) {
logger.afterInterceptor(target, args, result, throwable);
}
final Trace trace = traceContext.currentRawTraceObject();
if (trace == null) {
return;
}
traceContext.detachTraceObject();
// TODO STATDISABLE 일단 통계 저장기능을 disable하기 위해 아래 로직을 추가함.
if (!trace.canSampled()) {
return;
}
//------------------------------------------------------
try {
doInAfterTrace(trace, target, args, result, throwable);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("after. Caused:{}", th.getMessage(), th);
}
} finally {
trace.traceRootBlockEnd();
}
}
protected abstract void doInAfterTrace(final RecordableTrace trace, final Object target, final Object[] args, final Object result, Throwable throwable);
@Override
public void setMethodDescriptor(MethodDescriptor descriptor) {
this.methodDescriptor = descriptor;
this.traceContext.cacheApi(descriptor);
}
public MethodDescriptor getMethodDescriptor() {
return methodDescriptor;
}
@Override
public void setTraceContext(TraceContext traceContext) {
this.traceContext = traceContext;
}
public TraceContext getTraceContext() {
return traceContext;
}
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.RecordableTrace;
import com.nhn.pinpoint.bootstrap.context.Trace;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
import com.nhn.pinpoint.bootstrap.logging.PLogger;
import com.nhn.pinpoint.bootstrap.logging.PLoggerFactory;
/**
* @author emeroad
*/
public abstract class SpanSimpleAroundInterceptor implements SimpleAroundInterceptor, ByteCodeMethodDescriptorSupport, TraceContextSupport {
protected final PLogger logger;
protected final boolean isDebug;
private MethodDescriptor methodDescriptor;
private TraceContext traceContext;
protected SpanSimpleAroundInterceptor(Class<? extends SpanSimpleAroundInterceptor> childClazz) {
this.logger = PLoggerFactory.getLogger(childClazz);
this.isDebug = logger.isDebugEnabled();
}
@Override
public void before(Object target, Object[] args) {
if (isDebug) {
logger.beforeInterceptor(target, args);
}
try {
final Trace trace = createTrace(target, args);
if (trace == null) {
return;
}
// TODO STATDISABLE 일단 통계 저장기능을 disable하기 위해 아래 로직을 추가함.
if (!trace.canSampled()) {
return;
}
//------------------------------------------------------
doInBeforeTrace(trace, target, args);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("before. Caused:{}", th.getMessage(), th);
}
}
}
protected abstract void doInBeforeTrace(final RecordableTrace trace, Object target, final Object[] args);
protected abstract Trace createTrace(final Object target, final Object[] args);
@Override
public void after(Object target, Object[] args, Object result, Throwable throwable) {
if (isDebug) {
logger.afterInterceptor(target, args, result, throwable);
}
final Trace trace = traceContext.currentRawTraceObject();
if (trace == null) {
return;
}
traceContext.detachTraceObject();
// TODO STATDISABLE 일단 통계 저장기능을 disable하기 위해 아래 로직을 추가함.
if (!trace.canSampled()) {
return;
}
//------------------------------------------------------
try {
doInAfterTrace(trace, target, args, result, throwable);
} catch (Throwable th) {
if (logger.isWarnEnabled()) {
logger.warn("after. Caused:{}", th.getMessage(), th);
}
} finally {
trace.traceRootBlockEnd();
}
}
protected abstract void doInAfterTrace(final RecordableTrace trace, final Object target, final Object[] args, final Object result, Throwable throwable);
@Override
public void setMethodDescriptor(MethodDescriptor descriptor) {
this.methodDescriptor = descriptor;
this.traceContext.cacheApi(descriptor);
}
public MethodDescriptor getMethodDescriptor() {
return methodDescriptor;
}
@Override
public void setTraceContext(TraceContext traceContext) {
this.traceContext = traceContext;
}
public TraceContext getTraceContext() {
return traceContext;
}
}
@@ -1,12 +1,12 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface StaticAroundInterceptor extends Interceptor {
void before(Object target, String className, String methodName, String parameterDescription, Object[] args);
void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable);
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* @author emeroad
*/
public interface StaticAroundInterceptor extends Interceptor {
void before(Object target, String className, String methodName, String parameterDescription, Object[] args);
void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable);
}
@@ -1,8 +1,8 @@
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* 마커 newInterceptor를 통해 new할 경우 마크로 붙여야 한다. new Interceptor()를 하지 않아도 되는 곳에 강제 로딩을 하였을 경우 에러를 발생시키기 위해서 만듬.
* @author emeroad
*/
public interface TargetClassLoader {
}
package com.nhn.pinpoint.bootstrap.interceptor;
/**
* 마커 newInterceptor를 통해 new할 경우 마크로 붙여야 한다. new Interceptor()를 하지 않아도 되는 곳에 강제 로딩을 하였을 경우 에러를 발생시키기 위해서 만듬.
* @author emeroad
*/
public interface TargetClassLoader {
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
/**
* @author emeroad
*/
public interface TraceContextSupport {
void setTraceContext(TraceContext traceContext);
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
/**
* @author emeroad
*/
public interface TraceContextSupport {
void setTraceContext(TraceContext traceContext);
}
@@ -1,13 +1,13 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import java.util.Map;
/**
* @author emeroad
*/
public interface BindValueTraceValue extends TraceValue {
void __setTraceBindValue(Map<Integer, String> value);
Map<Integer, String> __getTraceBindValue();
}
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import java.util.Map;
/**
* @author emeroad
*/
public interface BindValueTraceValue extends TraceValue {
void __setTraceBindValue(Map<Integer, String> value);
Map<Integer, String> __getTraceBindValue();
}
@@ -1,13 +1,13 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import com.nhn.pinpoint.bootstrap.context.DatabaseInfo;
/**
* @author emeroad
*/
public interface DatabaseInfoTraceValue extends TraceValue {
void __setTraceDatabaseInfo(DatabaseInfo value);
DatabaseInfo __getTraceDatabaseInfo();
}
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import com.nhn.pinpoint.bootstrap.context.DatabaseInfo;
/**
* @author emeroad
*/
public interface DatabaseInfoTraceValue extends TraceValue {
void __setTraceDatabaseInfo(DatabaseInfo value);
DatabaseInfo __getTraceDatabaseInfo();
}
@@ -1,32 +1,32 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import com.nhn.pinpoint.bootstrap.context.DatabaseInfo;
/**
* @author emeroad
*/
public class DatabaseInfoTraceValueUtils {
public static DatabaseInfo __getTraceDatabaseInfo(Object target, DatabaseInfo defaultValue) {
if (target == null) {
return defaultValue;
}
if (target instanceof DatabaseInfoTraceValue) {
final DatabaseInfo databaseInfo = ((DatabaseInfoTraceValue) target).__getTraceDatabaseInfo();
if (databaseInfo == null) {
return defaultValue;
}
return databaseInfo;
}
return defaultValue;
}
public static void __setTraceDatabaseInfo(Object target, DatabaseInfo databaseInfo) {
if (target == null) {
return;
}
if (target instanceof DatabaseInfoTraceValue) {
((DatabaseInfoTraceValue) target).__setTraceDatabaseInfo(databaseInfo);
}
}
}
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import com.nhn.pinpoint.bootstrap.context.DatabaseInfo;
/**
* @author emeroad
*/
public class DatabaseInfoTraceValueUtils {
public static DatabaseInfo __getTraceDatabaseInfo(Object target, DatabaseInfo defaultValue) {
if (target == null) {
return defaultValue;
}
if (target instanceof DatabaseInfoTraceValue) {
final DatabaseInfo databaseInfo = ((DatabaseInfoTraceValue) target).__getTraceDatabaseInfo();
if (databaseInfo == null) {
return defaultValue;
}
return databaseInfo;
}
return defaultValue;
}
public static void __setTraceDatabaseInfo(Object target, DatabaseInfo databaseInfo) {
if (target == null) {
return;
}
if (target instanceof DatabaseInfoTraceValue) {
((DatabaseInfoTraceValue) target).__setTraceDatabaseInfo(databaseInfo);
}
}
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
/**
* @author emeroad
*/
public interface IntTraceValue extends TraceValue {
void __setTraceInt(int value);
int __getTraceInt();
}
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
/**
* @author emeroad
*/
public interface IntTraceValue extends TraceValue {
void __setTraceInt(int value);
int __getTraceInt();
}
@@ -0,0 +1,14 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import java.util.Map;
/**
*
* @author jaehong.kim
*
*/
public interface MapTraceValue extends TraceValue {
void __setTraceBindValue(Map<String, Object> value);
Map<String, Object> __getTraceBindValue();
}
@@ -1,11 +1,11 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
/**
* @author emeroad
*/
public interface ObjectTraceValue extends TraceValue {
void __setTraceObject(Object value);
Object __getTraceObject();
}
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
/**
* @author emeroad
*/
public interface ObjectTraceValue extends TraceValue {
void __setTraceObject(Object value);
Object __getTraceObject();
}
@@ -1,12 +1,12 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public interface ParsingResultTraceValue extends TraceValue {
void __setTraceParsingResult(ParsingResult parsingResult);
ParsingResult __getTraceParsingResult();
}
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public interface ParsingResultTraceValue extends TraceValue {
void __setTraceParsingResult(ParsingResult parsingResult);
ParsingResult __getTraceParsingResult();
}
@@ -1,9 +1,9 @@
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
/**
* marker Interface
* @author emeroad
*/
public interface TraceValue {
}
package com.nhn.pinpoint.bootstrap.interceptor.tracevalue;
/**
* marker Interface
* @author emeroad
*/
public interface TraceValue {
}
@@ -1,186 +1,186 @@
package com.nhn.pinpoint.bootstrap.logging;
/**
* @author emeroad
*/
public class DummyPLogger implements PLogger {
public static final PLogger INSTANCE = new DummyPLogger();
@Override
public void beforeInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args) {
}
@Override
public void beforeInterceptor(Object target, Object[] args) {
}
@Override
public void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable) {
}
@Override
public void afterInterceptor(Object target, Object[] args, Object result, Throwable throwable) {
}
@Override
public void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args) {
}
@Override
public void afterInterceptor(Object target, Object[] args) {
}
@Override
public boolean isTraceEnabled() {
return false;
}
@Override
public void trace(String msg) {
}
@Override
public void trace(String format, Object arg) {
}
@Override
public void trace(String format, Object arg1, Object arg2) {
}
@Override
public void trace(String format, Object[] argArray) {
}
@Override
public void trace(String msg, Throwable t) {
}
@Override
public boolean isDebugEnabled() {
return false;
}
@Override
public void debug(String msg) {
}
@Override
public void debug(String format, Object arg) {
}
@Override
public void debug(String format, Object arg1, Object arg2) {
}
@Override
public void debug(String format, Object[] argArray) {
}
@Override
public void debug(String msg, Throwable t) {
}
@Override
public boolean isInfoEnabled() {
return false;
}
@Override
public void info(String msg) {
}
@Override
public void info(String format, Object arg) {
}
@Override
public void info(String format, Object arg1, Object arg2) {
}
@Override
public void info(String format, Object[] argArray) {
}
@Override
public void info(String msg, Throwable t) {
}
@Override
public boolean isWarnEnabled() {
return false;
}
@Override
public void warn(String msg) {
}
@Override
public void warn(String format, Object arg) {
}
@Override
public void warn(String format, Object[] argArray) {
}
@Override
public void warn(String format, Object arg1, Object arg2) {
}
@Override
public void warn(String msg, Throwable t) {
}
@Override
public boolean isErrorEnabled() {
return false;
}
@Override
public void error(String msg) {
}
@Override
public void error(String format, Object arg) {
}
@Override
public void error(String format, Object arg1, Object arg2) {
}
@Override
public void error(String format, Object[] argArray) {
}
@Override
public void error(String msg, Throwable t) {
}
}
package com.nhn.pinpoint.bootstrap.logging;
/**
* @author emeroad
*/
public class DummyPLogger implements PLogger {
public static final PLogger INSTANCE = new DummyPLogger();
@Override
public void beforeInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args) {
}
@Override
public void beforeInterceptor(Object target, Object[] args) {
}
@Override
public void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable) {
}
@Override
public void afterInterceptor(Object target, Object[] args, Object result, Throwable throwable) {
}
@Override
public void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args) {
}
@Override
public void afterInterceptor(Object target, Object[] args) {
}
@Override
public boolean isTraceEnabled() {
return false;
}
@Override
public void trace(String msg) {
}
@Override
public void trace(String format, Object arg) {
}
@Override
public void trace(String format, Object arg1, Object arg2) {
}
@Override
public void trace(String format, Object[] argArray) {
}
@Override
public void trace(String msg, Throwable t) {
}
@Override
public boolean isDebugEnabled() {
return false;
}
@Override
public void debug(String msg) {
}
@Override
public void debug(String format, Object arg) {
}
@Override
public void debug(String format, Object arg1, Object arg2) {
}
@Override
public void debug(String format, Object[] argArray) {
}
@Override
public void debug(String msg, Throwable t) {
}
@Override
public boolean isInfoEnabled() {
return false;
}
@Override
public void info(String msg) {
}
@Override
public void info(String format, Object arg) {
}
@Override
public void info(String format, Object arg1, Object arg2) {
}
@Override
public void info(String format, Object[] argArray) {
}
@Override
public void info(String msg, Throwable t) {
}
@Override
public boolean isWarnEnabled() {
return false;
}
@Override
public void warn(String msg) {
}
@Override
public void warn(String format, Object arg) {
}
@Override
public void warn(String format, Object[] argArray) {
}
@Override
public void warn(String format, Object arg1, Object arg2) {
}
@Override
public void warn(String msg, Throwable t) {
}
@Override
public boolean isErrorEnabled() {
return false;
}
@Override
public void error(String msg) {
}
@Override
public void error(String format, Object arg) {
}
@Override
public void error(String format, Object arg1, Object arg2) {
}
@Override
public void error(String format, Object[] argArray) {
}
@Override
public void error(String msg, Throwable t) {
}
}
@@ -1,53 +1,53 @@
package com.nhn.pinpoint.bootstrap.logging;
import java.util.Arrays;
/**
* @author emeroad
*/
public class LoggingUtils {
public static void logBefore(PLogger logger, Object target, String className, String methodName, String parameterDescription, Object[] args) {
StringBuilder sb = new StringBuilder(512);
sb.append("before ");
logMethod(sb, getTarget(target), className, methodName, parameterDescription, args);
logger.debug(sb.toString());
}
public static void logAfter(PLogger logger, Object target, String className, String methodName, String parameterDescription, Object[] args, Object result) {
StringBuilder sb = new StringBuilder(512);
sb.append("after ");
logMethod(sb, getTarget(target), className, methodName, parameterDescription, args);
sb.append(" result:");
sb.append(getTarget(result));
logger.debug(sb.toString());
}
public static void logAfter(PLogger logger, Object target, String className, String methodName, String parameterDescription, Object[] args) {
StringBuilder sb = new StringBuilder(512);
sb.append("after ");
logMethod(sb, getTarget(target), className, methodName, parameterDescription, args);
logger.debug(sb.toString());
}
private static void logMethod(StringBuilder sb, Object target, String className, String methodName, String parameterDescription, Object[] args) {
sb.append(getTarget(target));
sb.append(' ');
sb.append(className);
sb.append(' ');
sb.append(methodName);
sb.append(parameterDescription);
sb.append(" args:");
sb.append(Arrays.toString(args));
}
private static Object getTarget(Object target) {
if (target == null) {
return "target=null";
}
return target.getClass().getName();
}
}
package com.nhn.pinpoint.bootstrap.logging;
import java.util.Arrays;
/**
* @author emeroad
*/
public class LoggingUtils {
public static void logBefore(PLogger logger, Object target, String className, String methodName, String parameterDescription, Object[] args) {
StringBuilder sb = new StringBuilder(512);
sb.append("before ");
logMethod(sb, getTarget(target), className, methodName, parameterDescription, args);
logger.debug(sb.toString());
}
public static void logAfter(PLogger logger, Object target, String className, String methodName, String parameterDescription, Object[] args, Object result) {
StringBuilder sb = new StringBuilder(512);
sb.append("after ");
logMethod(sb, getTarget(target), className, methodName, parameterDescription, args);
sb.append(" result:");
sb.append(getTarget(result));
logger.debug(sb.toString());
}
public static void logAfter(PLogger logger, Object target, String className, String methodName, String parameterDescription, Object[] args) {
StringBuilder sb = new StringBuilder(512);
sb.append("after ");
logMethod(sb, getTarget(target), className, methodName, parameterDescription, args);
logger.debug(sb.toString());
}
private static void logMethod(StringBuilder sb, Object target, String className, String methodName, String parameterDescription, Object[] args) {
sb.append(getTarget(target));
sb.append(' ');
sb.append(className);
sb.append(' ');
sb.append(methodName);
sb.append(parameterDescription);
sb.append(" args:");
sb.append(Arrays.toString(args));
}
private static Object getTarget(Object target) {
if (target == null) {
return "target=null";
}
return target.getClass().getName();
}
}
@@ -1,124 +1,124 @@
package com.nhn.pinpoint.bootstrap.logging;
/**
* @author emeroad
*/
public interface PLogger {
void beforeInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args);
void beforeInterceptor(Object target, Object[] args);
void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable);
void afterInterceptor(Object target, Object[] args, Object result, Throwable throwable);
void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args);
void afterInterceptor(Object target, Object[] args);
boolean isTraceEnabled();
void trace(String msg);
void trace(String format, Object arg);
void trace(String format, Object arg1, Object arg2);
void trace(String format, Object[] argArray);
void trace(String msg, Throwable t);
public boolean isDebugEnabled();
public void debug(String msg);
public void debug(String format, Object arg);
public void debug(String format, Object arg1, Object arg2);
public void debug(String format, Object[] argArray);
public void debug(String msg, Throwable t);
public boolean isInfoEnabled();
public void info(String msg);
public void info(String format, Object arg);
public void info(String format, Object arg1, Object arg2);
public void info(String format, Object[] argArray);
public void info(String msg, Throwable t);
public boolean isWarnEnabled();
public void warn(String msg);
public void warn(String format, Object arg);
public void warn(String format, Object[] argArray);
public void warn(String format, Object arg1, Object arg2);
public void warn(String msg, Throwable t);
public boolean isErrorEnabled();
public void error(String msg);
public void error(String format, Object arg);
public void error(String format, Object arg1, Object arg2);
public void error(String format, Object[] argArray);
public void error(String msg, Throwable t);
}
package com.nhn.pinpoint.bootstrap.logging;
/**
* @author emeroad
*/
public interface PLogger {
void beforeInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args);
void beforeInterceptor(Object target, Object[] args);
void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result, Throwable throwable);
void afterInterceptor(Object target, Object[] args, Object result, Throwable throwable);
void afterInterceptor(Object target, String className, String methodName, String parameterDescription, Object[] args);
void afterInterceptor(Object target, Object[] args);
boolean isTraceEnabled();
void trace(String msg);
void trace(String format, Object arg);
void trace(String format, Object arg1, Object arg2);
void trace(String format, Object[] argArray);
void trace(String msg, Throwable t);
public boolean isDebugEnabled();
public void debug(String msg);
public void debug(String format, Object arg);
public void debug(String format, Object arg1, Object arg2);
public void debug(String format, Object[] argArray);
public void debug(String msg, Throwable t);
public boolean isInfoEnabled();
public void info(String msg);
public void info(String format, Object arg);
public void info(String format, Object arg1, Object arg2);
public void info(String format, Object[] argArray);
public void info(String msg, Throwable t);
public boolean isWarnEnabled();
public void warn(String msg);
public void warn(String format, Object arg);
public void warn(String format, Object[] argArray);
public void warn(String format, Object arg1, Object arg2);
public void warn(String msg, Throwable t);
public boolean isErrorEnabled();
public void error(String msg);
public void error(String format, Object arg);
public void error(String format, Object arg1, Object arg2);
public void error(String format, Object[] argArray);
public void error(String msg, Throwable t);
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.bootstrap.logging;
/**
* @author emeroad
*/
public interface PLoggerBinder {
PLogger getLogger(String name);
void shutdown();
}
package com.nhn.pinpoint.bootstrap.logging;
/**
* @author emeroad
*/
public interface PLoggerBinder {
PLogger getLogger(String name);
void shutdown();
}
@@ -1,43 +1,43 @@
package com.nhn.pinpoint.bootstrap.logging;
import java.util.logging.Logger;
/**
* @author emeroad
*/
public final class PLoggerFactory {
private static PLoggerBinder loggerBinder;
public static void initialize(PLoggerBinder loggerBinder) {
if (PLoggerFactory.loggerBinder == null) {
PLoggerFactory.loggerBinder = loggerBinder;
} else {
final Logger logger = Logger.getLogger(PLoggerFactory.class.getName());
logger.warning("loggerBinder is not null");
}
}
public static void unregister(PLoggerBinder loggerBinder) {
// 등록한 놈만 제거 가능하도록 제한
// testcase 작성시 가능한 logger를 등록했다가 삭제하는 로직은 beforeClass, afterClass에 넣어야 한다.
if (loggerBinder == PLoggerFactory.loggerBinder) {
PLoggerFactory.loggerBinder = null;
}
}
public static PLogger getLogger(String name) {
if (loggerBinder == null) {
// 바인딩 되지 않은 상태에서 getLogger를 호출시 null ex가 발생하므로 dummy logger를 리턴하도록 함.
return DummyPLogger.INSTANCE;
}
return loggerBinder.getLogger(name);
}
public static PLogger getLogger(Class clazz) {
if (clazz == null) {
throw new NullPointerException("class must not be null");
}
return getLogger(clazz.getName());
}
}
package com.nhn.pinpoint.bootstrap.logging;
import java.util.logging.Logger;
/**
* @author emeroad
*/
public final class PLoggerFactory {
private static PLoggerBinder loggerBinder;
public static void initialize(PLoggerBinder loggerBinder) {
if (PLoggerFactory.loggerBinder == null) {
PLoggerFactory.loggerBinder = loggerBinder;
} else {
final Logger logger = Logger.getLogger(PLoggerFactory.class.getName());
logger.warning("loggerBinder is not null");
}
}
public static void unregister(PLoggerBinder loggerBinder) {
// 등록한 놈만 제거 가능하도록 제한
// testcase 작성시 가능한 logger를 등록했다가 삭제하는 로직은 beforeClass, afterClass에 넣어야 한다.
if (loggerBinder == PLoggerFactory.loggerBinder) {
PLoggerFactory.loggerBinder = null;
}
}
public static PLogger getLogger(String name) {
if (loggerBinder == null) {
// 바인딩 되지 않은 상태에서 getLogger를 호출시 null ex가 발생하므로 dummy logger를 리턴하도록 함.
return DummyPLogger.INSTANCE;
}
return loggerBinder.getLogger(name);
}
public static PLogger getLogger(Class clazz) {
if (clazz == null) {
throw new NullPointerException("class must not be null");
}
return getLogger(clazz.getName());
}
}
@@ -1,32 +1,32 @@
package com.nhn.pinpoint.bootstrap.pair;
/**
* classLoading구조에서 interceptor가 parent에 위치하면서 멀티 value access 데이터 전달이 필요할 경우의 공통 자료구조로 사용한다.
* value가 int type일때 사용
* @author emeroad
*/
public class NameIntValuePair<T> {
private T name;
private int value;
public NameIntValuePair(T name, int value) {
this.name = name;
this.value = value;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
package com.nhn.pinpoint.bootstrap.pair;
/**
* classLoading구조에서 interceptor가 parent에 위치하면서 멀티 value access 데이터 전달이 필요할 경우의 공통 자료구조로 사용한다.
* value가 int type일때 사용
* @author emeroad
*/
public class NameIntValuePair<T> {
private T name;
private int value;
public NameIntValuePair(T name, int value) {
this.name = name;
this.value = value;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
@@ -1,31 +1,31 @@
package com.nhn.pinpoint.bootstrap.pair;
/**
* classLoading구조에서 interceptor가 parent에 위치하면서 멀티 value access 데이터 전달이 필요할 경우의 공통 자료구조로 사용한다.
* @author emeroad
*/
public class NameValuePair<T, V> {
private T name;
private V value;
public NameValuePair(T name, V value) {
this.name = name;
this.value = value;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
}
package com.nhn.pinpoint.bootstrap.pair;
/**
* classLoading구조에서 interceptor가 parent에 위치하면서 멀티 value access 데이터 전달이 필요할 경우의 공통 자료구조로 사용한다.
* @author emeroad
*/
public class NameValuePair<T, V> {
private T name;
private V value;
public NameValuePair(T name, V value) {
this.name = name;
this.value = value;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
}
@@ -1,8 +1,8 @@
package com.nhn.pinpoint.bootstrap.sampler;
/**
* @author emeroad
*/
public interface Sampler {
boolean isSampling();
}
package com.nhn.pinpoint.bootstrap.sampler;
/**
* @author emeroad
*/
public interface Sampler {
boolean isSampling();
}
@@ -1,31 +1,31 @@
package com.nhn.pinpoint.bootstrap.sampler;
/**
* @author emeroad
*/
public final class SamplingFlagUtils {
// 향후 다른 샘플링 스펙이 추가될수 있으므로
// 일부러 1개 byte를 소비하여 sampling마크 한다.
public static final String SAMPLING_RATE_PREFIX = "s";
public static final String SAMPLING_RATE_FALSE = SAMPLING_RATE_PREFIX + "0";
public static final String SAMPLING_RATE_TRUE = SAMPLING_RATE_PREFIX + "1";
private SamplingFlagUtils() {
}
public static boolean isSamplingFlag(String samplingFlag) {
if (samplingFlag == null) {
return true;
}
// 정확하게 하지 말란 flag가 세팅되었을 경우만 샘플링을 하지 않는다.
// prefix를 보고 뭔가 더 정확하게 동작되어야 필요성이 있음.
if (samplingFlag.startsWith(SAMPLING_RATE_PREFIX)) {
return !SAMPLING_RATE_FALSE.equals(samplingFlag);
}
return true;
}
}
package com.nhn.pinpoint.bootstrap.sampler;
/**
* @author emeroad
*/
public final class SamplingFlagUtils {
// 향후 다른 샘플링 스펙이 추가될수 있으므로
// 일부러 1개 byte를 소비하여 sampling마크 한다.
public static final String SAMPLING_RATE_PREFIX = "s";
public static final String SAMPLING_RATE_FALSE = SAMPLING_RATE_PREFIX + "0";
public static final String SAMPLING_RATE_TRUE = SAMPLING_RATE_PREFIX + "1";
private SamplingFlagUtils() {
}
public static boolean isSamplingFlag(String samplingFlag) {
if (samplingFlag == null) {
return true;
}
// 정확하게 하지 말란 flag가 세팅되었을 경우만 샘플링을 하지 않는다.
// prefix를 보고 뭔가 더 정확하게 동작되어야 필요성이 있음.
if (samplingFlag.startsWith(SAMPLING_RATE_PREFIX)) {
return !SAMPLING_RATE_FALSE.equals(samplingFlag);
}
return true;
}
}
@@ -1,34 +1,34 @@
package com.nhn.pinpoint.bootstrap.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
public final class InterceptorUtils {
private InterceptorUtils() {
}
public static boolean isThrowable(Object result) {
return result instanceof Throwable;
}
public static boolean isSuccess(Throwable throwable) {
return throwable == null;
}
public static String exceptionToString(Throwable ex) {
if (ex != null) {
StringBuilder sb = new StringBuilder(128);
sb.append(ex.toString()).append("\n");
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
sb.append(writer.toString());
return sb.toString();
}
return null;
}
}
package com.nhn.pinpoint.bootstrap.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
public final class InterceptorUtils {
private InterceptorUtils() {
}
public static boolean isThrowable(Object result) {
return result instanceof Throwable;
}
public static boolean isSuccess(Throwable throwable) {
return throwable == null;
}
public static String exceptionToString(Throwable ex) {
if (ex != null) {
StringBuilder sb = new StringBuilder(128);
sb.append(ex.toString()).append("\n");
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
sb.append(writer.toString());
return sb.toString();
}
return null;
}
}
@@ -1,82 +1,82 @@
package com.nhn.pinpoint.bootstrap.util;
import com.nhn.pinpoint.bootstrap.logging.PLogger;
import com.nhn.pinpoint.bootstrap.logging.PLoggerFactory;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* TraceValue interface를 구현하여 사용하라
*/
@Deprecated
public final class MetaObject<R> {
private final PLogger logger = PLoggerFactory.getLogger(this.getClass());
private final String methodName;
private final Class<?>[] args;
private final R defaultReturnValue;
// 이것을 class loading시 정적 타임에서 생성해 둘수 없는가?
private Method methodRef;
public MetaObject(String methodName, Class... args) {
this.methodName = methodName;
this.args = args;
this.defaultReturnValue = null;
}
public MetaObject(R defaultReturnValue, String methodName, Class... args) {
this.methodName = methodName;
this.args = args;
this.defaultReturnValue = defaultReturnValue;
}
public R invoke(Object target, Object... args) {
if (target == null) {
return defaultReturnValue;
}
Method method = this.methodRef;
if (method == null) {
// 멀티쓰레드에서 중복 엑세스해도 별 문제 없을것임.
final Class<?> aClass = target.getClass();
method = findMethod(aClass);
this.methodRef = method;
}
return invoke(method, target, args);
}
private R invoke(Method method, Object target, Object[] args) {
if (method == null) {
return defaultReturnValue;
}
try {
return (R) method.invoke(target, args);
} catch (IllegalAccessException e) {
logger.warn("{} invoke fail", this.methodName, e);
return defaultReturnValue;
} catch (InvocationTargetException e) {
logger.warn("{} invoke fail", this.methodName, e);
return defaultReturnValue;
}
}
private Method findMethod(Class<?> aClass) {
try {
final Method method = aClass.getMethod(this.methodName, this.args);
if (!method.isAccessible()) {
// package등과 같이 access 제한이 걸려 있을 경우 강 푼다.
method.setAccessible(true);
}
return method;
} catch (NoSuchMethodException e) {
logger.warn("{} not found class:{} Caused:{}", new Object[] { this.methodName, aClass, e.getMessage(), e });
return null;
}
}
}
package com.nhn.pinpoint.bootstrap.util;
import com.nhn.pinpoint.bootstrap.logging.PLogger;
import com.nhn.pinpoint.bootstrap.logging.PLoggerFactory;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* TraceValue interface를 구현하여 사용하라
*/
@Deprecated
public final class MetaObject<R> {
private final PLogger logger = PLoggerFactory.getLogger(this.getClass());
private final String methodName;
private final Class<?>[] args;
private final R defaultReturnValue;
// 이것을 class loading시 정적 타임에서 생성해 둘수 없는가?
private Method methodRef;
public MetaObject(String methodName, Class... args) {
this.methodName = methodName;
this.args = args;
this.defaultReturnValue = null;
}
public MetaObject(R defaultReturnValue, String methodName, Class... args) {
this.methodName = methodName;
this.args = args;
this.defaultReturnValue = defaultReturnValue;
}
public R invoke(Object target, Object... args) {
if (target == null) {
return defaultReturnValue;
}
Method method = this.methodRef;
if (method == null) {
// 멀티쓰레드에서 중복 엑세스해도 별 문제 없을것임.
final Class<?> aClass = target.getClass();
method = findMethod(aClass);
this.methodRef = method;
}
return invoke(method, target, args);
}
private R invoke(Method method, Object target, Object[] args) {
if (method == null) {
return defaultReturnValue;
}
try {
return (R) method.invoke(target, args);
} catch (IllegalAccessException e) {
logger.warn("{} invoke fail", this.methodName, e);
return defaultReturnValue;
} catch (InvocationTargetException e) {
logger.warn("{} invoke fail", this.methodName, e);
return defaultReturnValue;
}
}
private Method findMethod(Class<?> aClass) {
try {
final Method method = aClass.getMethod(this.methodName, this.args);
if (!method.isAccessible()) {
// package등과 같이 access 제한이 걸려 있을 경우 강 푼다.
method.setAccessible(true);
}
return method;
} catch (NoSuchMethodException e) {
logger.warn("{} not found class:{} Caused:{}", new Object[] { this.methodName, aClass, e.getMessage(), e });
return null;
}
}
}
@@ -1,78 +1,78 @@
package com.nhn.pinpoint.bootstrap.util;
import java.net.*;
import java.util.Enumeration;
import java.util.logging.Logger;
/**
* @author emeroad
*/
public final class NetworkUtils {
public static final String ERROR_HOST_NAME = "UNKNOWN-HOST";
private NetworkUtils() {
}
public static String getHostName() {
try {
final InetAddress localHost = InetAddress.getLocalHost();
return localHost.getHostName();
} catch (UnknownHostException e) {
// Try to get machine name from network interface.
return getMachineName();
}
}
@Deprecated
public static String getMachineName() {
try {
String name = null;
Enumeration<NetworkInterface> enet = NetworkInterface.getNetworkInterfaces();
while (enet.hasMoreElements() && (name == null)) {
NetworkInterface net = enet.nextElement();
if (net.isLoopback())
continue;
Enumeration<InetAddress> eaddr = net.getInetAddresses();
while (eaddr.hasMoreElements()) {
InetAddress inet = eaddr.nextElement();
final String canonicalHostName = inet.getCanonicalHostName();
if (!canonicalHostName.equalsIgnoreCase(inet.getHostAddress())) {
name = canonicalHostName;
break;
}
}
}
return name;
} catch (SocketException e) {
Logger.getLogger(NetworkUtils.class.getClass().getName()).warning(e.getMessage());
return "UNKNOWN-HOST";
}
}
public static String getHostFromURL(final String urlSpec) {
if (urlSpec == null) {
return null;
}
try {
final URL url = new URL(urlSpec);
final String host = url.getHost();
final int port = url.getPort();
if (port == -1) {
return host;
} else {
// TODO defualt port일 경우 아래와 같이 url을 만들어야 하는지 애매함.
return host + ":" + port;
}
} catch (MalformedURLException e) {
return null;
}
}
}
package com.nhn.pinpoint.bootstrap.util;
import java.net.*;
import java.util.Enumeration;
import java.util.logging.Logger;
/**
* @author emeroad
*/
public final class NetworkUtils {
public static final String ERROR_HOST_NAME = "UNKNOWN-HOST";
private NetworkUtils() {
}
public static String getHostName() {
try {
final InetAddress localHost = InetAddress.getLocalHost();
return localHost.getHostName();
} catch (UnknownHostException e) {
// Try to get machine name from network interface.
return getMachineName();
}
}
@Deprecated
public static String getMachineName() {
try {
String name = null;
Enumeration<NetworkInterface> enet = NetworkInterface.getNetworkInterfaces();
while (enet.hasMoreElements() && (name == null)) {
NetworkInterface net = enet.nextElement();
if (net.isLoopback())
continue;
Enumeration<InetAddress> eaddr = net.getInetAddresses();
while (eaddr.hasMoreElements()) {
InetAddress inet = eaddr.nextElement();
final String canonicalHostName = inet.getCanonicalHostName();
if (!canonicalHostName.equalsIgnoreCase(inet.getHostAddress())) {
name = canonicalHostName;
break;
}
}
}
return name;
} catch (SocketException e) {
Logger.getLogger(NetworkUtils.class.getClass().getName()).warning(e.getMessage());
return "UNKNOWN-HOST";
}
}
public static String getHostFromURL(final String urlSpec) {
if (urlSpec == null) {
return null;
}
try {
final URL url = new URL(urlSpec);
final String host = url.getHost();
final int port = url.getPort();
if (port == -1) {
return host;
} else {
// TODO defualt port일 경우 아래와 같이 url을 만들어야 하는지 애매함.
return host + ":" + port;
}
} catch (MalformedURLException e) {
return null;
}
}
}
@@ -1,51 +1,51 @@
package com.nhn.pinpoint.bootstrap.util;
public final class NumberUtils {
private NumberUtils() {
}
public static long parseLong(String str, long defaultLong) {
if (str == null) {
return defaultLong;
}
try {
return Long.parseLong(str);
} catch (NumberFormatException e) {
return defaultLong;
}
}
public static int parseInteger(String str, int defaultInt) {
if (str == null) {
return defaultInt;
}
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return defaultInt;
}
}
public static short parseShort(String str, short defaultInt) {
if (str == null) {
return defaultInt;
}
try {
return Short.parseShort(str);
} catch (NumberFormatException e) {
return defaultInt;
}
}
public static Integer toInteger(Object integer) {
if (integer == null) {
return null;
}
if (integer instanceof Integer) {
return (Integer) integer;
} else {
return null;
}
}
}
package com.nhn.pinpoint.bootstrap.util;
public final class NumberUtils {
private NumberUtils() {
}
public static long parseLong(String str, long defaultLong) {
if (str == null) {
return defaultLong;
}
try {
return Long.parseLong(str);
} catch (NumberFormatException e) {
return defaultLong;
}
}
public static int parseInteger(String str, int defaultInt) {
if (str == null) {
return defaultInt;
}
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return defaultInt;
}
}
public static short parseShort(String str, short defaultInt) {
if (str == null) {
return defaultInt;
}
try {
return Short.parseShort(str);
} catch (NumberFormatException e) {
return defaultInt;
}
}
public static Integer toInteger(Object integer) {
if (integer == null) {
return null;
}
if (integer instanceof Integer) {
return (Integer) integer;
} else {
return null;
}
}
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.bootstrap.util;
/**
* @author emeroad
*/
public interface SimpleSampler {
boolean isSampling();
}
package com.nhn.pinpoint.bootstrap.util;
/**
* @author emeroad
*/
public interface SimpleSampler {
boolean isSampling();
}
@@ -1,57 +1,57 @@
package com.nhn.pinpoint.bootstrap.util;
import com.nhn.pinpoint.common.util.MathUtils;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author emeroad
*/
public class SimpleSamplerFactory {
// profiler에 있는 Sampler와 기능이 동일하지만. profiler에 있는 sampler의 경우 좀더 파생 모델이 나와야 되므로 별도로 분리한다.
public static final SimpleSampler FALSE_SAMPLER = new SimpleFalseSampler();
public static final SimpleSampler TRUE_SAMPLER = new SimpleTrueSampler();
public static SimpleSampler createSampler(boolean sampling, int samplingRate) {
if (!sampling || samplingRate <= 0) {
return FALSE_SAMPLER;
}
if (samplingRate == 1) {
return TRUE_SAMPLER;
}
return new SamplingRateSampler(samplingRate);
}
public static class SimpleTrueSampler implements SimpleSampler {
@Override
public boolean isSampling() {
return true;
}
}
public static class SimpleFalseSampler implements SimpleSampler {
@Override
public boolean isSampling() {
return false;
}
}
public static class SamplingRateSampler implements SimpleSampler {
private final AtomicInteger counter = new AtomicInteger(0);
private final int samplingRate;
public SamplingRateSampler(int samplingRate) {
if (samplingRate <= 0) {
throw new IllegalArgumentException("Invalid samplingRate " + samplingRate);
}
this.samplingRate = samplingRate;
}
@Override
public boolean isSampling() {
int samplingCount = MathUtils.fastAbs(counter.getAndIncrement());
int isSampling = samplingCount % samplingRate;
return isSampling == 0;
}
}
}
package com.nhn.pinpoint.bootstrap.util;
import com.nhn.pinpoint.common.util.MathUtils;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author emeroad
*/
public class SimpleSamplerFactory {
// profiler에 있는 Sampler와 기능이 동일하지만. profiler에 있는 sampler의 경우 좀더 파생 모델이 나와야 되므로 별도로 분리한다.
public static final SimpleSampler FALSE_SAMPLER = new SimpleFalseSampler();
public static final SimpleSampler TRUE_SAMPLER = new SimpleTrueSampler();
public static SimpleSampler createSampler(boolean sampling, int samplingRate) {
if (!sampling || samplingRate <= 0) {
return FALSE_SAMPLER;
}
if (samplingRate == 1) {
return TRUE_SAMPLER;
}
return new SamplingRateSampler(samplingRate);
}
public static class SimpleTrueSampler implements SimpleSampler {
@Override
public boolean isSampling() {
return true;
}
}
public static class SimpleFalseSampler implements SimpleSampler {
@Override
public boolean isSampling() {
return false;
}
}
public static class SamplingRateSampler implements SimpleSampler {
private final AtomicInteger counter = new AtomicInteger(0);
private final int samplingRate;
public SamplingRateSampler(int samplingRate) {
if (samplingRate <= 0) {
throw new IllegalArgumentException("Invalid samplingRate " + samplingRate);
}
this.samplingRate = samplingRate;
}
@Override
public boolean isSampling() {
int samplingCount = MathUtils.fastAbs(counter.getAndIncrement());
int isSampling = samplingCount % samplingRate;
return isSampling == 0;
}
}
}
@@ -1,60 +1,60 @@
package com.nhn.pinpoint.bootstrap.util;
public final class StringUtils {
private StringUtils() {
}
public static String defaultString(final String str, final String defaultStr) {
return str == null ? defaultStr : str;
}
public static String toString(final Object object) {
if (object == null) {
return "null";
}
return object.toString();
}
public static String drop(final String str) {
return drop(str, 64);
}
public static String drop(final String str, final int length) {
if (str == null) {
return "null";
}
if (length < 0) {
throw new IllegalArgumentException("negative length:" + length);
}
if (str.length() > length) {
StringBuilder buffer = new StringBuilder(length + 10);
buffer.append(str.substring(0, length));
appendDropMessage(buffer, str.length());
return buffer.toString();
} else {
return str;
}
}
public static void appendDrop(StringBuilder builder, final String str, final int length) {
if (str == null) {
return;
}
if (length < 0) {
return;
}
if (str.length() > length) {
builder.append(str.substring(0, length));
appendDropMessage(builder, str.length());
} else {
builder.append(str);
}
}
private static void appendDropMessage(StringBuilder buffer, int length) {
buffer.append("...(");
buffer.append(length);
buffer.append(')');
}
}
package com.nhn.pinpoint.bootstrap.util;
public final class StringUtils {
private StringUtils() {
}
public static String defaultString(final String str, final String defaultStr) {
return str == null ? defaultStr : str;
}
public static String toString(final Object object) {
if (object == null) {
return "null";
}
return object.toString();
}
public static String drop(final String str) {
return drop(str, 64);
}
public static String drop(final String str, final int length) {
if (str == null) {
return "null";
}
if (length < 0) {
throw new IllegalArgumentException("negative length:" + length);
}
if (str.length() > length) {
StringBuilder buffer = new StringBuilder(length + 10);
buffer.append(str.substring(0, length));
appendDropMessage(buffer, str.length());
return buffer.toString();
} else {
return str;
}
}
public static void appendDrop(StringBuilder builder, final String str, final int length) {
if (str == null) {
return;
}
if (length < 0) {
return;
}
if (str.length() > length) {
builder.append(str.substring(0, length));
appendDropMessage(builder, str.length());
} else {
builder.append(str);
}
}
private static void appendDropMessage(StringBuilder buffer, int length) {
buffer.append("...(");
buffer.append(length);
buffer.append(')');
}
}
@@ -1,40 +1,40 @@
package com.nhn.pinpoint.bootstrap.util;
/**
* WARN
* 주의 ------------------ <br>
* 이 data 전달자는 threadlocal로 전달하기 때문에. proxy클래스로 감쌋을 경우도 경계를 넘어 갈수 있으나. <br>
* 상태를 가질수 없음. static method나 parameter의 인자로 들어오는 값을 잠시 저장하여 다른 곳으로 넘기는 경우만 사용해야 함. <br>
* 절대 object의 상태를 가지고 있는데 사용할수 없음. <br>
* 주의 ------------------
* @author emeroad
*/
@Deprecated
public class ThreadLocalMetadata<T> {
private final String name;
private final ThreadLocal<T> threadLocal;
public ThreadLocalMetadata(String metadataName) {
this.name = metadataName;
this.threadLocal = new ThreadLocal<T>();
}
public void set(T object) {
threadLocal.set(object);
}
public T get() {
return threadLocal.get();
}
public void remove() {
threadLocal.remove();
}
public T getAndRemove() {
final ThreadLocal<T> threadLocal = this.threadLocal;
final T t = threadLocal.get();
threadLocal.remove();
return t;
}
}
package com.nhn.pinpoint.bootstrap.util;
/**
* WARN
* 주의 ------------------ <br>
* 이 data 전달자는 threadlocal로 전달하기 때문에. proxy클래스로 감쌋을 경우도 경계를 넘어 갈수 있으나. <br>
* 상태를 가질수 없음. static method나 parameter의 인자로 들어오는 값을 잠시 저장하여 다른 곳으로 넘기는 경우만 사용해야 함. <br>
* 절대 object의 상태를 가지고 있는데 사용할수 없음. <br>
* 주의 ------------------
* @author emeroad
*/
@Deprecated
public class ThreadLocalMetadata<T> {
private final String name;
private final ThreadLocal<T> threadLocal;
public ThreadLocalMetadata(String metadataName) {
this.name = metadataName;
this.threadLocal = new ThreadLocal<T>();
}
public void set(T object) {
threadLocal.set(object);
}
public T get() {
return threadLocal.get();
}
public void remove() {
threadLocal.remove();
}
public T getAndRemove() {
final ThreadLocal<T> threadLocal = this.threadLocal;
final T t = threadLocal.get();
threadLocal.remove();
return t;
}
}
@@ -1,25 +1,25 @@
package com.nhn.pinpoint.bootstrap.util;
/**
* @author emeroad
*/
public class TimeObject {
private long cancelTime;
private long sendTime;
public void markCancelTime() {
cancelTime = System.currentTimeMillis();
}
public long getCancelTime() {
return cancelTime;
}
public void markSendTime() {
this.sendTime = System.currentTimeMillis();
}
public long getSendTime() {
return System.currentTimeMillis() - this.sendTime;
}
}
package com.nhn.pinpoint.bootstrap.util;
/**
* @author emeroad
*/
public class TimeObject {
private long cancelTime;
private long sendTime;
public void markCancelTime() {
cancelTime = System.currentTimeMillis();
}
public long getCancelTime() {
return cancelTime;
}
public void markSendTime() {
this.sendTime = System.currentTimeMillis();
}
public long getSendTime() {
return System.currentTimeMillis() - this.sendTime;
}
}
@@ -1,21 +1,21 @@
package com.nhn.pinpoint.exception;
/**
* @author emeroad
*/
public class PinpointException extends RuntimeException {
public PinpointException() {
}
public PinpointException(String message) {
super(message);
}
public PinpointException(String message, Throwable cause) {
super(message, cause);
}
public PinpointException(Throwable cause) {
super(cause);
}
}
package com.nhn.pinpoint.exception;
/**
* @author emeroad
*/
public class PinpointException extends RuntimeException {
public PinpointException() {
}
public PinpointException(String message) {
super(message);
}
public PinpointException(String message, Throwable cause) {
super(message, cause);
}
public PinpointException(Throwable cause) {
super(cause);
}
}
@@ -1,50 +1,50 @@
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
/**
* @author emeroad
*/
public class AgentClassLoaderTest {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void boot() throws IOException, ClassNotFoundException {
AgentClassLoader agentClassLoader = new AgentClassLoader(new URL[0]);
agentClassLoader.setBootClass("com.nhn.pinpoint.bootstrap.DummyAgent");
agentClassLoader.boot("test", new DummyInstrumentation(), new ProfilerConfig());
// TODO logger가져오는 기능이 달라져서 확인이 필요함.
// PLoggerBinder loggerBinder = (PLoggerBinder) agentClassLoader.initializeLoggerBinder();
// PLogger test = loggerBinder.getLogger("test");
// test.info("slf4j logger test");
}
private String getProjectLibDir() {
// 필요는 없으나 protectionDomain을 테스트하기 좋아 내비둠.
ProtectionDomain protectionDomain = AgentClassLoader.class.getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
URL location = codeSource.getLocation();
logger.info("lib location:" + location);
String path = location.getPath();
// file:/D:/nhn_source/pinpoint_project/pinpoint-tomcat-profiler/target/classes/
int dirPath = path.lastIndexOf("target/classes/");
if (dirPath == -1) {
throw new RuntimeException("target/classes/ not found");
}
String projectDir = path.substring(1, dirPath);
return projectDir + "src/test/lib";
}
}
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
/**
* @author emeroad
*/
public class AgentClassLoaderTest {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void boot() throws IOException, ClassNotFoundException {
AgentClassLoader agentClassLoader = new AgentClassLoader(new URL[0]);
agentClassLoader.setBootClass("com.nhn.pinpoint.bootstrap.DummyAgent");
agentClassLoader.boot("test", new DummyInstrumentation(), new ProfilerConfig());
// TODO logger가져오는 기능이 달라져서 확인이 필요함.
// PLoggerBinder loggerBinder = (PLoggerBinder) agentClassLoader.initializeLoggerBinder();
// PLogger test = loggerBinder.getLogger("test");
// test.info("slf4j logger test");
}
private String getProjectLibDir() {
// 필요는 없으나 protectionDomain을 테스트하기 좋아 내비둠.
ProtectionDomain protectionDomain = AgentClassLoader.class.getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
URL location = codeSource.getLocation();
logger.info("lib location:" + location);
String path = location.getPath();
// file:/D:/nhn_source/pinpoint_project/pinpoint-tomcat-profiler/target/classes/
int dirPath = path.lastIndexOf("target/classes/");
if (dirPath == -1) {
throw new RuntimeException("target/classes/ not found");
}
String projectDir = path.substring(1, dirPath);
return projectDir + "src/test/lib";
}
}
@@ -1,103 +1,103 @@
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.ClassPathResolver;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
/**
* @author emeroad
*/
@Ignore
public class ClassPathResolverTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void testFindAgentJar() throws Exception {
String path = "D:\\nhn_source\\pinpoint_project\\deploy\\apache-tomcat-6.0.35\\bin\\bootstrap.jar;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/javassist-3.16.1.GA.jar;" +
"D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/pinpoint-commons-0.0.2.jar;;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/pinpoint-bootstrap-0.0.2.jar";
// D:\nhn_source\pinpoint_project\deploy\agent\agentlib/pinpoint-tomcat-profiler-0.0.2.jar
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean findAgentJar = classPathResolver.findAgentJar();
Assert.assertTrue(findAgentJar);
String agentJar = classPathResolver.getAgentJarName();
Assert.assertEquals("pinpoint-bootstrap-0.0.2.jar", agentJar);
String agentPath = classPathResolver.getAgentJarFullPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/pinpoint-bootstrap-0.0.2.jar", agentPath);
String agentDirPath = classPathResolver.getAgentDirPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib", agentDirPath );
String agentLibPath = classPathResolver.getAgentLibPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib"+File.separator+ "lib", agentLibPath);
}
@Test
public void testFindAgentSnapshotJar() throws Exception {
String path = "D:\\nhn_source\\pinpoint_project\\deploy\\apache-tomcat-6.0.35\\bin\\bootstrap.jar;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/javassist-3.16.1.GA.jar;" +
"D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/pinpoint-commons-0.0.2.jar;;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib" +
"/pinpoint-bootstrap-0.0.2-SNAPSHOT.jar";
// D:\nhn_source\pinpoint_project\deploy\agent\agentlib/pinpoint-tomcat-profiler-0.0.2.jar
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean findAgentJar = classPathResolver.findAgentJar();
Assert.assertTrue(findAgentJar);
String agentJar = classPathResolver.getAgentJarName();
Assert.assertEquals("pinpoint-bootstrap-0.0.2-SNAPSHOT.jar", agentJar);
String agentPath = classPathResolver.getAgentJarFullPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/pinpoint-bootstrap-0.0.2-SNAPSHOT.jar", agentPath);
String agentDirPath = classPathResolver.getAgentDirPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib", agentDirPath );
String agentLibPath = classPathResolver.getAgentLibPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib"+File.separator+ "lib", agentLibPath);
}
@Test
public void findAgentJar() {
findAgentJar("pinpoint-bootstrap-0.0.2.jar");
findAgentJar("pinpoint-bootstrap-1.0.0.jar");
findAgentJar("pinpoint-bootstrap-1.10.20.jar");
findAgentJar("pinpoint-bootstrap.jar");
findAgentJarAssertFail("pinpoint-bootstrap-1.a.test.jar");
findAgentJarAssertFail("pinpointbootstrap-1.a.test.jar");
findAgentJarAssertFail("pinpointbootstrap.jar");
}
private void findAgentJar(String path) {
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean agentJar = classPathResolver.findAgentJar();
Assert.assertTrue(agentJar);
}
private void findAgentJarAssertFail(String path) {
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean agentJar = classPathResolver.findAgentJar();
Assert.assertFalse(agentJar);
}
@Test
public void nullArray() {
String[] nullArray = null;
try {
for (String str : nullArray) {
logger.warn("null");
}
Assert.fail();
} catch (Exception e) {
}
}
}
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.ClassPathResolver;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
/**
* @author emeroad
*/
@Ignore
public class ClassPathResolverTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void testFindAgentJar() throws Exception {
String path = "D:\\nhn_source\\pinpoint_project\\deploy\\apache-tomcat-6.0.35\\bin\\bootstrap.jar;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/javassist-3.16.1.GA.jar;" +
"D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/pinpoint-commons-0.0.2.jar;;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/pinpoint-bootstrap-0.0.2.jar";
// D:\nhn_source\pinpoint_project\deploy\agent\agentlib/pinpoint-tomcat-profiler-0.0.2.jar
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean findAgentJar = classPathResolver.findAgentJar();
Assert.assertTrue(findAgentJar);
String agentJar = classPathResolver.getAgentJarName();
Assert.assertEquals("pinpoint-bootstrap-0.0.2.jar", agentJar);
String agentPath = classPathResolver.getAgentJarFullPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/pinpoint-bootstrap-0.0.2.jar", agentPath);
String agentDirPath = classPathResolver.getAgentDirPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib", agentDirPath );
String agentLibPath = classPathResolver.getAgentLibPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib"+File.separator+ "lib", agentLibPath);
}
@Test
public void testFindAgentSnapshotJar() throws Exception {
String path = "D:\\nhn_source\\pinpoint_project\\deploy\\apache-tomcat-6.0.35\\bin\\bootstrap.jar;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/javassist-3.16.1.GA.jar;" +
"D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/lib/pinpoint-commons-0.0.2.jar;;D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib" +
"/pinpoint-bootstrap-0.0.2-SNAPSHOT.jar";
// D:\nhn_source\pinpoint_project\deploy\agent\agentlib/pinpoint-tomcat-profiler-0.0.2.jar
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean findAgentJar = classPathResolver.findAgentJar();
Assert.assertTrue(findAgentJar);
String agentJar = classPathResolver.getAgentJarName();
Assert.assertEquals("pinpoint-bootstrap-0.0.2-SNAPSHOT.jar", agentJar);
String agentPath = classPathResolver.getAgentJarFullPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib/pinpoint-bootstrap-0.0.2-SNAPSHOT.jar", agentPath);
String agentDirPath = classPathResolver.getAgentDirPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib", agentDirPath );
String agentLibPath = classPathResolver.getAgentLibPath();
Assert.assertEquals("D:\\nhn_source\\pinpoint_project\\deploy\\agent\\agentlib"+File.separator+ "lib", agentLibPath);
}
@Test
public void findAgentJar() {
findAgentJar("pinpoint-bootstrap-0.0.2.jar");
findAgentJar("pinpoint-bootstrap-1.0.0.jar");
findAgentJar("pinpoint-bootstrap-1.10.20.jar");
findAgentJar("pinpoint-bootstrap.jar");
findAgentJarAssertFail("pinpoint-bootstrap-1.a.test.jar");
findAgentJarAssertFail("pinpointbootstrap-1.a.test.jar");
findAgentJarAssertFail("pinpointbootstrap.jar");
}
private void findAgentJar(String path) {
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean agentJar = classPathResolver.findAgentJar();
Assert.assertTrue(agentJar);
}
private void findAgentJarAssertFail(String path) {
ClassPathResolver classPathResolver = new ClassPathResolver(path);
boolean agentJar = classPathResolver.findAgentJar();
Assert.assertFalse(agentJar);
}
@Test
public void nullArray() {
String[] nullArray = null;
try {
for (String str : nullArray) {
logger.warn("null");
}
Assert.fail();
} catch (Exception e) {
}
}
}
@@ -1,54 +1,54 @@
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
import java.lang.instrument.Instrumentation;
/**
* @author emeroad
* @author hyungil.jeong
*/
public class DummyAgent implements Agent {
public DummyAgent(String agentArgs, Instrumentation instrumentation, ProfilerConfig profilerConfig) {
}
@Override
public void start() {
}
@Override
public void stop() {
}
@Override
public void addConnector(String protocol, int port) {
}
@Override
public TraceContext getTraceContext() {
return null;
}
@Override
public ProfilerConfig getProfilerConfig() {
return null;
}
// @Override
// public PLoggerBinder initializeLogger() {
// return new PLoggerBinder() {
// @Override
// public PLogger getLogger(String name) {
// return new DummyPLogger();
// }
//
// @Override
// public void shutdown() {
//
// }
// };
// }
}
package com.nhn.pinpoint.bootstrap;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.context.TraceContext;
import java.lang.instrument.Instrumentation;
/**
* @author emeroad
* @author hyungil.jeong
*/
public class DummyAgent implements Agent {
public DummyAgent(String agentArgs, Instrumentation instrumentation, ProfilerConfig profilerConfig) {
}
@Override
public void start() {
}
@Override
public void stop() {
}
@Override
public void addConnector(String protocol, int port) {
}
@Override
public TraceContext getTraceContext() {
return null;
}
@Override
public ProfilerConfig getProfilerConfig() {
return null;
}
// @Override
// public PLoggerBinder initializeLogger() {
// return new PLoggerBinder() {
// @Override
// public PLogger getLogger(String name) {
// return new DummyPLogger();
// }
//
// @Override
// public void shutdown() {
//
// }
// };
// }
}
@@ -1,87 +1,87 @@
package com.nhn.pinpoint.bootstrap;
import java.lang.instrument.ClassDefinition;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;
import java.util.jar.JarFile;
/**
* @author emeroad
*/
public class DummyInstrumentation implements Instrumentation {
@Override
public void addTransformer(ClassFileTransformer transformer, boolean canRetransform) {
}
@Override
public void addTransformer(ClassFileTransformer transformer) {
}
@Override
public boolean removeTransformer(ClassFileTransformer transformer) {
return false;
}
@Override
public boolean isRetransformClassesSupported() {
return false;
}
@Override
public void retransformClasses(Class<?>... classes) throws UnmodifiableClassException {
}
@Override
public boolean isRedefineClassesSupported() {
return false;
}
@Override
public void redefineClasses(ClassDefinition... definitions) throws ClassNotFoundException, UnmodifiableClassException {
}
@Override
public boolean isModifiableClass(Class<?> theClass) {
return false;
}
@Override
public Class[] getAllLoadedClasses() {
return new Class[0];
}
@Override
public Class[] getInitiatedClasses(ClassLoader loader) {
return new Class[0];
}
@Override
public long getObjectSize(Object objectToSize) {
return 0;
}
@Override
public void appendToBootstrapClassLoaderSearch(JarFile jarfile) {
}
@Override
public void appendToSystemClassLoaderSearch(JarFile jarfile) {
}
@Override
public boolean isNativeMethodPrefixSupported() {
return false;
}
@Override
public void setNativeMethodPrefix(ClassFileTransformer transformer, String prefix) {
}
}
package com.nhn.pinpoint.bootstrap;
import java.lang.instrument.ClassDefinition;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;
import java.util.jar.JarFile;
/**
* @author emeroad
*/
public class DummyInstrumentation implements Instrumentation {
@Override
public void addTransformer(ClassFileTransformer transformer, boolean canRetransform) {
}
@Override
public void addTransformer(ClassFileTransformer transformer) {
}
@Override
public boolean removeTransformer(ClassFileTransformer transformer) {
return false;
}
@Override
public boolean isRetransformClassesSupported() {
return false;
}
@Override
public void retransformClasses(Class<?>... classes) throws UnmodifiableClassException {
}
@Override
public boolean isRedefineClassesSupported() {
return false;
}
@Override
public void redefineClasses(ClassDefinition... definitions) throws ClassNotFoundException, UnmodifiableClassException {
}
@Override
public boolean isModifiableClass(Class<?> theClass) {
return false;
}
@Override
public Class[] getAllLoadedClasses() {
return new Class[0];
}
@Override
public Class[] getInitiatedClasses(ClassLoader loader) {
return new Class[0];
}
@Override
public long getObjectSize(Object objectToSize) {
return 0;
}
@Override
public void appendToBootstrapClassLoaderSearch(JarFile jarfile) {
}
@Override
public void appendToSystemClassLoaderSearch(JarFile jarfile) {
}
@Override
public boolean isNativeMethodPrefixSupported() {
return false;
}
@Override
public void setNativeMethodPrefix(ClassFileTransformer transformer, String prefix) {
}
}
@@ -1,22 +1,22 @@
package com.nhn.pinpoint.bootstrap;
import junit.framework.Assert;
import org.junit.Test;
/**
* @author emeroad
*/
public class PinpointBootStrapTest {
@Test
public void testDuplicatedLoadCheck() throws Exception {
PinpointBootStrap.premain("test", new DummyInstrumentation());
String exist = System.getProperty(PinpointBootStrap.BOOT_STRAP_LOAD_STATE);
Assert.assertTrue(exist != null);
PinpointBootStrap.premain("test", new DummyInstrumentation());
// 중복 된경우를 체크 할수 있는 방법이 로그 확인 뿐이 없나??
String recheck = System.getProperty(PinpointBootStrap.BOOT_STRAP_LOAD_STATE);
Assert.assertEquals(exist, recheck);
}
}
package com.nhn.pinpoint.bootstrap;
import junit.framework.Assert;
import org.junit.Test;
/**
* @author emeroad
*/
public class PinpointBootStrapTest {
@Test
public void testDuplicatedLoadCheck() throws Exception {
PinpointBootStrap.premain("test", new DummyInstrumentation());
String exist = System.getProperty(PinpointBootStrap.BOOT_STRAP_LOAD_STATE);
Assert.assertTrue(exist != null);
PinpointBootStrap.premain("test", new DummyInstrumentation());
// 중복 된경우를 체크 할수 있는 방법이 로그 확인 뿐이 없나??
String recheck = System.getProperty(PinpointBootStrap.BOOT_STRAP_LOAD_STATE);
Assert.assertEquals(exist, recheck);
}
}
@@ -1,33 +1,33 @@
package com.nhn.pinpoint.bootstrap;
import junit.framework.Assert;
import org.junit.Test;
import java.net.URL;
/**
* @author emeroad
*/
public class PinpointURLClassLoaderTest {
@Test
public void testOnLoadClass() throws Exception {
PinpointURLClassLoader cl = new PinpointURLClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader());
try {
cl.loadClass("test");
Assert.fail();
} catch (ClassNotFoundException e) {
}
// try {
// cl.loadClass("com.nhn.pinpoint.profiler.DefaultAgent");
// } catch (ClassNotFoundException e) {
//
// }
// 사실 위에 코드로 정상 테스트가 가능해야 겠지만 bootstrap testcase에서는 jar라서 찾을수 없음
// 아래 코드로 로드 하는 클래스인지 체크 정도만 하자.
// URL에 다가 pinpoint.jar를 걸면 되긴하겠지만. 관리가 힘들듯함.
Assert.assertTrue(cl.onLoadClass("com.nhn.pinpoint.profiler.DefaultAgent"));
}
}
package com.nhn.pinpoint.bootstrap;
import junit.framework.Assert;
import org.junit.Test;
import java.net.URL;
/**
* @author emeroad
*/
public class PinpointURLClassLoaderTest {
@Test
public void testOnLoadClass() throws Exception {
PinpointURLClassLoader cl = new PinpointURLClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader());
try {
cl.loadClass("test");
Assert.fail();
} catch (ClassNotFoundException e) {
}
// try {
// cl.loadClass("com.nhn.pinpoint.profiler.DefaultAgent");
// } catch (ClassNotFoundException e) {
//
// }
// 사실 위에 코드로 정상 테스트가 가능해야 겠지만 bootstrap testcase에서는 jar라서 찾을수 없음
// 아래 코드로 로드 하는 클래스인지 체크 정도만 하자.
// URL에 다가 pinpoint.jar를 걸면 되긴하겠지만. 관리가 힘들듯함.
Assert.assertTrue(cl.onLoadClass("com.nhn.pinpoint.profiler.DefaultAgent"));
}
}
@@ -1,26 +1,26 @@
package com.nhn.pinpoint.bootstrap.config;
import junit.framework.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author emeroad
*/
public class DumpTypeTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void find() {
DumpType none = DumpType.valueOf("ALWAYS");
logger.debug("type:{}", none);
try {
DumpType.valueOf("error");
Assert.fail("not found");
} catch (IllegalArgumentException e) {
}
}
}
package com.nhn.pinpoint.bootstrap.config;
import junit.framework.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author emeroad
*/
public class DumpTypeTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void find() {
DumpType none = DumpType.valueOf("ALWAYS");
logger.debug("type:{}", none);
try {
DumpType.valueOf("error");
Assert.fail("not found");
} catch (IllegalArgumentException e) {
}
}
}
@@ -1,5 +1,5 @@
profiler.apache.httpclient4.cookie.dumptype=EXCEPTION
profiler.io.buffering.enable=true
profiler.apache.httpclient4.cookie.dumptype=EXCEPTION
profiler.io.buffering.enable=true
profiler.io.buffering.buffersize=10
@@ -1,5 +1,5 @@
profiler.apache.httpclient4.cookie.dumptype=EXCEPTION
profiler.io.buffering.enable=false
profiler.apache.httpclient4.cookie.dumptype=EXCEPTION
profiler.io.buffering.enable=false
profiler.io.buffering.buffersize=30
@@ -1,7 +1,7 @@
profiler.apache.httpclient4.cookie.dumptype=EXCEPTION
profiler.io.buffering.enable=false
profiler.io.buffering.buffersize=30
profiler.apache.httpclient4.cookie.dumptype=EXCEPTION
profiler.io.buffering.enable=false
profiler.io.buffering.buffersize=30
profiler.tcpdatasender.command.accept.enable=true
@@ -1,187 +1,187 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.Trace;
import com.nhn.pinpoint.bootstrap.context.TraceId;
import com.nhn.pinpoint.common.AnnotationKey;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public class MockTrace implements Trace {
private long beforeTime;
private long afterTime;
private boolean sampled = true;
@Override
public void markBeforeTime() {
beforeTime = System.currentTimeMillis();
}
@Override
public long getBeforeTime() {
return beforeTime;
}
@Override
public void markAfterTime() {
afterTime = System.currentTimeMillis();
}
@Override
public long getAfterTime() {
return afterTime;
}
@Override
public TraceId getTraceId() {
return null;
}
public void setSampled(boolean sampled) {
this.sampled = sampled;
}
@Override
public boolean canSampled() {
return sampled;
}
@Override
public boolean isRoot() {
return false;
}
@Override
public void recordException(Throwable throwable) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor, Object[] args) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor, Object args, int index) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor, Object[] args, int start, int end) {
}
@Override
public void recordApiCachedString(MethodDescriptor methodDescriptor, String args, int index) {
}
@Override
public ParsingResult recordSqlInfo(String sql) {
return null;
}
@Override
public void recordSqlParsingResult(ParsingResult parsingResult) {
}
@Override
public void recordSqlParsingResult(ParsingResult parsingResult, String bindValue) {
}
@Override
public void recordAttribute(AnnotationKey key, String value) {
}
@Override
public void recordAttribute(AnnotationKey key, int value) {
}
@Override
public void recordAttribute(AnnotationKey key, Object value) {
}
@Override
public void recordServiceType(ServiceType serviceType) {
}
@Override
public void recordRpcName(String rpc) {
}
@Override
public void recordDestinationId(String destinationId) {
}
@Override
public void recordEndPoint(String endPoint) {
}
@Override
public void recordRemoteAddress(String remoteAddress) {
}
@Override
public void recordNextSpanId(long spanId) {
}
@Override
public void recordParentApplication(String parentApplicationName, short parentApplicationType) {
}
@Override
public void recordAcceptorHost(String host) {
}
@Override
public int getStackFrameId() {
return 0;
}
@Override
public void traceBlockBegin() {
}
@Override
public void traceBlockBegin(int stackId) {
}
@Override
public void traceRootBlockEnd() {
}
@Override
public void traceBlockEnd() {
}
@Override
public void traceBlockEnd(int stackId) {
}
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.Trace;
import com.nhn.pinpoint.bootstrap.context.TraceId;
import com.nhn.pinpoint.common.AnnotationKey;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public class MockTrace implements Trace {
private long beforeTime;
private long afterTime;
private boolean sampled = true;
@Override
public void markBeforeTime() {
beforeTime = System.currentTimeMillis();
}
@Override
public long getBeforeTime() {
return beforeTime;
}
@Override
public void markAfterTime() {
afterTime = System.currentTimeMillis();
}
@Override
public long getAfterTime() {
return afterTime;
}
@Override
public TraceId getTraceId() {
return null;
}
public void setSampled(boolean sampled) {
this.sampled = sampled;
}
@Override
public boolean canSampled() {
return sampled;
}
@Override
public boolean isRoot() {
return false;
}
@Override
public void recordException(Throwable throwable) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor, Object[] args) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor, Object args, int index) {
}
@Override
public void recordApi(MethodDescriptor methodDescriptor, Object[] args, int start, int end) {
}
@Override
public void recordApiCachedString(MethodDescriptor methodDescriptor, String args, int index) {
}
@Override
public ParsingResult recordSqlInfo(String sql) {
return null;
}
@Override
public void recordSqlParsingResult(ParsingResult parsingResult) {
}
@Override
public void recordSqlParsingResult(ParsingResult parsingResult, String bindValue) {
}
@Override
public void recordAttribute(AnnotationKey key, String value) {
}
@Override
public void recordAttribute(AnnotationKey key, int value) {
}
@Override
public void recordAttribute(AnnotationKey key, Object value) {
}
@Override
public void recordServiceType(ServiceType serviceType) {
}
@Override
public void recordRpcName(String rpc) {
}
@Override
public void recordDestinationId(String destinationId) {
}
@Override
public void recordEndPoint(String endPoint) {
}
@Override
public void recordRemoteAddress(String remoteAddress) {
}
@Override
public void recordNextSpanId(long spanId) {
}
@Override
public void recordParentApplication(String parentApplicationName, short parentApplicationType) {
}
@Override
public void recordAcceptorHost(String host) {
}
@Override
public int getStackFrameId() {
return 0;
}
@Override
public void traceBlockBegin() {
}
@Override
public void traceBlockBegin(int stackId) {
}
@Override
public void traceRootBlockEnd() {
}
@Override
public void traceBlockEnd() {
}
@Override
public void traceBlockEnd(int stackId) {
}
}
@@ -1,139 +1,139 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.context.*;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public class MockTraceContext implements TraceContext {
private Trace trace;
public void setTrace(Trace trace) {
this.trace = trace;
}
@Override
public Trace currentTraceObject() {
if (trace == null) {
return null;
}
if (trace.canSampled()) {
return null;
}
return trace;
}
@Override
public Trace currentRawTraceObject() {
return trace;
}
@Override
public Trace continueTraceObject(TraceId traceID) {
return trace;
}
@Override
public Trace newTraceObject() {
return trace;
}
@Override
public void detachTraceObject() {
trace = null;
}
@Override
public String getAgentId() {
return null;
}
@Override
public String getApplicationName() {
return null;
}
@Override
public long getAgentStartTime() {
return 0;
}
@Override
public short getServerTypeCode() {
return 0;
}
@Override
public String getServerType() {
return null;
}
@Override
public int cacheApi(MethodDescriptor methodDescriptor) {
return 0;
}
@Override
public int cacheString(String value) {
return 0;
}
@Override
public ParsingResult parseSql(String sql) {
return null;
}
@Override
public DatabaseInfo parseJdbcUrl(String sql) {
return null;
}
@Override
public DatabaseInfo createDatabaseInfo(ServiceType type, ServiceType executeQueryType, String url, int port, String databaseId) {
return null;
}
@Override
public TraceId createTraceId(String transactionId, long parentSpanID, long spanID, short flags) {
return null;
}
@Override
public Trace disableSampling() {
return null;
}
@Override
public ProfilerConfig getProfilerConfig() {
return null;
}
@Override
public Metric getRpcMetric(ServiceType serviceType) {
return null;
}
@Override
public void recordContextMetricIsError() {
}
@Override
public void recordContextMetric(int elapsedTime) {
}
@Override
public void recordAcceptResponseTime(String parentApplicationName, short parentApplicationType, int elapsedTime) {
}
@Override
public void recordUserAcceptResponseTime(int elapsedTime) {
}
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.config.ProfilerConfig;
import com.nhn.pinpoint.bootstrap.context.*;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.common.util.ParsingResult;
/**
* @author emeroad
*/
public class MockTraceContext implements TraceContext {
private Trace trace;
public void setTrace(Trace trace) {
this.trace = trace;
}
@Override
public Trace currentTraceObject() {
if (trace == null) {
return null;
}
if (trace.canSampled()) {
return null;
}
return trace;
}
@Override
public Trace currentRawTraceObject() {
return trace;
}
@Override
public Trace continueTraceObject(TraceId traceID) {
return trace;
}
@Override
public Trace newTraceObject() {
return trace;
}
@Override
public void detachTraceObject() {
trace = null;
}
@Override
public String getAgentId() {
return null;
}
@Override
public String getApplicationName() {
return null;
}
@Override
public long getAgentStartTime() {
return 0;
}
@Override
public short getServerTypeCode() {
return 0;
}
@Override
public String getServerType() {
return null;
}
@Override
public int cacheApi(MethodDescriptor methodDescriptor) {
return 0;
}
@Override
public int cacheString(String value) {
return 0;
}
@Override
public ParsingResult parseSql(String sql) {
return null;
}
@Override
public DatabaseInfo parseJdbcUrl(String sql) {
return null;
}
@Override
public DatabaseInfo createDatabaseInfo(ServiceType type, ServiceType executeQueryType, String url, int port, String databaseId) {
return null;
}
@Override
public TraceId createTraceId(String transactionId, long parentSpanID, long spanID, short flags) {
return null;
}
@Override
public Trace disableSampling() {
return null;
}
@Override
public ProfilerConfig getProfilerConfig() {
return null;
}
@Override
public Metric getRpcMetric(ServiceType serviceType) {
return null;
}
@Override
public void recordContextMetricIsError() {
}
@Override
public void recordContextMetric(int elapsedTime) {
}
@Override
public void recordAcceptResponseTime(String parentApplicationName, short parentApplicationType, int elapsedTime) {
}
@Override
public void recordUserAcceptResponseTime(int elapsedTime) {
}
}
@@ -1,184 +1,184 @@
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.RecordableTrace;
import com.nhn.pinpoint.bootstrap.context.Trace;
import junit.framework.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.mockito.Mockito.*;
public class SpanSimpleAroundInterceptorTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void lifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor();
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void beforeExceptionLifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor() {
@Override
protected void doInBeforeTrace(RecordableTrace trace, Object target, Object[] args) {
touchBefore();
throw new RuntimeException();
}
};
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void afterExceptionLifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor() {
@Override
protected void doInAfterTrace(RecordableTrace trace, Object target, Object[] args, Object result, Throwable throwable) {
touchAfter();
throw new RuntimeException();
}
};
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void beforeAfterExceptionLifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor() {
@Override
protected void doInBeforeTrace(RecordableTrace trace, Object target, Object[] args) {
touchBefore();
throw new RuntimeException();
}
@Override
protected void doInAfterTrace(RecordableTrace trace, Object target, Object[] args, Object result, Throwable throwable) {
touchAfter();
throw new RuntimeException();
}
};
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void traceCreateFail() {
MockTraceContext context = mock(MockTraceContext.class);
when(context.newTraceObject()).thenReturn(null);
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor();
interceptor.setTraceContext(context);
checkTraceCreateFailInterceptor(context, interceptor);
}
private void checkSpanInterceptor(MockTraceContext context, TestSpanSimpleAroundInterceptor interceptor) {
Trace createTrace = interceptor.createTrace(null, null);
interceptor.before(new Object(), null);
Assert.assertEquals(interceptor.getBeforeTouchCount(), 1);
Trace before = context.currentRawTraceObject();
Assert.assertEquals(createTrace, before);
interceptor.after(new Object(), null, null, null);
Assert.assertEquals(interceptor.getAfterTouchCount(), 1);
Trace after = context.currentRawTraceObject();
Assert.assertNull(after);
}
private void checkTraceCreateFailInterceptor(MockTraceContext context, TestSpanSimpleAroundInterceptor interceptor) {
Trace createTrace = interceptor.createTrace(null, null);
Assert.assertNull(createTrace);
interceptor.before(new Object(), null);
Assert.assertEquals(interceptor.getBeforeTouchCount(), 0);
Assert.assertNull(context.currentRawTraceObject());
interceptor.after(new Object(), null, null, null);
Assert.assertEquals(interceptor.getAfterTouchCount(), 0);
Assert.assertNull(context.currentRawTraceObject());
}
@Test
public void testCreateTrace() throws Exception {
}
@Test
public void testDoInAfterTrace() throws Exception {
}
public static class TestSpanSimpleAroundInterceptor extends SpanSimpleAroundInterceptor {
private int beforeTouchCount;
private int afterTouchCount;
public TestSpanSimpleAroundInterceptor() {
super(TestSpanSimpleAroundInterceptor.class);
}
@Override
protected Trace createTrace(Object target, Object[] args) {
return getTraceContext().newTraceObject();
}
@Override
protected void doInBeforeTrace(RecordableTrace trace, Object target, Object[] args) {
touchBefore();
}
protected void touchBefore() {
beforeTouchCount++;
}
public int getAfterTouchCount() {
return afterTouchCount;
}
@Override
protected void doInAfterTrace(RecordableTrace trace, Object target, Object[] args, Object result, Throwable throwable) {
touchAfter();
}
protected void touchAfter() {
afterTouchCount++;
}
public int getBeforeTouchCount() {
return beforeTouchCount;
}
}
package com.nhn.pinpoint.bootstrap.interceptor;
import com.nhn.pinpoint.bootstrap.context.RecordableTrace;
import com.nhn.pinpoint.bootstrap.context.Trace;
import junit.framework.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.mockito.Mockito.*;
public class SpanSimpleAroundInterceptorTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void lifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor();
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void beforeExceptionLifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor() {
@Override
protected void doInBeforeTrace(RecordableTrace trace, Object target, Object[] args) {
touchBefore();
throw new RuntimeException();
}
};
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void afterExceptionLifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor() {
@Override
protected void doInAfterTrace(RecordableTrace trace, Object target, Object[] args, Object result, Throwable throwable) {
touchAfter();
throw new RuntimeException();
}
};
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void beforeAfterExceptionLifeCycle() throws Exception {
MockTraceContext context = new MockTraceContext();
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor() {
@Override
protected void doInBeforeTrace(RecordableTrace trace, Object target, Object[] args) {
touchBefore();
throw new RuntimeException();
}
@Override
protected void doInAfterTrace(RecordableTrace trace, Object target, Object[] args, Object result, Throwable throwable) {
touchAfter();
throw new RuntimeException();
}
};
interceptor.setTraceContext(context);
checkSpanInterceptor(context, interceptor);
}
@Test
public void traceCreateFail() {
MockTraceContext context = mock(MockTraceContext.class);
when(context.newTraceObject()).thenReturn(null);
MockTrace mockTrace = new MockTrace();
context.setTrace(mockTrace);
TestSpanSimpleAroundInterceptor interceptor = new TestSpanSimpleAroundInterceptor();
interceptor.setTraceContext(context);
checkTraceCreateFailInterceptor(context, interceptor);
}
private void checkSpanInterceptor(MockTraceContext context, TestSpanSimpleAroundInterceptor interceptor) {
Trace createTrace = interceptor.createTrace(null, null);
interceptor.before(new Object(), null);
Assert.assertEquals(interceptor.getBeforeTouchCount(), 1);
Trace before = context.currentRawTraceObject();
Assert.assertEquals(createTrace, before);
interceptor.after(new Object(), null, null, null);
Assert.assertEquals(interceptor.getAfterTouchCount(), 1);
Trace after = context.currentRawTraceObject();
Assert.assertNull(after);
}
private void checkTraceCreateFailInterceptor(MockTraceContext context, TestSpanSimpleAroundInterceptor interceptor) {
Trace createTrace = interceptor.createTrace(null, null);
Assert.assertNull(createTrace);
interceptor.before(new Object(), null);
Assert.assertEquals(interceptor.getBeforeTouchCount(), 0);
Assert.assertNull(context.currentRawTraceObject());
interceptor.after(new Object(), null, null, null);
Assert.assertEquals(interceptor.getAfterTouchCount(), 0);
Assert.assertNull(context.currentRawTraceObject());
}
@Test
public void testCreateTrace() throws Exception {
}
@Test
public void testDoInAfterTrace() throws Exception {
}
public static class TestSpanSimpleAroundInterceptor extends SpanSimpleAroundInterceptor {
private int beforeTouchCount;
private int afterTouchCount;
public TestSpanSimpleAroundInterceptor() {
super(TestSpanSimpleAroundInterceptor.class);
}
@Override
protected Trace createTrace(Object target, Object[] args) {
return getTraceContext().newTraceObject();
}
@Override
protected void doInBeforeTrace(RecordableTrace trace, Object target, Object[] args) {
touchBefore();
}
protected void touchBefore() {
beforeTouchCount++;
}
public int getAfterTouchCount() {
return afterTouchCount;
}
@Override
protected void doInAfterTrace(RecordableTrace trace, Object target, Object[] args, Object result, Throwable throwable) {
touchAfter();
}
protected void touchAfter() {
afterTouchCount++;
}
public int getBeforeTouchCount() {
return beforeTouchCount;
}
}
}
@@ -1,32 +1,32 @@
package com.nhn.pinpoint.bootstrap.util;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
/**
* @author emeroad
*/
public class LocalHostTest {
public static void main(String[] args) throws UnknownHostException, SocketException {
System.out.println("Canonical:" + InetAddress.getLocalHost().getCanonicalHostName());
System.out.println("normal:" + InetAddress.getLocalHost().getHostName());
System.out.println("NetworkInterface");
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
System.out.println("Nic:" + networkInterface);
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
System.out.println(inetAddress.getCanonicalHostName());
System.out.println(inetAddress.getHostName());
}
}
}
}
package com.nhn.pinpoint.bootstrap.util;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
/**
* @author emeroad
*/
public class LocalHostTest {
public static void main(String[] args) throws UnknownHostException, SocketException {
System.out.println("Canonical:" + InetAddress.getLocalHost().getCanonicalHostName());
System.out.println("normal:" + InetAddress.getLocalHost().getHostName());
System.out.println("NetworkInterface");
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
System.out.println("Nic:" + networkInterface);
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
System.out.println(inetAddress.getCanonicalHostName());
System.out.println(inetAddress.getHostName());
}
}
}
}
@@ -1,39 +1,39 @@
package com.nhn.pinpoint.bootstrap.util;
import junit.framework.Assert;
import org.junit.Test;
/**
* @author emeroad
*/
public class MetaObjectTest {
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
@Test
public void testSetInvoke() throws Exception {
MetaObjectTest test = new MetaObjectTest();
MetaObject metaObject = new MetaObject("setTest", String.class);
Object result = metaObject.invoke(test, "set");
Assert.assertEquals(test.getTest(), "set");
Assert.assertNull(result);
}
@Test
public void testGetInvoke() throws Exception {
MetaObjectTest test = new MetaObjectTest();
test.setTest("get");
MetaObject metaObject = new MetaObject("getTest");
Object result = metaObject.invoke(test);
Assert.assertEquals(test.getTest(), result);
}
}
package com.nhn.pinpoint.bootstrap.util;
import junit.framework.Assert;
import org.junit.Test;
/**
* @author emeroad
*/
public class MetaObjectTest {
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
@Test
public void testSetInvoke() throws Exception {
MetaObjectTest test = new MetaObjectTest();
MetaObject metaObject = new MetaObject("setTest", String.class);
Object result = metaObject.invoke(test, "set");
Assert.assertEquals(test.getTest(), "set");
Assert.assertNull(result);
}
@Test
public void testGetInvoke() throws Exception {
MetaObjectTest test = new MetaObjectTest();
test.setTest("get");
MetaObject metaObject = new MetaObject("getTest");
Object result = metaObject.invoke(test);
Assert.assertEquals(test.getTest(), result);
}
}
+41 -41
View File
@@ -1,42 +1,42 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "" "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}) %m%n" />
<!-- %L 옵션은 라인넘버가 출력되나 속도저하가 심하다. -->
<!--<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) %m%n" />-->
</layout>
</appender>
<appender name="dailyRollingFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${pinpoint.log}/pinpoint.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}) %m%n" />
<!-- %L 옵션은 라인넘버가 출력되나 속도저하가 심하다. -->
<!--<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) %m%n" />-->
</layout>
</appender>
<logger name="com.nhn.pinpoint" additivity="false">
<level value="DEBUG" />
<appender-ref ref="console" />
<!-- testcase용은 파일로 남길 필요가 없음. -->
<!--<appender-ref ref="dailyRollingFile" />-->
</logger>
<root>
<level value="INFO" />
<appender-ref ref="console" />
<!-- testcase용은 파일로 남길 필요가 없음. -->
<!--<appender-ref ref="dailyRollingFile" />-->
</root>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "" "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}) %m%n" />
<!-- %L 옵션은 라인넘버가 출력되나 속도저하가 심하다. -->
<!--<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) %m%n" />-->
</layout>
</appender>
<appender name="dailyRollingFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${pinpoint.log}/pinpoint.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}) %m%n" />
<!-- %L 옵션은 라인넘버가 출력되나 속도저하가 심하다. -->
<!--<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) %m%n" />-->
</layout>
</appender>
<logger name="com.nhn.pinpoint" additivity="false">
<level value="DEBUG" />
<appender-ref ref="console" />
<!-- testcase용은 파일로 남길 필요가 없음. -->
<!--<appender-ref ref="dailyRollingFile" />-->
</logger>
<root>
<level value="INFO" />
<appender-ref ref="console" />
<!-- testcase용은 파일로 남길 필요가 없음. -->
<!--<appender-ref ref="dailyRollingFile" />-->
</root>
</log4j:configuration>
+87 -87
View File
@@ -1,87 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This configuration file was written by the eclipse-cs plugin configuration editor
-->
<!--
Checkstyle-Configuration: nhn-0.5
Description: none
-->
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
<property name="severity" value="warning"/>
<module name="TreeWalker">
<property name="tabWidth" value="4"/>
<property name="charset" value="UTF-8"/>
<module name="JavadocMethod">
<property name="allowMissingPropertyJavadoc" value="true"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
<module name="JavadocType">
<property name="authorFormat" value=".+"/>
</module>
<module name="ConstantName">
<property name="format" value="^[A-Z][A-Z0-9]+(_[A-Z0-9]+)*$"/>
</module>
<module name="LocalFinalVariableName"/>
<module name="LocalVariableName"/>
<module name="MemberName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="PackageName">
<property name="format" value="^(com\.naver\.|com\.nhncorp\.|com\.nhn\.|com\.hangame\.){1}([a-z])+(\.[a-z_][a-z0-9_]*)*$"/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="StaticVariableName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="TypeName">
<property name="format" value="^[A-Z][a-zA-Z0-9]+$"/>
</module>
<module name="LineLength">
<property name="max" value="200"/>
<property name="tabWidth" value="4"/>
</module>
<module name="EmptyForIteratorPad"/>
<module name="MethodParamPad"/>
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore">
<property name="tokens" value="SEMI,DOT,POST_DEC,POST_INC"/>
</module>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="TypecastParenPad">
<property name="tokens" value="RPAREN,TYPECAST"/>
</module>
<module name="WhitespaceAfter">
<property name="tokens" value="COMMA,SEMI"/>
</module>
<module name="WhitespaceAround">
<property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND"/>
</module>
<module name="LeftCurly"/>
<module name="NeedBraces"/>
<module name="RightCurly"/>
<module name="ActionClass"/>
<module name="BOClass"/>
<module name="DAOClass"/>
<module name="TempVariable"/>
<module name="BracketSpace"/>
<module name="Indentation"/>
<module name="AfterPackage"/>
<module name="AfterClass"/>
<module name="AfterEnum"/>
<module name="AfterAnnotation"/>
<module name="AfterAnnotations"/>
<module name="AfterSemicolon"/>
<module name="ControlStatement"/>
<module name="DAOMethod"/>
<module name="AfterMethod"/>
<module name="NewLine"/>
<module name="NewLine"/>
</module>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<!--
This configuration file was written by the eclipse-cs plugin configuration editor
-->
<!--
Checkstyle-Configuration: nhn-0.5
Description: none
-->
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
<property name="severity" value="warning"/>
<module name="TreeWalker">
<property name="tabWidth" value="4"/>
<property name="charset" value="UTF-8"/>
<module name="JavadocMethod">
<property name="allowMissingPropertyJavadoc" value="true"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
<module name="JavadocType">
<property name="authorFormat" value=".+"/>
</module>
<module name="ConstantName">
<property name="format" value="^[A-Z][A-Z0-9]+(_[A-Z0-9]+)*$"/>
</module>
<module name="LocalFinalVariableName"/>
<module name="LocalVariableName"/>
<module name="MemberName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="PackageName">
<property name="format" value="^(com\.naver\.|com\.nhncorp\.|com\.nhn\.|com\.hangame\.){1}([a-z])+(\.[a-z_][a-z0-9_]*)*$"/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="StaticVariableName">
<property name="format" value="^[a-z][a-zA-Z0-9]+$"/>
</module>
<module name="TypeName">
<property name="format" value="^[A-Z][a-zA-Z0-9]+$"/>
</module>
<module name="LineLength">
<property name="max" value="200"/>
<property name="tabWidth" value="4"/>
</module>
<module name="EmptyForIteratorPad"/>
<module name="MethodParamPad"/>
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore">
<property name="tokens" value="SEMI,DOT,POST_DEC,POST_INC"/>
</module>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="TypecastParenPad">
<property name="tokens" value="RPAREN,TYPECAST"/>
</module>
<module name="WhitespaceAfter">
<property name="tokens" value="COMMA,SEMI"/>
</module>
<module name="WhitespaceAround">
<property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND"/>
</module>
<module name="LeftCurly"/>
<module name="NeedBraces"/>
<module name="RightCurly"/>
<module name="ActionClass"/>
<module name="BOClass"/>
<module name="DAOClass"/>
<module name="TempVariable"/>
<module name="BracketSpace"/>
<module name="Indentation"/>
<module name="AfterPackage"/>
<module name="AfterClass"/>
<module name="AfterEnum"/>
<module name="AfterAnnotation"/>
<module name="AfterAnnotations"/>
<module name="AfterSemicolon"/>
<module name="ControlStatement"/>
<module name="DAOMethod"/>
<module name="AfterMethod"/>
<module name="NewLine"/>
<module name="NewLine"/>
</module>
</module>
+14 -14
View File
@@ -1,15 +1,15 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.0//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
<suppressions>
<suppress checks="StrictDuplicateCodeCheck" files="AnnotationValidationConfigurationBuilder.java"/>
<suppress checks="ModifiedControlVariableCheck" files="ErrorUtil.java" lines="31"/>
<suppress checks="SuperCloneCheck" files="ResultCacheEntry.java" />
<suppress checks="SuperCloneCheck" files="ServiceExecutionContext.java" />
<suppress checks="NPathComplexityCheck" files="DefaultUsfActionInvocation.java" />
<suppress checks="CyclomaticComplexityCheck" files="StringUtil.java" />
<suppress checks="NPathComplexityCheck" files="MessageMethod.java" />
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.0//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
<suppressions>
<suppress checks="StrictDuplicateCodeCheck" files="AnnotationValidationConfigurationBuilder.java"/>
<suppress checks="ModifiedControlVariableCheck" files="ErrorUtil.java" lines="31"/>
<suppress checks="SuperCloneCheck" files="ResultCacheEntry.java" />
<suppress checks="SuperCloneCheck" files="ServiceExecutionContext.java" />
<suppress checks="NPathComplexityCheck" files="DefaultUsfActionInvocation.java" />
<suppress checks="CyclomaticComplexityCheck" files="StringUtil.java" />
<suppress checks="NPathComplexityCheck" files="MessageMethod.java" />
</suppressions>
+12 -12
View File
@@ -1,13 +1,13 @@
<FindBugsFilter>
<!--
<Match> <Class name="com.foobar.ClassWithSomeBugsMatched" /> <Bug
code="DE,UrF,SIC" /> </Match>
-->
<!--<Match>-->
<!--<Class name="com.nhncorp.usf.core.result.RedirectResult" />-->
<!--<Bug pattern="DM_CONVERT_CASE" />-->
<!--</Match>-->
<!--
Match all XYZ violations. <Match> <Bug code="XYZ" /> </Match>
-->
<FindBugsFilter>
<!--
<Match> <Class name="com.foobar.ClassWithSomeBugsMatched" /> <Bug
code="DE,UrF,SIC" /> </Match>
-->
<!--<Match>-->
<!--<Class name="com.nhncorp.usf.core.result.RedirectResult" />-->
<!--<Bug pattern="DM_CONVERT_CASE" />-->
<!--</Match>-->
<!--
Match all XYZ violations. <Match> <Bug code="XYZ" /> </Match>
-->
</FindBugsFilter>
@@ -1,12 +1,12 @@
package com.nhn.pinpoint.collector.cluster.zookeeper;
import org.apache.zookeeper.Watcher;
/**
* @author koo.taejin
*/
public interface ZookeeperEventWatcher extends Watcher {
boolean isConnected();
}
package com.nhn.pinpoint.collector.cluster.zookeeper;
import org.apache.zookeeper.Watcher;
/**
* @author koo.taejin
*/
public interface ZookeeperEventWatcher extends Watcher {
boolean isConnected();
}
@@ -1,23 +1,23 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class AuthException extends PinpointZookeeperException {
public AuthException() {
}
public AuthException(String message) {
super(message);
}
public AuthException(String message, Throwable cause) {
super(message, cause);
}
public AuthException(Throwable cause) {
super(cause);
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class AuthException extends PinpointZookeeperException {
public AuthException() {
}
public AuthException(String message) {
super(message);
}
public AuthException(String message, Throwable cause) {
super(message, cause);
}
public AuthException(Throwable cause) {
super(cause);
}
}
@@ -1,23 +1,23 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class BadOperationException extends PinpointZookeeperException {
public BadOperationException() {
}
public BadOperationException(String message) {
super(message);
}
public BadOperationException(String message, Throwable cause) {
super(message, cause);
}
public BadOperationException(Throwable cause) {
super(cause);
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class BadOperationException extends PinpointZookeeperException {
public BadOperationException() {
}
public BadOperationException(String message) {
super(message);
}
public BadOperationException(String message, Throwable cause) {
super(message, cause);
}
public BadOperationException(Throwable cause) {
super(cause);
}
}
@@ -1,23 +1,23 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class ConnectionException extends PinpointZookeeperException {
public ConnectionException() {
}
public ConnectionException(String message) {
super(message);
}
public ConnectionException(String message, Throwable cause) {
super(message, cause);
}
public ConnectionException(Throwable cause) {
super(cause);
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class ConnectionException extends PinpointZookeeperException {
public ConnectionException() {
}
public ConnectionException(String message) {
super(message);
}
public ConnectionException(String message, Throwable cause) {
super(message, cause);
}
public ConnectionException(Throwable cause) {
super(cause);
}
}
@@ -1,23 +1,23 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class PinpointZookeeperException extends Exception {
public PinpointZookeeperException() {
}
public PinpointZookeeperException(String message) {
super(message);
}
public PinpointZookeeperException(String message, Throwable cause) {
super(message, cause);
}
public PinpointZookeeperException(Throwable cause) {
super(cause);
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class PinpointZookeeperException extends Exception {
public PinpointZookeeperException() {
}
public PinpointZookeeperException(String message) {
super(message);
}
public PinpointZookeeperException(String message, Throwable cause) {
super(message, cause);
}
public PinpointZookeeperException(Throwable cause) {
super(cause);
}
}
@@ -1,23 +1,23 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class TimeoutException extends PinpointZookeeperException {
public TimeoutException() {
}
public TimeoutException(String message) {
super(message);
}
public TimeoutException(String message, Throwable cause) {
super(message, cause);
}
public TimeoutException(Throwable cause) {
super(cause);
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class TimeoutException extends PinpointZookeeperException {
public TimeoutException() {
}
public TimeoutException(String message) {
super(message);
}
public TimeoutException(String message, Throwable cause) {
super(message, cause);
}
public TimeoutException(Throwable cause) {
super(cause);
}
}
@@ -1,23 +1,23 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class UnknownException extends PinpointZookeeperException {
public UnknownException() {
}
public UnknownException(String message) {
super(message);
}
public UnknownException(String message, Throwable cause) {
super(message, cause);
}
public UnknownException(Throwable cause) {
super(cause);
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.exception;
/**
* @author koo.taejin
*/
public class UnknownException extends PinpointZookeeperException {
public UnknownException() {
}
public UnknownException(String message) {
super(message);
}
public UnknownException(String message, Throwable cause) {
super(message, cause);
}
public UnknownException(Throwable cause) {
super(cause);
}
}
@@ -1,55 +1,55 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import java.util.concurrent.atomic.AtomicInteger;
import com.nhn.pinpoint.rpc.server.ChannelContext;
public class AbstractJob implements Job {
private final ChannelContext channelContext;
private final int maxCount;
private final AtomicInteger currentCount;
public AbstractJob(ChannelContext channelContext) {
this(channelContext, 3);
}
public AbstractJob(ChannelContext channelContext, int maxCount) {
this.channelContext = channelContext;
this.maxCount = maxCount;
this.currentCount = new AtomicInteger(0);
}
@Override
public ChannelContext getChannelContext() {
return channelContext;
}
@Override
public int getMaxRetryCount() {
return maxCount;
}
@Override
public int getCurrentRetryCount() {
return currentCount.get();
}
@Override
public void incrementCurrentRetryCount() {
currentCount.incrementAndGet();
}
@Override
public String toString() {
StringBuilder toString = new StringBuilder();
toString.append(this.getClass().getSimpleName());
toString.append(", ChannelContext=" + channelContext);
toString.append(", Retry=" + currentCount.get() + "/" + maxCount);
return toString.toString();
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import java.util.concurrent.atomic.AtomicInteger;
import com.nhn.pinpoint.rpc.server.ChannelContext;
public class AbstractJob implements Job {
private final ChannelContext channelContext;
private final int maxCount;
private final AtomicInteger currentCount;
public AbstractJob(ChannelContext channelContext) {
this(channelContext, 3);
}
public AbstractJob(ChannelContext channelContext, int maxCount) {
this.channelContext = channelContext;
this.maxCount = maxCount;
this.currentCount = new AtomicInteger(0);
}
@Override
public ChannelContext getChannelContext() {
return channelContext;
}
@Override
public int getMaxRetryCount() {
return maxCount;
}
@Override
public int getCurrentRetryCount() {
return currentCount.get();
}
@Override
public void incrementCurrentRetryCount() {
currentCount.incrementAndGet();
}
@Override
public String toString() {
StringBuilder toString = new StringBuilder();
toString.append(this.getClass().getSimpleName());
toString.append(", ChannelContext=" + channelContext);
toString.append(", Retry=" + currentCount.get() + "/" + maxCount);
return toString.toString();
}
}
@@ -1,14 +1,14 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import com.nhn.pinpoint.rpc.server.ChannelContext;
/**
* @author koo.taejin
*/
public class DeleteJob extends AbstractJob {
public DeleteJob(ChannelContext channelContext) {
super(channelContext);
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import com.nhn.pinpoint.rpc.server.ChannelContext;
/**
* @author koo.taejin
*/
public class DeleteJob extends AbstractJob {
public DeleteJob(ChannelContext channelContext) {
super(channelContext);
}
}
@@ -1,19 +1,19 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import com.nhn.pinpoint.rpc.server.ChannelContext;
/**
* @author koo.taejin
*/
public interface Job {
ChannelContext getChannelContext();
int getMaxRetryCount();
int getCurrentRetryCount();
void incrementCurrentRetryCount();
}
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import com.nhn.pinpoint.rpc.server.ChannelContext;
/**
* @author koo.taejin
*/
public interface Job {
ChannelContext getChannelContext();
int getMaxRetryCount();
int getCurrentRetryCount();
void incrementCurrentRetryCount();
}
@@ -1,26 +1,26 @@
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import com.nhn.pinpoint.rpc.server.ChannelContext;
/**
* @author koo.taejin
*/
public class UpdateJob extends AbstractJob {
private final byte[] contents;
public UpdateJob(ChannelContext channelContext, byte[] contents) {
super(channelContext);
this.contents = contents;
}
public UpdateJob(ChannelContext channelContext, int maxRetryCount, byte[] contents) {
super(channelContext, maxRetryCount);
this.contents = contents;
}
public byte[] getContents() {
return contents;
}
}
package com.nhn.pinpoint.collector.cluster.zookeeper.job;
import com.nhn.pinpoint.rpc.server.ChannelContext;
/**
* @author koo.taejin
*/
public class UpdateJob extends AbstractJob {
private final byte[] contents;
public UpdateJob(ChannelContext channelContext, byte[] contents) {
super(channelContext);
this.contents = contents;
}
public UpdateJob(ChannelContext channelContext, int maxRetryCount, byte[] contents) {
super(channelContext, maxRetryCount);
this.contents = contents;
}
public byte[] getContents() {
return contents;
}
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TAgentInfo;
/**
* @author emeroad
*/
public interface AgentInfoDao {
void insert(TAgentInfo agentInfo);
}
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TAgentInfo;
/**
* @author emeroad
*/
public interface AgentInfoDao {
void insert(TAgentInfo agentInfo);
}
@@ -1,11 +1,11 @@
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TApiMetaData;
/**
* @author emeroad
*/
public interface ApiMetaDataDao {
void insert(TApiMetaData apiMetaData);
}
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TApiMetaData;
/**
* @author emeroad
*/
public interface ApiMetaDataDao {
void insert(TApiMetaData apiMetaData);
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.collector.dao;
/**
*
* @author netspider
*
*/
public interface HostApplicationMapDao {
void insert(String host, String bindApplicationName, short bindServiceType, String parentApplicationName, short parentServiceType);
}
package com.nhn.pinpoint.collector.dao;
/**
*
* @author netspider
*
*/
public interface HostApplicationMapDao {
void insert(String host, String bindApplicationName, short bindServiceType, String parentApplicationName, short parentServiceType);
}
@@ -1,8 +1,8 @@
package com.nhn.pinpoint.collector.dao;
/**
* @author emeroad
*/
public interface MapResponseTimeDao extends CachedStatisticsDao {
void received(String applicationName, short serviceType, String agentId, int elapsed, boolean isError);
}
package com.nhn.pinpoint.collector.dao;
/**
* @author emeroad
*/
public interface MapResponseTimeDao extends CachedStatisticsDao {
void received(String applicationName, short serviceType, String agentId, int elapsed, boolean isError);
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.collector.dao;
/**
*
* @author netspider
* @author emeroad
*/
public interface MapStatisticsCalleeDao extends CachedStatisticsDao {
void update(String calleeApplicationName, short calleeServiceType, String callerApplicationName, short callerServiceType, String callerHost, int elapsed, boolean isError);
}
package com.nhn.pinpoint.collector.dao;
/**
*
* @author netspider
* @author emeroad
*/
public interface MapStatisticsCalleeDao extends CachedStatisticsDao {
void update(String calleeApplicationName, short calleeServiceType, String callerApplicationName, short callerServiceType, String callerHost, int elapsed, boolean isError);
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.collector.dao;
/**
*
* @author netspider
* @author emeroad
*/
public interface MapStatisticsCallerDao extends CachedStatisticsDao {
void update(String callerApplicationName, short callerServiceType, String callerAgentId, String calleeApplicationName, short calleeServiceType, String calleeHost, int elapsed, boolean isError);
}
package com.nhn.pinpoint.collector.dao;
/**
*
* @author netspider
* @author emeroad
*/
public interface MapStatisticsCallerDao extends CachedStatisticsDao {
void update(String callerApplicationName, short callerServiceType, String callerAgentId, String calleeApplicationName, short calleeServiceType, String calleeHost, int elapsed, boolean isError);
}
@@ -1,10 +1,10 @@
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TSqlMetaData;
/**
* @author emeroad
*/
public interface SqlMetaDataDao {
void insert(TSqlMetaData sqlMetaData);
}
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TSqlMetaData;
/**
* @author emeroad
*/
public interface SqlMetaDataDao {
void insert(TSqlMetaData sqlMetaData);
}
@@ -1,11 +1,11 @@
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TStringMetaData;
/**
* @author emeroad
*/
public interface StringMetaDataDao {
void insert(TStringMetaData stringMetaData);
}
package com.nhn.pinpoint.collector.dao;
import com.nhn.pinpoint.thrift.dto.TStringMetaData;
/**
* @author emeroad
*/
public interface StringMetaDataDao {
void insert(TStringMetaData stringMetaData);
}

Some files were not shown because too many files have changed in this diff Show More