From 82ae8066c3e031ef326161e962221e166acc4d4e Mon Sep 17 00:00:00 2001 From: jhh Date: Mon, 11 Jul 2022 19:41:36 -0500 Subject: Add thread dump capabilities A script provided can be executed at any time. The programmatic solution will happen when controllers (application) timeouts are detected. Issue-ID: POLICY-4197 Signed-off-by: jhh Change-Id: I1cca5f38e1f9b4f3fd7047e64dc58625ead5e1d1 Signed-off-by: jhh --- .../drools/healthcheck/HealthCheckManager.java | 22 ++++++++++++++++++++-- .../drools/healthcheck/HealthCheckManagerTest.java | 3 +++ 2 files changed, 23 insertions(+), 2 deletions(-) (limited to 'feature-healthcheck') diff --git a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java index b310168d..59d0bfbe 100644 --- a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java +++ b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java @@ -21,6 +21,7 @@ package org.onap.policy.drools.healthcheck; import com.google.common.base.Strings; +import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -168,7 +169,7 @@ public class HealthCheckManager implements HealthCheck { } CompletableFuture[] reportFutures = futures(getControllers()); - return summary(engineHealthcheck(), reportFutures); + return log(summary(engineHealthcheck(), reportFutures)); } @Override @@ -178,7 +179,7 @@ public class HealthCheckManager implements HealthCheck { * it could be useful for troubleshooting. */ CompletableFuture[] reportFutures = futures(List.of(controller)); - return summary(engineHealthcheck(), reportFutures); + return log(summary(engineHealthcheck(), reportFutures)); } @Override @@ -470,6 +471,23 @@ public class HealthCheckManager implements HealthCheck { return false; } + protected boolean isTimeout(Reports reports) { + return + reports.getDetails() + .stream() + .anyMatch(report -> report.getCode() == TIMEOUT_CODE); + } + + protected Reports log(Reports reports) { + if (isTimeout(reports)) { + logger.warn("Healthcheck Timeout encountered"); + Arrays.stream(ManagementFactory.getThreadMXBean() + .dumpAllThreads(true, true, 100)) + .forEach(threadInfo -> logger.info("Healthcheck Timeout Encountered:\n{}", threadInfo)); + } + return reports; + } + // the following methods may be overridden by junit tests protected PolicyEngine getEngineManager() { diff --git a/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckManagerTest.java b/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckManagerTest.java index 73d70da9..20cfa9e0 100644 --- a/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckManagerTest.java +++ b/feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckManagerTest.java @@ -238,6 +238,9 @@ public class HealthCheckManagerTest { /* with argument */ + reports = monitor.controllerHealthcheck(controller1); + logger.info("{}", reports); + reports = monitor.controllerHealthcheck(controller2); logger.info("{}", reports); -- cgit 1.2.3-korg