PackagerProfiler.java

package esa.bscs.pds4.packager.aspect;

import org.apache.commons.lang3.time.StopWatch;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import esa.bscs.pds4.packager.aip.PackageInfo;

@Aspect
public class PackagerProfiler {
    
    private static final Logger LOGGER = LoggerFactory.getLogger(PackagerProfiler.class);

    @Around(value="execution(public * esa.bscs.pds4.packager.aip.AipBuilder.buildArchiveInformationProduct(..))")
    public Object trackBuildArchiveInformationProductExecution(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        
        final StopWatch clock = StopWatch.createStarted();
        
        // Call tracked method
                
        final Object returnValue = proceedingJoinPoint.proceed();
        
        // Stop clock
        
        clock.stop();
        
        // Log execution
        
        final PackageInfo packageInfo = (PackageInfo) returnValue;
        
        LOGGER.info("Archive Information Product (checksum manifest + transfer manifest + PDS4 label) build took {}", clock);
        LOGGER.info("Transfer manifest references {} products and checksum manifest references {} files", packageInfo.getTransferInfo().getRecords(), packageInfo.getChecksumInfo().getRecords());
        
        LOGGER.info("{}: \r\n{}", packageInfo.getTransferInfo().getFilename(), packageInfo.getTransferInfo().getContent());
        LOGGER.info("{}: \r\n{}", packageInfo.getChecksumInfo().getFilename(), packageInfo.getChecksumInfo().getContent());
        
        // Return 
        
        return returnValue;
    }
}