@Around("allSentryComponents()")
    public Object aroundSentryMonitoredComponents(final ProceedingJoinPoint joinPoint) {
        val spanType = getSpanTypeFromJoinPoint(joinPoint);
        val transactionOptions = new TransactionOptions();
        transactionOptions.setBindToScope(true);
        val transaction = Sentry.startTransaction(spanType, joinPoint.getSignature().getName(), transactionOptions);
        var span = Sentry.getSpan();
        if (span == null) {
            span = Sentry.startTransaction(spanType, joinPoint.getSignature().getName());
        }
        val innerSpan = span.startChild(spanType, joinPoint.getSignature().getName());
        try {
            val taskName = joinPoint.getSignature().getDeclaringTypeName() + '.' + joinPoint.getSignature().getName();
            LOGGER.debug("[{}]: Started exit span [{}] to execute [{}]", spanType, span.getOperation(), taskName);
            return executeJoinpoint(joinPoint);
        } catch (final Exception e) {
            innerSpan.setThrowable(e);
            innerSpan.setStatus(SpanStatus.INTERNAL_ERROR);

            span.setThrowable(e);
            span.setStatus(SpanStatus.INTERNAL_ERROR);

            transaction.setThrowable(e);
            transaction.setStatus(SpanStatus.INTERNAL_ERROR);

            Sentry.captureException(e);

            throw e;
        } finally {
            LOGGER.debug("Span [{}] ended", span.getOperation());
            innerSpan.finish();
            span.finish();
            transaction.finish();
        }
    }
Around pointcut to wrap all monitorable components in the CAS namespace.
Starts a span, and returns the result of the joinpoint in the end.

@param joinPoint the join point
@return the object
support/cas-server-support-sentry/src/main/java/org/apereo/cas/sentry/SentryMonitoringAspect.java