BatchStatusService.java
package com.sintia.ffl.admin.optique.catalogue.batch.batchservice;
import com.sintia.ffl.admin.optique.catalogue.util.BatchCatalogueOptique;
import com.sintia.ffl.adminui.commons.dto.BatchInfoDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.EnumUtils;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobInstance;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Optional;
import static org.springframework.batch.core.BatchStatus.COMPLETED;
import static org.springframework.batch.core.BatchStatus.FAILED;
import static org.springframework.batch.core.BatchStatus.STARTED;
@Service
@Slf4j
public class BatchStatusService {
private final JobExplorer jobExplorer;
public BatchStatusService(JobExplorer jobExplorer) {
this.jobExplorer = jobExplorer;
}
public BatchInfoDTO statutByJobName(String jobName) {
// Pas d'exécution en cours, retourner le statut de la dernière exécution.
JobInstance jobInstance = jobExplorer.getLastJobInstance(jobName);
if(jobInstance != null) {
JobExecution lastJobExecution = jobExplorer.getLastJobExecution(jobInstance);
return Optional.ofNullable(lastJobExecution)
.map(je -> new BatchInfoDTO(je.getCreateTime(), mapBatchStatus(je.getStatus())))
.orElse(null);
} else {
return null;
}
}
private BatchStatus mapBatchStatus(BatchStatus batchStatus){
switch (batchStatus){
case STARTED:
case STARTING:
return STARTED;
case FAILED:
case STOPPED:
case UNKNOWN:
case ABANDONED:
return FAILED;
default:
return COMPLETED;
}
}
public BatchInfoDTO statutTousJobs(String jobName) {
BatchInfoDTO batchInfoDTO =null;
if(BatchCatalogueOptique.JOB_PEREMPTION_VERRES.getJobName().equals(jobName)){
BatchInfoDTO batchInfoDTOPeremption = this.statutByJobName(jobName);
BatchInfoDTO batchInfoDTOPeremptionVerresAbsents = this.statutByJobName(BatchCatalogueOptique.JOB_PEREMPTION_VERRES_ABSENTS.getJobName());
if(batchInfoDTOPeremption != null){
if(batchInfoDTOPeremptionVerresAbsents != null){
if(batchInfoDTOPeremptionVerresAbsents.getStartDate().after(batchInfoDTOPeremption.getStartDate())){
batchInfoDTO = batchInfoDTOPeremptionVerresAbsents;
}
else{
batchInfoDTO = batchInfoDTOPeremption;
}
} else {
batchInfoDTO = batchInfoDTOPeremption;
}
} else if (batchInfoDTOPeremptionVerresAbsents != null){
batchInfoDTO = batchInfoDTOPeremptionVerresAbsents;
}
} else {
batchInfoDTO = this.statutByJobName(jobName);
}
if(batchInfoDTO == null){
log.debug("Batch {} : no previous execution", jobName);
} else {
log.debug(
"Batch {} : status {}, started at {}",
jobName,
batchInfoDTO.getBatchStatus(),
batchInfoDTO.getStartDate()
);
}
return batchInfoDTO;
}
}