mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-28 06:08:43 +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:
+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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user