public class PerformanceAdvice {
private static final Log logger = LogFactory.getLog(PerformanceAdvice.class);
private long totalCalls = 0;
private long totalTimeSpent = 0;
private long maxTimeSpent = 0;
private long minTimeSpent = Long.MAX_VALUE;
public Object logServiceStartAndEndTimes(ProceedingJoinPoint pjp)
throws Throwable {
logger.debug("Calling logServiceStartAndEndTimes");
StopWatch clock = new StopWatch();
try {
clock.start(pjp.toShortString());
return pjp.proceed();
} finally {
clock.stop();
String callingMethodName = "";
Thread currentThread = Thread.currentThread();
StackTraceElement[] stackTrace = currentThread.getStackTrace();
for (int i = 0; i < stackTrace.length; i++) {
if (stackTrace[i].getClassName().contains(
"xxxxOutboundGateway")) {
callingMethodName = stackTrace[i].getMethodName();
break;
}
}
logger.debug("Calling " + callingMethodName + " took: "
+ clock.getTotalTimeMillis() + " ms to complete ("
+ clock.getTotalTimeSeconds() + " seconds).");
updateCounters(clock.getTotalTimeMillis());
}
}
private synchronized void updateCounters(long ms) {
totalTimeSpent += ms;
totalCalls++;
if (ms > maxTimeSpent) {
maxTimeSpent = ms;
}
if (ms < minTimeSpent) {
minTimeSpent = ms;
}
}