public Object around()

in powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/internal/LambdaTracingAspect.java [42:80]


    public Object around(ProceedingJoinPoint pjp,
                         Tracing tracing) throws Throwable {
        Object[] proceedArgs = pjp.getArgs();

        Subsegment segment = AWSXRay.beginSubsegment(
            customSegmentNameOrDefault(tracing,
                () -> "## " + pjp.getSignature().getName()));
        segment.setNamespace(namespace(tracing));

        if (placedOnHandlerMethod(pjp)) {
            segment.putAnnotation("ColdStart", isColdStart());
            segment.putAnnotation("Service", namespace(tracing));
        }

        boolean captureResponse = captureResponse(tracing);
        boolean captureError = captureError(tracing);

        try {
            Object methodReturn = pjp.proceed(proceedArgs);
            if (captureResponse) {
                segment.putMetadata(namespace(tracing), pjp.getSignature().getName() + " response", null != objectMapper() ? objectMapper().writeValueAsString(methodReturn): methodReturn);
            }

            if (placedOnHandlerMethod(pjp)) {
                coldStartDone();
            }

            return methodReturn;
        } catch (Exception e) {
            if (captureError) {
                segment.putMetadata(namespace(tracing), pjp.getSignature().getName() + " error", null != objectMapper() ? objectMapper().writeValueAsString(e) : e);
            }
            throw e;
        } finally {
            if (!isSamLocal()) {
                AWSXRay.endSubsegment();
            }
        }
    }