package com.geccocrawler.gecco.monitor; import java.lang.reflect.Method; import com.geccocrawler.gecco.downloader.DownloadException; import com.geccocrawler.gecco.downloader.DownloadServerException; import com.geccocrawler.gecco.request.HttpRequest; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class DownloadMointorIntercetor implements MethodInterceptor { @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { if(method.getName().equals("download")) { HttpRequest request = (HttpRequest)args[0]; try { Object o = proxy.invokeSuper(obj, args); DownloadMonitor.incrSuccess(request.getUrl()); return o; } catch(DownloadServerException ex) { DownloadMonitor.incrServerError(request.getUrl()); throw ex; } catch(DownloadException ex) { DownloadMonitor.incrException(request.getUrl()); throw ex; } } else { return proxy.invokeSuper(obj, args); } } }