Adding more code to pdp registration handler 56/84156/2
authorramverma <ram.krishna.verma@est.tech>
Thu, 4 Apr 2019 08:57:18 +0000 (08:57 +0000)
committerramverma <ram.krishna.verma@est.tech>
Thu, 4 Apr 2019 08:57:18 +0000 (08:57 +0000)
1) Adding more code to pdp registration handler.
2) Fixing few broken files.

Change-Id: Ic8b68f95f7022ce0572345ea358ff380ec8a3e61
Issue-ID: POLICY-1443
Signed-off-by: ramverma <ram.krishna.verma@est.tech>
main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java
main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupDeployControllerV1.java
main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupDeployProvider.java
main/src/test/java/org/onap/policy/pap/main/rest/TestPdpGroupDeployControllerV1.java

index 4545235..c25ef97 100644 (file)
@@ -30,12 +30,15 @@ import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.pdp.concepts.Pdp;
 import org.onap.policy.models.pdp.concepts.PdpGroup;
 import org.onap.policy.models.pdp.concepts.PdpStateChange;
+import org.onap.policy.models.pdp.concepts.PdpStatistics;
 import org.onap.policy.models.pdp.concepts.PdpStatus;
 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
 import org.onap.policy.models.pdp.concepts.PdpUpdate;
+import org.onap.policy.models.pdp.concepts.ToscaPolicyIdentifier;
 import org.onap.policy.models.pdp.concepts.ToscaPolicyTypeIdentifier;
 import org.onap.policy.models.pdp.enums.PdpState;
 import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
 import org.onap.policy.pap.main.PapConstants;
 import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper;
 import org.onap.policy.pap.main.PolicyPapException;
@@ -61,9 +64,6 @@ public class PdpStatusMessageHandler {
         final PolicyModelsProviderFactoryWrapper modelProviderWrapper =
                 Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class);
         try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
-            // TODO: remove the init() call when PolicyModelProviderFactory changes to call init() before returning the
-            // object
-            databaseProvider.init();
             if (message.getPdpGroup().isEmpty() && message.getPdpSubgroup().isEmpty()) {
                 handlePdpRegistration(message, databaseProvider);
             } else {
@@ -99,7 +99,7 @@ public class PdpStatusMessageHandler {
                 if (!findPdpInstance(message, subGroup.get()).isPresent()) {
                     updatePdpSubGroup(pdpGroup, subGroup.get(), message, databaseProvider);
                 }
-                sendPdpMessage(pdpGroup.getName(), subGroup.get(), message.getInstance(), null);
+                sendPdpMessage(pdpGroup.getName(), subGroup.get(), message.getInstance(), null, databaseProvider);
                 pdpGroupFound = true;
                 break;
             }
@@ -145,7 +145,7 @@ public class PdpStatusMessageHandler {
             if (pdpSubgroup.isPresent()) {
                 pdpInstance = findPdpInstance(message, pdpSubgroup.get());
                 if (pdpInstance.isPresent()) {
-                    processPdpDetails(message, pdpSubgroup, pdpInstance, pdpGroup);
+                    processPdpDetails(message, pdpSubgroup.get(), pdpInstance.get(), pdpGroup, databaseProvider);
                     pdpInstanceFound = true;
                 }
             }
@@ -179,15 +179,16 @@ public class PdpStatusMessageHandler {
         return Optional.ofNullable(pdpInstance);
     }
 
-    private void processPdpDetails(final PdpStatus message, final Optional<PdpSubGroup> pdpSubgroup,
-            final Optional<Pdp> pdpInstance, final PdpGroup pdpGroup) {
-        if (validatePdpDetails(message, pdpGroup, pdpSubgroup.get(), pdpInstance.get())) {
-            LOGGER.debug("PdpInstance details are correct. Saving current state in DB - {}", pdpInstance.get());
-            // TODO: details are correct save health & statistics details in DB
+    private void processPdpDetails(final PdpStatus message, final PdpSubGroup pdpSubgroup, final Pdp pdpInstance,
+            final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException {
+        if (validatePdpDetails(message, pdpGroup, pdpSubgroup, pdpInstance)) {
+            LOGGER.debug("PdpInstance details are correct. Saving current state in DB - {}", pdpInstance);
+            updatePdpHealthStatus(message, pdpSubgroup, pdpInstance, pdpGroup, databaseProvider);
+            updatePdpStatistics(message, pdpSubgroup, pdpInstance, pdpGroup, databaseProvider);
         } else {
-            LOGGER.debug("PdpInstance details are not correct. Sending PdpUpdate message - {}", pdpInstance.get());
-            sendPdpMessage(pdpGroup.getName(), pdpSubgroup.get(), pdpInstance.get().getInstanceId(),
-                    pdpInstance.get().getPdpState());
+            LOGGER.debug("PdpInstance details are not correct. Sending PdpUpdate message - {}", pdpInstance);
+            sendPdpMessage(pdpGroup.getName(), pdpSubgroup, pdpInstance.getInstanceId(), pdpInstance.getPdpState(),
+                    databaseProvider);
         }
     }
 
@@ -201,9 +202,35 @@ public class PdpStatusMessageHandler {
                 && message.getPdpType().equals(subGroup.getPdpType());
     }
 
+    private void updatePdpHealthStatus(final PdpStatus message, final PdpSubGroup pdpSubgroup, final Pdp pdpInstance,
+            final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException {
+        pdpInstance.setHealthy(message.getHealthy());
+        databaseProvider.updatePdp(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubgroup.getPdpType(), pdpInstance);
+
+        LOGGER.debug("Updated Pdp in DB - {}", pdpInstance);
+    }
+
+    private void updatePdpStatistics(final PdpStatus message, final PdpSubGroup pdpSubgroup, final Pdp pdpInstance,
+            final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException {
+        final PdpStatistics pdpStatistics = new PdpStatistics();
+        pdpStatistics.setPdpInstanceId(message.getInstance());
+        pdpStatistics.setPolicyDeployCount(message.getStatistics().getPolicyDeployCount());
+        pdpStatistics.setPolicyDeploySuccessCount(message.getStatistics().getPolicyDeploySuccessCount());
+        pdpStatistics.setPolicyDeployFailCount(message.getStatistics().getPolicyDeployFailCount());
+        pdpStatistics.setPolicyExecutedCount(message.getStatistics().getPolicyExecutedCount());
+        pdpStatistics.setPolicyExecutedSuccessCount(message.getStatistics().getPolicyExecutedSuccessCount());
+        pdpStatistics.setPolicyExecutedFailCount(message.getStatistics().getPolicyExecutedFailCount());
+
+        databaseProvider.updatePdpStatistics(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubgroup.getPdpType(),
+                pdpInstance.getInstanceId(), pdpStatistics);
+
+        LOGGER.debug("Updated PdpStatistics in DB - {}", pdpStatistics);
+    }
+
     private void sendPdpMessage(final String pdpGroupName, final PdpSubGroup subGroup, final String pdpInstanceId,
-            final PdpState pdpState) {
-        final PdpUpdate pdpUpdatemessage = createPdpUpdateMessage(pdpGroupName, subGroup, pdpInstanceId);
+            final PdpState pdpState, final PolicyModelsProvider databaseProvider) throws PfModelException {
+        final PdpUpdate pdpUpdatemessage =
+                createPdpUpdateMessage(pdpGroupName, subGroup, pdpInstanceId, databaseProvider);
         final PdpStateChange pdpStateChangeMessage =
                 createPdpStateChangeMessage(pdpGroupName, subGroup, pdpInstanceId, pdpState);
         final PdpModifyRequestMap requestMap = Registry.get(PapConstants.REG_PDP_MODIFY_MAP, PdpModifyRequestMap.class);
@@ -213,18 +240,28 @@ public class PdpStatusMessageHandler {
     }
 
     private PdpUpdate createPdpUpdateMessage(final String pdpGroupName, final PdpSubGroup subGroup,
-            final String pdpInstanceId) {
+            final String pdpInstanceId, final PolicyModelsProvider databaseProvider) throws PfModelException {
 
         final PdpUpdate update = new PdpUpdate();
         update.setName(pdpInstanceId);
         update.setPdpGroup(pdpGroupName);
         update.setPdpSubgroup(subGroup.getPdpType());
-        // TODO: create code for fetching ToscaPolicy from DB and setting here.
-        // update.setPolicies(subGroup.getPolicies());
+        update.setPolicies(getToscaPolicies(subGroup, databaseProvider));
+
         LOGGER.debug("Created PdpUpdate message - {}", update);
         return update;
     }
 
+    private List<ToscaPolicy> getToscaPolicies(final PdpSubGroup subGroup, final PolicyModelsProvider databaseProvider)
+            throws PfModelException {
+        final List<ToscaPolicy> policies = new ArrayList<>();
+        for (final ToscaPolicyIdentifier policyIdentifier : subGroup.getPolicies()) {
+            policies.addAll(databaseProvider.getPolicyList(policyIdentifier.getName(), policyIdentifier.getVersion()));
+        }
+        LOGGER.debug("Created ToscaPolicy list - {}", policies);
+        return policies;
+    }
+
     private PdpStateChange createPdpStateChangeMessage(final String pdpGroupName, final PdpSubGroup subGroup,
             final String pdpInstanceId, final PdpState pdpState) {
 
index b60f6d1..d67974d 100644 (file)
@@ -38,8 +38,8 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.onap.policy.models.pap.concepts.PdpDeployPolicies;
 import org.onap.policy.models.pap.concepts.PdpGroupDeployResponse;
-import org.onap.policy.models.pap.concepts.PdpPolicies;
 import org.onap.policy.models.pdp.concepts.PdpGroups;
 
 /**
@@ -124,7 +124,7 @@ public class PdpGroupDeployControllerV1 extends PapRestControllerV1 {
 
     public Response deployPolicies(@HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
                     @ApiParam(value = "PDP Policies; only the name and policyVersion are required",
-                                    required = true) PdpPolicies policies) {
+                                    required = true) PdpDeployPolicies policies) {
 
         Pair<Status, PdpGroupDeployResponse> pair = provider.deployPolicies(policies);
 
index dc38e01..f0636fc 100644 (file)
@@ -23,8 +23,8 @@ package org.onap.policy.pap.main.rest;
 import javax.ws.rs.core.Response;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.onap.policy.models.pap.concepts.PdpDeployPolicies;
 import org.onap.policy.models.pap.concepts.PdpGroupDeployResponse;
-import org.onap.policy.models.pap.concepts.PdpPolicies;
 import org.onap.policy.models.pdp.concepts.PdpGroups;
 
 /**
@@ -63,7 +63,7 @@ public class PdpGroupDeployProvider {
      * @param policies PDP policies
      * @return a pair containing the status and the response
      */
-    public Pair<Response.Status, PdpGroupDeployResponse> deployPolicies(PdpPolicies policies) {
+    public Pair<Response.Status, PdpGroupDeployResponse> deployPolicies(PdpDeployPolicies policies) {
 
         /*
          * TODO Lock for updates - return error if already locked.
index e02e85c..18e17b0 100644 (file)
@@ -32,11 +32,11 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.junit.Test;
+import org.onap.policy.models.pap.concepts.PdpDeployPolicies;
 import org.onap.policy.models.pap.concepts.PdpGroupDeployResponse;
-import org.onap.policy.models.pap.concepts.PdpPolicies;
-import org.onap.policy.models.pap.concepts.Policy;
 import org.onap.policy.models.pdp.concepts.PdpGroup;
 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
+import org.onap.policy.models.pdp.concepts.ToscaPolicyIdentifierOptVersion;
 
 public class TestPdpGroupDeployControllerV1 extends CommonPapRestServer {
 
@@ -70,7 +70,7 @@ public class TestPdpGroupDeployControllerV1 extends CommonPapRestServer {
 
     @Test
     public void testDeployPolicies() throws Exception {
-        final Entity<PdpPolicies> entgrp = makePdpPoliciesEntity();
+        final Entity<PdpDeployPolicies> entgrp = makePdpPoliciesEntity();
 
         final Invocation.Builder invocationBuilder = sendRequest(DEPLOY_POLICIES_ENDPOINT);
         Response rawresp = invocationBuilder.post(entgrp);
@@ -100,15 +100,15 @@ public class TestPdpGroupDeployControllerV1 extends CommonPapRestServer {
         return Entity.entity(group, MediaType.APPLICATION_JSON);
     }
 
-    private Entity<PdpPolicies> makePdpPoliciesEntity() {
-        final Policy pol1 = new Policy();
+    private Entity<PdpDeployPolicies> makePdpPoliciesEntity() {
+        final ToscaPolicyIdentifierOptVersion pol1 = new ToscaPolicyIdentifierOptVersion();
         pol1.setName("policy-a");
-        pol1.setPolicyVersion("1");
+        pol1.setVersion("1");
 
-        final Policy pol2 = new Policy();
+        final ToscaPolicyIdentifierOptVersion pol2 = new ToscaPolicyIdentifierOptVersion();
         pol2.setName("policy-b");
 
-        final PdpPolicies policies = new PdpPolicies();
+        final PdpDeployPolicies policies = new PdpDeployPolicies();
         policies.setPolicies(Arrays.asList(pol1, pol2));
 
         return Entity.entity(policies, MediaType.APPLICATION_JSON);