in src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java [63:102]
public StatusSummary run() {
StatusSummary checkStatusSummary;
boolean enabled = config.healthCheckEnabled(name);
final long ts = System.currentTimeMillis();
ListenableFuture<StatusSummary> resultFuture =
executor.submit(
() -> {
Result healthy;
try {
healthy = enabled ? doCheck() : Result.DISABLED;
} catch (Exception e) {
log.warn("Check {} failed", name, e);
healthy = Result.FAILED;
}
Long elapsed = System.currentTimeMillis() - ts;
StatusSummary statusSummary =
new StatusSummary(healthy, ts, elapsed, Collections.emptyMap());
if (statusSummary.isFailure()) {
failureCounterMetric.increment();
}
latencyMetric.record(elapsed, TimeUnit.MILLISECONDS);
return statusSummary;
});
try {
checkStatusSummary = resultFuture.get(timeout, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
log.warn("Check {} timed out", name, e);
Long elapsed = System.currentTimeMillis() - ts;
checkStatusSummary = new StatusSummary(Result.TIMEOUT, ts, elapsed, Collections.emptyMap());
failureCounterMetric.increment();
latencyMetric.record(elapsed, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException e) {
log.warn("Check {} failed while waiting for its future result", name, e);
Long elapsed = System.currentTimeMillis() - ts;
checkStatusSummary = new StatusSummary(Result.FAILED, ts, elapsed, Collections.emptyMap());
failureCounterMetric.increment();
latencyMetric.record(elapsed, TimeUnit.MILLISECONDS);
}
return checkStatusSummary;
}