mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-18 01:06:03 +10:00
[유치수] [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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+42
-32
@@ -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();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
+97
-65
@@ -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();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+64
-44
@@ -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 {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user