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]

Reply via email to