From 14fa9a2ec6fdb037be3ac5216248c1f2117d1a31 Mon Sep 17 00:00:00 2001 From: "Determe, Sebastien (sd378r)" Date: Thu, 28 Sep 2017 15:40:15 +0200 Subject: [PATCH] Change the model to fix TCA Fix TCA model and JSON model for TCA + rework the JUNIT Change-Id: I35099633e89f9f95f1957afeffa915feda4045f3 Issue-ID: CLAMP-59 Signed-off-by: Determe, Sebastien (sd378r) --- .../onap/clamp/clds/client/TcaPolicyDelegate.java | 16 +- .../org/onap/clamp/clds/client/req/SdcReq.java | 18 +-- .../onap/clamp/clds/client/req/TcaMPolicyReq.java | 121 --------------- .../clamp/clds/client/req/TcaRequestFormatter.java | 166 +++++++++++++++++++++ .../java/org/onap/clamp/clds/model/prop/Tca.java | 31 +--- .../org/onap/clamp/clds/model/prop/TcaItem.java | 98 +++--------- .../prop/{TcaThreshhold.java => TcaThreshold.java} | 70 +++++---- src/main/resources/clds/clds-reference.properties | 28 +++- .../onap/clamp/clds/it/TcaRequestFormatterIT.java | 89 +++++++++++ .../clamp/clds/model/prop/ModelPropertiesTest.java | 57 ++++++- src/test/resources/clds/clds-reference.properties | 8 +- .../example/model-properties/holmes/modelBpmn.json | 20 +++ .../holmes/modelBpmnProperties.json | 116 ++++++++++++++ .../example/model-properties/tca/modelBpmn.json | 20 +++ .../model-properties/tca/modelBpmnProperties.json | 150 +++++++++++++++++++ src/test/resources/example/templatePropForTca.json | 10 -- src/test/resources/expected/tca.json | 93 ------------ 17 files changed, 704 insertions(+), 407 deletions(-) delete mode 100644 src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java create mode 100644 src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java rename src/main/java/org/onap/clamp/clds/model/prop/{TcaThreshhold.java => TcaThreshold.java} (57%) create mode 100644 src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java create mode 100644 src/test/resources/example/model-properties/holmes/modelBpmn.json create mode 100644 src/test/resources/example/model-properties/holmes/modelBpmnProperties.json create mode 100644 src/test/resources/example/model-properties/tca/modelBpmn.json create mode 100644 src/test/resources/example/model-properties/tca/modelBpmnProperties.json delete mode 100644 src/test/resources/example/templatePropForTca.json delete mode 100644 src/test/resources/expected/tca.json diff --git a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java index 9debcc2a..7de12683 100644 --- a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java @@ -23,19 +23,19 @@ package org.onap.clamp.clds.client; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + import java.util.UUID; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.camunda.bpm.engine.delegate.JavaDelegate; -import org.onap.clamp.clds.client.req.TcaMPolicyReq; +import org.onap.clamp.clds.client.req.TcaRequestFormatter; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.prop.Tca; import org.onap.clamp.clds.model.refprop.RefProp; import org.springframework.beans.factory.annotation.Autowired; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - /** * Send Tca info to policy api. * @@ -46,10 +46,10 @@ public class TcaPolicyDelegate implements JavaDelegate { protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private RefProp refProp; + private RefProp refProp; @Autowired - PolicyClient policyClient; + PolicyClient policyClient; /** * Perform activity. Send Tca info to policy api. @@ -64,8 +64,8 @@ public class TcaPolicyDelegate implements JavaDelegate { ModelProperties prop = ModelProperties.create(execution); Tca tca = prop.getType(Tca.class); if (tca.isFound()) { - String policyJson = TcaMPolicyReq.formatTca(refProp, prop); - String responseMessage = policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid); + String policyJson = TcaRequestFormatter.createPolicyJson(refProp, prop); + String responseMessage = policyClient.sendMicroServiceInOther(policyJson, prop, tcaPolicyRequestUuid); if (responseMessage != null) { execution.setVariable("tcaPolicyResponseMessage", responseMessage.getBytes()); } diff --git a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java index c5e26f30..32846ed0 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java +++ b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java @@ -26,7 +26,6 @@ package org.onap.clamp.clds.client.req; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -89,25 +88,14 @@ public class SdcReq { String updatedBlueprint = ""; Tca tca = prop.getType(Tca.class); if (tca.isFound()) { - prop.setCurrentModelElementId(tca.getId()); - ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service); - ObjectNode content = rootNode.with("content"); - TcaMPolicyReq.appendSignatures(refProp, service, content, tca, prop); - logger.info("Value of content:" + content); - // ObjectNode servConfNode = - // (ObjectNode)signatures.get("signatures"); - - // get updated blueprint by attaching service Conf from - // globalProperties - updatedBlueprint = getUpdatedBlueprintWithConfiguration(refProp, prop, yamlvalue, content); - } - + updatedBlueprint = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlvalue); + } logger.info("value of blueprint:" + updatedBlueprint); return updatedBlueprint; } private static String getUpdatedBlueprintWithConfiguration(RefProp refProp, ModelProperties prop, String yamlValue, - ObjectNode serviceConf) throws JsonProcessingException, IOException { + ObjectNode serviceConf) throws IOException { String blueprint = ""; Yaml yaml = new Yaml(); // Serialiaze Yaml file diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java b/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java deleted file mode 100644 index f3106289..00000000 --- a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java +++ /dev/null @@ -1,121 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * 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. - * 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 - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ - -package org.onap.clamp.clds.client.req; - -import java.io.IOException; -import java.util.Iterator; - -import org.onap.clamp.clds.model.prop.Global; -import org.onap.clamp.clds.model.prop.ModelProperties; -import org.onap.clamp.clds.model.prop.Tca; -import org.onap.clamp.clds.model.prop.TcaItem; -import org.onap.clamp.clds.model.prop.TcaThreshhold; -import org.onap.clamp.clds.model.refprop.RefProp; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * Construct a Policy for Tca/MTca Service request given CLDS objects. - * - * - */ -public class TcaMPolicyReq { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaMPolicyReq.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - - /** - * Format Tca Policy request - * - * @param refProp - * @param prop - * @return - * @throws JsonParseException - * @throws JsonMappingException - * @throws IOException - */ - public static String formatTca(RefProp refProp, ModelProperties prop) - throws JsonParseException, JsonMappingException, IOException { - Global global = prop.getGlobal(); - String service = global.getService(); - - Tca tca = prop.getType(Tca.class); - prop.setCurrentModelElementId(tca.getId()); - ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service); - rootNode.put("policyName", prop.getCurrentPolicyScopeAndPolicyName()); - ObjectNode content = rootNode.with("content"); - appendSignatures(refProp, service, content, tca, prop); - - String tcaPolicyReq = rootNode.toString(); - logger.info("tcaPolicyReq=" + tcaPolicyReq); - return tcaPolicyReq; - } - - /** - * Add appendSignatures to json - * - * @param refProp - * @param service - * @param appendToNode - * @param tca - * @param prop - * @throws JsonParseException - * @throws JsonMappingException - * @throws IOException - */ - public static void appendSignatures(RefProp refProp, String service, ObjectNode appendToNode, Tca tca, - ModelProperties prop) throws JsonParseException, JsonMappingException, IOException { - // "signatures":{ - ArrayNode tcaNodes = appendToNode.withArray("signatures"); - for (TcaItem tcaItem : tca.getTcaItems()) { - ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.signature.template", service); - tcaNode.put("useCaseName", tcaItem.getTcaName()); - tcaNode.put("signatureName", tcaItem.getTcaName() + "_" + tcaItem.getTcaUuId()); - tcaNode.put("signatureUuid", tcaItem.getTcaUuId()); - prop.setPolicyUniqueId(tcaItem.getPolicyId()); - tcaNode.put("closedLoopControlName", prop.getControlNameAndPolicyUniqueId()); - tcaNode.put("severity", tcaItem.getSeverity()); - tcaNode.put("maxInterval", tcaItem.getInterval()); - tcaNode.put("minMessageViolations", tcaItem.getViolations()); - - tcaNodes.add(tcaNode); - Iterator scItr = tcaItem.getTcaThreshholds().iterator(); - while (scItr.hasNext()) { - TcaThreshhold tcaThreshhold = scItr.next(); - // "thresholds": [ - ArrayNode thNodes = tcaNode.withArray("thresholds"); - ObjectNode thNode = thNodes.addObject(); - thNode.put("fieldPath", tcaThreshhold.getFieldPath()); - thNode.put("thresholdName", tcaThreshhold.getMetric()); - thNode.put("thresholdValue", tcaThreshhold.getThreshhold()); - thNode.put("direction", tcaThreshhold.getOperator()); - } - } - } - -} \ No newline at end of file diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java new file mode 100644 index 00000000..3fbf8739 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java @@ -0,0 +1,166 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * 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. + * 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 + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.client.req; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.yaml.snakeyaml.Yaml; + +import java.util.Map; + +import org.onap.clamp.clds.exception.TcaRequestFormatterException; +import org.onap.clamp.clds.model.prop.ModelProperties; +import org.onap.clamp.clds.model.prop.Tca; +import org.onap.clamp.clds.model.prop.TcaItem; +import org.onap.clamp.clds.model.prop.TcaThreshold; +import org.onap.clamp.clds.model.refprop.RefProp; + +/** + * Construct the requests for TCA policy and SDC. + * + */ +public class TcaRequestFormatter { + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaRequestFormatter.class); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + + /** + * Hide the default constructor. + */ + private TcaRequestFormatter() { + + } + + /** + * Format Tca Policy JSON request. + * + * @param refProp + * The refProp generally created by Spring, it's an access on the + * clds-references.properties file + * @param modelProperties + * The Model Prop created from BPMN JSON and BPMN properties JSON + * @return The Json string containing that should be sent to policy + */ + public static String createPolicyJson(RefProp refProp, ModelProperties modelProperties) { + try { + String service = modelProperties.getGlobal().getService(); + + Tca tca = modelProperties.getType(Tca.class); + modelProperties.setCurrentModelElementId(tca.getId()); + ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service); + ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("policyName", + modelProperties.getCurrentPolicyScopeAndPolicyName()); + ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("eventName", + tca.getTcaItem().getEventName()); + + ObjectNode thresholdsParent = ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName") + .get(0)); + + addThresholds(refProp, service, thresholdsParent, tca.getTcaItem(), modelProperties); + + String tcaPolicyReq = rootNode.toString(); + logger.info("tcaPolicyReq=" + tcaPolicyReq); + return tcaPolicyReq; + } catch (Exception e) { + throw new TcaRequestFormatterException("Exception caught when attempting to create the policy JSON", e); + } + } + + /** + * Add threshold values to the existing policy JSON. + * + * @param refProp + * The refProp generally created by Spring, it's an access on the + * clds-references.properties file + * @param service + * The Service value extracted from Global section of the Bpmn + * Properties JSON + * @param appendToNode + * The JSON structure from where the thresholds section must be + * added + * @param tcaItem + * The TCA item contained in the Tca object + * @param modelProperties + * The Model Properties created from BPMN JSON and BPMN + * properties JSON + */ + private static void addThresholds(RefProp refProp, String service, ObjectNode appendToNode, TcaItem tcaItem, + ModelProperties modelProperties) { + try { + ArrayNode tcaNodes = appendToNode.withArray("thresholds"); + ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.thresholds.template", service); + + for (TcaThreshold tcaThreshold : tcaItem.getTcaThresholds()) { + tcaNode.put("controlLoopSchema", tcaThreshold.getControlLoopSchema()); + tcaNode.put("closedLoopControlName", modelProperties.getControlNameAndPolicyUniqueId()); + tcaNode.put("fieldPath", tcaThreshold.getFieldPath()); + tcaNode.put("thresholdValue", tcaThreshold.getThreshold()); + tcaNode.put("direction", tcaThreshold.getOperator()); + tcaNode.put("closedLoopEventStatus", tcaThreshold.getClosedLoopEventStatus()); + tcaNodes.add(tcaNode); + } + } catch (Exception e) { + throw new TcaRequestFormatterException("Exception caught when attempting to create the thresholds JSON", e); + } + } + + /** + * This method updates the blueprint that is received in the UI with the TCA + * Json. + * + * @param refProp + * * The refProp generally created by Spring, it's an access on + * the clds-references.properties file + * @param modelProperties + * The Model Prop created from BPMN JSON and BPMN properties JSON + * @param yamlValue + * The yaml string received from the UI + * @return The updated YAML as a string + */ + public static String updatedBlueprintWithConfiguration(RefProp refProp, ModelProperties modelProperties, + String yamlValue) { + try { + String jsonPolicy = createPolicyJson(refProp, modelProperties); + + logger.info("Yaml that will be updated:" + yamlValue); + Yaml yaml = new Yaml(); + + Map loadedYaml = (Map) yaml.load(yamlValue); + + Map nodeTemplates = (Map) loadedYaml.get("node_templates"); + Map tcaObject = (Map) nodeTemplates.get("tca_tca"); + Map propsObject = (Map) tcaObject.get("properties"); + Map appPreferences = (Map) propsObject.get("app_preferences"); + appPreferences.put("tca_policy", jsonPolicy); + + String blueprint = yaml.dump(loadedYaml); + logger.info("Yaml updated:" + blueprint); + + return blueprint; + } catch (Exception e) { + throw new TcaRequestFormatterException("Exception caught when attempting to update the blueprint", e); + } + } +} \ No newline at end of file diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java index f7bbac0d..4fd6b595 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java @@ -27,25 +27,8 @@ import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - /** - * Parse Tca json properties. - * - * Example json: - * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab", - * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value" - * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{ - * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1", - * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value": - * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"}, - * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name": - * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{ - * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">" - * ,"2"]]}]}} - * + * Parse ONAP Tca json properties. * */ public class Tca extends AbstractModelElement { @@ -53,7 +36,7 @@ public class Tca extends AbstractModelElement { protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Tca.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private List tcaItems; + private TcaItem tcaItem; private static final String TYPE_TCA = "tca"; @@ -69,16 +52,12 @@ public class Tca extends AbstractModelElement { // process Server_Configurations if (modelElementJsonNode != null) { - Iterator itr = modelElementJsonNode.elements(); - tcaItems = new ArrayList<>(); - while (itr.hasNext()) { - tcaItems.add(new TcaItem(itr.next())); - } + tcaItem = new TcaItem(modelElementJsonNode.elements().next()); } } - public List getTcaItems() { - return tcaItems; + public TcaItem getTcaItem() { + return tcaItem; } public static final String getType() { diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java index f104b091..79da2db0 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java @@ -23,45 +23,28 @@ package org.onap.clamp.clds.model.prop; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + /** - * Parse Tca Item json properties. - * - * Example json: - * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab", - * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value" - * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{ - * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1", - * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value": - * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"}, - * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name": - * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{ - * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">" - * ,"2"]]}]}} - * + * Parse ONAP Tca Item json properties. * */ public class TcaItem { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaItem.class); + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaItem.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private String tcaName; - private String tcaUuId; - private String nfNamingCode; - private String tcaEnable; - private String policyId; - private Integer interval; - private String severity; - private Integer violations; - private List tcaThreshholds; + private String tcaName; + private String tcaUuId; + private String policyId; + private String eventName; + private List tcaThresholds; /** * Parse Tca Item given json node @@ -72,23 +55,14 @@ public class TcaItem { tcaName = AbstractModelElement.getValueByName(node, "tname"); tcaUuId = AbstractModelElement.getValueByName(node, "tuuid"); - nfNamingCode = AbstractModelElement.getValueByName(node, "tnfc"); - tcaEnable = AbstractModelElement.getValueByName(node, "tcaEnab"); policyId = AbstractModelElement.getValueByName(node, "tcaPolId"); - if (AbstractModelElement.getValueByName(node, "tcaInt") != null) { - interval = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaInt")); - } - severity = AbstractModelElement.getValueByName(node, "tcaSev"); - if (AbstractModelElement.getValueByName(node, "tcaVio") != null) { - violations = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaVio")); - } - + eventName = AbstractModelElement.getValueByName(node, "eventName"); // process service Configurations JsonNode serviceConfigurationsNode = node.get(node.size() - 1).get("serviceConfigurations"); Iterator itr = serviceConfigurationsNode.elements(); - tcaThreshholds = new ArrayList(); + tcaThresholds = new ArrayList<>(); while (itr.hasNext()) { - tcaThreshholds.add(new TcaThreshhold(itr.next())); + tcaThresholds.add(new TcaThreshold(itr.next())); } } @@ -108,22 +82,6 @@ public class TcaItem { this.tcaUuId = tcaUuId; } - public String getNfNamingCode() { - return nfNamingCode; - } - - public void setNfNamingCode(String nfNamingCode) { - this.nfNamingCode = nfNamingCode; - } - - public String getTcaEnable() { - return tcaEnable; - } - - public void setTcaEnable(String tcaEnable) { - this.tcaEnable = tcaEnable; - } - public String getPolicyId() { return policyId; } @@ -132,32 +90,16 @@ public class TcaItem { this.policyId = policyId; } - public Integer getInterval() { - return interval; - } - - public void setInterval(Integer interval) { - this.interval = interval; - } - - public String getSeverity() { - return severity; - } - - public void setSeverity(String severity) { - this.severity = severity; - } - - public Integer getViolations() { - return violations; + public List getTcaThresholds() { + return tcaThresholds; } - public void setViolations(Integer violations) { - this.violations = violations; + public String getEventName() { + return eventName; } - public List getTcaThreshholds() { - return tcaThreshholds; + public void setEventName(String eventName) { + this.eventName = eventName; } } diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java similarity index 57% rename from src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java rename to src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java index 39369f17..43bdb5c1 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java @@ -28,59 +28,42 @@ import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; /** - * Parse Tca Threshhold json properties. - * - * Example json: - * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab", - * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value" - * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{ - * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1", - * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value": - * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"}, - * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name": - * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{ - * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">" - * ,"2"]]}]}} - * + * Parse ONAP Tca Threshold json properties. * */ -public class TcaThreshhold { +public class TcaThreshold { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaThreshhold.class); + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaThreshold.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private String metric; - private String fieldPath; - private String operator; - private Integer threshhold; + private String fieldPath; + private String operator; + private Integer threshold; + private String closedLoopEventStatus; + private String controlLoopSchema; /** * Parse Tca Threshhold given json node * * @param node */ - public TcaThreshhold(JsonNode node) { + public TcaThreshold(JsonNode node) { if (node.get(0) != null) { - metric = node.get(0).asText(); + fieldPath = node.get(0).asText(); } if (node.get(1) != null) { operator = node.get(1).asText(); } if (node.get(2) != null) { - threshhold = Integer.valueOf(node.get(2).asText()); + threshold = Integer.valueOf(node.get(2).asText()); } if (node.get(3) != null) { - fieldPath = node.get(3).asText(); + controlLoopSchema = node.get(3).asText(); + } + if (node.get(4) != null) { + closedLoopEventStatus = node.get(4).asText(); } - } - - public String getMetric() { - return metric; - } - - public void setMetric(String metric) { - this.metric = metric; } public String getFieldPath() { @@ -99,12 +82,27 @@ public class TcaThreshhold { this.operator = operator; } - public Integer getThreshhold() { - return threshhold; + public Integer getThreshold() { + return threshold; } - public void setThreshhold(Integer threshhold) { - this.threshhold = threshhold; + public void setThreshold(Integer threshold) { + this.threshold = threshold; } + public String getClosedLoopEventStatus() { + return closedLoopEventStatus; + } + + public void setClosedLoopEventStatus(String closedLoopEventStatus) { + this.closedLoopEventStatus = closedLoopEventStatus; + } + + public String getControlLoopSchema() { + return controlLoopSchema; + } + + public void setControlLoopSchema(String controlLoopSchema) { + this.controlLoopSchema = controlLoopSchema; + } } diff --git a/src/main/resources/clds/clds-reference.properties b/src/main/resources/clds/clds-reference.properties index d404e4e3..9a56295b 100644 --- a/src/main/resources/clds/clds-reference.properties +++ b/src/main/resources/clds/clds-reference.properties @@ -38,17 +38,18 @@ sdc.decode.service_ids={} # # General Policy request properties # -policy.ecomp.name=DCAE +policy.onap.name=DCAE policy.pdp.group=default policy.ms.type=MicroService policy.ms.policyNamePrefix=Config_MS_ policy.op.type=BRMS_Param policy.op.policyNamePrefix=Config_BRMS_Param_ -# + # TCA MicroService Policy request build properties # -tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}} -tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]} +tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}} +tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"} + # # # Operational Policy request build properties @@ -73,9 +74,9 @@ op.eNodeB.limit=2 op.eNodeB.period=10s # # Sdc service properties -sdc.catalog.url=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/ -sdc.hostUrl=http://sdc.api.simpledemo.openecomp.org:8080 -sdc.serviceUrl=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/services +sdc.catalog.url=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080/sdc/v1/catalog/ +sdc.hostUrl=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080 +sdc.serviceUrl=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080/sdc/v1/catalog/services sdc.serviceUsername=test sdc.servicePassword=123456 sdc.artifactLabel=blueprintclampcockpit @@ -84,6 +85,17 @@ sdc.artifactType=DCAE_INVENTORY_BLUEPRINT sdc.locationArtifactLabel=locationclampcockpit sdc.locationArtifactType=DCAE_INVENTORY_JSON sdc.InstanceID=X-ECOMP-InstanceID +#sdc.catalog.url=http://135.205.226.136:8080/sdc/v1/catalog/ +#sdc.hostUrl=http://135.205.226.136:8080 +#sdc.serviceUrl=http://135.205.226.136:8080/sdc/v1/catalog/services +#sdc.serviceUsername=clamp +#sdc.servicePassword=clampdown +##sdc.artifactLabel=blueprintclampcockpit +#sdc.sdcX-InstanceID=CLAMP +#sdc.artifactType=DCAE_INVENTORY_BLUEPRINT +#sdc.locationArtifactLabel=locationclampcockpit +#sdc.locationArtifactType=DCAE_INVENTORY_JSON +#sdc.InstanceID=X-ECOMP-InstanceID # # # @@ -94,7 +106,7 @@ ui.alarm.default={"Reports a transient alarm condition when an incoming CDR cann action.test.override=false # if action.insert.test.event is true, then insert event even if the action is set to test action.insert.test.event=false -CLDS_SERVICE_CACHE_MAX_SECONDS=5 +CLDS_SERVICE_CACHE_MAX_SECONDS=300 #DCAE Inventory Url Properties DCAE_INVENTORY_URL = https://dcae.api.simpledemo.openecomp.org:8080 diff --git a/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java new file mode 100644 index 00000000..89ff5792 --- /dev/null +++ b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java @@ -0,0 +1,89 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * 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. + * 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 + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.AbstractIT; +import org.onap.clamp.clds.client.req.TcaRequestFormatter; +import org.onap.clamp.clds.model.CldsEvent; +import org.onap.clamp.clds.model.prop.ModelProperties; +import org.onap.clamp.clds.util.ResourceFileUtil; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Test Onap TcaPolicyReq features + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(locations = "classpath:application-no-camunda.properties") +public class TcaRequestFormatterIT extends AbstractIT { + + String modelProp; + String modelBpmn; + String modelName; + String controlName; + String yamlInput; + + /** + * Initialize Test. + */ + @Before + public void setUp() throws IOException { + modelProp = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"); + modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json"); + yamlInput = ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-input.yaml"); + modelName = "example-model01"; + controlName = "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf"; + } + + @Test + public void testCreatePolicyJson() throws IOException { + ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn, + modelProp); + String result = TcaRequestFormatter.createPolicyJson(refProp, prop); + assertNotNull(result); + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/tca-policy-expected.json"), + result, true); + } + + @Test + public void testUpdatedBlueprintWithConfiguration() throws IOException { + ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn, + modelProp); + String result = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlInput); + + assertNotNull(result); + assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-expected.yaml"), result); + } +} diff --git a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java index 60056d42..45f39a42 100644 --- a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java +++ b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java @@ -24,11 +24,10 @@ package org.onap.clamp.clds.model.prop; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import org.junit.Before; import org.junit.Test; @@ -46,10 +45,11 @@ public class ModelPropertiesTest { } @Test - public void testHolmes() throws IOException { + public void testTcaModelDecoding() throws IOException { - String modelBpmnProp = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnProp.json"); - String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmn.json"); + String modelBpmnProp = ResourceFileUtil + .getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"); + String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json"); ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn, modelBpmnProp); @@ -66,11 +66,52 @@ public class ModelPropertiesTest { assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions()); Tca tca = prop.getType(Tca.class); + assertNotNull(tca); assertTrue(tca.isFound()); - assertEquals(1, tca.getTcaItems().size()); - assertEquals(0, tca.getTcaItems().get(0).getTcaThreshholds().size()); + assertEquals("vFirewallBroadcastPackets", tca.getTcaItem().getEventName()); + assertEquals("policy1", tca.getTcaItem().getPolicyId()); + assertEquals("f734f031-10aa-t8fb-330f-04dde2886325", tca.getTcaItem().getTcaUuId()); + assertEquals(2, tca.getTcaItem().getTcaThresholds().size()); + + assertEquals("ABATED", tca.getTcaItem().getTcaThresholds().get(0).getClosedLoopEventStatus()); + assertEquals("VM", tca.getTcaItem().getTcaThresholds().get(0).getControlLoopSchema()); + assertEquals( + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", + tca.getTcaItem().getTcaThresholds().get(0).getFieldPath()); + assertEquals("LESS_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(0).getOperator()); + assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(0).getThreshold()); + + assertEquals("ONSET", tca.getTcaItem().getTcaThresholds().get(1).getClosedLoopEventStatus()); + assertEquals("VNF", tca.getTcaItem().getTcaThresholds().get(1).getControlLoopSchema()); + assertEquals("$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + tca.getTcaItem().getTcaThresholds().get(1).getFieldPath()); + assertEquals("GREATER_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(1).getOperator()); + assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(1).getThreshold()); + } + + @Test + public void testHolmesModelDecoding() throws IOException { + + String modelBpmnProp = ResourceFileUtil + .getResourceAsString("example/model-properties/holmes/modelBpmnProperties.json"); + String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/holmes/modelBpmn.json"); + + ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn, + modelBpmnProp); + + Policy policy = prop.getType(Policy.class); + assertTrue(policy.isFound()); + assertEquals(1, policy.getPolicyChains().size()); + assertEquals("0", policy.getPolicyChains().get(0).getPolicyId()); + assertEquals(1, policy.getPolicyChains().get(0).getPolicyItems().size()); + assertEquals("resourceid", policy.getPolicyChains().get(0).getPolicyItems().get(0).getTargetResourceId()); + assertEquals(180, policy.getPolicyChains().get(0).getPolicyItems().get(0).getRetryTimeLimit()); + assertEquals(3, policy.getPolicyChains().get(0).getPolicyItems().get(0).getMaxRetries()); + assertEquals("", policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicy()); + assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions()); Holmes holmes = prop.getType(Holmes.class); + assertNotNull(holmes); assertTrue(holmes.isFound()); assertEquals("policy1", holmes.getOperationalPolicy()); assertEquals("blabla", holmes.getCorrelationLogic()); @@ -80,7 +121,7 @@ public class ModelPropertiesTest { public void testGetVf() throws IOException { CldsModel cldsModel = new CldsModel(); cldsModel.setPropText( - ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnPropWithGlobal.json")); + ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json")); assertEquals("f5213e3a-9191-4362-93b5-b67f8d770e44", ModelProperties.getVf(cldsModel)); } } \ No newline at end of file diff --git a/src/test/resources/clds/clds-reference.properties b/src/test/resources/clds/clds-reference.properties index f2ec43b7..405b3ed6 100644 --- a/src/test/resources/clds/clds-reference.properties +++ b/src/test/resources/clds/clds-reference.properties @@ -28,9 +28,9 @@ # # TCA MicroService Policy request build properties # -tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}} -tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]} - +tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}} +tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"} +# # # DCAE request build properties # @@ -45,7 +45,7 @@ sdc.decode.service_ids={} # # General Policy request properties # -policy.ecomp.name=DCAE +policy.onap.name=DCAE policy.pdp.group=default policy.ms.type=MicroService policy.ms.policyNamePrefix=Config_MS_ diff --git a/src/test/resources/example/model-properties/holmes/modelBpmn.json b/src/test/resources/example/model-properties/holmes/modelBpmn.json new file mode 100644 index 00000000..db8e54dd --- /dev/null +++ b/src/test/resources/example/model-properties/holmes/modelBpmn.json @@ -0,0 +1,20 @@ +{ + "vesCollector": [ + { + "id": "VesCollector_0orydnh", + "from": "StartEvent_1" + } + ], + "holmes": [ + { + "id": "Holmes_0i4n2mm", + "from": "VesCollector_0orydnh" + } + ], + "policy": [ + { + "id": "Policy_0honxgv", + "from": "Holmes_0i4n2mm" + } + ] +} diff --git a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json new file mode 100644 index 00000000..14b3a8c2 --- /dev/null +++ b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json @@ -0,0 +1,116 @@ +{ + "Holmes_0i4n2mm": [ + { + "name": "correlationalLogic", + "value": "blabla" + }, + { + "name": "operationalPolicy", + "value": "policy1" + } + ], + "Policy_0honxgv": { + "policy1": [ + { + "name": "pname", + "value": "policy1" + }, + { + "name": "pid", + "value": "0" + }, + { + "name": "timeout", + "value": "345" + }, + { + "policyConfigurations": [ + [ + { + "name": "maxRetries", + "value": [ + "3" + ] + }, + { + "name": "retryTimeLimit", + "value": [ + "180" + ] + }, + { + "name": "_id", + "value": [ + "dGLuNqg" + ] + }, + { + "name": "parentPolicy", + "value": [ + "" + ] + }, + { + "name": "targetResourceId", + "value": [ + "resourceid" + ] + } + ] + ] + } + ] + }, + "global": [ + { + "name": "actionSet", + "value": [ + "vnfRecipe" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED" + ] + }, + { + "name": "vf", + "value": [ + "f5213e3a-9191-4362-93b5-b67f8d770e44" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED", + "LSLEILAA", + "MDTWNJC1" + ] + } + ], + "shared": { + "byService": { + "": { + "vf": { + "": "" + }, + "location": { + "": "" + }, + "alarmCondition": { + "": "" + } + } + }, + "byVf": { + "": { + "vfc": { + "": "" + } + } + } + } +} diff --git a/src/test/resources/example/model-properties/tca/modelBpmn.json b/src/test/resources/example/model-properties/tca/modelBpmn.json new file mode 100644 index 00000000..7358f9ad --- /dev/null +++ b/src/test/resources/example/model-properties/tca/modelBpmn.json @@ -0,0 +1,20 @@ +{ + "vesCollector": [ + { + "id": "VesCollector_0orydnh", + "from": "StartEvent_1" + } + ], + "tca": [ + { + "id": "TCA_1jy9to4", + "from": "VesCollector_0orydnh" + } + ], + "policy": [ + { + "id": "Policy_0honxgv", + "from": "TCA_1jy9to4" + } + ] +} diff --git a/src/test/resources/example/model-properties/tca/modelBpmnProperties.json b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json new file mode 100644 index 00000000..0bfa78ce --- /dev/null +++ b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json @@ -0,0 +1,150 @@ +{ + "TCA_1jy9to4": { + "group1": [ + { + "name": "tname", + "value": "group1" + }, + { + "name": "tuuid", + "value": "f734f031-10aa-t8fb-330f-04dde2886325" + }, + { + "name": "tcaPolId", + "value": "policy1" + }, + { + "name": "eventName", + "value": "vFirewallBroadcastPackets" + }, + { + "serviceConfigurations": [ + [ + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated", + "LESS_OR_EQUAL", + "123", + "VM", + "ABATED" + ], + [ + "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta", + "GREATER_OR_EQUAL", + "123", + "VNF", + "ONSET" + ] + ] + } + ] + }, + "Policy_0honxgv": { + "policy1": [ + { + "name": "pname", + "value": "policy1" + }, + { + "name": "pid", + "value": "0" + }, + { + "name": "timeout", + "value": "345" + }, + { + "policyConfigurations": [ + [ + { + "name": "maxRetries", + "value": [ + "3" + ] + }, + { + "name": "retryTimeLimit", + "value": [ + "180" + ] + }, + { + "name": "_id", + "value": [ + "dGLuNqg" + ] + }, + { + "name": "parentPolicy", + "value": [ + "" + ] + }, + { + "name": "targetResourceId", + "value": [ + "resourceid" + ] + } + ] + ] + } + ] + }, + "global": [ + { + "name": "actionSet", + "value": [ + "vnfRecipe" + ] + }, + { + "name": "service", + "value": [ + "serviceUUID" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED" + ] + }, + { + "name": "vf", + "value": [ + "f5213e3a-9191-4362-93b5-b67f8d770e44" + ] + }, + { + "name": "location", + "value": [ + "SNDGCA64", + "ALPRGAED", + "LSLEILAA", + "MDTWNJC1" + ] + } + ], + "shared": { + "byService": { + "": { + "vf": { + "": "" + }, + "location": { + "": "" + }, + "alarmCondition": { + "": "" + } + } + }, + "byVf": { + "": { + "vfc": { + "": "" + } + } + } + } +} diff --git a/src/test/resources/example/templatePropForTca.json b/src/test/resources/example/templatePropForTca.json deleted file mode 100644 index 9f1ce1da..00000000 --- a/src/test/resources/example/templatePropForTca.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "global": [ - { - "name": "service", - "value": [ - "tosca_definitions_version: cloudify_dsl_1_2\r\n\r\nimports:\r\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\r\n- http://135.207.127.211/1607_prod/type_files/cdap_app.yaml\r\n\r\nnode_templates:\r\n MTCA:\r\n type: dcae.nodes.cdap_app\r\n properties:\r\n service_name: \"cdap-mtca-central\"\r\n deployment_JSON: |-\r\n {\r\n \"clusterService\": {\"$ref\": \"/services/vm-cdap-cluster-central/instances/rdm2c\"},\r\n \"namespace\": \"MTCA\",\r\n \"appNames\": [ \"cdap-mtca\" ],\r\n \"flowNames\": [ \"cdap-mtca.TCAVESCollectorFlow\" ],\r\n \"workerNames\": [\"cdap-mtca.TCADMaaPMRSubscriberWorker\", \"cdap-mtca.TCADMaaPMRPublisherWorker\"],\r\n \"serviceNames\" : [],\r\n \"apps\": {\r\n \"cdap-mtca\": {\r\n \"jarFile\": \"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\",\r\n \"artifactName\": \"dcae-analytics-mtca\",\r\n \"version\": \"1.0.0\",\r\n \"appConfigFileContent\": \"{config:{ \\\"appName\\\":\\\"cdap-mtca\\\", \\\"appDescription\\\":\\\"DCAE Analytics Threshold Crossing Alert Application\\\", \\\"tcaSubscriberOutputStreamName\\\":\\\"TCASubscriberOutputStream\\\", \\\"thresholdCalculatorFlowletInstances\\\":2, \\\"tcaVESMessageStatusTableName\\\":\\\"TCAVESMessageStatusTable\\\", \\\"tcaVESMessageStatusTableTTLSeconds\\\":864000, \\\"tcaVESAlertsTableName\\\":\\\"TCAVESAlertsTable\\\", \\\"tcaVESAlertsTableTTLSeconds\\\":1728000 }}\"\r\n }\r\n },\r\n \r\n \"configuration\": {\r\n \"$class\": \"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\",\r\n \"subscriberContentType\": \"\",\r\n \"subscriberConsumerId\": \"c12\",\r\n \"subscriberConsumerGroup\": \"OpenDCAE-c12\",\r\n \"subscriberTimeoutMS\": \"-1\",\r\n \"subscriberMessageLimit\": \"-1\",\r\n \"subscriberPollingInterval\": \"20000\",\r\n \"publisherContentType\": \"application/json\",\r\n \"publisherMaxBatchSize\": \"10\",\r\n \"publisherMaxRecoveryQueueSize\": \"100000\",\r\n \"publisherPollingInterval\": \"20000\",\r\n \"publisherAlertWindowingTime\": \"86400\",\r\n \"policyName\": \"policy.dcae.configuration\",\r\n \"policyScope\": \"pnf=eNodeB;type=configuration\",\r\n \"policyVersion\": \"1.0.0\",\r\n \"domain\" : \"measurementsForVfScaling\",\r\n \r\n \"signatures\" : {\r\n \t }\r\n\r\n }\r\n }\r\n" - ] - } - ] -} \ No newline at end of file diff --git a/src/test/resources/expected/tca.json b/src/test/resources/expected/tca.json deleted file mode 100644 index 2fd16bde..00000000 --- a/src/test/resources/expected/tca.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "service": "MThresholdCrossingConfiguration", - "location": "Edge", - "uuid": "TestUUID", - "policyName": "example_model06.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_", - "description": "from clds", - "configName": "MThresholdCrossingConfiguration", - "templateVersion": "5.2.0.1", - "priority": "4", - "version": "5.2.0.1", - "policyScope": "resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8", - "content": - { - "$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration", - "domain": "measurementsForVfScaling", - "policyScope": "pnf=eNodeB;type=configuration", - "policyName": "policy.dcae.configuration", - "policyVersion": "1.0.0", - "subscriberContentType": "application/json", - "subscriberConsumerId": "c13", - "subscriberConsumerGroup": "OpenDCAE-c13", - "subscriberTimeoutMS": "-1", - "subscriberMessageLimit": "-1", - "subscriberPollingInterval": "20000", - "publisherContentType": "application/json", - "publisherMaxBatchSize": "10", - "publisherMaxRecoveryQueueSize": "100000", - "publisherPollingInterval": "20000", - "publisherAlertWindowingTime": "86400", - "signatures": - [ - { - "nfNamingCode": "ENBE", - "target": "common_id", - "targetType": "eNodeB", - "useCaseName": "Narra", - "signatureName": "Narra_886be8da-14fe-tca1-d04b-d13b55d58df9", - "signatureUuid": "886be8da-14fe-tca1-d04b-d13b55d58df9", - "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_1", - "severity": "Warning", - "version": "1.0.2", - "maxInterval": 2, - "minMessageViolations": 3, - "thresholds": - [ - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value", - "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY", - "thresholdValue": 4, - "direction": "LESS" - }, - - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value", - "thresholdName": "PMRAATTCBRA", - "thresholdValue": 30, - "direction": "GREATER" - } - ] - }, - - { - "nfNamingCode": "ENBE", - "target": "common_id", - "targetType": "eNodeB", - "useCaseName": "Srini", - "signatureName": "Srini_8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d", - "signatureUuid": "8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d", - "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_2", - "severity": "Critical", - "version": "1.0.2", - "maxInterval": 10, - "minMessageViolations": 5, - "thresholds": - [ - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value", - "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY", - "thresholdValue": 3, - "direction": "EQUAL" - }, - - { - "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value", - "thresholdName": "PMRAATTCBRA", - "thresholdValue": 30, - "direction": "GREATER" - } - ] - } - ] - } -} \ No newline at end of file -- 2.16.6