mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-17 00:36:02 +10:00
[강운덕] [LUCYSUS-1744] agent의 config 파일 수정.
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@718 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package com.profiler;
|
||||
|
||||
import static com.profiler.config.TomcatProfilerConfig.JVM_STAT_GAP;
|
||||
import com.profiler.common.dto.thrift.JVMInfoThriftDTO;
|
||||
import com.profiler.context.TraceContext;
|
||||
import com.profiler.sender.DataSender;
|
||||
import com.sun.management.OperatingSystemMXBean;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.management.GarbageCollectorMXBean;
|
||||
@@ -15,10 +18,7 @@ import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.common.dto.thrift.JVMInfoThriftDTO;
|
||||
import com.profiler.context.TraceContext;
|
||||
import com.profiler.sender.DataSender;
|
||||
import com.sun.management.OperatingSystemMXBean;
|
||||
import static com.profiler.config.ProfilerConfig.JVM_STAT_GAP;
|
||||
|
||||
/**
|
||||
* System monitor
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package com.profiler;
|
||||
|
||||
import com.profiler.config.ProfilerConfig;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.JavaAssistByteCodeInstrumentor;
|
||||
import com.profiler.modifier.DefaultModifierRegistry;
|
||||
import com.profiler.modifier.Modifier;
|
||||
import com.profiler.modifier.ModifierRegistry;
|
||||
|
||||
import java.lang.instrument.ClassFileTransformer;
|
||||
import java.lang.instrument.IllegalClassFormatException;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
@@ -7,14 +14,6 @@ import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.JavaAssistByteCodeInstrumentor;
|
||||
import com.profiler.modifier.DefaultModifierRegistry;
|
||||
import com.profiler.modifier.Modifier;
|
||||
import com.profiler.modifier.ModifierRegistry;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConfig;
|
||||
|
||||
public class TomcatProfiler implements ClassFileTransformer {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(TomcatProfiler.class.getName());
|
||||
@@ -24,21 +23,26 @@ public class TomcatProfiler implements ClassFileTransformer {
|
||||
private ByteCodeInstrumentor byteCodeInstrumentor;
|
||||
|
||||
private final ModifierRegistry modifierRepository;
|
||||
private TomcatProfilerConfig tomcatProfilerConfig;
|
||||
private ProfilerConfig profilerConfig;
|
||||
|
||||
public static void premain(String agentArgs, Instrumentation inst) {
|
||||
TomcatProfilerConfig tomcatProfilerConfig = TomcatProfilerConfig.readConfigFile();
|
||||
new TomcatProfiler(agentArgs, inst, tomcatProfilerConfig);
|
||||
try {
|
||||
ProfilerConfig profilerConfig = new ProfilerConfig();
|
||||
profilerConfig.readConfigFile();
|
||||
new TomcatProfiler(agentArgs, inst, profilerConfig);
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.SEVERE, "Profiler Agent start fail. Cause:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public TomcatProfiler(String agentArgs, Instrumentation inst, TomcatProfilerConfig tomcatProfilerConfig) {
|
||||
public TomcatProfiler(String agentArgs, Instrumentation inst, ProfilerConfig profilerConfig) {
|
||||
this.agentArgString = agentArgs;
|
||||
this.instrumentation = inst;
|
||||
this.instrumentation.addTransformer(this);
|
||||
this.profilerConfig = profilerConfig;
|
||||
this.instrumentation = inst;
|
||||
this.instrumentation.addTransformer(this);
|
||||
String[] paths = getTomcatlibPath();
|
||||
this.byteCodeInstrumentor = new JavaAssistByteCodeInstrumentor(paths);
|
||||
this.modifierRepository = createModifierRegistry(byteCodeInstrumentor, tomcatProfilerConfig);
|
||||
this.tomcatProfilerConfig = tomcatProfilerConfig;
|
||||
this.byteCodeInstrumentor = new JavaAssistByteCodeInstrumentor(paths);
|
||||
this.modifierRepository = createModifierRegistry(byteCodeInstrumentor);
|
||||
|
||||
}
|
||||
|
||||
@@ -53,12 +57,14 @@ public class TomcatProfiler implements ClassFileTransformer {
|
||||
return new String[] {catalinaHome + "/lib/servlet-api.jar", catalinaHome + "/lib/catalina.jar"};
|
||||
}
|
||||
|
||||
private ModifierRegistry createModifierRegistry(ByteCodeInstrumentor byteCodeInstrumentor, TomcatProfilerConfig tomcatProfilerConfig) {
|
||||
DefaultModifierRegistry modifierRepository = new DefaultModifierRegistry(byteCodeInstrumentor);
|
||||
private ModifierRegistry createModifierRegistry(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
DefaultModifierRegistry modifierRepository = new DefaultModifierRegistry(byteCodeInstrumentor, profilerConfig);
|
||||
|
||||
modifierRepository.addTomcatModifier();
|
||||
if (tomcatProfilerConfig.enableJdbcProfile()) {
|
||||
modifierRepository.addJdbcModifier();
|
||||
}
|
||||
|
||||
// jdbc
|
||||
modifierRepository.addJdbcModifier();
|
||||
// rpc
|
||||
modifierRepository.addConnectorModifier();
|
||||
return modifierRepository;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
package com.profiler.config;
|
||||
|
||||
import com.profiler.common.util.PropertyUtils;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
public class ProfilerConfig {
|
||||
|
||||
|
||||
private static final Logger logger = Logger.getLogger(ProfilerConfig.class.getName());
|
||||
|
||||
public static String SERVER_IP = "127.0.0.1";
|
||||
public static int SERVER_UDP_PORT = 9995;
|
||||
|
||||
@Deprecated
|
||||
public static int AGENT_TCP_LISTEN_PORT = 9990;
|
||||
@Deprecated
|
||||
public static int SERVER_TCP_LISTEN_PORT = 9991;
|
||||
|
||||
|
||||
public static long JVM_STAT_GAP = 5000L;
|
||||
public static long SERVER_CONNECT_RETRY_GAP = 1000L;
|
||||
|
||||
/**
|
||||
* If sql query count is over 10000 it consumes Memory. So sqlHashSet uses
|
||||
* CopyOnWriteArraySet. It is slow, but it is stable. Default set is false
|
||||
* and it uses HashSet.
|
||||
*/
|
||||
@Deprecated
|
||||
public static boolean QUERY_COUNT_OVER_10000 = false;
|
||||
|
||||
private boolean jdbcProfile = false;
|
||||
private boolean jdbcProfileMySql = false;
|
||||
private boolean jdbcProfileMsSql = false;
|
||||
private boolean jdbcProfileOracle = false;
|
||||
private boolean jdbcProfileCubrid = false;
|
||||
private boolean jdbcProfileDbcp = false;
|
||||
|
||||
|
||||
public ProfilerConfig() {
|
||||
}
|
||||
|
||||
public void readConfigFile() throws IOException{
|
||||
String hippoConfigFileName = System.getProperty("hippo.config");
|
||||
if (hippoConfigFileName == null) {
|
||||
logger.info("hippo.config property is not set. Using default property file(\"hippo.config\")");
|
||||
hippoConfigFileName = "hippo.config";
|
||||
}
|
||||
|
||||
try {
|
||||
Properties properties = PropertyUtils.readProperties(hippoConfigFileName);
|
||||
readPropertyValues(properties);
|
||||
} catch (FileNotFoundException fe) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.log(Level.WARNING, hippoConfigFileName + " file is not exists. Please check configuration. Cause:" + fe.getMessage(), fe);
|
||||
}
|
||||
throw fe;
|
||||
} catch (IOException e) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.log(Level.WARNING, hippoConfigFileName + " file read error. Cause:" + e.getMessage(), e);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isJdbcProfile() {
|
||||
return jdbcProfile;
|
||||
}
|
||||
|
||||
public boolean isJdbcProfileMySql() {
|
||||
return jdbcProfileMySql;
|
||||
}
|
||||
|
||||
public boolean isJdbcProfileMsSql() {
|
||||
return jdbcProfileMsSql;
|
||||
}
|
||||
|
||||
public boolean isJdbcProfileOracle() {
|
||||
return jdbcProfileOracle;
|
||||
}
|
||||
|
||||
public boolean isJdbcProfileCubrid() {
|
||||
return jdbcProfileCubrid;
|
||||
}
|
||||
|
||||
private void readPropertyValues(Properties prop) {
|
||||
// TODO : use Properties defaultvalue instead of using temp variable.
|
||||
|
||||
|
||||
this.SERVER_IP = readString(prop, "SERVER_IP", "127.0.0.1");
|
||||
this.SERVER_UDP_PORT = readInt(prop, "SERVER_UDP_PORT", 9995);
|
||||
|
||||
Object temp = null;
|
||||
if ((temp = prop.get("AGENT_TCP_LISTEN_PORT")) != null) {
|
||||
this.AGENT_TCP_LISTEN_PORT = Integer.parseInt(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("AGENT_TCP_LISTEN_PORT=" + AGENT_TCP_LISTEN_PORT);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("SERVER_TCP_LISTEN_PORT")) != null) {
|
||||
this.SERVER_TCP_LISTEN_PORT = Integer.parseInt(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("SERVER_TCP_LISTEN_PORT=" + SERVER_TCP_LISTEN_PORT);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("JVM_STAT_GAP")) != null) {
|
||||
this.JVM_STAT_GAP = Long.parseLong(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("JVM_STAT_GAP=" + JVM_STAT_GAP);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("SERVER_CONNECT_RETRY_GAP")) != null) {
|
||||
this.SERVER_CONNECT_RETRY_GAP = Long.parseLong(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("SERVER_CONNECT_RETRY_GAP=" + SERVER_CONNECT_RETRY_GAP);
|
||||
}
|
||||
}
|
||||
// if ((temp = prop.get("QUERY_COUNT_OVER_10000")) != null) {
|
||||
// this.QUERY_COUNT_OVER_10000 = Boolean.parseBoolean(temp.toString());
|
||||
// if (logger.isLoggable(Level.INFO)) {
|
||||
// logger.info("QUERY_COUNT_OVER_10000=" + QUERY_COUNT_OVER_10000);
|
||||
// }
|
||||
// }
|
||||
|
||||
this.jdbcProfile = readBoolean(prop, "JDBC_PROFILE", true);
|
||||
this.jdbcProfileMySql = readBoolean(prop, "JDBC_PROFILE_MYSQL", true);
|
||||
this.jdbcProfileMsSql = readBoolean(prop, "JDBC_PROFILE_MSSQL", true);
|
||||
this.jdbcProfileOracle = readBoolean(prop, "JDBC_PROFILE_ORACLE", true);
|
||||
this.jdbcProfileCubrid = readBoolean(prop, "JDBC_PROFILE_CUBRID", true);
|
||||
this.jdbcProfileCubrid = readBoolean(prop, "JDBC_PROFILE_DBCP", true);
|
||||
|
||||
|
||||
logger.info("configuration loaded successfully.");
|
||||
}
|
||||
|
||||
private String readString(Properties prop, String propertyName, String defaultValue) {
|
||||
String value = prop.getProperty(propertyName, defaultValue);
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info(propertyName + "=" + value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private int readInt(Properties prop, String propertyName, int defaultValue) {
|
||||
String value = prop.getProperty(propertyName);
|
||||
int result;
|
||||
try {
|
||||
result = Integer.parseInt(value);
|
||||
} catch (NumberFormatException e) {
|
||||
result = defaultValue;
|
||||
}
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info(propertyName + "=" + result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private boolean readBoolean(Properties prop, String propertyName, boolean defaultValue) {
|
||||
String value = prop.getProperty(propertyName, Boolean.toString(defaultValue));
|
||||
boolean result = Boolean.parseBoolean(value);
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info(propertyName + "=" + result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean isJdbcProfileDbcp() {
|
||||
return jdbcProfileDbcp;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -3,7 +3,7 @@ package com.profiler.config;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
public class TomcatProfilerConstant {
|
||||
public class ProfilerConstant {
|
||||
public final static DateFormat DATE_FORMAT_YMD_HMS = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
|
||||
public final static DateFormat DATE_FORMAT_HMS_MS = new SimpleDateFormat("HH:mm:ss,SSS");
|
||||
public static final long DATA_FETCH_INTERVAL = 2000;
|
||||
@@ -1,153 +0,0 @@
|
||||
package com.profiler.config;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
public class TomcatProfilerConfig {
|
||||
|
||||
|
||||
private static final Logger logger = Logger.getLogger(TomcatProfilerConfig.class.getName());
|
||||
|
||||
public static String SERVER_IP = "127.0.0.1";
|
||||
|
||||
// TODO 앞으로 공통으로 사용할 port가 필요함. 근데 tcp, udp 혼용사용하면 따로 port를 열어야 되는거 아닌지.
|
||||
// 일단 9995로 하자.
|
||||
public static int DEFUALT_PORT = 9995;
|
||||
public static int AGENT_TCP_LISTEN_PORT = 9990;
|
||||
public static int SERVER_TCP_LISTEN_PORT = 9991;
|
||||
public static int REQUEST_TRANSACTION_DATA_LISTEN_PORT = 9995;
|
||||
public static int REQUEST_DATA_LISTEN_PORT = 9996;
|
||||
public static int JVM_DATA_LISTEN_PORT = 9997;
|
||||
|
||||
public static long JVM_STAT_GAP = 5000L;
|
||||
public static long SERVER_CONNECT_RETRY_GAP = 1000L;
|
||||
|
||||
/**
|
||||
* If sql query count is over 10000 it consumes Memory. So sqlHashSet uses
|
||||
* CopyOnWriteArraySet. It is slow, but it is stable. Default set is false
|
||||
* and it uses HashSet.
|
||||
*/
|
||||
public static boolean QUERY_COUNT_OVER_10000 = false;
|
||||
|
||||
private boolean JDBC_PROFILE = true;
|
||||
|
||||
public static TomcatProfilerConfig readConfigFile() {
|
||||
TomcatProfilerConfig config = new TomcatProfilerConfig();
|
||||
|
||||
String hippoConfigFileName = System.getProperty("hippo.config");
|
||||
if (hippoConfigFileName == null) {
|
||||
logger.info("hippo.config property is not set. Using default values");
|
||||
return config;
|
||||
}
|
||||
|
||||
try {
|
||||
Properties properties = readProperties(hippoConfigFileName);
|
||||
setPropertyValues(config, properties);
|
||||
return config;
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.warning(hippoConfigFileName + " file is not exists. Please check configuration.");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.warning(e.getMessage());
|
||||
}
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
private static Properties readProperties(String propertyName) throws FileNotFoundException, IOException {
|
||||
FileReader reader = null;
|
||||
try {
|
||||
Properties prop = new Properties();
|
||||
reader = new FileReader(propertyName);
|
||||
prop.load(reader);
|
||||
return prop;
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean enableJdbcProfile() {
|
||||
return JDBC_PROFILE;
|
||||
}
|
||||
|
||||
private static void setPropertyValues(TomcatProfilerConfig config, Properties prop) {
|
||||
// TODO : use Properties defaultvalue instead of using temp variable.
|
||||
|
||||
Object temp = null;
|
||||
|
||||
if ((temp = prop.get("SERVER_IP")) != null) {
|
||||
config.SERVER_IP = temp.toString();
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("SERVER_IP=" + SERVER_IP);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("AGENT_TCP_LISTEN_PORT")) != null) {
|
||||
config.AGENT_TCP_LISTEN_PORT = Integer.parseInt(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("AGENT_TCP_LISTEN_PORT=" + AGENT_TCP_LISTEN_PORT);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("SERVER_TCP_LISTEN_PORT")) != null) {
|
||||
config.SERVER_TCP_LISTEN_PORT = Integer.parseInt(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("SERVER_TCP_LISTEN_PORT=" + SERVER_TCP_LISTEN_PORT);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("REQUEST_TRANSACTION_DATA_LISTEN_PORT")) != null) {
|
||||
config.REQUEST_TRANSACTION_DATA_LISTEN_PORT = Integer.parseInt(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("REQUEST_TRANSACTION_DATA_LISTEN_PORT=" + REQUEST_TRANSACTION_DATA_LISTEN_PORT);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("REQUEST_DATA_LISTEN_PORT")) != null) {
|
||||
config.REQUEST_DATA_LISTEN_PORT = Integer.parseInt(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("REQUEST_DATA_LISTEN_PORT=" + REQUEST_DATA_LISTEN_PORT);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("JVM_DATA_LISTEN_PORT")) != null) {
|
||||
config.JVM_DATA_LISTEN_PORT = Integer.parseInt(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("JVM_DATA_LISTEN_PORT=" + JVM_DATA_LISTEN_PORT);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("JVM_STAT_GAP")) != null) {
|
||||
config.JVM_STAT_GAP = Long.parseLong(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("JVM_STAT_GAP=" + JVM_STAT_GAP);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("SERVER_CONNECT_RETRY_GAP")) != null) {
|
||||
config.SERVER_CONNECT_RETRY_GAP = Long.parseLong(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("SERVER_CONNECT_RETRY_GAP=" + SERVER_CONNECT_RETRY_GAP);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("QUERY_COUNT_OVER_10000")) != null) {
|
||||
config.QUERY_COUNT_OVER_10000 = Boolean.parseBoolean(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("QUERY_COUNT_OVER_10000=" + QUERY_COUNT_OVER_10000);
|
||||
}
|
||||
}
|
||||
if ((temp = prop.get("JDBC_PROFILE")) != null) {
|
||||
config.JDBC_PROFILE = Boolean.parseBoolean(temp.toString());
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("JDBC_PROFILE=" + config.JDBC_PROFILE);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("configuration loaded successfully.");
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.profiler.modifier;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.profiler.config.ProfilerConfig;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.modifier.arcus.ArcusClientModifier;
|
||||
import com.profiler.modifier.connector.HTTPClientModifier;
|
||||
@@ -25,135 +23,153 @@ import com.profiler.modifier.tomcat.StandardHostValveInvokeInterceptor;
|
||||
import com.profiler.modifier.tomcat.TomcatConnectorModifier;
|
||||
import com.profiler.modifier.tomcat.TomcatStandardServiceModifier;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class DefaultModifierRegistry implements ModifierRegistry {
|
||||
// TODO 혹시 동시성을 고려 해야 되는지 검토.
|
||||
// TODO 혹시 동시성을 고려 해야 되는지 검토.
|
||||
// 왠간해서는 동시성 상황이 안나올것으로 보임.
|
||||
private Map<String, Modifier> registry = new HashMap<String, Modifier>();
|
||||
private Map<String, Modifier> registry = new HashMap<String, Modifier>();
|
||||
|
||||
private final ByteCodeInstrumentor byteCodeInstrumentor;
|
||||
private final ByteCodeInstrumentor byteCodeInstrumentor;
|
||||
private final ProfilerConfig profilerConfig;
|
||||
|
||||
public DefaultModifierRegistry(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
this.byteCodeInstrumentor = byteCodeInstrumentor;
|
||||
}
|
||||
public DefaultModifierRegistry(ByteCodeInstrumentor byteCodeInstrumentor, ProfilerConfig profilerConfig) {
|
||||
this.byteCodeInstrumentor = byteCodeInstrumentor;
|
||||
this.profilerConfig = profilerConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Modifier findModifier(String className) {
|
||||
return registry.get(className);
|
||||
}
|
||||
@Override
|
||||
public Modifier findModifier(String className) {
|
||||
return registry.get(className);
|
||||
}
|
||||
|
||||
private void addModifier(Modifier modifier) {
|
||||
Modifier old = registry.put(modifier.getTargetClass(), modifier);
|
||||
if (old != null) {
|
||||
throw new IllegalStateException("Modifier already exist new:" + modifier.getClass() + " old:" + old.getTargetClass());
|
||||
}
|
||||
}
|
||||
private void addModifier(Modifier modifier) {
|
||||
Modifier old = registry.put(modifier.getTargetClass(), modifier);
|
||||
if (old != null) {
|
||||
throw new IllegalStateException("Modifier already exist new:" + modifier.getClass() + " old:" + old.getTargetClass());
|
||||
}
|
||||
}
|
||||
|
||||
public void addConnectorModifier() {
|
||||
HTTPClientModifier httpClientModifier = new HTTPClientModifier(byteCodeInstrumentor);
|
||||
addModifier(httpClientModifier);
|
||||
public void addConnectorModifier() {
|
||||
HTTPClientModifier httpClientModifier = new HTTPClientModifier(byteCodeInstrumentor);
|
||||
addModifier(httpClientModifier);
|
||||
|
||||
ArcusClientModifier arcusClientModifier = new ArcusClientModifier(byteCodeInstrumentor);
|
||||
addModifier(arcusClientModifier);
|
||||
}
|
||||
ArcusClientModifier arcusClientModifier = new ArcusClientModifier(byteCodeInstrumentor);
|
||||
addModifier(arcusClientModifier);
|
||||
}
|
||||
|
||||
public void addTomcatModifier() {
|
||||
public void addTomcatModifier() {
|
||||
StandardHostValveInvokeInterceptor standardHostValveInvokeInterceptor = new StandardHostValveInvokeInterceptor(byteCodeInstrumentor);
|
||||
addModifier(standardHostValveInvokeInterceptor);
|
||||
addModifier(standardHostValveInvokeInterceptor);
|
||||
|
||||
Modifier tomcatStandardServiceModifier = new TomcatStandardServiceModifier(byteCodeInstrumentor);
|
||||
addModifier(tomcatStandardServiceModifier);
|
||||
Modifier tomcatStandardServiceModifier = new TomcatStandardServiceModifier(byteCodeInstrumentor);
|
||||
addModifier(tomcatStandardServiceModifier);
|
||||
|
||||
Modifier tomcatConnectorModifier = new TomcatConnectorModifier(byteCodeInstrumentor);
|
||||
addModifier(tomcatConnectorModifier);
|
||||
Modifier tomcatConnectorModifier = new TomcatConnectorModifier(byteCodeInstrumentor);
|
||||
addModifier(tomcatConnectorModifier);
|
||||
|
||||
Modifier tomcatCatalinaModifier = new CatalinaModifier(byteCodeInstrumentor);
|
||||
addModifier(tomcatCatalinaModifier);
|
||||
}
|
||||
Modifier tomcatCatalinaModifier = new CatalinaModifier(byteCodeInstrumentor);
|
||||
addModifier(tomcatCatalinaModifier);
|
||||
}
|
||||
|
||||
public void addJdbcModifier() {
|
||||
// TODO 드라이버 존재 체크 로직을 앞단으로 이동 시킬수 없는지 검토
|
||||
addMySqlDriver();
|
||||
public void addJdbcModifier() {
|
||||
// TODO 드라이버 존재 체크 로직을 앞단으로 이동 시킬수 없는지 검토
|
||||
if (!profilerConfig.isJdbcProfile()) {
|
||||
return;
|
||||
}
|
||||
|
||||
addMsSqlDriver();
|
||||
if (profilerConfig.isJdbcProfileMySql()) {
|
||||
addMySqlDriver();
|
||||
}
|
||||
|
||||
addOracleDriver();
|
||||
if (profilerConfig.isJdbcProfileMsSql()) {
|
||||
addMsSqlDriver();
|
||||
}
|
||||
|
||||
addCubridDriver();
|
||||
if (profilerConfig.isJdbcProfileOracle()) {
|
||||
addOracleDriver();
|
||||
}
|
||||
if(profilerConfig.isJdbcProfileCubrid()) {
|
||||
addCubridDriver();
|
||||
}
|
||||
|
||||
addDbcpDriver();
|
||||
}
|
||||
if(profilerConfig.isJdbcProfileDbcp()) {
|
||||
addDbcpDriver();
|
||||
}
|
||||
}
|
||||
|
||||
private void addMySqlDriver() {
|
||||
// TODO MySqlDriver는 버전별로 Connection이 interface인지 class인지가 다름. 문제 없는지
|
||||
// 확인필요.
|
||||
Modifier mysqlConnectionImplModifier = new MySQLConnectionImplModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlConnectionImplModifier);
|
||||
private void addMySqlDriver() {
|
||||
// TODO MySqlDriver는 버전별로 Connection이 interface인지 class인지가 다름. 문제 없는지
|
||||
// 확인필요.
|
||||
Modifier mysqlConnectionImplModifier = new MySQLConnectionImplModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlConnectionImplModifier);
|
||||
|
||||
Modifier mysqlStatementModifier = new MySQLStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlStatementModifier);
|
||||
Modifier mysqlStatementModifier = new MySQLStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlStatementModifier);
|
||||
|
||||
Modifier mysqlPreparedStatementModifier = new MySQLPreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlPreparedStatementModifier);
|
||||
Modifier mysqlPreparedStatementModifier = new MySQLPreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlPreparedStatementModifier);
|
||||
|
||||
MySQLPreparedStatementJDBC4Modifier myqlPreparedStatementJDBC4Modifier = new MySQLPreparedStatementJDBC4Modifier(byteCodeInstrumentor);
|
||||
addModifier(myqlPreparedStatementJDBC4Modifier);
|
||||
addModifier(myqlPreparedStatementJDBC4Modifier);
|
||||
|
||||
Modifier mysqlResultSetModifier = new MySQLResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlResultSetModifier);
|
||||
}
|
||||
Modifier mysqlResultSetModifier = new MySQLResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(mysqlResultSetModifier);
|
||||
}
|
||||
|
||||
private void addMsSqlDriver() {
|
||||
private void addMsSqlDriver() {
|
||||
|
||||
Modifier mssqlConnectionModifier = new MSSQLConnectionModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlConnectionModifier);
|
||||
Modifier mssqlConnectionModifier = new MSSQLConnectionModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlConnectionModifier);
|
||||
|
||||
Modifier mssqlStatementModifier = new MSSQLStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlStatementModifier);
|
||||
Modifier mssqlStatementModifier = new MSSQLStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlStatementModifier);
|
||||
|
||||
Modifier mssqlPreparedStatementModifier = new MSSQLPreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlPreparedStatementModifier);
|
||||
Modifier mssqlPreparedStatementModifier = new MSSQLPreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlPreparedStatementModifier);
|
||||
|
||||
Modifier mssqlResultSetModifier = new MSSQLResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlResultSetModifier);
|
||||
Modifier mssqlResultSetModifier = new MSSQLResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(mssqlResultSetModifier);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void addOracleDriver() {
|
||||
private void addOracleDriver() {
|
||||
|
||||
// TODO oracle의 경우 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier oraclePreparedStatementModifier = new OraclePreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(oraclePreparedStatementModifier);
|
||||
// TODO oracle의 경우 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier oraclePreparedStatementModifier = new OraclePreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(oraclePreparedStatementModifier);
|
||||
|
||||
Modifier oracleStatement = new OracleStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(oracleStatement);
|
||||
Modifier oracleStatement = new OracleStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(oracleStatement);
|
||||
|
||||
Modifier oracleResultSetModifier = new OracleResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(oracleResultSetModifier);
|
||||
}
|
||||
Modifier oracleResultSetModifier = new OracleResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(oracleResultSetModifier);
|
||||
}
|
||||
|
||||
private void addCubridDriver() {
|
||||
private void addCubridDriver() {
|
||||
|
||||
// TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier cubridStatementModifier = new CubridStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridStatementModifier);
|
||||
// TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier cubridStatementModifier = new CubridStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridStatementModifier);
|
||||
|
||||
Modifier cubridPreparedStatementModifier = new CubridPreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridPreparedStatementModifier);
|
||||
Modifier cubridPreparedStatementModifier = new CubridPreparedStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridPreparedStatementModifier);
|
||||
|
||||
Modifier cubridResultSetModifier = new CubridResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridResultSetModifier);
|
||||
Modifier cubridResultSetModifier = new CubridResultSetModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridResultSetModifier);
|
||||
|
||||
Modifier cubridUStatementModifier = new CubridUStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridUStatementModifier);
|
||||
}
|
||||
Modifier cubridUStatementModifier = new CubridUStatementModifier(byteCodeInstrumentor);
|
||||
addModifier(cubridUStatementModifier);
|
||||
}
|
||||
|
||||
private void addDbcpDriver() {
|
||||
private void addDbcpDriver() {
|
||||
|
||||
// TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier dbcpBasicDataSourceModifier = new DBCPBasicDataSourceModifier(byteCodeInstrumentor);
|
||||
addModifier(dbcpBasicDataSourceModifier);
|
||||
// TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier dbcpBasicDataSourceModifier = new DBCPBasicDataSourceModifier(byteCodeInstrumentor);
|
||||
addModifier(dbcpBasicDataSourceModifier);
|
||||
|
||||
Modifier dbcpPoolModifier = new DBCPPoolModifier(byteCodeInstrumentor);
|
||||
addModifier(dbcpPoolModifier);
|
||||
}
|
||||
Modifier dbcpPoolModifier = new DBCPPoolModifier(byteCodeInstrumentor);
|
||||
addModifier(dbcpPoolModifier);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -61,7 +60,7 @@ public class CubridPreparedStatementModifier extends AbstractModifier {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("{");
|
||||
sb.append("if($2 instanceof cubrid.jdbc.jci.UStatement) { ");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2.getQuery());");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + ProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2.getQuery());");
|
||||
sb.append("}}");
|
||||
|
||||
constructor.insertBefore(sb.toString());
|
||||
@@ -71,6 +70,6 @@ public class CubridPreparedStatementModifier extends AbstractModifier {
|
||||
|
||||
private void updateExecuteQueryMethod(CtClass cc) throws Exception {
|
||||
CtMethod serviceMethod = cc.getDeclaredMethod("execute", null);
|
||||
serviceMethod.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }");
|
||||
serviceMethod.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.StaticAroundInterceptor;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.InstrumentClass;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
@@ -39,12 +38,12 @@ public class CubridStatementModifier extends AbstractModifier {
|
||||
StaticAroundInterceptor interceptor = new StaticAroundInterceptor() {
|
||||
@Override
|
||||
public void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result) {
|
||||
DatabaseRequestTracer.putSqlQuery(TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY, (String) args[0]);
|
||||
DatabaseRequestTracer.putSqlQuery(ProfilerConstant.REQ_DATA_TYPE_DB_QUERY, (String) args[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) {
|
||||
DatabaseRequestTracer.put(TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY);;
|
||||
DatabaseRequestTracer.put(ProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY);;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -75,8 +74,8 @@ public class CubridStatementModifier extends AbstractModifier {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("{");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + ProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
|
||||
sb.append("}");
|
||||
|
||||
method.insertAfter(sb.toString());
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package com.profiler.modifier.db.dbcp;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
@@ -51,6 +50,6 @@ public class DBCPBasicDataSourceModifier extends AbstractModifier {
|
||||
|
||||
private void updateGetConnectionMethod(CtClass cc) throws Exception {
|
||||
CtMethod method = cc.getDeclaredMethod("getConnection", null);
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".putConnection(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION + ",$0.getUrl()); }");
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".putConnection(" + ProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION + ",$0.getUrl()); }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package com.profiler.modifier.db.dbcp;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
@@ -51,6 +50,6 @@ public class DBCPPoolModifier extends AbstractModifier {
|
||||
|
||||
private void updateCloseMethod(CtClass cc) throws Exception {
|
||||
CtMethod method = cc.getDeclaredMethod("close", null);
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + "); }");
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + "); }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
@@ -56,11 +55,11 @@ public class MSSQLConnectionModifier extends AbstractModifier {
|
||||
params[1] = classPool.getCtClass("int");
|
||||
CtMethod method = cc.getDeclaredMethod("createStatement", params);
|
||||
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT + "); }");
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT + "); }");
|
||||
}
|
||||
|
||||
private void updateCloseMethod(CtClass cc) throws Exception {
|
||||
CtMethod method = cc.getDeclaredMethod("close", null);
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + "); }");
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + "); }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -69,12 +68,12 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier {
|
||||
|
||||
if (constructorList.length == 1) {
|
||||
CtConstructor constructor = constructorList[0];
|
||||
constructor.insertAfter("{" + DatabaseRequestTracer.FQCN + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }");
|
||||
constructor.insertAfter("{" + DatabaseRequestTracer.FQCN + ".putSqlQuery(" + ProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }");
|
||||
}
|
||||
}
|
||||
|
||||
private void updateExecuteQueryMethod(CtClass cc) throws Exception {
|
||||
CtMethod serviceMethod = cc.getDeclaredMethod("execute", null);
|
||||
serviceMethod.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }");
|
||||
serviceMethod.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
@@ -55,8 +54,8 @@ public class MSSQLStatementModifier extends AbstractModifier {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("{");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + ProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
|
||||
sb.append("}");
|
||||
|
||||
serviceMethod.insertAfter(sb.toString());
|
||||
|
||||
@@ -1,27 +1,26 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.InstrumentClass;
|
||||
import com.profiler.interceptor.bci.InstrumentException;
|
||||
import com.profiler.interceptor.bci.NotFoundInstrumentException;
|
||||
import com.profiler.modifier.db.interceptor.PreparedStatementExecuteQueryInterceptor;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.modifier.db.interceptor.PreparedStatementBindVariableInterceptor;
|
||||
import com.profiler.modifier.db.interceptor.PreparedStatementExecuteQueryInterceptor;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import com.profiler.util.ExcludeBindVariableFilter;
|
||||
import com.profiler.util.JavaAssistUtils;
|
||||
import com.profiler.util.PreparedStatementUtils;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.InstrumentClass;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MySQLPreparedStatementModifier extends AbstractModifier {
|
||||
private final Logger logger = Logger.getLogger(MySQLPreparedStatementModifier.class.getName());
|
||||
@@ -109,7 +108,7 @@ public class MySQLPreparedStatementModifier extends AbstractModifier {
|
||||
for (CtConstructor constructor : constructorList) {
|
||||
CtClass params[] = constructor.getParameterTypes();
|
||||
if (params.length == 3) {
|
||||
constructor.insertBefore("{" + DatabaseRequestTracer.FQCN + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }");
|
||||
constructor.insertBefore("{" + DatabaseRequestTracer.FQCN + ".putSqlQuery(" + ProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -78,13 +76,13 @@ public class OraclePreparedStatementModifier extends AbstractModifier {
|
||||
for (CtConstructor constructor : constructorList) {
|
||||
CtClass params[] = constructor.getParameterTypes();
|
||||
if (params.length == 6) {
|
||||
constructor.insertBefore("{" + DatabaseRequestTracer.FQCN + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }");
|
||||
constructor.insertBefore("{" + DatabaseRequestTracer.FQCN + ".putSqlQuery(" + ProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateExecuteMethod(CtClass cc) throws Exception {
|
||||
CtMethod method = cc.getDeclaredMethod("execute", null);
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }");
|
||||
method.insertAfter("{" + DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
@@ -56,8 +55,8 @@ public class OracleStatementModifier extends AbstractModifier {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("{");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".putSqlQuery(" + ProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
|
||||
sb.append(DatabaseRequestTracer.FQCN + ".put(" + ProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
|
||||
sb.append("}");
|
||||
|
||||
serviceMethod.insertAfter(sb.toString());
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
package com.profiler.modifier.tomcat;
|
||||
|
||||
import static com.profiler.config.TomcatProfilerConstant.CLASS_NAME_REQUEST_THRIFT_DTO;
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.InstrumentClass;
|
||||
import com.profiler.interceptor.bci.InstrumentException;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.RequestTracer;
|
||||
import javassist.ByteArrayClassPath;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.interceptor.bci.InstrumentException;
|
||||
import javassist.*;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.InstrumentClass;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.RequestTracer;
|
||||
|
||||
/**
|
||||
* Modify org.apache.catalina.core.StandardHostValve class
|
||||
*
|
||||
@@ -57,7 +55,7 @@ public class StandardHostValveInvokeInterceptor extends AbstractModifier {
|
||||
try {
|
||||
// TODO 이제 인터셉터에서 아래 클래스를 직접적으로 접근하는 일이 없으므로 없어도 될것 같음.
|
||||
classLoader.loadClass(RequestTracer.FQCN);
|
||||
classLoader.loadClass(CLASS_NAME_REQUEST_THRIFT_DTO);
|
||||
classLoader.loadClass(ProfilerConstant.CLASS_NAME_REQUEST_THRIFT_DTO);
|
||||
// thrift에 대한 lib를 별도 가지고 있을려면 system및의 별도 classloader를 가지고 있어야 되는게 아닌지?
|
||||
classLoader.loadClass("org.apache.thrift.TBase");
|
||||
} catch (Exception e) {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.profiler.receiver;
|
||||
|
||||
import com.profiler.config.ProfilerConfig;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
import com.profiler.config.TomcatProfilerConfig;
|
||||
|
||||
public class TCPSocketManager extends Thread {
|
||||
ServerSocket serverSocket = null;
|
||||
|
||||
@@ -14,7 +14,7 @@ public class TCPSocketManager extends Thread {
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
serverSocket = new ServerSocket(TomcatProfilerConfig.AGENT_TCP_LISTEN_PORT, 100);
|
||||
serverSocket = new ServerSocket(ProfilerConfig.AGENT_TCP_LISTEN_PORT, 100);
|
||||
System.out.println("*** Start TomcatProfiler TCP Listen Thread ***");
|
||||
while (true) {
|
||||
Socket socket = serverSocket.accept();
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.profiler.sender;
|
||||
|
||||
import com.profiler.Agent;
|
||||
import com.profiler.common.dto.AgentInfoDTO;
|
||||
import com.profiler.config.ProfilerConfig;
|
||||
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.net.Socket;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.Agent;
|
||||
import com.profiler.common.dto.AgentInfoDTO;
|
||||
import com.profiler.config.TomcatProfilerConfig;
|
||||
|
||||
@Deprecated
|
||||
public class AgentInfoSender extends Thread {
|
||||
|
||||
@@ -66,7 +66,7 @@ public class AgentInfoSender extends Thread {
|
||||
private void sendAgentStartInfo() {
|
||||
while (connectToServer()) {
|
||||
try {
|
||||
Thread.sleep(TomcatProfilerConfig.SERVER_CONNECT_RETRY_GAP);
|
||||
Thread.sleep(ProfilerConfig.SERVER_CONNECT_RETRY_GAP);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -101,25 +101,25 @@ public class AgentInfoSender extends Thread {
|
||||
private boolean connectToServer() {
|
||||
try {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Trying to connect server. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT);
|
||||
logger.info("Trying to connect server. " + ProfilerConfig.SERVER_IP + ":" + ProfilerConfig.SERVER_TCP_LISTEN_PORT);
|
||||
}
|
||||
requestSocket = new Socket(TomcatProfilerConfig.SERVER_IP, TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT);
|
||||
requestSocket = new Socket(ProfilerConfig.SERVER_IP, ProfilerConfig.SERVER_TCP_LISTEN_PORT);
|
||||
// TODO timeout 처리가 없음. api를 변경해야 될듯.
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Connected to server. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT);
|
||||
logger.info("Connected to server. " + ProfilerConfig.SERVER_IP + ":" + ProfilerConfig.SERVER_TCP_LISTEN_PORT);
|
||||
}
|
||||
|
||||
return false;
|
||||
} catch (java.net.ConnectException ce) {
|
||||
|
||||
if (logger.isLoggable(Level.SEVERE)) {
|
||||
logger.log(Level.SEVERE, "Connect to TomcatProfiler server is failed. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT, ce);
|
||||
logger.log(Level.SEVERE, "Connect to TomcatProfiler server is failed. " + ProfilerConfig.SERVER_IP + ":" + ProfilerConfig.SERVER_TCP_LISTEN_PORT, ce);
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
if (logger.isLoggable(Level.SEVERE)) {
|
||||
logger.log(Level.SEVERE, "Connect to TomcatProfiler server is failed. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT, e);
|
||||
logger.log(Level.SEVERE, "Connect to TomcatProfiler server is failed. " + ProfilerConfig.SERVER_IP + ":" + ProfilerConfig.SERVER_TCP_LISTEN_PORT, e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
package com.profiler.sender;
|
||||
|
||||
import com.profiler.common.dto.Header;
|
||||
import com.profiler.common.util.DefaultTBaseLocator;
|
||||
import com.profiler.common.util.HeaderTBaseSerializer;
|
||||
import com.profiler.common.util.TBaseLocator;
|
||||
import com.profiler.config.ProfilerConfig;
|
||||
import org.apache.thrift.TBase;
|
||||
import org.apache.thrift.TException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
@@ -10,15 +18,6 @@ import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.thrift.TBase;
|
||||
import org.apache.thrift.TException;
|
||||
|
||||
import com.profiler.common.dto.Header;
|
||||
import com.profiler.common.util.DefaultTBaseLocator;
|
||||
import com.profiler.common.util.HeaderTBaseSerializer;
|
||||
import com.profiler.common.util.TBaseLocator;
|
||||
import com.profiler.config.TomcatProfilerConfig;
|
||||
|
||||
/**
|
||||
* @author netspider
|
||||
*/
|
||||
@@ -28,7 +27,7 @@ public class DataSender extends Thread {
|
||||
|
||||
private final LinkedBlockingQueue<TBase<?, ?>> addedQueue = new LinkedBlockingQueue<TBase<?, ?>>(4096);
|
||||
|
||||
private final InetSocketAddress serverAddress = new InetSocketAddress(TomcatProfilerConfig.SERVER_IP, TomcatProfilerConfig.DEFUALT_PORT);
|
||||
private final InetSocketAddress serverAddress = new InetSocketAddress(ProfilerConfig.SERVER_IP, ProfilerConfig.SERVER_UDP_PORT);
|
||||
|
||||
private DatagramSocket udpSocket = null;
|
||||
private TBaseLocator locator = new DefaultTBaseLocator();
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
package com.profiler.trace;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
|
||||
import com.profiler.Agent;
|
||||
import com.profiler.common.dto.thrift.RequestDataListThriftDTO;
|
||||
import com.profiler.common.dto.thrift.RequestDataThriftDTO;
|
||||
import com.profiler.config.TomcatProfilerConfig;
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.config.ProfilerConfig;
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.util.NamedThreadLocal;
|
||||
import com.profiler.util.QueryStringUtil;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
|
||||
public class DatabaseRequestTracer {
|
||||
|
||||
public static final String FQCN = DatabaseRequestTracer.class.getName();
|
||||
@@ -26,7 +21,7 @@ public class DatabaseRequestTracer {
|
||||
|
||||
private static Set<Integer> sqlSet = null;
|
||||
static {
|
||||
if (TomcatProfilerConfig.QUERY_COUNT_OVER_10000) {
|
||||
if (ProfilerConfig.QUERY_COUNT_OVER_10000) {
|
||||
sqlSet = new CopyOnWriteArraySet<Integer>();
|
||||
} else {
|
||||
sqlSet = new HashSet<Integer>(1024);
|
||||
@@ -148,7 +143,7 @@ public class DatabaseRequestTracer {
|
||||
* @return
|
||||
*/
|
||||
private static boolean checkHashCode(int dataHashCode) {
|
||||
if (TomcatProfilerConfig.QUERY_COUNT_OVER_10000) {
|
||||
if (ProfilerConfig.QUERY_COUNT_OVER_10000) {
|
||||
// If sqlSet is CopyOnWriteArraySet, it removes data.
|
||||
if (sqlSet.size() > 10000) {
|
||||
Iterator<Integer> iterator = sqlSet.iterator();
|
||||
@@ -180,7 +175,7 @@ public class DatabaseRequestTracer {
|
||||
params.append(map.get(loop)).append(",");
|
||||
}
|
||||
|
||||
RequestDataThriftDTO dataDto = new RequestDataThriftDTO(TomcatProfilerConstant.REQ_DATA_TYPE_DB_PREPARED_STATEMENT_PARAM, System.currentTimeMillis());
|
||||
RequestDataThriftDTO dataDto = new RequestDataThriftDTO(ProfilerConstant.REQ_DATA_TYPE_DB_PREPARED_STATEMENT_PARAM, System.currentTimeMillis());
|
||||
dataDto.setDataString(params.toString());
|
||||
list.add(dataDto);
|
||||
}
|
||||
@@ -304,8 +299,8 @@ public class DatabaseRequestTracer {
|
||||
List<RequestDataThriftDTO> list = dto.getRequestDataList();
|
||||
int listSize = list.size();
|
||||
RequestDataThriftDTO previousDTO = list.get(listSize - 1);
|
||||
if (previousDTO.getDataType() != TomcatProfilerConstant.REQ_DATA_TYPE_DB_FETCH) {
|
||||
RequestDataThriftDTO dataDto = new RequestDataThriftDTO(TomcatProfilerConstant.REQ_DATA_TYPE_DB_FETCH, System.currentTimeMillis());
|
||||
if (previousDTO.getDataType() != ProfilerConstant.REQ_DATA_TYPE_DB_FETCH) {
|
||||
RequestDataThriftDTO dataDto = new RequestDataThriftDTO(ProfilerConstant.REQ_DATA_TYPE_DB_FETCH, System.currentTimeMillis());
|
||||
dataDto.setExtraInt1(fetchCount);
|
||||
dataDto.setExtraInt2(totalFetchCount);
|
||||
list.add(dataDto);
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package com.profiler.trace;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.profiler.Agent;
|
||||
import com.profiler.common.dto.thrift.RequestDataListThriftDTO;
|
||||
import com.profiler.common.dto.thrift.RequestThriftDTO;
|
||||
import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.config.ProfilerConstant;
|
||||
import com.profiler.sender.DataSender;
|
||||
import com.profiler.util.SystemUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class RequestTracer {
|
||||
|
||||
public static final String FQCN = RequestTracer.class.getName();
|
||||
@@ -29,7 +29,7 @@ public class RequestTracer {
|
||||
currentRequestHash.set(tempRequestHashCode);
|
||||
requestSet.add(tempRequestID);
|
||||
|
||||
RequestThriftDTO dto = new RequestThriftDTO(Agent.getInstance().getAgentId(), tempRequestHashCode, TomcatProfilerConstant.DATA_TYPE_REQUEST, requestTime, cpuUserTime[0], cpuUserTime[1]);
|
||||
RequestThriftDTO dto = new RequestThriftDTO(Agent.getInstance().getAgentId(), tempRequestHashCode, ProfilerConstant.DATA_TYPE_REQUEST, requestTime, cpuUserTime[0], cpuUserTime[1]);
|
||||
dto.setClientIP(clientIP);
|
||||
dto.setRequestURL(requestURL);
|
||||
|
||||
@@ -47,7 +47,7 @@ public class RequestTracer {
|
||||
*/
|
||||
public static void endTransaction() {
|
||||
long cpuUserTime[] = SystemUtils.getThreadTime();
|
||||
RequestThriftDTO dto = new RequestThriftDTO(Agent.getInstance().getAgentId(), currentRequestHash.get(), TomcatProfilerConstant.DATA_TYPE_RESPONSE, System.currentTimeMillis(), cpuUserTime[0], cpuUserTime[1]);
|
||||
RequestThriftDTO dto = new RequestThriftDTO(Agent.getInstance().getAgentId(), currentRequestHash.get(), ProfilerConstant.DATA_TYPE_RESPONSE, System.currentTimeMillis(), cpuUserTime[0], cpuUserTime[1]);
|
||||
|
||||
finishTransaction(dto);
|
||||
}
|
||||
@@ -60,7 +60,7 @@ public class RequestTracer {
|
||||
public static void exceptionTransaction(Throwable throwable) {
|
||||
long cpuUserTime[] = SystemUtils.getThreadTime();
|
||||
|
||||
RequestThriftDTO dto = new RequestThriftDTO(Agent.getInstance().getAgentId(), currentRequestHash.get(), TomcatProfilerConstant.DATA_TYPE_UNCAUGHT_EXCEPTION, System.currentTimeMillis(), cpuUserTime[0], cpuUserTime[1]);
|
||||
RequestThriftDTO dto = new RequestThriftDTO(Agent.getInstance().getAgentId(), currentRequestHash.get(), ProfilerConstant.DATA_TYPE_UNCAUGHT_EXCEPTION, System.currentTimeMillis(), cpuUserTime[0], cpuUserTime[1]);
|
||||
|
||||
dto.setExtraData1(throwable.getMessage());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user