package io.dropwizard.db;
import com.codahale.metrics.health.HealthCheck;
import io.dropwizard.util.Duration;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
public class TimeBoundHealthCheck {
private final ExecutorService executorService;
private final Duration duration;
public TimeBoundHealthCheck(ExecutorService executorService, Duration duration) {
this.executorService = executorService;
this.duration = duration;
}
public HealthCheck.Result check(Callable<HealthCheck.Result> c) {
HealthCheck.Result result;
try {
result = executorService.submit(c).get(duration.getQuantity(), duration.getUnit());
} catch (Exception e) {
result = HealthCheck.Result.unhealthy("Unable to successfully check in %s", duration);
}
return result;
}
}