@Around("methodAnnotatedWithTrackEvent() || constructorAnnotatedTrackEvent()")
public Object weaveJoinPointTrackEvent(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = joinPoint.proceed();
final Map<String, Object> attributes = new HashMap<>();
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
addClassAttributes(method, joinPoint, attributes);
Map<Integer, String> transformMap = new HashMap<>();
addMethodAttributes(method, result, attributes, transformMap);
addMethodParameterAttributes(method, joinPoint, attributes, transformMap);
TrackEvent trackEvent = method.getAnnotation(TrackEvent.class);
pushEvent(trackEvent, attributes);
return result;
}