package uk.ac.ebi.ep.xml.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobExecutionListener; import org.springframework.batch.core.StepExecution; /** * Listener used to gather stats on a given job * * @author Ricardo Antunes */ public class LogJobListener implements JobExecutionListener { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final String jobName; public LogJobListener(String jobName) { this.jobName = jobName; } @Override public void beforeJob(JobExecution jobExecution) { logger.info(jobName + " job starting."); } @Override public void afterJob(JobExecution jobExecution) { logger.info(jobName + "job complete."); String duration = DateTimeUtil.convertToText(jobExecution.getStartTime().getTime(), jobExecution.getEndTime().getTime()); logger.info("====================================================="); logger.info(" " + jobName + " Job Statistics "); logger.info("Exit status : {}", jobExecution.getExitStatus().getExitCode()); logger.info("Start time : {}", jobExecution.getStartTime()); logger.info("End time : {}", jobExecution.getEndTime()); logger.warn("Duration : {}", duration); long skipCount = 0L; long readSkips = 0L; long writeSkips = 0L; long processingSkips = 0L; long readCount = 0L; long writeCount = 0L; for (StepExecution stepExecution : jobExecution.getStepExecutions()) { readSkips += stepExecution.getReadSkipCount(); writeSkips += stepExecution.getWriteSkipCount(); processingSkips += stepExecution.getProcessSkipCount(); readCount += stepExecution.getReadCount(); writeCount += stepExecution.getWriteCount(); skipCount += stepExecution.getSkipCount(); } logger.info("Read count : {}", readCount); logger.info("Write count : {}", writeCount); logger.info("Skip count : {} ({} read / {} processing / {} write)", skipCount, readSkips, processingSkips, writeSkips); logger.info("====================================================="); jobExecution.getExitStatus(); } }