This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 215eca85e120deaf46c2886dc025919f0b0aeefe Author: LanKhuat <[email protected]> AuthorDate: Fri Mar 27 15:47:41 2020 +0700 JAMES-3117 Add logging for callers of HealthChecks --- .../org/apache/james/PeriodicalHealthChecks.java | 32 ++++++++++++++++++++++ .../dto/HealthCheckExecutionResultDto.java | 4 +-- .../james/webadmin/routes/HealthCheckRoutes.java | 9 ++++-- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java b/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java index 86d5806..2d80593 100644 --- a/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java +++ b/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java @@ -26,7 +26,10 @@ import javax.annotation.PreDestroy; import javax.inject.Inject; import org.apache.james.core.healthcheck.HealthCheck; +import org.apache.james.core.healthcheck.Result; import org.apache.james.lifecycle.api.Startable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import reactor.core.Disposable; import reactor.core.publisher.Flux; @@ -36,6 +39,7 @@ import reactor.core.scheduler.Schedulers; public class PeriodicalHealthChecks implements Startable { + private static final Logger LOGGER = LoggerFactory.getLogger(PeriodicalHealthChecks.class); private final Set<HealthCheck> healthChecks; private final Scheduler scheduler; private final Duration period; @@ -53,10 +57,38 @@ public class PeriodicalHealthChecks implements Startable { .flatMap(any -> Flux.fromIterable(healthChecks) .flatMap(healthCheck -> Mono.fromCallable(healthCheck::check))) + .flatMap(result -> + Mono.fromRunnable(() -> logResult(result))) + .onErrorContinue(this::logError) .subscribeOn(Schedulers.elastic()) .subscribe(); } + private void logResult(Result result) { + switch (result.getStatus()) { + case HEALTHY: + break; + case DEGRADED: + LOGGER.warn("DEGRADED: {} : {}", result.getComponentName().getName(), result.getCause()); + break; + case UNHEALTHY: + if (result.getError().isPresent()) { + LOGGER.error("UNHEALTHY: {} : {} : {}", result.getComponentName().getName(), result.getCause(), result.getError().get()); + break; + } + + LOGGER.error("UNHEALTHY: {} : {}", result.getComponentName().getName(), result.getCause()); + break; + } + } + + private void logError(Throwable error, Object triggeringValue) { + if (triggeringValue instanceof Result) { + Result result = (Result) triggeringValue; + LOGGER.error("HealthCheck error for: {}, Cause: {}", result.getComponentName(), error); + } + } + @PreDestroy public void stop() { disposable.dispose(); diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckExecutionResultDto.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckExecutionResultDto.java index 2663b3e..d3bd774 100644 --- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckExecutionResultDto.java +++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckExecutionResultDto.java @@ -19,8 +19,6 @@ package org.apache.james.webadmin.dto; -import java.util.Optional; - import org.apache.james.core.healthcheck.Result; import com.fasterxml.jackson.annotation.JsonPropertyOrder; @@ -48,7 +46,7 @@ public class HealthCheckExecutionResultDto { return healthCheckResult.getStatus().getValue(); } - public Optional<String> getCause() { + public String getCause() { return healthCheckResult.getCause(); } diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java index 520a7a5..da339b9 100644 --- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java +++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java @@ -152,14 +152,19 @@ public class HealthCheckRoutes implements PublicRoutes { private void logFailedCheck(Result result) { switch (result.getStatus()) { case UNHEALTHY: + if (result.getError().isPresent()) { + LOGGER.error("HealthCheck failed for {} : {} : {}", result.getComponentName().getName(), result.getCause(), result.getError().get()); + break; + } + LOGGER.error("HealthCheck failed for {} : {}", result.getComponentName().getName(), - result.getCause().orElse("")); + result.getCause()); break; case DEGRADED: LOGGER.warn("HealthCheck is unstable for {} : {}", result.getComponentName().getName(), - result.getCause().orElse("")); + result.getCause()); break; case HEALTHY: // Here only to fix a warning, such cases are already filtered --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
