/*******************************************************************************
* Copyright (c) 2014 antoniomariasanchez at gmail.com.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* antoniomaria - initial API and implementation
******************************************************************************/
package net.sf.gazpachoquest.aspects;
import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StopWatch;
import org.springframework.util.StopWatch.TaskInfo;
public class ProfilingAdvise {
private static final Logger logger = LoggerFactory.getLogger(ProfilingAdvise.class);
public Object doProfiling(final ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
String taskName = createTaskName(proceedingJoinPoint);
StopWatch taskTimer = new StopWatch();
try {
taskTimer.start(taskName);
return proceedingJoinPoint.proceed();
} finally {
taskTimer.stop();
doLogging(taskTimer.getLastTaskInfo());
}
}
private String createTaskName(final ProceedingJoinPoint proceedingJoinPoint) {
return new StringBuffer(proceedingJoinPoint.getTarget().getClass().getSimpleName()).append(".")
.append(proceedingJoinPoint.getSignature().getName()).toString();
}
private void doLogging(final TaskInfo lastTaskInfo) {
logger.debug("Method : {} took {} ms", lastTaskInfo.getTaskName(), lastTaskInfo.getTimeMillis());
}
}