}
@Around("monitoredPoint()")
public Object monitor(ProceedingJoinPoint pjp) throws Throwable {
String trackerName = getTrackerName(pjp);
Tracker tracker = TrackerFactory.getTracker(trackerName);
MonitoredCall call = composeCall(pjp);
tracker.registerCall(call);
long start = System.currentTimeMillis();
try {
Object ret = pjp.proceed();
long end = System.currentTimeMillis() - start;
StringBuilder buf = new StringBuilder();
buf.append("{monitor} " + call.getCall());
if (call.logArgs) {
buf.append(" with args " + Arrays.toString(call.args));
}
buf.append(" took " + end + " ms");
return ret;
} catch (Throwable t) {
long end = System.currentTimeMillis() - start;
StringBuilder buf = new StringBuilder();
buf.append("Exception occurred while executing " + call.typeName + "." + call.methodName);
if (call.logArgs) {
buf.append(" with args [" + Arrays.toString(call.args) + "]");
}
buf.append("; took " + end + " ms");
throw t;
} finally {
tracker.deregisterCall();
}
}