common-smartgears/src/main/java/org/gcube/smartgears/health/HealthTask.java

50 lines
1.3 KiB
Java
Raw Normal View History

2023-02-01 14:40:31 +01:00
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;
2023-03-31 14:16:23 +02:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2023-02-01 14:40:31 +01:00
public class HealthTask extends TimerTask{
2023-03-31 14:16:23 +02:00
private static final Logger log = LoggerFactory.getLogger(HealthTask.class);
2023-02-01 14:40:31 +01:00
private HealthResponse response;
private HealthManager healthManager;
public HealthTask(HealthManager healthManager) {
this.healthManager = healthManager;
}
@Override
public void run() {
2023-03-31 14:16:23 +02:00
2023-02-01 14:40:31 +01:00
List<HealthCheck> checks = healthManager.getChecks();
List<HealthCheckResponse> 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);
2024-03-11 10:22:25 +01:00
log.trace("health task executed with total status {}",totalStatus);
2023-02-01 14:40:31 +01:00
}
public HealthResponse getResponse() {
return response;
}
private HealthCheckResponse wrap(HealthCheck check){
try {
return check.check();
}catch (Throwable t) {
2024-01-24 16:29:51 +01:00
return HealthCheckResponse.builder(check.getName()).down().error(t.getMessage()).build();
2023-02-01 14:40:31 +01:00
}
}
}