package org.gcube.smartgears.health; import java.util.List; import java.util.TimerTask; import java.util.stream.Collectors; import org.gcube.common.health.api.HealthCheck; import org.gcube.common.health.api.Status; import org.gcube.common.health.api.response.HealthCheckResponse; public class HealthTask extends TimerTask{ private HealthResponse response; private HealthManager healthManager; public HealthTask(HealthManager healthManager) { this.healthManager = healthManager; } @Override public void run() { List checks = healthManager.getChecks(); List responses = checks.stream().map(c -> this.wrap(c)).collect(Collectors.toList()); Status totalStatus = responses.stream().anyMatch(r -> r.getStatus().equals(Status.DOWN)) ? Status.DOWN : Status.UP; this.response = new HealthResponse(totalStatus, responses); } public HealthResponse getResponse() { return response; } private HealthCheckResponse wrap(HealthCheck check){ try { return check.check(); }catch (Throwable t) { return HealthCheckResponse.builder(check.getName()).down().withMessage("unexpected error executing check").build(); } } }