
fi.evolver.basics.spring.status.component.TaskStatusReporter Maven / Gradle / Ivy
package fi.evolver.basics.spring.status.component;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import fi.evolver.basics.spring.job.JobStatusRepository;
import fi.evolver.basics.spring.job.entity.JobStatus;
import fi.evolver.basics.spring.status.model.ComponentStatus;
import fi.evolver.basics.spring.status.model.Reportable;
@Component
public class TaskStatusReporter implements Reportable {
private final JobStatusRepository jobStatusRepository;
@Autowired
public TaskStatusReporter(JobStatusRepository jobStatusRepository) {
this.jobStatusRepository = jobStatusRepository;
}
@Override
public List getStatus() {
return jobStatusRepository.findAll().stream()
.map(TaskStatusReporter::getStatus)
.collect(Collectors.toList());
}
private static ComponentStatus getStatus(JobStatus job) {
LocalDateTime now = LocalDateTime.now();
Map properties = new LinkedHashMap<>();
properties.put("SuccessRate", Math.round(job.getSuccessRate() * 100));
if (job.getLastFailureStart() != null)
properties.put("TimeSinceFailureMs", Math.max(0L, ChronoUnit.MILLIS.between(job.getLastFailureStart(), now)));
if (job.getLastSuccessStart() != null)
properties.put("TimeSinceSuccessMs", Math.max(0L, ChronoUnit.MILLIS.between(job.getLastSuccessStart(), now)));
if (job.getLastActualActivity() != null)
properties.put("TimeSinceActivityMs", Math.max(0L, ChronoUnit.MILLIS.between(job.getLastActualActivity(), now)));
return new ComponentStatus("Task", job.getName(), properties);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy