static Object observe(final ObjectProvider<ExecutableObserver> observerProvider,
                          final ProceedingJoinPoint joinPoint,
                          final Function<MonitorableTask, MonitorableTask> taskCustomizer) throws Throwable {
        val observer = observerProvider.getIfAvailable();
        if (observer != null) {
            val taskName = joinPoint.getSignature().getDeclaringTypeName() + '.' + joinPoint.getSignature().getName();
            val task = taskCustomizer.apply(new MonitorableTask(taskName));
            return observer.supply(task, () -> executeJoinPoint(joinPoint));
        }
        return executeJoinPoint(joinPoint);
    }
Observe invocation.

@param observerProvider the observer provider
@param joinPoint        the join point
@return the object
@throws Throwable the throwable
api/cas-server-core-api-monitor/src/main/java/org/apereo/cas/monitor/ExecutableObserver.java