aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPrakhar Pandey <prakhar.pandey@bell.ca>2022-02-10 14:14:13 -0500
committerPrakhar Pandey <prakhar.pandey@bell.ca>2022-02-11 11:36:06 -0500
commit0fdbdd8200b8a16243ce96a2a039dbc3922d3171 (patch)
treead512602d2c74be6ba04bed74655ca29b6e8dacb
parent873803eca00830dc3ecb61e610d90710f64a8242 (diff)
Improve PAP healthcheck api to verify DB connectivity
This commit improves PAP healthcheck API to enable verification of PAP to DB connectivity. Issue-ID: POLICY-3763 Signed-off-by: Prakhar Pandey <prakhar.pandey@bell.ca> Change-Id: I14353572a00e68a89161bcffd2ec3476b4a4c303
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckProvider.java34
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckRestControllerV1.java4
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java4
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/TestHealthCheckRestControllerV1.java19
4 files changed, 52 insertions, 9 deletions
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckProvider.java b/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckProvider.java
index dbbb49e8..f7cfb363 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckProvider.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckProvider.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
* Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property.
- * Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
+ * Modifications Copyright (C) 2021-2022 Bell Canada. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,8 +25,12 @@ package org.onap.policy.pap.main.rest;
import org.onap.policy.common.endpoints.report.HealthCheckReport;
import org.onap.policy.common.utils.network.NetworkUtil;
import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.models.base.PfModelRuntimeException;
import org.onap.policy.pap.main.PapConstants;
import org.onap.policy.pap.main.startstop.PapActivator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
@@ -42,21 +46,45 @@ public class HealthCheckProvider {
private static final String URL = NetworkUtil.getHostname();
private static final String NAME = "Policy PAP";
+ @Autowired
+ private PolicyStatusProvider policyStatusProvider;
+ private static final Logger LOGGER = LoggerFactory.getLogger(HealthCheckProvider.class);
+
/**
* Performs the health check of PAP service.
*
+ * @param checkDbConnectivity flag to enable pap to db connectivity verification
* @return Report containing health check status
*/
- public HealthCheckReport performHealthCheck() {
+ public HealthCheckReport performHealthCheck(boolean checkDbConnectivity) {
final var report = new HealthCheckReport();
report.setName(NAME);
report.setUrl(URL);
boolean alive = Registry.get(PapConstants.REG_PAP_ACTIVATOR, PapActivator.class).isAlive();
+ if (alive && checkDbConnectivity) {
+ alive = verifyPapDbConnectivity();
+ }
+
report.setHealthy(alive);
- report.setCode(alive ? 200 : 500);
+ report.setCode(alive ? 200 : 503);
report.setMessage(alive ? ALIVE : NOT_ALIVE);
return report;
}
+
+ /**
+ * Verifies the connectivity between pap component & policy database.
+ *
+ * @return boolean signaling the verification result
+ */
+ private boolean verifyPapDbConnectivity() {
+ try {
+ policyStatusProvider.getPolicyStatus();
+ return true;
+ } catch (PfModelRuntimeException pfModelRuntimeException) {
+ LOGGER.warn("Policy pap to database connection check failed. Details - ", pfModelRuntimeException);
+ return false;
+ }
+ }
}
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckRestControllerV1.java b/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckRestControllerV1.java
index 19e47646..896f2aac 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckRestControllerV1.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckRestControllerV1.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Copyright (C) 2019,2021 Nordix Foundation.
* Modifications Copyright (C) 2019 AT&T Intellectual Property.
- * Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
+ * Modifications Copyright (C) 2021-2022 Bell Canada. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ public class HealthCheckRestControllerV1 extends PapRestControllerV1 {
@ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE),
@ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE)})
public ResponseEntity<HealthCheckReport> healthcheck() {
- return ResponseEntity.ok().body(provider.performHealthCheck());
+ return ResponseEntity.ok().body(provider.performHealthCheck(true));
}
}
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java b/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java
index d2a730eb..3ad740d3 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java
@@ -145,8 +145,8 @@ public class PolicyComponentsHealthCheckProvider {
throw new PfModelRuntimeException(Status.BAD_REQUEST, "Client Health check interrupted ", exp);
}
- // Check PAP itself
- HealthCheckReport papReport = new HealthCheckProvider().performHealthCheck();
+ // Check PAP itself excluding connectivity to Policy DB
+ HealthCheckReport papReport = new HealthCheckProvider().performHealthCheck(false);
papReport
.setUrl(isHttps ? "https://" : "http://" + papReport.getUrl() + ":" + port + POLICY_PAP_HEALTHCHECK_URI);
if (!papReport.isHealthy()) {
diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/TestHealthCheckRestControllerV1.java b/main/src/test/java/org/onap/policy/pap/main/rest/TestHealthCheckRestControllerV1.java
index 6dd7103b..bc97c634 100644
--- a/main/src/test/java/org/onap/policy/pap/main/rest/TestHealthCheckRestControllerV1.java
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/TestHealthCheckRestControllerV1.java
@@ -2,6 +2,7 @@
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
* Modifications Copyright (C) 2019 AT&T Intellectual Property.
+ * Modifications Copyright (C) 2022 Bell Canada. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,10 +23,13 @@
package org.onap.policy.pap.main.rest;
import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
import javax.ws.rs.client.Invocation;
import org.junit.Test;
import org.onap.policy.common.endpoints.report.HealthCheckReport;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.springframework.boot.test.mock.mockito.MockBean;
/**
* Class to perform unit test of {@link PapRestServer}.
@@ -36,6 +40,9 @@ public class TestHealthCheckRestControllerV1 extends CommonPapRestServer {
private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
+ @MockBean
+ private PolicyStatusProvider policyStatusProvider;
+
@Test
public void testSwagger() throws Exception {
super.testSwagger(HEALTHCHECK_ENDPOINT);
@@ -52,13 +59,21 @@ public class TestHealthCheckRestControllerV1 extends CommonPapRestServer {
}
@Test
- public void testHealthCheck_500() throws Exception {
+ public void testHealthCheckActivatorFailure() throws Exception {
markActivatorDead();
final Invocation.Builder invocationBuilder = sendRequest(HEALTHCHECK_ENDPOINT);
final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
- validateHealthCheckReport(NAME, SELF, false, 500, NOT_ALIVE, report);
+ validateHealthCheckReport(NAME, SELF, false, 503, NOT_ALIVE, report);
+ }
+
+ @Test
+ public void testHealthCheckDbConnectionFailure() throws Exception {
+ when(policyStatusProvider.getPolicyStatus()).thenThrow(PfModelRuntimeException.class);
+ final Invocation.Builder invocationBuilder = sendRequest(HEALTHCHECK_ENDPOINT);
+ final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
+ validateHealthCheckReport(NAME, SELF, false, 503, NOT_ALIVE, report);
}
private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,