[강운덕] [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:
Woonduk Kang
2012-09-27 07:40:01 +00:00
parent 0e106a93b6
commit e3052bcb35
24 changed files with 450 additions and 403 deletions
@@ -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
+28 -22
View File
@@ -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;
}
}
@@ -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());