[유치수] [NOBTS] refactoring

git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@461 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
Chisu Yu
2012-07-06 09:58:04 +00:00
parent 74126a7f7c
commit 727b2f91a3
34 changed files with 5519 additions and 5184 deletions
-78
View File
@@ -1,78 +0,0 @@
package com.profiler;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.profiler.config.TomcatProfilerConfig;
public abstract class Logger {
protected final String name;
protected final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
public Logger(String name) {
this.name = name;
}
public enum LogLevel {
INFO(0), DEBUG(1), WARN(2), ERROR(3), FATAL(4);
private int priority;
LogLevel(int priority) {
this.priority = priority;
}
}
public static Logger getLogger(Class<?> clazz) {
return new Logger(clazz.getName()) {
@Override
public void info(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.INFO.priority) {
System.out.printf("[HIPPO] %s [INFO] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void debug(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.DEBUG.priority) {
System.out.printf("[HIPPO] %s [DEBUG] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void warn(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.WARN.priority) {
System.out.printf("[HIPPO] %s [WARN] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void error(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.ERROR.priority) {
System.out.printf("[HIPPO] %s [ERROR] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void fatal(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.FATAL.priority) {
System.out.printf("[HIPPO] %s [FATAL] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
};
}
public abstract void info(String message, Object... args);
public abstract void debug(String message, Object... args);
public abstract void warn(String message, Object... args);
public abstract void error(String message, Object... args);
public abstract void fatal(String message, Object... args);
}
@@ -11,6 +11,7 @@ import javassist.ClassPool;
import javassist.NotFoundException;
import com.profiler.config.TomcatProfilerConfig;
import com.profiler.logging.Logger;
import com.profiler.modifier.db.cubrid.CubridPreparedStatementModifier;
import com.profiler.modifier.db.cubrid.CubridResultSetModifier;
import com.profiler.modifier.db.cubrid.CubridStatementModifier;
@@ -109,7 +110,6 @@ public class TomcatProfiler implements ClassFileTransformer {
if (result != null)
return result;
}
} else if (className.startsWith("net/sourceforge/jtds/jdbc")) {
// MSSQL !!!!!!!!!!
String javassistClassName = className.replace('/', '.');
@@ -201,13 +201,6 @@ public class TomcatProfiler implements ClassFileTransformer {
}
}
}
// else if(className.startsWith("java/sql")) {
// String javassistClassName = className.replace('/', '.');
// System.out.println("***** Changing "+javassistClassName);
// byte[] result=AbstractModifier.addBeforeAfterLogics(classPool,
// javassistClassName);
// if(result!=null) return result;
// }
return null;
}
@@ -4,8 +4,8 @@ import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Properties;
import com.profiler.Logger;
import com.profiler.Logger.LogLevel;
import com.profiler.logging.LogLevel;
import com.profiler.logging.Logger;
public class TomcatProfilerConfig {
@@ -4,39 +4,38 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class TomcatProfilerConstant {
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;
// public static final String ID_ACTIVE_THREAD_COUNT="ATC";
// public static final String ID_HOST_INFO="HI";
// public static final String ID_GC_STAT="GS";
// public static final String ID_HEAP_MEMORY_USAGE_STAT="HMU";
// public static final String ID_NON_HEAP_MEMORY_USAGE_STAT="NHMU";
public static final int DATA_TYPE_REQUEST=1;
public static final int DATA_TYPE_RESPONSE=2;
public static final int DATA_TYPE_UNCAUGHT_EXCEPTION=11;
// public static final int DATA_TYPE_HOST_INFO=1000;
// public static final int DATA_TYPE_ACTIVE_THREAD_COUNT=1100;
// public static final int DATA_TYPE_GC_STAT=1500;
// public static final int DATA_TYPE_HEAP_MEMORY_STAT=1510;
// public static final int DATA_TYPE_NON_HEAP_MEMORY_STAT=1520;
public static final String CLASS_NAME_REQUEST_TRACER="com.profiler.trace.RequestTransactionTracer";
public static final String CLASS_NAME_REQUEST_THRIFT_DTO="com.profiler.dto.RequestThriftDTO";
public static final String CLASS_NAME_REQUEST_DATA_TRACER="com.profiler.trace.RequestDataTracer";
public static final String CLASS_NAME_AGENT_STATE_MANAGER="com.profiler.thread.AgentStateManager";
public static final int REQ_DATA_TYPE_DB_GET_CONNECTION=1;
public static final int REQ_DATA_TYPE_DB_CREATE_STATEMENT=11;
public static final int REQ_DATA_TYPE_DB_GET_PREPARED_STATEMENT=12;
public static final int REQ_DATA_TYPE_DB_QUERY=21;
public static final int REQ_DATA_TYPE_DB_EXECUTE_QUERY=31;
public static final int REQ_DATA_TYPE_DB_EXECUTE_UPDATE=32;
public static final int REQ_DATA_TYPE_DB_FETCH=41;
public static final int REQ_DATA_TYPE_DB_RESULTSET_CLOSE=42;
public static final int REQ_DATA_TYPE_DB_PREPARED_STATEMENT_PARAM=51;
public static final int REQ_DATA_TYPE_DB_CLOSE_CONNECTION=99;
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;
// public static final String ID_ACTIVE_THREAD_COUNT="ATC";
// public static final String ID_HOST_INFO="HI";
// public static final String ID_GC_STAT="GS";
// public static final String ID_HEAP_MEMORY_USAGE_STAT="HMU";
// public static final String ID_NON_HEAP_MEMORY_USAGE_STAT="NHMU";
public static final int DATA_TYPE_REQUEST = 1;
public static final int DATA_TYPE_RESPONSE = 2;
public static final int DATA_TYPE_UNCAUGHT_EXCEPTION = 11;
// public static final int DATA_TYPE_HOST_INFO=1000;
// public static final int DATA_TYPE_ACTIVE_THREAD_COUNT=1100;
// public static final int DATA_TYPE_GC_STAT=1500;
// public static final int DATA_TYPE_HEAP_MEMORY_STAT=1510;
// public static final int DATA_TYPE_NON_HEAP_MEMORY_STAT=1520;
public static final String CLASS_NAME_REQUEST_TRACER = "com.profiler.trace.RequestTransactionTracer";
public static final String CLASS_NAME_REQUEST_THRIFT_DTO = "com.profiler.dto.RequestThriftDTO";
public static final String CLASS_NAME_REQUEST_DATA_TRACER = "com.profiler.trace.RequestDataTracer";
public static final String CLASS_NAME_AGENT_STATE_MANAGER = "com.profiler.thread.AgentStateManager";
public static final int REQ_DATA_TYPE_DB_GET_CONNECTION = 1;
public static final int REQ_DATA_TYPE_DB_CREATE_STATEMENT = 11;
public static final int REQ_DATA_TYPE_DB_GET_PREPARED_STATEMENT = 12;
public static final int REQ_DATA_TYPE_DB_QUERY = 21;
public static final int REQ_DATA_TYPE_DB_EXECUTE_QUERY = 31;
public static final int REQ_DATA_TYPE_DB_EXECUTE_UPDATE = 32;
public static final int REQ_DATA_TYPE_DB_FETCH = 41;
public static final int REQ_DATA_TYPE_DB_RESULTSET_CLOSE = 42;
public static final int REQ_DATA_TYPE_DB_PREPARED_STATEMENT_PARAM = 51;
public static final int REQ_DATA_TYPE_DB_CLOSE_CONNECTION = 99;
}
@@ -23,24 +23,23 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("JVMInfoThriftDTO");
private static final org.apache.thrift.protocol.TField AGENT_HASH_CODE_FIELD_DESC = new org.apache.thrift.protocol.TField("agentHashCode", org.apache.thrift.protocol.TType.I32, (short)1);
private static final org.apache.thrift.protocol.TField DATA_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("dataTime", org.apache.thrift.protocol.TType.I64, (short)2);
private static final org.apache.thrift.protocol.TField ACTIVE_THREAD_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("activeThreadCount", org.apache.thrift.protocol.TType.I32, (short)3);
private static final org.apache.thrift.protocol.TField GC1_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("gc1Count", org.apache.thrift.protocol.TType.I64, (short)4);
private static final org.apache.thrift.protocol.TField GC1_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("gc1Time", org.apache.thrift.protocol.TType.I64, (short)5);
private static final org.apache.thrift.protocol.TField GC2_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("gc2Count", org.apache.thrift.protocol.TType.I64, (short)6);
private static final org.apache.thrift.protocol.TField GC2_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("gc2Time", org.apache.thrift.protocol.TType.I64, (short)7);
private static final org.apache.thrift.protocol.TField HEAP_USED_FIELD_DESC = new org.apache.thrift.protocol.TField("heapUsed", org.apache.thrift.protocol.TType.I64, (short)8);
private static final org.apache.thrift.protocol.TField HEAP_COMMITTED_FIELD_DESC = new org.apache.thrift.protocol.TField("heapCommitted", org.apache.thrift.protocol.TType.I64, (short)9);
private static final org.apache.thrift.protocol.TField NON_HEAP_USED_FIELD_DESC = new org.apache.thrift.protocol.TField("nonHeapUsed", org.apache.thrift.protocol.TType.I64, (short)10);
private static final org.apache.thrift.protocol.TField NON_HEAP_COMMITTED_FIELD_DESC = new org.apache.thrift.protocol.TField("nonHeapCommitted", org.apache.thrift.protocol.TType.I64, (short)11);
private static final org.apache.thrift.protocol.TField PROCESS_CPUTIME_FIELD_DESC = new org.apache.thrift.protocol.TField("processCPUTime", org.apache.thrift.protocol.TType.DOUBLE, (short)12);
private static final org.apache.thrift.protocol.TField AGENT_HASH_CODE_FIELD_DESC = new org.apache.thrift.protocol.TField("agentHashCode", org.apache.thrift.protocol.TType.I32, (short) 1);
private static final org.apache.thrift.protocol.TField DATA_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("dataTime", org.apache.thrift.protocol.TType.I64, (short) 2);
private static final org.apache.thrift.protocol.TField ACTIVE_THREAD_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("activeThreadCount", org.apache.thrift.protocol.TType.I32, (short) 3);
private static final org.apache.thrift.protocol.TField GC1_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("gc1Count", org.apache.thrift.protocol.TType.I64, (short) 4);
private static final org.apache.thrift.protocol.TField GC1_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("gc1Time", org.apache.thrift.protocol.TType.I64, (short) 5);
private static final org.apache.thrift.protocol.TField GC2_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("gc2Count", org.apache.thrift.protocol.TType.I64, (short) 6);
private static final org.apache.thrift.protocol.TField GC2_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("gc2Time", org.apache.thrift.protocol.TType.I64, (short) 7);
private static final org.apache.thrift.protocol.TField HEAP_USED_FIELD_DESC = new org.apache.thrift.protocol.TField("heapUsed", org.apache.thrift.protocol.TType.I64, (short) 8);
private static final org.apache.thrift.protocol.TField HEAP_COMMITTED_FIELD_DESC = new org.apache.thrift.protocol.TField("heapCommitted", org.apache.thrift.protocol.TType.I64, (short) 9);
private static final org.apache.thrift.protocol.TField NON_HEAP_USED_FIELD_DESC = new org.apache.thrift.protocol.TField("nonHeapUsed", org.apache.thrift.protocol.TType.I64, (short) 10);
private static final org.apache.thrift.protocol.TField NON_HEAP_COMMITTED_FIELD_DESC = new org.apache.thrift.protocol.TField("nonHeapCommitted", org.apache.thrift.protocol.TType.I64, (short) 11);
private static final org.apache.thrift.protocol.TField PROCESS_CPUTIME_FIELD_DESC = new org.apache.thrift.protocol.TField("processCPUTime", org.apache.thrift.protocol.TType.DOUBLE, (short) 12);
private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
schemes.put(StandardScheme.class,
new JVMInfoThriftDTOStandardSchemeFactory());
static {
schemes.put(StandardScheme.class, new JVMInfoThriftDTOStandardSchemeFactory());
schemes.put(TupleScheme.class, new JVMInfoThriftDTOTupleSchemeFactory());
}
@@ -62,14 +61,8 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
* for finding and manipulating them.
*/
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
AGENT_HASH_CODE((short) 1, "agentHashCode"), DATA_TIME((short) 2,
"dataTime"), ACTIVE_THREAD_COUNT((short) 3, "activeThreadCount"), GC1_COUNT(
(short) 4, "gc1Count"), GC1_TIME((short) 5, "gc1Time"), GC2_COUNT(
(short) 6, "gc2Count"), GC2_TIME((short) 7, "gc2Time"), HEAP_USED(
(short) 8, "heapUsed"), HEAP_COMMITTED((short) 9,
"heapCommitted"), NON_HEAP_USED((short) 10, "nonHeapUsed"), NON_HEAP_COMMITTED(
(short) 11, "nonHeapCommitted"), PROCESS_CPUTIME((short) 12,
"processCPUTime");
AGENT_HASH_CODE((short) 1, "agentHashCode"), DATA_TIME((short) 2, "dataTime"), ACTIVE_THREAD_COUNT((short) 3, "activeThreadCount"), GC1_COUNT((short) 4, "gc1Count"), GC1_TIME((short) 5, "gc1Time"), GC2_COUNT((short) 6, "gc2Count"), GC2_TIME((short) 7, "gc2Time"), HEAP_USED((short) 8,
"heapUsed"), HEAP_COMMITTED((short) 9, "heapCommitted"), NON_HEAP_USED((short) 10, "nonHeapUsed"), NON_HEAP_COMMITTED((short) 11, "nonHeapCommitted"), PROCESS_CPUTIME((short) 12, "processCPUTime");
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
@@ -121,8 +114,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
public static _Fields findByThriftIdOrThrow(int fieldId) {
_Fields fields = findByThriftId(fieldId);
if (fields == null)
throw new IllegalArgumentException("Field " + fieldId
+ " doesn't exist!");
throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
return fields;
}
@@ -165,85 +157,30 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
private static final int __NONHEAPCOMMITTED_ISSET_ID = 10;
private static final int __PROCESSCPUTIME_ISSET_ID = 11;
private BitSet __isset_bit_vector = new BitSet(12);
private _Fields optionals[] = { _Fields.GC1_COUNT, _Fields.GC1_TIME,
_Fields.GC2_COUNT, _Fields.GC2_TIME, _Fields.PROCESS_CPUTIME };
private _Fields optionals[] = { _Fields.GC1_COUNT, _Fields.GC1_TIME, _Fields.GC2_COUNT, _Fields.GC2_TIME, _Fields.PROCESS_CPUTIME };
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(
_Fields.class);
tmpMap.put(_Fields.AGENT_HASH_CODE,
new org.apache.thrift.meta_data.FieldMetaData("agentHashCode",
org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.DATA_TIME,
new org.apache.thrift.meta_data.FieldMetaData("dataTime",
org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.ACTIVE_THREAD_COUNT,
new org.apache.thrift.meta_data.FieldMetaData(
"activeThreadCount",
org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.GC1_COUNT,
new org.apache.thrift.meta_data.FieldMetaData("gc1Count",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.GC1_TIME,
new org.apache.thrift.meta_data.FieldMetaData("gc1Time",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.GC2_COUNT,
new org.apache.thrift.meta_data.FieldMetaData("gc2Count",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.GC2_TIME,
new org.apache.thrift.meta_data.FieldMetaData("gc2Time",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.HEAP_USED,
new org.apache.thrift.meta_data.FieldMetaData("heapUsed",
org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.HEAP_COMMITTED,
new org.apache.thrift.meta_data.FieldMetaData("heapCommitted",
org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.NON_HEAP_USED,
new org.apache.thrift.meta_data.FieldMetaData("nonHeapUsed",
org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.NON_HEAP_COMMITTED,
new org.apache.thrift.meta_data.FieldMetaData(
"nonHeapCommitted",
org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.PROCESS_CPUTIME,
new org.apache.thrift.meta_data.FieldMetaData("processCPUTime",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(
org.apache.thrift.protocol.TType.DOUBLE)));
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.AGENT_HASH_CODE, new org.apache.thrift.meta_data.FieldMetaData("agentHashCode", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.DATA_TIME, new org.apache.thrift.meta_data.FieldMetaData("dataTime", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.ACTIVE_THREAD_COUNT, new org.apache.thrift.meta_data.FieldMetaData("activeThreadCount", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.GC1_COUNT, new org.apache.thrift.meta_data.FieldMetaData("gc1Count", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.GC1_TIME, new org.apache.thrift.meta_data.FieldMetaData("gc1Time", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.GC2_COUNT, new org.apache.thrift.meta_data.FieldMetaData("gc2Count", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.GC2_TIME, new org.apache.thrift.meta_data.FieldMetaData("gc2Time", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.HEAP_USED, new org.apache.thrift.meta_data.FieldMetaData("heapUsed", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.HEAP_COMMITTED, new org.apache.thrift.meta_data.FieldMetaData("heapCommitted", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.NON_HEAP_USED, new org.apache.thrift.meta_data.FieldMetaData("nonHeapUsed", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.NON_HEAP_COMMITTED, new org.apache.thrift.meta_data.FieldMetaData("nonHeapCommitted", org.apache.thrift.TFieldRequirementType.DEFAULT, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
tmpMap.put(_Fields.PROCESS_CPUTIME, new org.apache.thrift.meta_data.FieldMetaData("processCPUTime", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(
JVMInfoThriftDTO.class, metaDataMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(JVMInfoThriftDTO.class, metaDataMap);
}
public JVMInfoThriftDTO() {
}
public JVMInfoThriftDTO(int agentHashCode, long dataTime,
int activeThreadCount, long heapUsed, long heapCommitted,
long nonHeapUsed, long nonHeapCommitted) {
public JVMInfoThriftDTO(int agentHashCode, long dataTime, int activeThreadCount, long heapUsed, long heapCommitted, long nonHeapUsed, long nonHeapCommitted) {
this();
this.agentHashCode = agentHashCode;
setAgentHashCodeIsSet(true);
@@ -918,10 +855,8 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
return false;
}
boolean this_present_processCPUTime = true && this
.isSetProcessCPUTime();
boolean that_present_processCPUTime = true && that
.isSetProcessCPUTime();
boolean this_present_processCPUTime = true && this.isSetProcessCPUTime();
boolean that_present_processCPUTime = true && that.isSetProcessCPUTime();
if (this_present_processCPUTime || that_present_processCPUTime) {
if (!(this_present_processCPUTime && that_present_processCPUTime))
return false;
@@ -945,146 +880,122 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
int lastComparison = 0;
JVMInfoThriftDTO typedOther = (JVMInfoThriftDTO) other;
lastComparison = Boolean.valueOf(isSetAgentHashCode()).compareTo(
typedOther.isSetAgentHashCode());
lastComparison = Boolean.valueOf(isSetAgentHashCode()).compareTo(typedOther.isSetAgentHashCode());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetAgentHashCode()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.agentHashCode, typedOther.agentHashCode);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.agentHashCode, typedOther.agentHashCode);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetDataTime()).compareTo(
typedOther.isSetDataTime());
lastComparison = Boolean.valueOf(isSetDataTime()).compareTo(typedOther.isSetDataTime());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetDataTime()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.dataTime, typedOther.dataTime);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.dataTime, typedOther.dataTime);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetActiveThreadCount()).compareTo(
typedOther.isSetActiveThreadCount());
lastComparison = Boolean.valueOf(isSetActiveThreadCount()).compareTo(typedOther.isSetActiveThreadCount());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetActiveThreadCount()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.activeThreadCount, typedOther.activeThreadCount);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.activeThreadCount, typedOther.activeThreadCount);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetGc1Count()).compareTo(
typedOther.isSetGc1Count());
lastComparison = Boolean.valueOf(isSetGc1Count()).compareTo(typedOther.isSetGc1Count());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetGc1Count()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.gc1Count, typedOther.gc1Count);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gc1Count, typedOther.gc1Count);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetGc1Time()).compareTo(
typedOther.isSetGc1Time());
lastComparison = Boolean.valueOf(isSetGc1Time()).compareTo(typedOther.isSetGc1Time());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetGc1Time()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.gc1Time, typedOther.gc1Time);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gc1Time, typedOther.gc1Time);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetGc2Count()).compareTo(
typedOther.isSetGc2Count());
lastComparison = Boolean.valueOf(isSetGc2Count()).compareTo(typedOther.isSetGc2Count());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetGc2Count()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.gc2Count, typedOther.gc2Count);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gc2Count, typedOther.gc2Count);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetGc2Time()).compareTo(
typedOther.isSetGc2Time());
lastComparison = Boolean.valueOf(isSetGc2Time()).compareTo(typedOther.isSetGc2Time());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetGc2Time()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.gc2Time, typedOther.gc2Time);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gc2Time, typedOther.gc2Time);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetHeapUsed()).compareTo(
typedOther.isSetHeapUsed());
lastComparison = Boolean.valueOf(isSetHeapUsed()).compareTo(typedOther.isSetHeapUsed());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetHeapUsed()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.heapUsed, typedOther.heapUsed);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.heapUsed, typedOther.heapUsed);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetHeapCommitted()).compareTo(
typedOther.isSetHeapCommitted());
lastComparison = Boolean.valueOf(isSetHeapCommitted()).compareTo(typedOther.isSetHeapCommitted());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetHeapCommitted()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.heapCommitted, typedOther.heapCommitted);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.heapCommitted, typedOther.heapCommitted);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetNonHeapUsed()).compareTo(
typedOther.isSetNonHeapUsed());
lastComparison = Boolean.valueOf(isSetNonHeapUsed()).compareTo(typedOther.isSetNonHeapUsed());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetNonHeapUsed()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.nonHeapUsed, typedOther.nonHeapUsed);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.nonHeapUsed, typedOther.nonHeapUsed);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetNonHeapCommitted()).compareTo(
typedOther.isSetNonHeapCommitted());
lastComparison = Boolean.valueOf(isSetNonHeapCommitted()).compareTo(typedOther.isSetNonHeapCommitted());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetNonHeapCommitted()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.nonHeapCommitted, typedOther.nonHeapCommitted);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.nonHeapCommitted, typedOther.nonHeapCommitted);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetProcessCPUTime()).compareTo(
typedOther.isSetProcessCPUTime());
lastComparison = Boolean.valueOf(isSetProcessCPUTime()).compareTo(typedOther.isSetProcessCPUTime());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetProcessCPUTime()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(
this.processCPUTime, typedOther.processCPUTime);
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.processCPUTime, typedOther.processCPUTime);
if (lastComparison != 0) {
return lastComparison;
}
@@ -1096,13 +1007,11 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
return _Fields.findByThriftId(fieldId);
}
public void read(org.apache.thrift.protocol.TProtocol iprot)
throws org.apache.thrift.TException {
public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
}
public void write(org.apache.thrift.protocol.TProtocol oprot)
throws org.apache.thrift.TException {
public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
}
@@ -1187,41 +1096,34 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
// check for required fields
}
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException {
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
try {
write(new org.apache.thrift.protocol.TCompactProtocol(
new org.apache.thrift.transport.TIOStreamTransport(out)));
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
}
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException {
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
try {
// it doesn't seem like you should have to do this, but java
// serialization is wacky, and doesn't call the default constructor.
__isset_bit_vector = new BitSet(1);
read(new org.apache.thrift.protocol.TCompactProtocol(
new org.apache.thrift.transport.TIOStreamTransport(in)));
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
}
private static class JVMInfoThriftDTOStandardSchemeFactory implements
SchemeFactory {
private static class JVMInfoThriftDTOStandardSchemeFactory implements SchemeFactory {
public JVMInfoThriftDTOStandardScheme getScheme() {
return new JVMInfoThriftDTOStandardScheme();
}
}
private static class JVMInfoThriftDTOStandardScheme extends
StandardScheme<JVMInfoThriftDTO> {
private static class JVMInfoThriftDTOStandardScheme extends StandardScheme<JVMInfoThriftDTO> {
public void read(org.apache.thrift.protocol.TProtocol iprot,
JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
public void read(org.apache.thrift.protocol.TProtocol iprot, JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TField schemeField;
iprot.readStructBegin();
while (true) {
@@ -1235,8 +1137,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.agentHashCode = iprot.readI32();
struct.setAgentHashCodeIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 2: // DATA_TIME
@@ -1244,8 +1145,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.dataTime = iprot.readI64();
struct.setDataTimeIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 3: // ACTIVE_THREAD_COUNT
@@ -1253,8 +1153,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.activeThreadCount = iprot.readI32();
struct.setActiveThreadCountIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 4: // GC1_COUNT
@@ -1262,8 +1161,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.gc1Count = iprot.readI64();
struct.setGc1CountIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 5: // GC1_TIME
@@ -1271,8 +1169,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.gc1Time = iprot.readI64();
struct.setGc1TimeIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 6: // GC2_COUNT
@@ -1280,8 +1177,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.gc2Count = iprot.readI64();
struct.setGc2CountIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 7: // GC2_TIME
@@ -1289,8 +1185,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.gc2Time = iprot.readI64();
struct.setGc2TimeIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 8: // HEAP_USED
@@ -1298,8 +1193,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.heapUsed = iprot.readI64();
struct.setHeapUsedIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 9: // HEAP_COMMITTED
@@ -1307,8 +1201,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.heapCommitted = iprot.readI64();
struct.setHeapCommittedIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 10: // NON_HEAP_USED
@@ -1316,8 +1209,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.nonHeapUsed = iprot.readI64();
struct.setNonHeapUsedIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 11: // NON_HEAP_COMMITTED
@@ -1325,8 +1217,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.nonHeapCommitted = iprot.readI64();
struct.setNonHeapCommittedIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 12: // PROCESS_CPUTIME
@@ -1334,13 +1225,11 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.processCPUTime = iprot.readDouble();
struct.setProcessCPUTimeIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
iprot.readFieldEnd();
}
@@ -1351,8 +1240,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
struct.validate();
}
public void write(org.apache.thrift.protocol.TProtocol oprot,
JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
public void write(org.apache.thrift.protocol.TProtocol oprot, JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
struct.validate();
oprot.writeStructBegin(STRUCT_DESC);
@@ -1408,19 +1296,16 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
}
private static class JVMInfoThriftDTOTupleSchemeFactory implements
SchemeFactory {
private static class JVMInfoThriftDTOTupleSchemeFactory implements SchemeFactory {
public JVMInfoThriftDTOTupleScheme getScheme() {
return new JVMInfoThriftDTOTupleScheme();
}
}
private static class JVMInfoThriftDTOTupleScheme extends
TupleScheme<JVMInfoThriftDTO> {
private static class JVMInfoThriftDTOTupleScheme extends TupleScheme<JVMInfoThriftDTO> {
@Override
public void write(org.apache.thrift.protocol.TProtocol prot,
JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
public void write(org.apache.thrift.protocol.TProtocol prot, JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
TTupleProtocol oprot = (TTupleProtocol) prot;
BitSet optionals = new BitSet();
if (struct.isSetAgentHashCode()) {
@@ -1499,8 +1384,7 @@ public class JVMInfoThriftDTO implements org.apache.thrift.TBase<JVMInfoThriftDT
}
@Override
public void read(org.apache.thrift.protocol.TProtocol prot,
JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
public void read(org.apache.thrift.protocol.TProtocol prot, JVMInfoThriftDTO struct) throws org.apache.thrift.TException {
TTupleProtocol iprot = (TTupleProtocol) prot;
BitSet incoming = iprot.readBitSet(12);
if (incoming.get(0)) {
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,52 @@
package com.profiler.logging;
import java.util.Date;
import com.profiler.config.TomcatProfilerConfig;
public class DefaultLogger extends Logger {
public DefaultLogger(String name) {
super(name);
}
@Override
public void info(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.INFO.priority) {
System.out.printf("[HIPPO] %s [INFO] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void debug(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.DEBUG.priority) {
System.out.printf("[HIPPO] %s [DEBUG] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void warn(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.WARN.priority) {
System.out.printf("[HIPPO] %s [WARN] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void error(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.ERROR.priority) {
System.out.printf("[HIPPO] %s [ERROR] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public void fatal(String message, Object... args) {
if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.FATAL.priority) {
System.out.printf("[HIPPO] %s [FATAL] [%s] %s \n", df.format(new Date()), name, String.format(message, args));
}
}
@Override
public boolean isDebugEnabled() {
return TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.DEBUG.priority;
}
}
@@ -0,0 +1,11 @@
package com.profiler.logging;
public enum LogLevel {
INFO(0), DEBUG(1), WARN(2), ERROR(3), FATAL(4);
int priority;
LogLevel(int priority) {
this.priority = priority;
}
}
@@ -0,0 +1,31 @@
package com.profiler.logging;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public abstract class Logger {
protected final String name;
protected final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
public Logger(String name) {
this.name = name;
}
public static Logger getLogger(Class<?> clazz) {
return new DefaultLogger(clazz.getName());
}
public abstract void info(String message, Object... args);
public abstract void debug(String message, Object... args);
public abstract void warn(String message, Object... args);
public abstract void error(String message, Object... args);
public abstract void fatal(String message, Object... args);
public abstract boolean isDebugEnabled();
}
@@ -1,86 +1,101 @@
package com.profiler.modifier;
import com.profiler.logging.Logger;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtMethod;
public abstract class AbstractModifier {
private static final Logger logger = Logger.getLogger(AbstractModifier.class);
public static void printClassInfo(String className) {
log("Printing Class Info of [" + className + "]");
logger.debug("Printing Class Info of [" + className + "]");
try {
ClassPool pool = ClassPool.getDefault();
log("try");
logger.debug("try");
String javaassistClassName = className.replace('/', '.');
log("replace");
logger.debug("replace");
CtClass cc = pool.get(javaassistClassName);
log("ClassName:" + javaassistClassName);
logger.debug("ClassName:" + javaassistClassName);
CtConstructor[] constructorList = cc.getConstructors();
for (CtConstructor cons : constructorList) {
try {
String signature = cons.getSignature();
System.out.println("Constructor signature:" + signature);
logger.info("Constructor signature:%s", signature);
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
}
CtMethod[] methodList = cc.getDeclaredMethods();
for (CtMethod tempMethod : methodList) {
try {
String methodName = tempMethod.getLongName();
log("MethodName:" + methodName);
logger.debug("MethodName:" + methodName);
CtClass[] params = tempMethod.getParameterTypes();
if (params.length != 0) {
int paramsLength = params.length;
for (int loop = paramsLength - 1; loop > 0; loop--) {
log("Param" + loop + ":" + params[loop].getName());
logger.debug("Param" + loop + ":" + params[loop].getName());
}
} else {
log(" No params");
logger.debug(" No params");
}
log("ReturnType=" + tempMethod.getReturnType().getName());
logger.debug("ReturnType=" + tempMethod.getReturnType().getName());
} catch (Exception methodException) {
log("Exception : " + methodException.getMessage());
logger.error("Exception : " + methodException.getMessage());
}
}
} catch (Exception e) {
log(e.getMessage());
logger.error(e.getMessage());
e.printStackTrace();
}
}
public static byte[] addBeforeAfterLogics(ClassPool classPool,
String javassistClassName) {
public static byte[] addBeforeAfterLogics(ClassPool classPool, String javassistClassName) {
try {
CtClass cc = classPool.get(javassistClassName);
CtMethod[] methods = cc.getDeclaredMethods();
for (CtMethod method : methods) {
if (!method.isEmpty()) {
String methodName = method.getName();
CtClass[] params = method.getParameterTypes();
StringBuilder sb = new StringBuilder();
if (params.length != 0) {
int paramsLength = params.length;
for (int loop = paramsLength - 1; loop > 0; loop--) {
sb.append(params[loop].getName()).append(",");
}
// sb.substring(0, sb.length()-2);
}
method.insertBefore("{System.out.println(\"*****"
+ javassistClassName + "." + methodName + "(" + sb
+ ") is started.\");}");
method.insertAfter("{System.out.println(\"*****"
+ javassistClassName + "." + methodName + "(" + sb
+ ") is finished.\");}");
method.insertBefore("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is started.\");}");
method.insertAfter("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is finished.\");}");
} else {
log(method.getLongName() + " is empty !!!!!");
logger.warn(method.getLongName() + " is empty !!!!!");
}
}
CtConstructor[] constructors = cc.getConstructors();
for (CtConstructor constructor : constructors) {
if (!constructor.isEmpty()) {
CtClass[] params = constructor.getParameterTypes();
StringBuilder sb = new StringBuilder();
if (params.length != 0) {
int paramsLength = params.length;
for (int loop = paramsLength - 1; loop > 0; loop--) {
@@ -88,28 +103,22 @@ public abstract class AbstractModifier {
}
// sb.substring(0, sb.length()-2);
}
constructor.insertBefore("{System.out.println(\"*****"
+ javassistClassName + " Constructor:Param=(" + sb
+ ") is started.\");}");
constructor.insertAfter("{System.out.println(\"*****"
+ javassistClassName + " Constructor:Param=(" + sb
+ ") is finished.\");}");
constructor.insertBefore("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is started.\");}");
constructor.insertAfter("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is finished.\");}");
} else {
log(constructor.getLongName() + " is empty !!!!!");
logger.warn(constructor.getLongName() + " is empty !!!!!");
}
}
return cc.toBytecode();
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
return null;
}
}
public static void log(String message) {
System.out.println("[AbstractModifier] " + message);
}
public static void printClassConvertComplete(String javassistClassName) {
log("@@@ " + javassistClassName + " class is converted !!!");
logger.info("%s class is converted.", javassistClassName);
}
}
@@ -6,71 +6,81 @@ import javassist.CtConstructor;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class CubridPreparedStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("CubridPreparedStatementModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class CubridPreparedStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(CubridPreparedStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("CubridPreparedStatementModifier modifing");
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateExecuteQueryMethod(classPool,cc);
updateConstructor(classPool,cc);
updateExecuteQueryMethod(classPool, cc);
updateConstructor(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateConstructor(ClassPool classPool,CtClass cc) throws Exception {
CtConstructor []constructorList=cc.getConstructors();
for(CtConstructor constructor:constructorList) {
CtClass params[]=constructor.getParameterTypes();
log("*** Constructor param length="+params.length);
if(params.length>2 ) {
private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception {
CtConstructor[] constructorList = cc.getConstructors();
for (CtConstructor constructor : constructorList) {
CtClass params[] = constructor.getParameterTypes();
logger.info("*** Constructor param length=" + params.length);
if (params.length > 2) {
constructor.insertBefore(getConstructorBeforeInsertCode());
}
}
}
private static String getConstructorBeforeInsertCode() {
log("*** Changing Constructor ");
StringBuilder sb=new StringBuilder();
logger.info("*** Changing Constructor ");
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----CUBRIDPreparedStatement constructor is called\");");
// sb.append("System.out.println(\"-----CUBRIDPreparedStatement constructor is called\");");
sb.append("if($2 instanceof cubrid.jdbc.jci.UStatement) { ");
// sb.append("System.out.println(\"-----Query=[\"+$2.getQuery()+\"]\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$2.getQuery());");
// sb.append("System.out.println(\"-----Query=[\"+$2.getQuery()+\"]\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2.getQuery());");
sb.append("}}");
return sb.toString();
}
private static void updateExecuteQueryMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("execute", null);
log("*** Changing execute() method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("execute", null);
logger.info("*** Changing execute() method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
serviceMethod.insertAfter(getExecuteQueryMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----CUBRIDPreparedStatement.execute() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----CUBRIDPreparedStatement.execute() method is called\");");
// sb.append("}");
return sb.toString();
}
private static String getExecuteQueryMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----CUBRIDPreparedStatement.execute() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
// sb.append("System.out.println(\"-----CUBRIDPreparedStatement.execute() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
@@ -5,54 +5,77 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class CubridResultSetModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("CubridResultSetModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class CubridResultSetModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(CubridResultSetModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("CubridResultSetModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateNextMethod(classPool,cc);
updateCloseMethod(classPool,cc);
updateNextMethod(classPool, cc);
updateCloseMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateNextMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("next", null);
log("*** Changing next() method ");
private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("next", null);
logger.info("Changing next() method ");
serviceMethod1.insertBefore(getNextMethodBeforeInsertCode());
}
private static String getNextMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".updateFetchCount();");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount();");
sb.append("}");
return sb.toString();
}
private static void updateCloseMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("close", null);
log("*** Changing close() method ");
private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("close", null);
logger.info("Changing close() method ");
serviceMethod1.insertBefore(getCloseMethodBeforeInsertCode());
}
private static String getCloseMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".addResultSetData();");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData();");
sb.append("}");
return sb.toString();
}
}
@@ -5,55 +5,69 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class CubridStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("CubridStatementModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class CubridStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(CubridStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("CubridStatementModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateExecuteQueryMethod(classPool,cc);
updateExecuteQueryMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateExecuteQueryMethod(ClassPool classPool,CtClass cc) throws Exception {
CtClass[] params=new CtClass[1];
params[0]=classPool.getCtClass("java.lang.String");
CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", params);
// CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", null);
log("*** Changing executeQuery method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception {
CtClass[] params = new CtClass[1];
params[0] = classPool.getCtClass("java.lang.String");
CtMethod serviceMethod = cc.getDeclaredMethod("executeQuery", params);
logger.info("Changing executeQuery method.");
serviceMethod.insertAfter(getExecuteQueryMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----CUBRIDStatement.executeQuery() method is called\");");
// sb.append("System.out.println(\"-----CUBRIDStatement.executeQuery(String) method is called\");");
// sb.append("System.out.println(\"-----Query=[\"+com.profiler.util.QueryStringUtil.removeCarriageReturn($1)+\"]\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----CUBRIDStatement.executeQuery() method is called\");");
sb.append("System.out.println(\"-----CUBRIDStatement.executeQuery(String) method is called\");");
sb.append("System.out.println(\"-----Query=[\"+com.profiler.util.QueryStringUtil.removeCarriageReturn($1)+\"]\");");
sb.append("}");
}
return sb.toString();
}
private static String getExecuteQueryMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----CUBRIDStatement.executeQuery(String) method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----CUBRIDStatement.executeQuery(String) method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
@@ -5,45 +5,59 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class CubridUStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("CubridUStatementModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class CubridUStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(CubridUStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("CubridUStatementModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateBindValueMethod(classPool,cc);
updateBindValueMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateBindValueMethod(ClassPool classPool,CtClass cc) throws Exception {
CtClass[] params1=new CtClass[3];
params1[0]=classPool.getCtClass("int");
params1[1]=classPool.getCtClass("byte");
params1[2]=classPool.getCtClass("java.lang.Object");
CtMethod serviceMethod1=cc.getDeclaredMethod("bindValue", params1);
log("*** Changing bindValue(int,byte,String) method ");
private static void updateBindValueMethod(ClassPool classPool, CtClass cc) throws Exception {
CtClass[] params1 = new CtClass[3];
params1[0] = classPool.getCtClass("int");
params1[1] = classPool.getCtClass("byte");
params1[2] = classPool.getCtClass("java.lang.Object");
CtMethod serviceMethod1 = cc.getDeclaredMethod("bindValue", params1);
logger.info("Changing bindValue(int, byte, String) method ");
serviceMethod1.insertBefore(getBindValueMethodBeforeInsertCode());
}
private static String getBindValueMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"UStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$3);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlParam($1,$3);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"UStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$3);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$3);");
sb.append("}");
return sb.toString();
}
}
@@ -5,52 +5,69 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class DBCPBasicDataSourceModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("DBCPBasicDataSourceModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class DBCPBasicDataSourceModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(DBCPBasicDataSourceModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("DBCPBasicDataSourceModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateGetConnectionMethod(classPool,cc);
// updateCloseMethod(classPool,cc);
byte[] newClassfileBuffer=null;
newClassfileBuffer= cc.toBytecode();
// cc.writeFile();
updateGetConnectionMethod(classPool, cc);
// updateCloseMethod(classPool,cc);
byte[] newClassfileBuffer = null;
newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateGetConnectionMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("getConnection", null);
log("*** Changing createStatement method ");
// serviceMethod.insertBefore(getGetConnectionMethodBeforeInsertCode());
private static void updateGetConnectionMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("getConnection", null);
logger.info("Changing getConnection method ");
serviceMethod.insertAfter(getGetConnectionMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getGetConnectionMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----BasicDataSource.getConnection() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----BasicDataSource.getConnection() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getGetConnectionMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----BasicDataSource.getConnection() method is ended\");");
// sb.append("System.out.println(\"-----BasicDataSource.getConnection() \"+$0.getClass().getName());");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putConnection("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION+",$0.getUrl());");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----BasicDataSource.getConnection() method is ended\");");
sb.append("System.out.println(\"-----BasicDataSource.getConnection() \"+$0.getClass().getName());");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putConnection(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION + ",$0.getUrl());");
sb.append("}");
return sb.toString();
}
}
@@ -5,70 +5,64 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class DBCPPoolModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("DBCPPoolModifier(PoolingDataSource$PoolGuardConnectionWrapper) modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class DBCPPoolModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(DBCPPoolModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("DBCPPoolModifier(PoolingDataSource$PoolGuardConnectionWrapper) modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
// updateGetConnectionMethod(classPool,cc);
updateCloseMethod(classPool,cc);
/*
CtMethod[] methods=cc.getDeclaredMethods();
for(CtMethod method:methods) {
// System.out.println(method.getLongName());
if(!method.isEmpty() ) {
String methodName=method.getName();
if(methodName.equals("getConnection")) {
// && !methodName.startsWith("version")) {
method.insertBefore("{System.out.println(\"-----DBCP "+method.getLongName()+" is started.\");}");
method.insertAfter("{System.out.println(\"-----DBCP "+method.getLongName()+" is finished.\");}");
System.out.println(method.getLongName());
}
} else {
log(method.getLongName()+" is empty !!!!!");
}
}
*/
byte[] newClassfileBuffer=null;
newClassfileBuffer= cc.toBytecode();
// cc.writeFile();
updateCloseMethod(classPool, cc);
byte[] newClassfileBuffer = null;
newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateCloseMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("close", null);
log("*** Changing close method ");
// serviceMethod.insertBefore(getCloseMethodBeforeInsertCode());
private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("close", null);
logger.info("Changing close method ");
// serviceMethod.insertBefore(getCloseMethodBeforeInsertCode());
serviceMethod.insertAfter(getCloseMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getCloseMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----PoolingDataSource$PoolGuardConnectionWrapper.close() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----PoolingDataSource$PoolGuardConnectionWrapper.close() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getCloseMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----PoolingDataSource$PoolGuardConnectionWrapper.close() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----PoolingDataSource$PoolGuardConnectionWrapper.close() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + ");");
sb.append("}");
return sb.toString();
}
@@ -5,74 +5,103 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MSSQLConnectionModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("MSSQLConnectionModifier modifing");
// printClassInfo(javassistClassName);
return changeMethods(classPool,classLoader,javassistClassName,classFileBuffer);
public class MSSQLConnectionModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MSSQLConnectionModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("MSSQLConnectionModifier modifing. %s", javassistClassName);
return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethods(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethods(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateCreateStatementMethod(classPool,cc);
updateCloseMethod(classPool,cc);
updateCreateStatementMethod(classPool, cc);
updateCloseMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateCreateStatementMethod(ClassPool classPool,CtClass cc) throws Exception {
CtClass[] params=new CtClass[2];
params[0]=classPool.getCtClass("int");
params[1]=classPool.getCtClass("int");
CtMethod serviceMethod=cc.getDeclaredMethod("createStatement", params);
log("*** Changing createStatement method ");
// serviceMethod.insertBefore(getCreateStatementMethodBeforeInsertCode());
private static void updateCreateStatementMethod(ClassPool classPool, CtClass cc) throws Exception {
CtClass[] params = new CtClass[2];
params[0] = classPool.getCtClass("int");
params[1] = classPool.getCtClass("int");
CtMethod serviceMethod = cc.getDeclaredMethod("createStatement", params);
logger.info("Changing createStatement method ");
serviceMethod.insertBefore(getCreateStatementMethodBeforeInsertCode());
serviceMethod.insertAfter(getCreateStatementMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getCreateStatementMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----ConnectionJDBC2.createStatement() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----ConnectionJDBC2.createStatement() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getCreateStatementMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----ConnectionJDBC2.createStatement() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----ConnectionJDBC2.createStatement() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT + ");");
sb.append("}");
return sb.toString();
}
private static void updateCloseMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("close", null);
log("*** Changing close method ");
// serviceMethod.insertBefore(getCloseMethodBeforeInsertCode());
private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("close", null);
logger.info("Changing close method ");
serviceMethod.insertBefore(getCloseMethodBeforeInsertCode());
serviceMethod.insertAfter(getCloseMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getCloseMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----ConnectionJDBC2.close() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----ConnectionJDBC2.close() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getCloseMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----ConnectionJDBC2.close() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----ConnectionJDBC2.close() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + ");");
sb.append("}");
return sb.toString();
}
}
@@ -6,89 +6,121 @@ import javassist.CtConstructor;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MSSQLPreparedStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("MSSQLPreparedStatementModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class MSSQLPreparedStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MSSQLPreparedStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("MSSQLPreparedStatementModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateSetParameterMethod(classPool,cc);
updateExecuteQueryMethod(classPool,cc);
updateConstructor(classPool,cc);
updateSetParameterMethod(classPool, cc);
updateExecuteQueryMethod(classPool, cc);
updateConstructor(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateSetParameterMethod(ClassPool classPool,CtClass cc) throws Exception {
// setParameter(int,java.lang.Object,int,int,int)
CtClass[] params1=new CtClass[5];
params1[0]=classPool.getCtClass("int");
params1[1]=classPool.getCtClass("java.lang.Object");
params1[2]=classPool.getCtClass("int");
params1[3]=classPool.getCtClass("int");
params1[4]=classPool.getCtClass("int");
CtMethod serviceMethod1=cc.getDeclaredMethod("setParameter", params1);
log("*** Changing setParameter(int,Object,int,int,int) method ");
private static void updateSetParameterMethod(ClassPool classPool, CtClass cc) throws Exception {
// setParameter(int,java.lang.Object,int,int,int)
CtClass[] params1 = new CtClass[5];
params1[0] = classPool.getCtClass("int");
params1[1] = classPool.getCtClass("java.lang.Object");
params1[2] = classPool.getCtClass("int");
params1[3] = classPool.getCtClass("int");
params1[4] = classPool.getCtClass("int");
CtMethod serviceMethod1 = cc.getDeclaredMethod("setParameter", params1);
logger.info("Changing setParameter(int,Object,int,int,int) method ");
serviceMethod1.insertBefore(getSetParameterBeforeInsertCode());
}
private static String getSetParameterBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----JtdsPreparedStatement.setParameter(int,String,int,int,int) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlParam($1,$2);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----JtdsPreparedStatement.setParameter(int,String,int,int,int) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$2);");
sb.append("}");
return sb.toString();
}
private static void updateConstructor(ClassPool classPool,CtClass cc) throws Exception {
CtConstructor []constructorList=cc.getConstructors();
if(constructorList.length==1) {
log("*** Changing Constructor ");
CtConstructor constructor=constructorList[0];
private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception {
CtConstructor[] constructorList = cc.getConstructors();
if (constructorList.length == 1) {
logger.info("Changing Constructor ");
CtConstructor constructor = constructorList[0];
constructor.insertAfter(getConstructorAfterInsertCode());
}
}
private static String getConstructorAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----JtdsPreparedStatement's constructor is called\");");
// sb.append("System.out.println(\"-----Query=[\"+com.profiler.util.QueryStringUtil.removeCarriageReturn($2)+\"]\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$2);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----JtdsPreparedStatement's constructor is called\");");
sb.append("System.out.println(\"-----Query=[\"+com.profiler.util.QueryStringUtil.removeCarriageReturn($2)+\"]\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2);");
sb.append("}");
return sb.toString();
}
private static void updateExecuteQueryMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("execute", null);
log("*** Changing executeQuery() method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("execute", null);
logger.info("Changing executeQuery() method.");
serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
serviceMethod.insertAfter(getExecuteQueryMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----JtdsPreparedStatement.execute() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----JtdsPreparedStatement.execute() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getExecuteQueryMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----JtdsPreparedStatement.execute() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----JtdsPreparedStatement.execute() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
@@ -5,56 +5,77 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MSSQLResultSetModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("MSSQLResultSetModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class MSSQLResultSetModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MSSQLResultSetModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("MSSQLResultSetModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateNextMethod(classPool,cc);
updateCloseMethod(classPool,cc);
updateNextMethod(classPool, cc);
updateCloseMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateNextMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("next", null);
log("*** Changing next() method ");
private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("next", null);
logger.info("Changing next() method");
serviceMethod1.insertBefore(getNextMethodBeforeInsertCode());
}
private static String getNextMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".updateFetchCount();");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount();");
sb.append("}");
return sb.toString();
}
private static void updateCloseMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("close", null);
log("*** Changing close() method ");
private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("close", null);
logger.info("Changing close() method");
serviceMethod1.insertBefore(getCloseMethodBeforeInsertCode());
}
private static String getCloseMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
// sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_RESULTSET_CLOSE+");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".addResultSetData();");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_RESULTSET_CLOSE + ");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData();");
sb.append("}");
return sb.toString();
}
}
}
@@ -5,51 +5,67 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MSSQLStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("MSSQLStatementModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class MSSQLStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MSSQLStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("MSSQLStatementModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateExecuteQueryMethod(classPool,cc);
updateExecuteQueryMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateExecuteQueryMethod(ClassPool classPool,CtClass cc) throws Exception {
CtClass[] params=new CtClass[1];
params[0]=classPool.getCtClass("java.lang.String");
CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", params);
log("*** Changing executeQuery method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception {
CtClass[] params = new CtClass[1];
params[0] = classPool.getCtClass("java.lang.String");
CtMethod serviceMethod = cc.getDeclaredMethod("executeQuery", params);
logger.info("Changing executeQuery method.");
serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
serviceMethod.insertAfter(getExecuteQueryMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is called\");");
// sb.append("System.out.println(\"-----Query=[\"+com.profiler.util.QueryStringUtil.removeCarriageReturn($1)+\"]\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is called\");");
sb.append("System.out.println(\"-----Query=[\"+com.profiler.util.QueryStringUtil.removeCarriageReturn($1)+\"]\");");
sb.append("}");
}
return sb.toString();
}
private static String getExecuteQueryMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
@@ -5,100 +5,142 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MySQLConnectionImplModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("MySQLConnectionImplModifier modifing");
// printClassInfo(javassistClassName);
return changeMethods(classPool,classLoader,javassistClassName,classFileBuffer);
public class MySQLConnectionImplModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MySQLConnectionImplModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("MySQLConnectionImplModifier modifing. %s", javassistClassName);
return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethods(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethods(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateGetInstanceMethod(classPool,cc);
updateCreateStatementMethod(classPool,cc);
updateCloseMethod(classPool,cc);
updateGetInstanceMethod(classPool, cc);
updateCreateStatementMethod(classPool, cc);
updateCloseMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateCreateStatementMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("createStatement", null);
log("*** Changing createStatement method ");
// serviceMethod.insertBefore(getCreateStatementMethodBeforeInsertCode());
private static void updateCreateStatementMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("createStatement", null);
logger.info("Changing createStatement method");
serviceMethod.insertBefore(getCreateStatementMethodBeforeInsertCode());
serviceMethod.insertAfter(getCreateStatementMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getCreateStatementMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----ConnectionImpl.createStatement() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----ConnectionImpl.createStatement() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getCreateStatementMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----ConnectionImpl.createStatement() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----ConnectionImpl.createStatement() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT + ");");
sb.append("}");
return sb.toString();
}
private static void updateGetInstanceMethod(ClassPool classPool,CtClass cc) throws Exception {
CtClass[] params=new CtClass[5];
params[0]=classPool.getCtClass("java.lang.String");
params[1]=classPool.getCtClass("int");
params[2]=classPool.getCtClass("java.util.Properties");
params[3]=classPool.getCtClass("java.lang.String");
params[4]=classPool.getCtClass("java.lang.String");
CtMethod serviceMethod=cc.getDeclaredMethod("getInstance", params);
log("*** Changing getInstance method ");
// serviceMethod.insertBefore(getGetInstanceMethodBeforeInsertCode());
private static void updateGetInstanceMethod(ClassPool classPool, CtClass cc) throws Exception {
CtClass[] params = new CtClass[5];
params[0] = classPool.getCtClass("java.lang.String");
params[1] = classPool.getCtClass("int");
params[2] = classPool.getCtClass("java.util.Properties");
params[3] = classPool.getCtClass("java.lang.String");
params[4] = classPool.getCtClass("java.lang.String");
CtMethod serviceMethod = cc.getDeclaredMethod("getInstance", params);
logger.info("Changing getInstance method ");
serviceMethod.insertBefore(getGetInstanceMethodBeforeInsertCode());
serviceMethod.insertAfter(getGetInstanceMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getGetInstanceMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----ConnectionImpl.getInstance() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----ConnectionImpl.getInstance() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getGetInstanceMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----ConnectionImpl.getInstance() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putConnection("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION+",$5);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----ConnectionImpl.getInstance() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putConnection(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION + ",$5);");
sb.append("}");
return sb.toString();
}
private static void updateCloseMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("close", null);
log("*** Changing close method ");
// serviceMethod.insertBefore(getCloseMethodBeforeInsertCode());
private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("close", null);
logger.info("Changing close method ");
serviceMethod.insertBefore(getCloseMethodBeforeInsertCode());
serviceMethod.insertAfter(getCloseMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getCloseMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----ConnectionImpl.close() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----ConnectionImpl.close() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getCloseMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----ConnectionImpl.close() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----ConnectionImpl.close() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + ");");
sb.append("}");
return sb.toString();
}
}
@@ -6,108 +6,144 @@ import javassist.CtConstructor;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MySQLPreparedStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("MySQLPreparedStatementModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class MySQLPreparedStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MySQLPreparedStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("MySQLPreparedStatementModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateSetInternalMethod(classPool,cc);
updateExecuteQueryMethod(classPool,cc);
updateConstructor(classPool,cc);
updateSetInternalMethod(classPool, cc);
updateExecuteQueryMethod(classPool, cc);
updateConstructor(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateSetInternalMethod(ClassPool classPool,CtClass cc) throws Exception {
// setInternal(int paramIndex, String val)
CtClass[] params1=new CtClass[2];
params1[0]=classPool.getCtClass("int");
params1[1]=classPool.getCtClass("java.lang.String");
CtMethod serviceMethod1=cc.getDeclaredMethod("setInternal", params1);
log("*** Changing setInternal(int,String) method ");
private static void updateSetInternalMethod(ClassPool classPool, CtClass cc) throws Exception {
// setInternal(int paramIndex, String val)
CtClass[] params1 = new CtClass[2];
params1[0] = classPool.getCtClass("int");
params1[1] = classPool.getCtClass("java.lang.String");
CtMethod serviceMethod1 = cc.getDeclaredMethod("setInternal", params1);
logger.info("Changing setInternal(int,String) method ");
serviceMethod1.insertBefore(getSetInternal1MethodBeforeInsertCode());
CtClass[] params2=new CtClass[2];
params2[0]=classPool.getCtClass("int");
params2[1]=classPool.getCtClass("byte[]");
CtMethod serviceMethod2=cc.getDeclaredMethod("setInternal", params2);
log("*** Changing setInternal(int,byte[]) method ");
CtClass[] params2 = new CtClass[2];
params2[0] = classPool.getCtClass("int");
params2[1] = classPool.getCtClass("byte[]");
CtMethod serviceMethod2 = cc.getDeclaredMethod("setInternal", params2);
logger.info("Changing setInternal(int,byte[]) method ");
serviceMethod2.insertBefore(getSetInternal2MethodBeforeInsertCode());
}
private static String getSetInternal1MethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlParam($1,$2);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$2);");
sb.append("}");
return sb.toString();
}
private static String getSetInternal2MethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,byte[]) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+new String($2));");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlParam($1,$2);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,byte[]) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+new String($2));");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$2);");
sb.append("}");
return sb.toString();
}
private static void updateConstructor(ClassPool classPool,CtClass cc) throws Exception {
CtConstructor []constructorList=cc.getConstructors();
if(constructorList.length==3) {
log("*** Changing Constructor ");
for(CtConstructor constructor:constructorList) {
CtClass params[]=constructor.getParameterTypes();
if(params.length==3) {
private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception {
CtConstructor[] constructorList = cc.getConstructors();
if (constructorList.length == 3) {
logger.info("Changing Constructor");
for (CtConstructor constructor : constructorList) {
CtClass params[] = constructor.getParameterTypes();
if (params.length == 3) {
constructor.insertBefore(getConstructorBeforeInsertCode());
}
}
}
}
private static String getConstructorBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----PreparedStatement's constructor is called\");");
// sb.append("System.out.println(\"-----Query=[\"+$2+\"]\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$2);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----PreparedStatement's constructor is called\");");
sb.append("System.out.println(\"-----Query=[\"+$2+\"]\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2);");
sb.append("}");
return sb.toString();
}
private static void updateExecuteQueryMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", null);
log("*** Changing executeQuery method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("executeQuery", null);
logger.info("*** Changing executeQuery method ");
serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
serviceMethod.insertAfter(getExecuteQueryMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getExecuteQueryMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
@@ -5,54 +5,64 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MySQLResultSetModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("ResultSetImpl modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class MySQLResultSetModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MySQLResultSetModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("ResultSetImpl modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateNextMethod(classPool,cc);
updateCloseMethod(classPool,cc);
updateNextMethod(classPool, cc);
updateCloseMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateNextMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("next", null);
log("*** Changing next() method ");
private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("next", null);
logger.info("*** Changing next() method");
serviceMethod1.insertBefore(getNextMethodBeforeInsertCode());
}
private static String getNextMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".updateFetchCount();");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount();");
sb.append("}");
return sb.toString();
}
private static void updateCloseMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("close", null);
log("*** Changing close() method ");
private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("close", null);
logger.info("Changing close() method");
serviceMethod1.insertBefore(getCloseMethodBeforeInsertCode());
}
private static String getCloseMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".addResultSetData();");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData();");
sb.append("}");
return sb.toString();
}
}
@@ -5,51 +5,68 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class MySQLStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("MySQLStatementModifier modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class MySQLStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(MySQLStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("MySQLStatementModifier modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateExecuteQueryMethod(classPool,cc);
updateExecuteQueryMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateExecuteQueryMethod(ClassPool classPool,CtClass cc) throws Exception {
CtClass[] params=new CtClass[1];
params[0]=classPool.getCtClass("java.lang.String");
CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", params);
log("*** Changing executeQuery method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception {
CtClass[] params = new CtClass[1];
params[0] = classPool.getCtClass("java.lang.String");
CtMethod serviceMethod = cc.getDeclaredMethod("executeQuery", params);
logger.info("Changing executeQuery method");
serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
serviceMethod.insertAfter(getExecuteQueryMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is called\");");
// sb.append("System.out.println(\"-----Query=[\"+$1+\"]\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is called\");");
sb.append("System.out.println(\"-----Query=[\"+$1+\"]\");");
sb.append("}");
}
return sb.toString();
}
private static String getExecuteQueryMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
}
@@ -6,114 +6,146 @@ import javassist.CtConstructor;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class OraclePreparedStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("OraclePreparedStatementModifier modifing");
// printClassInfo(javassistClassName);
// return addBeforeAfterLogics(classPool,javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
// return null;
public class OraclePreparedStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(OraclePreparedStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("OraclePreparedStatementModifier modifing. %s", javassistClassName);
// printClassInfo(javassistClassName);
// return addBeforeAfterLogics(classPool,javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateSetInternalMethod(classPool,cc);
updateExecuteMethod(classPool,cc);
updateConstructor(classPool,cc);
updateSetInternalMethod(classPool, cc);
updateExecuteMethod(classPool, cc);
updateConstructor(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateSetInternalMethod(ClassPool classPool,CtClass cc) throws Exception {
// setInternal(int paramIndex, String val)
CtClass[] params1=new CtClass[2];
params1[0]=classPool.getCtClass("int");
params1[1]=classPool.getCtClass("java.lang.String");
CtMethod serviceMethod1=cc.getDeclaredMethod("setStringInternal", params1);
log("*** Changing setInternal(int,String) method ");
private static void updateSetInternalMethod(ClassPool classPool, CtClass cc) throws Exception {
// setInternal(int paramIndex, String val)
CtClass[] params1 = new CtClass[2];
params1[0] = classPool.getCtClass("int");
params1[1] = classPool.getCtClass("java.lang.String");
CtMethod serviceMethod1 = cc.getDeclaredMethod("setStringInternal", params1);
logger.info("Changing setInternal(int,String) method");
serviceMethod1.insertBefore(getSetInternal1MethodBeforeInsertCode());
// CtClass[] params2=new CtClass[2];
// params2[0]=classPool.getCtClass("int");
// params2[1]=classPool.getCtClass("byte[]");
// CtMethod serviceMethod2=cc.getDeclaredMethod("setInternal", params2);
// log("*** Changing setInternal(int,byte[]) method ");
// serviceMethod2.insertBefore(getSetInternal2MethodBeforeInsertCode());
// CtClass[] params2=new CtClass[2];
// params2[0]=classPool.getCtClass("int");
// params2[1]=classPool.getCtClass("byte[]");
// CtMethod serviceMethod2=cc.getDeclaredMethod("setInternal", params2);
// log("*** Changing setInternal(int,byte[]) method ");
// serviceMethod2.insertBefore(getSetInternal2MethodBeforeInsertCode());
}
private static String getSetInternal1MethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlParam($1,$2);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$2);");
sb.append("}");
return sb.toString();
}
private static String getSetInternal2MethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,byte[]) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+new String($2));");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlParam($1,$2);");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,byte[]) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+new String($2));");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$2);");
sb.append("}");
return sb.toString();
}
private static void updateConstructor(ClassPool classPool,CtClass cc) throws Exception {
CtConstructor []constructorList=cc.getConstructors();
// if(constructorList.length==3) {
log("*** Changing Constructor ");
for(CtConstructor constructor:constructorList) {
CtClass params[]=constructor.getParameterTypes();
// System.out.println(params.length);
// for(CtClass param:params) {
// System.out.println(param.getName());
// }
if(params.length==6) {
private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception {
CtConstructor[] constructorList = cc.getConstructors();
// if(constructorList.length==3) {
logger.info("*** Changing Constructor");
for (CtConstructor constructor : constructorList) {
CtClass params[] = constructor.getParameterTypes();
// System.out.println(params.length);
// for(CtClass param:params) {
// System.out.println(param.getName());
// }
if (params.length == 6) {
constructor.insertBefore(getConstructorBeforeInsertCode());
}
}
// }
// }
}
private static String getConstructorBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----PreparedStatement's constructor is called\");");
// sb.append("System.out.println(\"-----Query=[\"+$2+\"]\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$2);");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----PreparedStatement's constructor is called\");");
sb.append("System.out.println(\"-----Query=[\"+$2+\"]\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2);");
sb.append("}");
return sb.toString();
}
private static void updateExecuteMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod=cc.getDeclaredMethod("execute", null);
log("*** Changing execute method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod = cc.getDeclaredMethod("execute", null);
logger.info("Changing execute method");
serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
serviceMethod.insertAfter(getExecuteMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is called\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is called\");");
sb.append("}");
}
return sb.toString();
}
private static String getExecuteMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----PreparedStatement.executeQuery() method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
@@ -5,54 +5,77 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class OracleResultSetModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("OracleResultSetImpl modifing");
// printClassInfo(javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class OracleResultSetModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(OracleResultSetModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("OracleResultSetImpl modifing. %s", javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateNextMethod(classPool,cc);
updateCloseMethod(classPool,cc);
updateNextMethod(classPool, cc);
updateCloseMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
// cc.writeFile();
// cc.writeFile();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
private static void updateNextMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("next", null);
log("*** Changing next() method ");
private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("next", null);
logger.info("Changing next() method ");
serviceMethod1.insertBefore(getNextMethodBeforeInsertCode());
}
private static String getNextMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".updateFetchCount();");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount();");
sb.append("}");
return sb.toString();
}
private static void updateCloseMethod(ClassPool classPool,CtClass cc) throws Exception {
CtMethod serviceMethod1=cc.getDeclaredMethod("close", null);
log("*** Changing close() method ");
private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception {
CtMethod serviceMethod1 = cc.getDeclaredMethod("close", null);
logger.info("Changing close() method");
serviceMethod1.insertBefore(getCloseMethodBeforeInsertCode());
}
private static String getCloseMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
// sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".addResultSetData();");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"PreparedStatement.setInternal(int,String) method is called\");");
sb.append("System.out.println(\"-----Position=\"+$1+\" Value=\"+$2);");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData();");
sb.append("}");
return sb.toString();
}
}
@@ -5,19 +5,23 @@ import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.config.TomcatProfilerConstant;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
public class OracleStatementModifier extends AbstractModifier{
public static byte[] modify(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classFileBuffer) {
log("OracleStatementModifier modifing");
// printClassInfo(javassistClassName);
// return addBeforeAfterLogics(classPool,javassistClassName);
return changeMethod(classPool,classLoader,javassistClassName,classFileBuffer);
public class OracleStatementModifier extends AbstractModifier {
private static final Logger logger = Logger.getLogger(OracleStatementModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("OracleStatementModifier modifing. %s", javassistClassName);
// printClassInfo(javassistClassName);
// return addBeforeAfterLogics(classPool,javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeMethod(ClassPool classPool,ClassLoader classLoader,String javassistClassName,byte[] classfileBuffer) {
private static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
updateExecuteQueryMethod(classPool,cc);
updateExecuteQueryMethod(classPool, cc);
byte[] newClassfileBuffer = cc.toBytecode();
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
@@ -26,32 +30,44 @@ public class OracleStatementModifier extends AbstractModifier{
}
return null;
}
private static void updateExecuteQueryMethod(ClassPool classPool,CtClass cc) throws Exception {
CtClass[] params=new CtClass[1];
params[0]=classPool.getCtClass("java.lang.String");
// CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", params);
CtMethod serviceMethod=cc.getDeclaredMethod("execute", params);
log("*** Changing executeQuery method ");
// serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception {
CtClass[] params = new CtClass[1];
params[0] = classPool.getCtClass("java.lang.String");
// CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", params);
CtMethod serviceMethod = cc.getDeclaredMethod("execute", params);
logger.info("Changing executeQuery method");
serviceMethod.insertBefore(getExecuteQueryMethodBeforeInsertCode());
serviceMethod.insertAfter(getExecuteQueryMethodAfterInsertCode());
}
@SuppressWarnings("unused")
private static String getExecuteQueryMethodBeforeInsertCode() {
StringBuilder sb=new StringBuilder();
// sb.append("{");
// sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is called\");");
// sb.append("System.out.println(\"-----Query=[\"+$1+\"]\");");
// sb.append("}");
StringBuilder sb = new StringBuilder();
if (logger.isDebugEnabled()) {
sb.append("{");
sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is called\");");
sb.append("System.out.println(\"-----Query=[\"+$1+\"]\");");
sb.append("}");
}
return sb.toString();
}
private static String getExecuteQueryMethodAfterInsertCode() {
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.append("{");
// sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is ended\");");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".putSqlQuery("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY+",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER+".put("+TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY+");");
if (logger.isDebugEnabled()) {
sb.append("System.out.println(\"-----StatementImpl.executeQuery(String) method is ended\");");
}
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$1);");
sb.append(TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + ");");
sb.append("}");
return sb.toString();
}
}
@@ -1,53 +1,50 @@
package com.profiler.modifier.tomcat;
import static com.profiler.config.TomcatProfilerConstant.CLASS_NAME_REQUEST_TRACER;
import static com.profiler.config.TomcatProfilerConstant.CLASS_NAME_REQUEST_THRIFT_DTO;
import static com.profiler.config.TomcatProfilerConstant.CLASS_NAME_REQUEST_TRACER;
import javassist.ByteArrayClassPath;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
/**
* Modify org.apache.catalina.core.StandardHostValve class
*
* @author cowboy93
* @author cowboy93, netspider
*
*/
public class EntryPointStandardHostValveModifier extends AbstractModifier {
public static byte[] modify(ClassPool classPool, ClassLoader classLoader,
String javassistClassName, byte[] classFileBuffer) {
log("EntryPointModifier.modifyStandardHostValve()");
// printClassInfo(javassistClassName);
return changeServiceMethod(classPool, classLoader, javassistClassName,
classFileBuffer);
private static final Logger logger = Logger.getLogger(EntryPointStandardHostValveModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
logger.info("EntryPointModifier.modifyStandardHostValve(). %s", javassistClassName);
return changeServiceMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
private static byte[] changeServiceMethod(ClassPool classPool,
ClassLoader classLoader, String javassistClassName,
byte[] classfileBuffer) {
classPool.insertClassPath(new ByteArrayClassPath(javassistClassName,
classfileBuffer));
private static byte[] changeServiceMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
classPool.insertClassPath(new ByteArrayClassPath(javassistClassName, classfileBuffer));
try {
addRequestTracerToCurrentClassLoader(classLoader);
// log("Class loader="+classPool.getClassLoader().toString());
CtClass cc = classPool.get(javassistClassName);
CtClass[] params = new CtClass[2];
params[0] = classPool
.getCtClass("org.apache.catalina.connector.Request");
params[1] = classPool
.getCtClass("org.apache.catalina.connector.Response");
params[0] = classPool.getCtClass("org.apache.catalina.connector.Request");
params[1] = classPool.getCtClass("org.apache.catalina.connector.Response");
CtMethod serviceMethod = cc.getDeclaredMethod("invoke", params);
log("*** Changing invoke method ");
logger.info("Changing invoke method");
serviceMethod.insertBefore(getInvokeMethodBeforeInsertCode());
serviceMethod.insertAfter(getInvokeMethodAfterInsertCode());
CtClass exceptionType = classPool.get("java.lang.Throwable");
// CtClass exceptionType = classPool.get("java.lang.Exception");
serviceMethod.addCatch(getInvokeMethodCatchInsertCode(),
exceptionType);
serviceMethod.addCatch(getInvokeMethodCatchInsertCode(), exceptionType);
// cc.stopPruning(true);
// cc.toClass(classLoader,classLoader.getClass().getProtectionDomain());
@@ -58,6 +55,7 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier {
printClassConvertComplete(javassistClassName);
return newClassfileBuffer;
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
@@ -68,69 +66,91 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier {
insertCode.append("{");
insertCode.append("long requestTime=System.currentTimeMillis();");
insertCode
.append("javax.servlet.http.HttpServletRequest tempRequest=(javax.servlet.http.HttpServletRequest)$1;");
insertCode.append("javax.servlet.http.HttpServletRequest tempRequest=(javax.servlet.http.HttpServletRequest)$1;");
insertCode.append("String requestURL=tempRequest.getRequestURI();");
insertCode.append("String clientIP=tempRequest.getRemoteAddr();");
insertCode.append(getParameterValues());
insertCode.append(CLASS_NAME_REQUEST_TRACER).append(
".startTransaction(requestURL,clientIP,requestTime,params);");
insertCode.append(CLASS_NAME_REQUEST_TRACER).append(".startTransaction(requestURL,clientIP,requestTime,params);");
if (logger.isDebugEnabled()) {
insertCode.append("System.out.println(\"--- ApplicationFilterChain.doFilter() is started.\");");
}
// insertCode.append("System.out.println(\"--- ApplicationFilterChain.doFilter() is started.\");");
insertCode.append("}");
return insertCode.toString();
}
private static StringBuilder getParameterValues() {
StringBuilder insertCode = new StringBuilder();
insertCode
.append("java.util.Enumeration attrs=tempRequest.getParameterNames();");
insertCode.append("java.util.Enumeration attrs=tempRequest.getParameterNames();");
insertCode.append("StringBuilder params=new StringBuilder();");
insertCode.append("while(attrs.hasMoreElements()) {");
insertCode.append("String keyString=attrs.nextElement().toString();");
// insertCode.append("System.out.println(key+\"=\"+tempRequest.getParameter(key.toString()));");
if (logger.isDebugEnabled()) {
insertCode.append("System.out.println(keyString+\"=\"+tempRequest.getParameter(keyString));");
}
insertCode.append("Object value=tempRequest.getParameter(keyString);");
insertCode.append("if(value!=null) {");
insertCode.append("String valueString=value.toString();");
insertCode.append("int valueStringLength=valueString.length();");
insertCode
.append("if(valueStringLength>0 && valueStringLength<100) params.append(keyString).append(\"=\").append(valueString).append(\",\");");
insertCode.append("if(valueStringLength>0 && valueStringLength<100) params.append(keyString).append(\"=\").append(valueString).append(\",\");");
insertCode.append("}}");
// insertCode.append("System.out.println(params);");
if (logger.isDebugEnabled()) {
insertCode.append("System.out.println(params);");
}
return insertCode;
}
private static String getInvokeMethodAfterInsertCode() {
StringBuilder insertCode = new StringBuilder();
insertCode.append("{");
insertCode.append(CLASS_NAME_REQUEST_TRACER).append(
".endTransaction();");
// insertCode.append("System.out.println(\"--- ApplicationFilterChain.doFilter() is ended.\");");
insertCode.append(CLASS_NAME_REQUEST_TRACER).append(".endTransaction();");
if (logger.isDebugEnabled()) {
insertCode.append("System.out.println(\"--- ApplicationFilterChain.doFilter() is ended.\");");
}
insertCode.append("}");
return insertCode.toString();
}
private static String getInvokeMethodCatchInsertCode() {
StringBuilder insertCode = new StringBuilder();
// insertCode.append("{");
// insertCode.append("System.out.println(\"------------------------------------------------\");");
// insertCode.append("System.out.println(\"--- \"+$e.getMessage()+\" is occured !!!\");");
insertCode.append(CLASS_NAME_REQUEST_TRACER).append(
".exceptionTransaction($e);");
// insertCode.append("System.out.println(\"------------------------------------------------\");");
if (logger.isDebugEnabled()) {
insertCode.append("{");
insertCode.append("System.out.println(\"------------------------------------------------\");");
insertCode.append("System.out.println(\"--- \"+$e.getMessage()+\" is occured !!!\");");
}
insertCode.append(CLASS_NAME_REQUEST_TRACER).append(".exceptionTransaction($e);");
if (logger.isDebugEnabled()) {
insertCode.append("System.out.println(\"------------------------------------------------\");");
}
insertCode.append("throw $e;");
// insertCode.append("}");
if (logger.isDebugEnabled()) {
insertCode.append("}");
}
return insertCode.toString();
}
private static void addRequestTracerToCurrentClassLoader(
ClassLoader classLoader) {
private static void addRequestTracerToCurrentClassLoader(ClassLoader classLoader) {
try {
classLoader.loadClass(CLASS_NAME_REQUEST_TRACER);
classLoader.loadClass(CLASS_NAME_REQUEST_THRIFT_DTO);
classLoader.loadClass("org.apache.thrift.TBase");
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
}
}
}
@@ -1,46 +1,49 @@
package com.profiler.modifier.tomcat;
import com.profiler.modifier.AbstractModifier;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
/**
* When org.apache.catalina.core.StandardService class is loaded in ClassLoader,
* this class modifies methods.
*
* @author cowboy93
* @author cowboy93, netspider
*
*/
public class TomcatConnectorModifier extends AbstractModifier {
public static byte[] modify(ClassPool classPool, ClassLoader classLoader,
String javassistClassName, byte[] classFileBuffer) {
// printClassInfo(javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName,
classFileBuffer);
private static final Logger logger = Logger.getLogger(TomcatConnectorModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
if (logger.isDebugEnabled()) {
printClassInfo(javassistClassName);
}
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
public static byte[] changeMethod(ClassPool classPool,
ClassLoader classLoader, String javassistClassName,
byte[] classfileBuffer) {
public static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
CtClass param[] = new CtClass[1];
param[0] = classPool.getCtClass("int");
CtMethod setPortMethod = cc.getDeclaredMethod("setPort", param);
setPortMethod.insertBefore("{"
+
// "System.out.println(\"*** setPort() method *** Port number=\"+$1);"
// +
"com.profiler.dto.AgentInfoDTO.portNumberBuffer.append($1).append(\" \");"
+ "}");
setPortMethod.insertBefore("{" +
// "System.out.println(\"*** setPort() method *** Port number=\"+$1);"
// +
"com.profiler.dto.AgentInfoDTO.portNumberBuffer.append($1).append(\" \");" + "}");
printClassConvertComplete(javassistClassName);
return cc.toBytecode();
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
}
}
}
@@ -1,49 +1,45 @@
package com.profiler.modifier.tomcat;
import static com.profiler.config.TomcatProfilerConstant.CLASS_NAME_AGENT_STATE_MANAGER;
import com.profiler.modifier.AbstractModifier;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import com.profiler.logging.Logger;
import com.profiler.modifier.AbstractModifier;
/**
* When org.apache.catalina.core.StandardService class is loaded in ClassLoader,
* this class modifies methods.
*
* @author cowboy93
* @author cowboy93, netspider
*
*/
public class TomcatStandardServiceModifier extends AbstractModifier {
public static byte[] modify(ClassPool classPool, ClassLoader classLoader,
String javassistClassName, byte[] classFileBuffer) {
// printClassInfo(javassistClassName);
return changeMethod(classPool, classLoader, javassistClassName,
classFileBuffer);
private static final Logger logger = Logger.getLogger(TomcatStandardServiceModifier.class);
public static byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
if (logger.isDebugEnabled()) {
printClassInfo(javassistClassName);
}
return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);
}
public static byte[] changeMethod(ClassPool classPool,
ClassLoader classLoader, String javassistClassName,
byte[] classfileBuffer) {
public static byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) {
try {
CtClass cc = classPool.get(javassistClassName);
CtMethod startMethod = cc.getDeclaredMethod("start", null);
startMethod
.insertBefore("{"
+ "System.out.println(\"*** Start TomcatProfiler JVMStat Thread ***\");"
+ CLASS_NAME_AGENT_STATE_MANAGER
+ ".startJVMTraceThread();" + "}");
startMethod.insertBefore("{" + "System.out.println(\"*** Start TomcatProfiler JVMStat Thread ***\");" + CLASS_NAME_AGENT_STATE_MANAGER + ".startJVMTraceThread();" + "}");
CtMethod stopMethod = cc.getDeclaredMethod("stop", null);
stopMethod
.insertBefore("{"
+ "System.out.println(\"*** TomcatProfiler send JVM is stopped info ***\");"
+ CLASS_NAME_AGENT_STATE_MANAGER
+ ".sendJVMStoppedInfo();" + "}");
stopMethod.insertBefore("{" + "System.out.println(\"*** TomcatProfiler send JVM is stopped info ***\");" + CLASS_NAME_AGENT_STATE_MANAGER + ".sendJVMStoppedInfo();" + "}");
printClassConvertComplete(javassistClassName);
return cc.toBytecode();
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
return null;
@@ -3,9 +3,9 @@ package com.profiler.sender;
import java.io.ObjectOutputStream;
import java.net.Socket;
import com.profiler.Logger;
import com.profiler.config.TomcatProfilerConfig;
import com.profiler.dto.AgentInfoDTO;
import com.profiler.logging.Logger;
public class AgentInfoSender extends Thread {