diff options
Diffstat (limited to 'main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java')
-rw-r--r-- | main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java | 67 |
1 files changed, 25 insertions, 42 deletions
diff --git a/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java b/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java index e0b00c71..3c871352 100644 --- a/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java +++ b/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java @@ -23,7 +23,7 @@ package org.onap.policy.pap.main.comm; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import org.apache.commons.lang3.tuple.Pair; + import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.pdp.concepts.Pdp; @@ -38,7 +38,6 @@ 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.models.tosca.authorative.concepts.ToscaPolicyIdentifier; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; import org.onap.policy.pap.main.PapConstants; import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper; import org.onap.policy.pap.main.PolicyPapException; @@ -64,7 +63,7 @@ public class PdpStatusMessageHandler { final PolicyModelsProviderFactoryWrapper modelProviderWrapper = Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class); try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) { - if (message.getPdpGroup().isEmpty() && message.getPdpSubgroup().isEmpty()) { + if (message.getPdpGroup() == null && message.getPdpSubgroup() == null) { handlePdpRegistration(message, databaseProvider); } else { handlePdpHeartbeat(message, databaseProvider); @@ -89,11 +88,9 @@ public class PdpStatusMessageHandler { throws PfModelException { boolean pdpGroupFound = false; Optional<PdpSubGroup> subGroup = null; - final List<Pair<String, String>> supportedPolicyTypesPair = createSupportedPolictTypesPair(message); - final PdpGroupFilter filter = PdpGroupFilter.builder().pdpType(message.getPdpType()).build(); - // TODO setSupportedTypes(supportedPolicyTypesPair) - final List<PdpGroup> pdpGroups = - databaseProvider.getFilteredPdpGroups(filter); + final PdpGroupFilter filter = PdpGroupFilter.builder().pdpType(message.getPdpType()) + .policyTypeList(message.getSupportedPolicyTypes()).matchPolicyTypesExactly(true).build(); + final List<PdpGroup> pdpGroups = databaseProvider.getFilteredPdpGroups(filter); for (final PdpGroup pdpGroup : pdpGroups) { subGroup = findPdpSubGroup(message, pdpGroup); if (subGroup.isPresent()) { @@ -109,20 +106,12 @@ public class PdpStatusMessageHandler { return pdpGroupFound; } - private List<Pair<String, String>> createSupportedPolictTypesPair(final PdpStatus message) { - final List<Pair<String, String>> supportedPolicyTypesPair = new ArrayList<>(); - for (final ToscaPolicyTypeIdentifier policyTypeIdent : message.getSupportedPolicyTypes()) { - supportedPolicyTypesPair.add(Pair.of(policyTypeIdent.getName(), policyTypeIdent.getVersion())); - } - return supportedPolicyTypesPair; - } - private void updatePdpSubGroup(final PdpGroup pdpGroup, final PdpSubGroup pdpSubGroup, final PdpStatus message, final PolicyModelsProvider databaseProvider) throws PfModelException { final Pdp pdpInstance = new Pdp(); pdpInstance.setInstanceId(message.getName()); - pdpInstance.setPdpState(message.getState()); + pdpInstance.setPdpState(PdpState.ACTIVE); pdpInstance.setHealthy(message.getHealthy()); pdpInstance.setMessage(message.getDescription()); pdpSubGroup.getPdpInstances().add(pdpInstance); @@ -140,8 +129,8 @@ public class PdpStatusMessageHandler { Optional<PdpSubGroup> pdpSubgroup = null; Optional<Pdp> pdpInstance = null; - final PdpGroupFilter filter = PdpGroupFilter.builder().name(message.getPdpGroup()) - .version(PdpGroupFilter.LATEST_VERSION).build(); + final PdpGroupFilter filter = + PdpGroupFilter.builder().name(message.getPdpGroup()).version(PdpGroupFilter.LATEST_VERSION).build(); final List<PdpGroup> pdpGroups = databaseProvider.getFilteredPdpGroups(filter); if (!pdpGroups.isEmpty()) { final PdpGroup pdpGroup = pdpGroups.get(0); @@ -164,7 +153,7 @@ public class PdpStatusMessageHandler { private Optional<PdpSubGroup> findPdpSubGroup(final PdpStatus message, final PdpGroup pdpGroup) { PdpSubGroup pdpSubgroup = null; for (final PdpSubGroup subGroup : pdpGroup.getPdpSubgroups()) { - if (message.getPdpSubgroup().equals(subGroup.getPdpType())) { + if (message.getPdpType().equals(subGroup.getPdpType())) { pdpSubgroup = subGroup; break; } @@ -183,19 +172,30 @@ public class PdpStatusMessageHandler { return Optional.ofNullable(pdpInstance); } - private void processPdpDetails(final PdpStatus message, final PdpSubGroup pdpSubgroup, final Pdp pdpInstance, + 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)) { + if (PdpState.TERMINATED.equals(message.getState())) { + processPdpTermination(message, pdpSubGroup, pdpInstance, pdpGroup, databaseProvider); + } else 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); + updatePdpHealthStatus(message, pdpSubGroup, pdpInstance, pdpGroup, databaseProvider); } else { LOGGER.debug("PdpInstance details are not correct. Sending PdpUpdate message - {}", pdpInstance); - sendPdpMessage(pdpGroup.getName(), pdpSubgroup, pdpInstance.getInstanceId(), pdpInstance.getPdpState(), + sendPdpMessage(pdpGroup.getName(), pdpSubGroup, pdpInstance.getInstanceId(), pdpInstance.getPdpState(), databaseProvider); } } + private void processPdpTermination(final PdpStatus message, final PdpSubGroup pdpSubGroup, final Pdp pdpInstance, + final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException { + pdpSubGroup.getPdpInstances().remove(pdpInstance); + pdpSubGroup.setCurrentInstanceCount(pdpSubGroup.getCurrentInstanceCount() - 1); + databaseProvider.updatePdpSubGroup(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubGroup); + + LOGGER.debug("Deleted PdpInstance - {} belonging to PdpSubGroup - {} and PdpGroup - {}", pdpInstance, + pdpSubGroup, pdpGroup); + } + private boolean validatePdpDetails(final PdpStatus message, final PdpGroup pdpGroup, final PdpSubGroup subGroup, final Pdp pdpInstanceDetails) { @@ -214,23 +214,6 @@ public class PdpStatusMessageHandler { 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.getName()); - 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 PolicyModelsProvider databaseProvider) throws PfModelException { final PdpUpdate pdpUpdatemessage = |