package com.levigo.jadice.webtoolkit.monitoring.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import com.jadice.web.util.instrumented.InstrumentedDuration;
import com.levigo.jadice.webtoolkit.monitoring.data.DurationData;
@Aspect
public class DurationMeasurement extends BasicAspect {
@Override
@Pointcut("execution(* *(..)) && @annotation(com.jadice.web.util.instrumented.InstrumentedDuration)")
public void pointcut() {
}
/**
* Determines the metric information. This method is invoked by the join point functionality.
*/
@Around("pointcut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
DurationData durationData = new DurationData();
super.determineMetricInformation(durationData, joinPoint, InstrumentedDuration.class);
try {
return joinPoint.proceed();
} finally {
super.publish(durationData.end());
}
}
}