aboutsummaryrefslogtreecommitdiffstats
path: root/feature-healthcheck/src
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2022-07-11 19:41:36 -0500
committerjhh <jorge.hernandez-herrero@att.com>2022-07-12 09:42:57 -0500
commit82ae8066c3e031ef326161e962221e166acc4d4e (patch)
tree4a38f636dfaaa4518143a57228e99e1a96ecf6e2 /feature-healthcheck/src
parentbbc16d30056655a1a569305d546b68289f81972b (diff)
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 <jorge.hernandez-herrero@att.com> Change-Id: I1cca5f38e1f9b4f3fd7047e64dc58625ead5e1d1 Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'feature-healthcheck/src')
-rw-r--r--feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java22
-rw-r--r--feature-healthcheck/src/test/java/org/onap/policy/drools/healthcheck/HealthCheckManagerTest.java3
2 files changed, 23 insertions, 2 deletions
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<Report>[] 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<Report>[] 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);