Created
May 21, 2016 19:47
-
-
Save idyoshin/74ad80841a51e1be62208f3fd58eeb6a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.apache.commons.collections.CollectionUtils; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import org.springframework.batch.core.*; | |
import org.springframework.batch.core.explore.JobExplorer; | |
import org.springframework.stereotype.Service; | |
import javax.inject.Inject; | |
import java.math.BigDecimal; | |
import java.time.ZoneId; | |
import java.util.ArrayList; | |
import java.util.Date; | |
import java.util.List; | |
import java.util.stream.Collectors; | |
/** | |
* Сервис который предоставляет возможности просмотра деталей выполнения задачи | |
* | |
*/ | |
@Service | |
public class JobInstanceExplorer { | |
private static final Logger log = LoggerFactory.getLogger(JobInstanceExplorer.class); | |
private JSR310PersistenceConverters.LocalDateTimeConverter converter = new JSR310PersistenceConverters.LocalDateTimeConverter(); | |
@Inject | |
private JobExplorer jobExplorer; | |
public JobExecutionDetails fetchDetailsOfExecution(JobExecution jobExecution) { | |
JobExecutionDetails details = new JobExecutionDetails(); | |
details.setCreateTime(converter.convertToEntityAttribute(jobExecution.getCreateTime())); | |
details.setEndTime(converter.convertToEntityAttribute(jobExecution.getEndTime())); | |
details.setStartTime(converter.convertToEntityAttribute(jobExecution.getStartTime())); | |
details.setLastUpdated(converter.convertToEntityAttribute(jobExecution.getLastUpdated())); | |
details.setStatus(jobExecution.getStatus()); | |
details.setExitStatus(jobExecution.getExitStatus()); | |
details.setJobConfigurationName(jobExecution.getJobConfigurationName()); | |
details.setExecutionData(jobExecution.getExecutionContext().entrySet()); | |
jobExecution.getFailureExceptions() | |
.stream() | |
.forEach(o -> details.getFailureExceptions().add(new ThrowableDetails(o))); | |
for (String name : jobExecution.getJobParameters().getParameters().keySet()) { | |
JobParameter param = jobExecution.getJobParameters().getParameters().get(name); | |
JobParameterDetails parameterDetails = new JobParameterDetails(); | |
parameterDetails.setName(name); | |
switch (param.getType()) { | |
case DATE: { | |
parameterDetails.setDateValue(((Date) param.getValue()).toInstant().atZone(ZoneId.systemDefault()).toLocalDate()); | |
break; | |
} | |
case DOUBLE: { | |
parameterDetails.setDecimalValue(new BigDecimal((Double) param.getValue())); | |
break; | |
} | |
case LONG: { | |
parameterDetails.setLongValue((Long) param.getValue()); | |
break; | |
} | |
case STRING: { | |
parameterDetails.setStringValue((String) param.getValue()); | |
break; | |
} | |
} | |
details.getJobParameters().add(parameterDetails); | |
} | |
details.setStepExecutions( | |
jobExecution.getStepExecutions() | |
.stream() | |
.map(o -> new StepExecutionDetails(o)) | |
.collect(Collectors.toList()) | |
); | |
return details; | |
} | |
/** | |
* Возвращает детали данного выполнения | |
* | |
* @param request | |
* @return | |
*/ | |
public List<JobExecutionDetails> fetchCurrentDetails(Long request) { | |
log.debug("trying to fetch JobExecutionDetails for {}", request); | |
List<JobExecution> data; | |
JobInstance job = jobExplorer.getJobInstance(request); | |
if (job == null) { | |
log.debug("cannot find JobExecutionDetails for {}", request); | |
return null; | |
} | |
data = jobExplorer.getJobExecutions(job); | |
List<JobExecutionDetails> response = new ArrayList<>(); | |
for (JobExecution jobExecution : data) { | |
response.add(fetchDetailsOfExecution(jobExecution)); | |
} | |
return response; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment