public Object around()

in powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspect.java [43:79]


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

        if (isHandlerMethod(pjp)
                && (placedOnRequestHandler(pjp)
                || placedOnStreamHandler(pjp))) {

            MetricsLogger logger = metricsLogger();

            refreshMetricsContext(metrics);

            logger.setNamespace(namespace(metrics));

            Context extractedContext = extractContext(pjp);

            if( null != extractedContext) {
                coldStartSingleMetricIfApplicable(extractedContext.getAwsRequestId(), extractedContext.getFunctionName(), metrics);
                logger.putProperty(REQUEST_ID_PROPERTY, extractedContext.getAwsRequestId());
            }

            LambdaHandlerProcessor.getXrayTraceId()
                    .ifPresent(traceId -> logger.putProperty(TRACE_ID_PROPERTY, traceId));

            try {
                return pjp.proceed(proceedArgs);

            } finally {
                coldStartDone();
                validateMetricsAndRefreshOnFailure(metrics);
                logger.flush();
                refreshMetricsContext(metrics);
            }
        }

        return pjp.proceed(proceedArgs);
    }