X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fclds%2Fclient%2FPolicyClient.java;h=ed29afe7e96deb1cbaa07bf1b51a77551fa193de;hb=f0fdf8044bcfb29c87ec821705e8e8e38db50e87;hp=d19c2167ed123ef06e55f87d989c985159dc954e;hpb=8fab8020f0bb45c8bf048c929fba13db638b9fc1;p=clamp.git diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java index d19c2167..ed29afe7 100644 --- a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java +++ b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java @@ -5,16 +5,16 @@ * Copyright (C) 2017 AT&T Intellectual Property. 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. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END============================================ * =================================================================== @@ -23,47 +23,78 @@ package org.onap.clamp.clds.client; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.ws.rs.BadRequestException; + +import org.onap.clamp.clds.exception.policy.PolicyClientException; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.refprop.RefProp; -import org.onap.policy.api.*; +import org.onap.clamp.clds.util.LoggingUtils; +import org.onap.policy.api.AttributeType; +import org.onap.policy.api.ConfigRequestParameters; +import org.onap.policy.api.DeletePolicyCondition; +import org.onap.policy.api.DeletePolicyParameters; +import org.onap.policy.api.PolicyChangeResponse; +import org.onap.policy.api.PolicyConfig; +import org.onap.policy.api.PolicyConfigException; +import org.onap.policy.api.PolicyConfigType; +import org.onap.policy.api.PolicyEngine; +import org.onap.policy.api.PolicyEngineException; +import org.onap.policy.api.PolicyParameters; +import org.onap.policy.api.PolicyType; +import org.onap.policy.api.PushPolicyParameters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; -import java.util.*; -import java.util.logging.Logger; - - /** * Policy utility methods - specifically, send the policy. */ public class PolicyClient { - // currently uses the java.util.logging.Logger like the Camunda engine - private static final Logger logger = Logger.getLogger(PolicyClient.class.getName()); + protected static final String POLICY_PREFIX_BASE = "Config_"; + protected static final String POLICY_PREFIX_BRMS_PARAM = "Config_BRMS_Param_"; + protected static final String POLICY_PREFIX_MICROSERVICE = "Config_MS_"; + + protected static final String LOG_POLICY_PREFIX = "Response is "; - @Value("${org.onap.clamp.config.files.cldsPolicyConfig:'classpath:etc/clds/clds-policy-config.properties'}") - private String cldsPolicyConfigFile; + protected static final EELFLogger logger = EELFManager.getInstance() + .getLogger(PolicyClient.class); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + + @Value("${org.onap.clamp.config.files.cldsPolicyConfig:'classpath:/clds/clds-policy-config.properties'}") + protected String cldsPolicyConfigFile; @Autowired - private ApplicationContext appContext; - + protected ApplicationContext appContext; + @Autowired - private RefProp refProp; - - public PolicyClient() { - - } + protected RefProp refProp; /** - * Perform send of microservice policy + * Perform BRMS policy type. * * @param attributes + * A map of attributes * @param prop - * @param policyRequestUUID - * @return - * @throws Exception + * The ModelProperties + * @param policyRequestUuid + * PolicyRequest UUID + * @return The response message of policy + * */ - public String sendBrms(Map> attributes, ModelProperties prop, String policyRequestUUID) throws Exception { + public String sendBrmsPolicy(Map> attributes, ModelProperties prop, + String policyRequestUuid) { PolicyParameters policyParameters = new PolicyParameters(); @@ -71,19 +102,17 @@ public class PolicyClient { policyParameters.setPolicyConfigType(PolicyConfigType.BRMS_PARAM); // Set Policy Name(Mandatory) - policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); - //Set Scope folder where the policy needs to be created(Mandatory) - //policyParameters.setPolicyScope(policyScope); + policyParameters.setPolicyName(prop.getPolicyScopeAndNameWithUniqueId()); - // documentation says this is options, but when tested, got the following failure: java.lang.Exception: Policy send failed: PE300 - Data Issue: No policyDescription given. + // documentation says this is options, but when tested, got the + // following failure: java.lang.Exception: Policy send failed: PE300 - + // Data Issue: No policyDescription given. policyParameters.setPolicyDescription(refProp.getStringValue("op.policyDescription")); - policyParameters.setAttributes(attributes); - - //Set a random UUID(Mandatory) - policyParameters.setRequestID(UUID.fromString(policyRequestUUID)); - - String rtnMsg = send(policyParameters, prop); + // Set a random UUID(Mandatory) + policyParameters.setRequestID(UUID.fromString(policyRequestUuid)); + String policyNamePrefix = refProp.getStringValue("policy.op.policyNamePrefix"); + String rtnMsg = send(policyParameters, prop, policyNamePrefix); String policyType = refProp.getStringValue("policy.op.type"); push(policyType, prop); @@ -92,30 +121,109 @@ public class PolicyClient { } /** - * Perform send of microservice policy + * Perform send of microservice policy in JSON. * * @param policyJson + * The policy JSON * @param prop - * @param policyRequestUUID - * @return - * @throws Exception + * The ModelProperties + * @param policyRequestUuid + * The policy Request UUID + * @return The response message of policy */ - public String sendMicroService(String policyJson, ModelProperties prop, String policyRequestUUID) throws Exception { + public String sendMicroServiceInJson(String policyJson, ModelProperties prop, String policyRequestUuid) { PolicyParameters policyParameters = new PolicyParameters(); // Set Policy Type policyParameters.setPolicyConfigType(PolicyConfigType.MicroService); - policyParameters.setOnapName(refProp.getStringValue("policy.onap.name")); + policyParameters.setEcompName(refProp.getStringValue("policy.onap.name")); policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); policyParameters.setConfigBody(policyJson); policyParameters.setConfigBodyType(PolicyType.JSON); - policyParameters.setRequestID(UUID.fromString(policyRequestUUID)); + policyParameters.setRequestID(UUID.fromString(policyRequestUuid)); + String policyNamePrefix = refProp.getStringValue("policy.ms.policyNamePrefix"); + + // Adding this line to clear the policy id from policy name while + // pushing to policy engine + prop.setPolicyUniqueId(""); + + String rtnMsg = send(policyParameters, prop, policyNamePrefix); + String policyType = refProp.getStringValue("policy.ms.type"); + push(policyType, prop); + + return rtnMsg; + } + + /** + * Perform send of base policy in OTHER type. + * + * @param configBody + * The config policy string body + * @param configPolicyName + * The config policy name of the component that has been + * pre-deployed in DCAE + * @param prop + * The ModelProperties + * @param policyRequestUuid + * The policy request UUID + * @return The answer from policy call + */ + public String sendBasePolicyInOther(String configBody, String configPolicyName, ModelProperties prop, + String policyRequestUuid) { + PolicyParameters policyParameters = new PolicyParameters(); + + // Set Policy Type + policyParameters.setPolicyConfigType(PolicyConfigType.Base); + policyParameters.setEcompName(refProp.getStringValue("policy.onap.name")); + policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); + + policyParameters.setConfigBody(configBody); + policyParameters.setConfigBodyType(PolicyType.OTHER); + policyParameters.setConfigName("HolmesPolicy"); + policyParameters.setPolicyName(configPolicyName); + + policyParameters.setRequestID(UUID.fromString(policyRequestUuid)); + + // Adding this line to clear the policy id from policy name while + // pushing to policy engine + prop.setPolicyUniqueId(""); + + String rtnMsg = send(policyParameters, prop, POLICY_PREFIX_BASE); + push(PolicyConfigType.Base.toString(), prop); + + return rtnMsg; + } + + /** + * Perform send of Microservice policy in OTHER type. + * + * @param configBody + * The config policy string body + * @param prop + * The ModelProperties + * @param policyRequestUuid + * The policy request UUID + * @return The answer from policy call + */ + public String sendMicroServiceInOther(String configBody, ModelProperties prop, String policyRequestUuid) { + + PolicyParameters policyParameters = new PolicyParameters(); + // Set Policy Type + policyParameters.setPolicyConfigType(PolicyConfigType.MicroService); + policyParameters.setOnapName("DCAE"); + policyParameters.setEcompName(refProp.getStringValue("policy.onap.name")); + policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); + policyParameters.setConfigBody(configBody); + String policyNamePrefix = refProp.getStringValue("policy.ms.policyNamePrefix"); - String rtnMsg = send(policyParameters, prop); + // Adding this line to clear the policy id from policy name while + // pushing to policy engine + prop.setPolicyUniqueId(""); + String rtnMsg = send(policyParameters, prop, policyNamePrefix); String policyType = refProp.getStringValue("policy.ms.type"); push(policyType, prop); @@ -126,36 +234,49 @@ public class PolicyClient { * Perform send of policy. * * @param policyParameters + * The PolicyParameters * @param prop - * @return - * @throws Exception + * The ModelProperties + * @return The response message of Policy */ - private String send(PolicyParameters policyParameters, ModelProperties prop) throws Exception { - PolicyEngine policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); + protected String send(PolicyParameters policyParameters, ModelProperties prop, String policyNamePrefix) { + // Verify whether it is triggered by Validation Test button from UI + if (prop.isTest()) { + return "send not executed for test action"; + } // API method to create or update Policy. PolicyChangeResponse response = null; - String responseMessage; + String responseMessage = ""; + Date startTime = new Date(); try { - if (prop.isCreateRequest()) { + List versions = getVersions(policyNamePrefix, prop); + if (versions.isEmpty()) { + LoggingUtils.setTargetContext("Policy", "createPolicy"); logger.info("Attempting to create policy for action=" + prop.getActionCd()); - response = policyEngine.createPolicy(policyParameters); + response = getPolicyEngine().createPolicy(policyParameters); responseMessage = response.getResponseMessage(); } else { + LoggingUtils.setTargetContext("Policy", "updatePolicy"); logger.info("Attempting to update policy for action=" + prop.getActionCd()); - response = policyEngine.updatePolicy(policyParameters); + response = getPolicyEngine().updatePolicy(policyParameters); responseMessage = response.getResponseMessage(); } } catch (Exception e) { - responseMessage = e.toString(); + logger.error("Exception occurred during policy communication", e); + throw new PolicyClientException("Exception while communicating with Policy", e); } - logger.info("response is " + responseMessage); + logger.info(LOG_POLICY_PREFIX + responseMessage); - if (response != null && response.getResponseCode() == 200) { + LoggingUtils.setTimeContext(startTime, new Date()); + + if (response.getResponseCode() == 200) { logger.info("Policy send successful"); + metricsLogger.info("Policy send success"); } else { - logger.warning("Policy send failed: " + responseMessage); - throw new Exception("Policy send failed: " + responseMessage); + logger.warn("Policy send failed: " + responseMessage); + metricsLogger.info("Policy send failure"); + throw new BadRequestException("Policy send failed: " + responseMessage); } return responseMessage; @@ -165,178 +286,216 @@ public class PolicyClient { * Format and send push of policy. * * @param policyType + * The policy Type * @param prop - * @return - * @throws Exception + * The ModelProperties + * @return The response message of policy */ - private String push(String policyType, ModelProperties prop) throws Exception { + protected String push(String policyType, ModelProperties prop) { + // Verify whether it is triggered by Validation Test button from UI + if (prop.isTest()) { + return "push not executed for test action"; + } + PushPolicyParameters pushPolicyParameters = new PushPolicyParameters(); - //Parameter arguments - pushPolicyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); + // Parameter arguments + if (prop.getPolicyUniqueId() != null && !prop.getPolicyUniqueId().isEmpty()) { + pushPolicyParameters.setPolicyName(prop.getPolicyScopeAndNameWithUniqueId()); + } else { + pushPolicyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); + } + logger.info("Policy Name in Push policy method - " + pushPolicyParameters.getPolicyName()); + pushPolicyParameters.setPolicyType(policyType); - //pushPolicyParameters.setPolicyScope(policyScope); pushPolicyParameters.setPdpGroup(refProp.getStringValue("policy.pdp.group")); pushPolicyParameters.setRequestID(null); - PolicyEngine policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); - // API method to create or update Policy. PolicyChangeResponse response = null; - String responseMessage; + String responseMessage = ""; try { logger.info("Attempting to push policy..."); - response = policyEngine.pushPolicy(pushPolicyParameters); + response = getPolicyEngine().pushPolicy(pushPolicyParameters); responseMessage = response.getResponseMessage(); } catch (Exception e) { - responseMessage = e.toString(); + logger.error("Exception occurred during policy communication", e); + throw new PolicyClientException("Exception while communicating with Policy", e); } - logger.info("response is " + responseMessage); + logger.info(LOG_POLICY_PREFIX + responseMessage); if (response != null && (response.getResponseCode() == 200 || response.getResponseCode() == 204)) { logger.info("Policy push successful"); } else { - logger.warning("Policy push failed: " + responseMessage); - throw new Exception("Policy push failed: " + responseMessage); + logger.warn("Policy push failed: " + responseMessage); + throw new BadRequestException("Policy push failed: " + responseMessage); } return responseMessage; } /** - * Use Get Config Policy API to retrieve the versions for a policy. - * Return versions in sorted order. - * Return empty list if none found. + * Use Get Config Policy API to retrieve the versions for a policy. Return + * versions in sorted order. Return empty list if none found. * * @param policyNamePrefix + * The Policy Name Prefix * @param prop - * @return - * @throws Exception + * The ModelProperties + * @return The response message from policy + * @throws PolicyConfigException + * In case of issues with policy engine */ - private List getVersions(String policyNamePrefix, ModelProperties prop) throws Exception { + protected List getVersions(String policyNamePrefix, ModelProperties prop) throws PolicyConfigException { ArrayList versions = new ArrayList<>(); ConfigRequestParameters configRequestParameters = new ConfigRequestParameters(); - String policyName = prop.getCurrentPolicyScopeAndFullPolicyName(policyNamePrefix); - logger.info("policyName=" + policyName); - configRequestParameters.setPolicyName(policyName); + String policyName = ""; - PolicyEngine policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); - - Collection response = policyEngine.getConfig(configRequestParameters); - - Iterator itrResp = response.iterator(); + if (prop.getPolicyUniqueId() != null && !prop.getPolicyUniqueId().isEmpty()) { + policyName = prop.getCurrentPolicyScopeAndFullPolicyName(policyNamePrefix) + "_" + prop.getPolicyUniqueId(); + } else { + policyName = prop.getCurrentPolicyScopeAndFullPolicyName(policyNamePrefix); + } - while (itrResp.hasNext()) { - PolicyConfig policyConfig = itrResp.next(); - try { - Integer version = new Integer(policyConfig.getPolicyVersion()); + logger.info("policyName=" + policyName); + configRequestParameters.setPolicyName(policyName); + try { + Collection response = getPolicyEngine().getConfig(configRequestParameters); + for (PolicyConfig policyConfig : response) { + Integer version = Integer.valueOf(policyConfig.getPolicyVersion()); versions.add(version); - } catch (Exception e) { - // just print warning - if n;o policies, version may be null - logger.warning("warning: failed to parse policyConfig.getPolicyVersion()=" + policyConfig.getPolicyVersion()); } + Collections.sort(versions); + logger.info("Policy versions.size()=" + versions.size()); + } catch (PolicyConfigException e) { + // just print warning - if no policy version found + logger.warn("warning: policy not found...policy name - " + policyName, e.getMessage()); } - Collections.sort(versions); - logger.info("versions.size()=" + versions.size()); - return versions; + + } + + /** + * This method create a new policy engine. + * + * @return A new policy engine + */ + private PolicyEngine getPolicyEngine() { + PolicyEngine policyEngine; + try { + policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); + } catch (IOException e1) { + throw new PolicyClientException("Exception when opening policy config file", e1); + } catch (PolicyEngineException e) { + throw new PolicyClientException("Exception when creating a new policy engine", e); + } + return policyEngine; } /** - * Format and send delete Micro Service requests to Policy + * Format and send delete Micro Service requests to Policy. * * @param prop - * @return - * @throws Exception + * The ModelProperties + * @return The response message from Policy */ - public String deleteMicrosService(ModelProperties prop) throws Exception { - String policyNamePrefix = refProp.getStringValue("policy.ms.policyNamePrefix"); - return deletePolicy(policyNamePrefix, prop); + public String deleteMicrosService(ModelProperties prop) { + String policyType = refProp.getStringValue("policy.ms.type"); + return deletePolicy(prop, policyType); } /** - * Format and send delete BRMS requests to Policy + * This method delete the Base policy. * * @param prop - * @return - * @throws Exception + * The model Properties + * @return A string with the answer from policy */ - public String deleteBrms(ModelProperties prop) throws Exception { - String policyNamePrefix = refProp.getStringValue("policy.op.policyNamePrefix"); - return deletePolicy(policyNamePrefix, prop); + public String deleteBasePolicy(ModelProperties prop) { + return deletePolicy(prop, PolicyConfigType.Base.toString()); } /** - * Format and send delete PAP and PDP requests to Policy + * Format and send delete BRMS requests to Policy. * - * @param policyNamePrefix * @param prop - * @return - * @throws Exception + * The ModelProperties + * @return The response message from policy */ - private String deletePolicy(String policyNamePrefix, ModelProperties prop) throws Exception { - String responseMessage = null; + public String deleteBrms(ModelProperties prop) { + String policyType = refProp.getStringValue("policy.op.type"); + return deletePolicy(prop, policyType); + } + /** + * Format and send delete PAP and PDP requests to Policy. + * + * @param prop + * The ModelProperties + * + * @return The response message from policy + */ + protected String deletePolicy(ModelProperties prop, String policyType) { DeletePolicyParameters deletePolicyParameters = new DeletePolicyParameters(); - List versions = getVersions(policyNamePrefix, prop); - if (versions.size() > 0) { - int maxVersion = Collections.max(versions); - - // format delete all PAP request - deletePolicyParameters.setPolicyName(prop.getCurrentPolicyScopeAndFullPolicyNameWithVersion(policyNamePrefix, maxVersion)); - deletePolicyParameters.setPolicyComponent("PAP"); - deletePolicyParameters.setDeleteCondition(DeletePolicyCondition.ALL); - String policyType = refProp.getStringValue("policy.ms.type"); - deletePolicyParameters.setPolicyType(policyType); - - //send delete request - responseMessage = sendDeletePolicy(deletePolicyParameters, prop); - } - - for (Integer version : versions) { - // format delete all PDP request - deletePolicyParameters.setPolicyName(prop.getCurrentPolicyScopeAndFullPolicyNameWithVersion(policyNamePrefix, version)); - deletePolicyParameters.setPolicyComponent("PDP"); - deletePolicyParameters.setPdpGroup(refProp.getStringValue("policy.pdp.group")); - //send delete request - responseMessage = responseMessage + "; " + sendDeletePolicy(deletePolicyParameters, prop); + if (prop.getPolicyUniqueId() != null && !prop.getPolicyUniqueId().isEmpty()) { + deletePolicyParameters.setPolicyName(prop.getPolicyScopeAndNameWithUniqueId()); + } else { + deletePolicyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName()); } - - return responseMessage; + logger.info("Policy Name in delete policy method - " + deletePolicyParameters.getPolicyName()); + deletePolicyParameters.setPolicyComponent("PDP"); + deletePolicyParameters.setDeleteCondition(DeletePolicyCondition.ALL); + deletePolicyParameters.setPdpGroup(refProp.getStringValue("policy.pdp.group")); + deletePolicyParameters.setPolicyType(policyType); + // send delete request + StringBuilder responseMessage = new StringBuilder(sendDeletePolicy(deletePolicyParameters, prop)); + + logger.info("Deleting policy from PAP..."); + deletePolicyParameters.setPolicyComponent("PAP"); + deletePolicyParameters.setDeleteCondition(DeletePolicyCondition.ALL); + + // send delete request + responseMessage.append(sendDeletePolicy(deletePolicyParameters, prop)); + + return responseMessage.toString(); } /** - * Send delete request to Policy + * Send delete request to Policy. * * @param deletePolicyParameters + * The DeletePolicyParameters * @param prop - * @return - * @throws Exception + * The ModelProperties + * @return The response message from policy */ - private String sendDeletePolicy(DeletePolicyParameters deletePolicyParameters, ModelProperties prop) throws Exception { - PolicyEngine policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); + protected String sendDeletePolicy(DeletePolicyParameters deletePolicyParameters, ModelProperties prop) { + // Verify whether it is triggered by Validation Test button from UI + if (prop.isTest()) { + return "delete not executed for test action"; + } // API method to create or update Policy. PolicyChangeResponse response = null; - String responseMessage; + String responseMessage = ""; try { logger.info("Attempting to delete policy..."); - response = policyEngine.deletePolicy(deletePolicyParameters); + response = getPolicyEngine().deletePolicy(deletePolicyParameters); responseMessage = response.getResponseMessage(); } catch (Exception e) { - responseMessage = e.toString(); + logger.error("Exception occurred during policy communnication", e); } - logger.info("response is " + responseMessage); + logger.info(LOG_POLICY_PREFIX + responseMessage); if (response != null && response.getResponseCode() == 200) { logger.info("Policy delete successful"); } else { - logger.warning("Policy delete failed: " + responseMessage); - throw new Exception("Policy delete failed: " + responseMessage); + logger.warn("Policy delete failed: " + responseMessage); + throw new BadRequestException("Policy delete failed: " + responseMessage); } return responseMessage; } -} +} \ No newline at end of file