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;
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 {
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;
}
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;
}
}
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);
}
}
&& 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);
}
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) {
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 {
@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);
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);