import java.util.Collection;
import java.util.Collections;
import java.util.Date;
-import java.util.Iterator;
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.clamp.clds.util.LoggingUtils;
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;
* Policy utility methods - specifically, send the policy.
*/
public class PolicyClient {
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyClient.class);
- protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
+
+ 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 ";
+
+ 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
protected RefProp refProp;
- public PolicyClient() {
-
- }
-
/**
- * Perform send of microservice policy.
+ * Perform BRMS policy type.
*
* @param attributes
* A map of attributes
* @param policyRequestUuid
* PolicyRequest UUID
* @return The response message of policy
- * @throws IOException
- * In case of issues with the Stream
- * @throws PolicyEngineException
- * In case of issues with the PolicyEngine class
*
*/
- public String sendBrms(Map<AttributeType, Map<String, String>> attributes, ModelProperties prop,
- String policyRequestUuid) throws PolicyEngineException, IOException {
+ public String sendBrmsPolicy(Map<AttributeType, Map<String, String>> attributes, ModelProperties prop,
+ String policyRequestUuid) {
PolicyParameters policyParameters = new PolicyParameters();
}
/**
- * Perform send of microservice policy.
+ * Perform send of microservice policy in JSON.
*
* @param policyJson
* The policy JSON
* @param policyRequestUuid
* The policy Request UUID
* @return The response message of policy
- * @throws PolicyEngineException
- * In case of issues with the policy engine class creation
- * @throws IOException
- * In case of issue with the Stream
*/
- public String sendMicroService(String policyJson, ModelProperties prop, String policyRequestUuid)
- throws IOException, PolicyEngineException {
+ public String sendMicroServiceInJson(String policyJson, ModelProperties prop, String policyRequestUuid) {
PolicyParameters policyParameters = new PolicyParameters();
// Set Policy Type
policyParameters.setPolicyConfigType(PolicyConfigType.MicroService);
- policyParameters.setEcompName(refProp.getStringValue("policy.ecomp.name"));
+ policyParameters.setEcompName(refProp.getStringValue("policy.onap.name"));
policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName());
policyParameters.setConfigBody(policyJson);
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.setEcompName(refProp.getStringValue("policy.onap.name"));
+ policyParameters.setPolicyName(prop.getCurrentPolicyScopeAndPolicyName());
+
+ policyParameters.setConfigBody(configBody);
+ policyParameters.setConfigBodyType(PolicyType.OTHER);
+
+ 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 policy.
*
* The PolicyParameters
* @param prop
* The ModelProperties
- * @return THe response message of Policy
- * @throws IOException
- * In case of issues with the Stream
- * @throws PolicyEngineException
- * In case of issue when creating PolicyEngine class
+ * @return The response message of Policy
*/
- protected String send(PolicyParameters policyParameters, ModelProperties prop, String policyNamePrefix)
- throws IOException, PolicyEngineException {
+ 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";
}
- PolicyEngine policyEngine = new PolicyEngine(
- appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath());
-
// API method to create or update Policy.
PolicyChangeResponse response = null;
- String responseMessage;
+ String responseMessage = "";
Date startTime = new Date();
try {
List<Integer> versions = getVersions(policyNamePrefix, prop);
- if (versions.size() <= 0) {
+ 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);
LoggingUtils.setTimeContext(startTime, new Date());
- if (response != null && response.getResponseCode() == 200) {
+ if (response.getResponseCode() == 200) {
logger.info("Policy send successful");
metricsLogger.info("Policy send success");
} else {
* @param prop
* The ModelProperties
* @return The response message of policy
- * @throws IOException
- * In case of issues with the stream
- * @throws PolicyEngineException
- * In case of issues with the PolicyEngine creation
*/
- protected String push(String policyType, ModelProperties prop) throws PolicyEngineException, IOException {
+ 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.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);
}
- 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");
* @param prop
* The ModelProperties
* @return The response message from policy
- * @throws IOException
- * In case of issues with the stream
- * @throws PolicyEngineException
- * In case of issues with the PolicyEngine creation
+ * @throws PolicyConfigException
+ * In case of issues with policy engine
*/
- protected List<Integer> getVersions(String policyNamePrefix, ModelProperties prop)
- throws PolicyEngineException, IOException {
+ protected List<Integer> getVersions(String policyNamePrefix, ModelProperties prop) throws PolicyConfigException {
ArrayList<Integer> versions = new ArrayList<>();
ConfigRequestParameters configRequestParameters = new ConfigRequestParameters();
logger.info("policyName=" + policyName);
configRequestParameters.setPolicyName(policyName);
- PolicyEngine policyEngine = new PolicyEngine(
- appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath());
-
- try {
- Collection<PolicyConfig> response = policyEngine.getConfig(configRequestParameters);
- Iterator<PolicyConfig> itrResp = response.iterator();
-
- while (itrResp.hasNext()) {
- PolicyConfig policyConfig = itrResp.next();
- try {
- Integer version = new Integer(policyConfig.getPolicyVersion());
- versions.add(version);
- } catch (Exception e) {
- // just print warning - if n;o policies, version may be null
- logger.warn("warning: failed to parse policyConfig.getPolicyVersion()="
- + policyConfig.getPolicyVersion());
- }
- }
- Collections.sort(versions);
- logger.info("Policy versions.size()=" + versions.size());
- } catch (Exception e) {
- // just print warning - if no policy version found
- logger.warn("warning: policy not found...policy name - " + policyName);
+ Collection<PolicyConfig> response = getPolicyEngine().getConfig(configRequestParameters);
+ for (PolicyConfig policyConfig : response) {
+ Integer version = Integer.valueOf(policyConfig.getPolicyVersion());
+ versions.add(version);
}
+ Collections.sort(versions);
+ logger.info("Policy 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;
}
/**
* @param prop
* The ModelProperties
* @return The response message from Policy
- * @throws IOException
- * In case of issues with the stream
- * @throws PolicyEngineException
- * In case of issues with the PolicyEngine creation
*/
- public String deleteMicrosService(ModelProperties prop) throws PolicyEngineException, IOException {
- String policyNamePrefix = refProp.getStringValue("policy.ms.policyNamePrefix");
+ public String deleteMicrosService(ModelProperties prop) {
String policyType = refProp.getStringValue("policy.ms.type");
- return deletePolicy(policyNamePrefix, prop, policyType);
+ return deletePolicy(prop, policyType);
+ }
+
+ /**
+ * This method delete the Base policy.
+ *
+ * @param prop
+ * The model Properties
+ * @return A string with the answer from policy
+ */
+ public String deleteBasePolicy(ModelProperties prop) {
+ return deletePolicy(prop, PolicyConfigType.Base.toString());
}
/**
* @param prop
* The ModelProperties
* @return The response message from policy
- * @throws IOException
- * In case of issues with the stream
- * @throws PolicyEngineException
- * In case of issues with the PolicyEngine creation
*/
- public String deleteBrms(ModelProperties prop) throws PolicyEngineException, IOException {
- String policyNamePrefix = refProp.getStringValue("policy.op.policyNamePrefix");
+ public String deleteBrms(ModelProperties prop) {
String policyType = refProp.getStringValue("policy.op.type");
- return deletePolicy(policyNamePrefix, prop, policyType);
+ return deletePolicy(prop, policyType);
}
/**
* Format and send delete PAP and PDP requests to Policy.
*
- * @param policyNamePrefix
- * The String policyNamePrefix
* @param prop
* The ModelProperties
+ *
* @return The response message from policy
- * @throws IOException
- * in case of issues with the Stream
- * @throws PolicyEngineException
- * In case of issues with the PolicyEngine class creation
*/
- protected String deletePolicy(String policyNamePrefix, ModelProperties prop, String policyType)
- throws PolicyEngineException, IOException {
+ protected String deletePolicy(ModelProperties prop, String policyType) {
DeletePolicyParameters deletePolicyParameters = new DeletePolicyParameters();
if (prop.getPolicyUniqueId() != null && !prop.getPolicyUniqueId().isEmpty()) {
deletePolicyParameters.setPdpGroup(refProp.getStringValue("policy.pdp.group"));
deletePolicyParameters.setPolicyType(policyType);
// send delete request
- String responseMessage = null;
- responseMessage = sendDeletePolicy(deletePolicyParameters, prop);
+ StringBuilder responseMessage = new StringBuilder(sendDeletePolicy(deletePolicyParameters, prop));
logger.info("Deleting policy from PAP...");
deletePolicyParameters.setPolicyComponent("PAP");
deletePolicyParameters.setDeleteCondition(DeletePolicyCondition.ALL);
// send delete request
- responseMessage = sendDeletePolicy(deletePolicyParameters, prop);
+ responseMessage.append(sendDeletePolicy(deletePolicyParameters, prop));
- return responseMessage;
+ return responseMessage.toString();
}
/**
* @param prop
* The ModelProperties
* @return The response message from policy
- * @throws IOException
- * In case of issues with the stream
- * @throws PolicyEngineException
- * In case of issues with PolicyEngine class creation
*/
- protected String sendDeletePolicy(DeletePolicyParameters deletePolicyParameters, ModelProperties prop)
- throws PolicyEngineException, IOException {
+ 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";
}
- 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 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");