Search in sources :

Example 66 with InterceptContext

use of com.creditease.monitor.interceptframework.spi.InterceptContext in project uavstack by uavorg.

the class HookFactory method startHook.

/**
 * start application framework hook
 *
 * @param webapploader
 *            AppServer WebAppClassLoader
 * @param detectClass
 *            the class is used to defect if the application framework exists
 * @param loaderName
 *            the loader tag helps to load the hook jars
 * @param proxyClass
 *            the hook proxy class to run hook logic
 */
@SuppressWarnings("rawtypes")
public void startHook(ClassLoader webapploader, String detectClass, String loaderName, String proxyClass, Map hookConfig, HookContext cntx) {
    if (webapploader == null || detectClass == null || loaderName == null || proxyClass == null) {
        return;
    }
    // see if the app framework is there
    try {
        webapploader.loadClass(detectClass);
    } catch (ClassNotFoundException e) {
        // ignore
        if (log.isDebugable()) {
            log.debug("LOAD detectclass[" + detectClass + "] FAIL. ", e);
        }
        return;
    }
    InterceptContext context = (InterceptContext) cntx.get(HookConstants.INTERCEPTCONTEXT);
    Event evt = cntx.get(Event.class);
    if (log.isLogEnabled()) {
        log.info("START hook for proxy=" + proxyClass + ",detect=" + detectClass + ",jar=" + loaderName + ",evt=" + evt.toString());
    }
    /**
     * NOTE: there is only one HookProxy instance for each proxyClass and each webapploader
     */
    String contextPath = (String) context.get(InterceptConstants.CONTEXTPATH);
    String proxyKey = getHookProxyKey(contextPath, proxyClass);
    HookProxy proxy = null;
    boolean isNew = false;
    if (hooks.containsKey(proxyKey)) {
        proxy = hooks.get(proxyKey);
    } else {
        @SuppressWarnings("unchecked") List<String> supports = (List<String>) hookConfig.get("supports");
        // install hook jars
        this.installHookJars(webapploader, loaderName, supports);
        // new hookproxy instance
        try {
            Class<?> hookproxyClass = webapploader.loadClass(proxyClass);
            Constructor<?> con = hookproxyClass.getConstructor(new Class<?>[] { String.class, Map.class });
            proxy = (HookProxy) con.newInstance(new Object[] { proxyKey, hookConfig });
            isNew = true;
        } catch (Exception e) {
            log.error("CREATE hookproxy[" + proxyClass + "] instance FAIL. ", e);
            return;
        }
    }
    try {
        if (log.isDebugable()) {
            log.debug("START hookproxy[" + proxyClass + "] ", null);
        }
        // start hookproxy
        proxy.start(cntx, webapploader);
        // only start SUCCESS to store hookproxy
        if (isNew == true) {
            hooks.put(proxyKey, proxy);
        }
        if (log.isDebugable()) {
            log.debug("START hookproxy[" + proxyClass + "] END", null);
        }
    } catch (Exception e) {
        log.error("START hookproxy[" + proxyClass + "] FAIL. ", e);
    } catch (Error e) {
        log.error("START hookproxy[" + proxyClass + "] FAIL. ", e);
    }
}
Also used : InterceptContext(com.creditease.monitor.interceptframework.spi.InterceptContext) Event(com.creditease.monitor.interceptframework.spi.InterceptContext.Event) List(java.util.List)

Aggregations

InterceptContext (com.creditease.monitor.interceptframework.spi.InterceptContext)66 InterceptSupport (com.creditease.monitor.interceptframework.InterceptSupport)28 ServletContext (javax.servlet.ServletContext)12 StandardContext (org.apache.catalina.core.StandardContext)12 Servlet (javax.servlet.Servlet)6 ProfileElementInstance (com.creditease.uav.profiling.spi.ProfileElementInstance)5 LinkedHashMap (java.util.LinkedHashMap)4 Map (java.util.Map)4 StandardWrapper (org.apache.catalina.core.StandardWrapper)4 WebappClassLoader (org.apache.catalina.loader.WebappClassLoader)4 UAVServer (com.creditease.monitor.UAVServer)3 Event (com.creditease.monitor.interceptframework.spi.InterceptContext.Event)3 DynamicProxyProcessor (com.creditease.uav.monitorframework.dproxy.DynamicProxyProcessor)3 DPMethod (com.creditease.uav.monitorframework.dproxy.bytecode.DPMethod)3 DubboServiceProfileInfo (com.creditease.uav.profiling.handlers.dubbo.DubboServiceProfileInfo)3 LogProfileInfo (com.creditease.uav.profiling.handlers.log.LogProfileInfo)3 HashMap (java.util.HashMap)3 LinkedList (java.util.LinkedList)3 ServletException (javax.servlet.ServletException)3 WebAppContext (org.eclipse.jetty.webapp.WebAppContext)3