Add serialization for Tosca Model 73/82273/6
authorliamfallon <liam.fallon@est.tech>
Fri, 15 Mar 2019 12:36:38 +0000 (12:36 +0000)
committerliamfallon <liam.fallon@est.tech>
Fri, 15 Mar 2019 12:36:38 +0000 (12:36 +0000)
Added tests for Yaml policy monitoring
Added provider interface calls in provider and structure for handling legacy APIs.

Issue-ID: POLICY-1195
Change-Id: I4825272e0713b9e6a4b89753828de8905bcffbd1
Signed-off-by: liamfallon <liam.fallon@est.tech>
54 files changed:
models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProvider.java
models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProviderFactory.java
models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java [moved from models-provider/src/main/java/org/onap/policy/models/provider/impl/PolicyModelsProviderImpl.java with 58% similarity]
models-provider/src/main/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderImpl.java [new file with mode: 0644]
models-provider/src/main/resources/dummyimpl/DummyToscaPolicyDeleteResponse.json [new file with mode: 0644]
models-provider/src/main/resources/dummyimpl/DummyToscaPolicyGetResponse.json [new file with mode: 0644]
models-provider/src/main/resources/dummyimpl/DummyToscaPolicyTypeDeleteResponse.json [new file with mode: 0644]
models-provider/src/main/resources/dummyimpl/DummyToscaPolicyTypeGetResponse.json [new file with mode: 0644]
models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderTest.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/concepts/ToscaTopologyTemplate.java
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyGuardMessageBodyHandler.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyGuardPolicy.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyOperationalMessageBodyHandler.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyOperationalPolicy.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaPoliciesJsonAdapter.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaPolicyJsonAdapter.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaServiceTemplateJsonAdapter.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaServiceTemplateMessageBodyHandler.java [new file with mode: 0644]
models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaTopologyTemplateJsonAdapter.java [new file with mode: 0644]
models-tosca/src/test/java/org/onap/policy/models/tosca/concepts/ToscaServiceTemplateTest.java
models-tosca/src/test/java/org/onap/policy/models/tosca/concepts/ToscaTopologyTemplateTest.java
models-tosca/src/test/java/org/onap/policy/models/tosca/serialization/MonitoringPolicySerializationTest.java [new file with mode: 0644]
models-tosca/src/test/resources/logback-test.xml [new file with mode: 0644]
models-tosca/src/test/resources/policies/README.txt [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.monitoring.output.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.operational.input.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.operational.input.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.operational.output.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.operational.output.tosca.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vCPE.policy.operational.output.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.guard.frequency.input.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.guard.frequency.output.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.guard.minmax.input.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.guard.minmax.output.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.monitoring.input.tosca.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.monitoring.input.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.monitoring.output.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.operational.input.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.operational.input.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.operational.output.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.operational.output.tosca.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vDNS.policy.operational.output.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vFirewall.policy.monitoring.input.tosca.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vFirewall.policy.monitoring.input.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.tosca.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policies/vFirewall.policy.operational.output.json [new file with mode: 0644]
models-tosca/src/test/resources/policies/vFirewall.policy.operational.output.tosca.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml [new file with mode: 0644]
models-tosca/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml [new file with mode: 0644]
pom.xml

index 0144f8c..fbdf092 100644 (file)
@@ -24,8 +24,9 @@ import lombok.NonNull;
 
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.base.PfReferenceKey;
 import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.serialization.legacy.LegacyGuardPolicy;
+import org.onap.policy.models.tosca.serialization.legacy.LegacyOperationalPolicy;
 
 /**
  * This interface describes the operations that are provided to users and components for reading
@@ -86,7 +87,7 @@ public interface PolicyModelsProvider {
      * @return the policies found
      * @throws PfModelException on errors getting policies
      */
-    public ToscaServiceTemplate getPolicies(@NonNull final PfReferenceKey policyKey) throws PfModelException;
+    public ToscaServiceTemplate getPolicies(@NonNull final PfConceptKey policyKey) throws PfModelException;
 
     /**
      * Create policies.
@@ -118,7 +119,83 @@ public interface PolicyModelsProvider {
      * @return the TOSCA service template containing the policy types that were deleted
      * @throws PfModelException on errors deleting policies
      */
-    public ToscaServiceTemplate deletePolicies(@NonNull final PfReferenceKey policyKey) throws PfModelException;
+    public ToscaServiceTemplate deletePolicies(@NonNull final PfConceptKey policyKey) throws PfModelException;
+
+    /**
+     * Get legacy operational policy.
+     *
+     * @param policyId ID of the policy.
+     * @return the policies found
+     * @throws PfModelException on errors getting policies
+     */
+    public LegacyOperationalPolicy getOperationalPolicy(@NonNull final String policyId) throws PfModelException;
+
+    /**
+     * Create legacy operational policy.
+     *
+     * @param legacyOperationalPolicy the definition of the policy to be created.
+     * @return the created policy
+     * @throws PfModelException on errors creating policies
+     */
+    public LegacyOperationalPolicy createOperationalPolicy(
+            @NonNull final LegacyOperationalPolicy legacyOperationalPolicy) throws PfModelException;
+
+    /**
+     * Update legacy operational policy.
+     *
+     * @param legacyOperationalPolicy the definition of the policy to be updated
+     * @return the updated policy
+     * @throws PfModelException on errors updating policies
+     */
+    public LegacyOperationalPolicy updateOperationalPolicy(
+            @NonNull final LegacyOperationalPolicy legacyOperationalPolicy) throws PfModelException;
+
+    /**
+     * Delete legacy operational policy.
+     *
+     * @param policyId ID of the policy.
+     * @return the deleted policy
+     * @throws PfModelException on errors deleting policies
+     */
+    public LegacyOperationalPolicy deleteOperationalPolicy(@NonNull final String policyId) throws PfModelException;
+
+    /**
+     * Get legacy guard policy.
+     *
+     * @param policyId ID of the policy.
+     * @return the policies found
+     * @throws PfModelException on errors getting policies
+     */
+    public LegacyGuardPolicy getGuardPolicy(@NonNull final String policyId) throws PfModelException;
+
+    /**
+     * Create legacy guard policy.
+     *
+     * @param legacyGuardPolicy the definition of the policy to be created.
+     * @return the created policy
+     * @throws PfModelException on errors creating policies
+     */
+    public LegacyGuardPolicy createGuardPolicy(@NonNull final LegacyGuardPolicy legacyGuardPolicy)
+            throws PfModelException;
+
+    /**
+     * Update legacy guard policy.
+     *
+     * @param legacyGuardPolicy the definition of the policy to be updated
+     * @return the updated policy
+     * @throws PfModelException on errors updating policies
+     */
+    public LegacyGuardPolicy updateGuardPolicy(@NonNull final LegacyGuardPolicy legacyGuardPolicy)
+            throws PfModelException;
+
+    /**
+     * Delete legacy guard policy.
+     *
+     * @param policyId ID of the policy.
+     * @return the deleted policy
+     * @throws PfModelException on errors deleting policies
+     */
+    public LegacyGuardPolicy deleteGuardPolicy(@NonNull final String policyId) throws PfModelException;
 
     /**
      * Get PDP groups.
@@ -152,5 +229,5 @@ public interface PolicyModelsProvider {
      * @param somePdpGroupFilter a filter for the get
      * @throws PfModelException on errors deleting PDP groups
      */
-    public void deletePdpGroups(@NonNull final Object somePdpGroupFilter) throws PfModelException;
+    public Object deletePdpGroups(@NonNull final Object somePdpGroupFilter) throws PfModelException;
 }
index 5c43428..b4b5f1d 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.onap.policy.models.provider;
 
-import org.onap.policy.models.provider.impl.PolicyModelsProviderImpl;
+import org.onap.policy.models.provider.impl.DummyPolicyModelsProviderImpl;
 
 /**
  * A factory for creating PolicyModelsProvider objects using the default Policy Framework implementation.
@@ -33,6 +33,6 @@ public class PolicyModelsProviderFactory {
      * Creates a new PolicyModelsProvider object from its implementation.
      */
     public  PolicyModelsProvider createPolicyModelsProvider() {
-        return new PolicyModelsProviderImpl();
+        return new DummyPolicyModelsProviderImpl();
     }
 }
@@ -24,16 +24,18 @@ import lombok.NonNull;
 
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.base.PfReferenceKey;
 import org.onap.policy.models.provider.PolicyModelsProvider;
 import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.serialization.legacy.LegacyGuardPolicy;
+import org.onap.policy.models.tosca.serialization.legacy.LegacyOperationalPolicy;
 
 /**
- * This class provides the implementaiton of the defalut Policy Models Provider for the ONAP Policy Framework.
+ * This class provides an implementation of the Policy Models Provider for the ONAP Policy Framework
+ * that works towards a relational database.
  *
  * @author Liam Fallon (liam.fallon@est.tech)
  */
-public class PolicyModelsProviderImpl implements PolicyModelsProvider {
+public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider {
 
     @Override
     public ToscaServiceTemplate getPolicyTypes(@NonNull PfConceptKey policyTypeKey) throws PfModelException {
@@ -46,13 +48,19 @@ public class PolicyModelsProviderImpl implements PolicyModelsProvider {
         return null;
     }
 
+    @Override
+    public ToscaServiceTemplate updatePolicyTypes(@NonNull ToscaServiceTemplate serviceTemplate)
+            throws PfModelException {
+        return null;
+    }
+
     @Override
     public ToscaServiceTemplate deletePolicyTypes(@NonNull PfConceptKey policyTypeKey) throws PfModelException {
         return null;
     }
 
     @Override
-    public ToscaServiceTemplate getPolicies(@NonNull PfReferenceKey policyKey) throws PfModelException {
+    public ToscaServiceTemplate getPolicies(@NonNull PfConceptKey policyKey) throws PfModelException {
         return null;
     }
 
@@ -67,16 +75,52 @@ public class PolicyModelsProviderImpl implements PolicyModelsProvider {
     }
 
     @Override
-    public ToscaServiceTemplate deletePolicies(@NonNull PfReferenceKey policyKey) throws PfModelException {
+    public ToscaServiceTemplate deletePolicies(@NonNull PfConceptKey policyKey) throws PfModelException {
         return null;
     }
 
     @Override
-    public ToscaServiceTemplate updatePolicyTypes(@NonNull ToscaServiceTemplate serviceTemplate)
+    public LegacyOperationalPolicy getOperationalPolicy(@NonNull String policyId) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public LegacyOperationalPolicy createOperationalPolicy(@NonNull LegacyOperationalPolicy legacyOperationalPolicy)
             throws PfModelException {
         return null;
     }
 
+    @Override
+    public LegacyOperationalPolicy updateOperationalPolicy(@NonNull LegacyOperationalPolicy legacyOperationalPolicy)
+            throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public LegacyOperationalPolicy deleteOperationalPolicy(@NonNull String policyId) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public LegacyGuardPolicy getGuardPolicy(@NonNull String policyId) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public LegacyGuardPolicy createGuardPolicy(@NonNull LegacyGuardPolicy legacyGuardPolicy) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public LegacyGuardPolicy updateGuardPolicy(@NonNull LegacyGuardPolicy legacyGuardPolicy) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public LegacyGuardPolicy deleteGuardPolicy(@NonNull String policyId) throws PfModelException {
+        return null;
+    }
+
     @Override
     public Object getPdpGroups(@NonNull Object somePdpGroupFilter) throws PfModelException {
         return null;
@@ -93,6 +137,8 @@ public class PolicyModelsProviderImpl implements PolicyModelsProvider {
     }
 
     @Override
-    public void deletePdpGroups(@NonNull Object somePdpGroupFilter) throws PfModelException {
+    public Object deletePdpGroups(@NonNull Object somePdpGroupFilter) throws PfModelException {
+        return null;
     }
+
 }
diff --git a/models-provider/src/main/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderImpl.java b/models-provider/src/main/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderImpl.java
new file mode 100644 (file)
index 0000000..9b92ea3
--- /dev/null
@@ -0,0 +1,168 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.provider.impl;
+
+import com.google.gson.Gson;
+
+import javax.ws.rs.core.Response;
+
+import lombok.NonNull;
+
+import org.onap.policy.common.utils.resources.TextFileUtils;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.serialization.legacy.LegacyGuardPolicy;
+import org.onap.policy.models.tosca.serialization.legacy.LegacyOperationalPolicy;
+import org.onap.policy.models.tosca.serialization.simple.ToscaServiceTemplateMessageBodyHandler;
+
+/**
+ * This class provides a dummy implementation of the Policy Models Provider for the ONAP Policy
+ * Framework.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class DummyPolicyModelsProviderImpl implements PolicyModelsProvider {
+    @Override
+    public ToscaServiceTemplate getPolicyTypes(@NonNull PfConceptKey policyTypeKey) throws PfModelException {
+        return getDummyResponse("src/main/resources/dummyimpl/DummyToscaPolicyTypeGetResponse.json");
+    }
+
+    @Override
+    public ToscaServiceTemplate createPolicyTypes(@NonNull ToscaServiceTemplate serviceTemplate)
+            throws PfModelException {
+        return serviceTemplate;
+    }
+
+    @Override
+    public ToscaServiceTemplate updatePolicyTypes(@NonNull ToscaServiceTemplate serviceTemplate)
+            throws PfModelException {
+        return serviceTemplate;
+    }
+
+    @Override
+    public ToscaServiceTemplate deletePolicyTypes(@NonNull PfConceptKey policyTypeKey) throws PfModelException {
+        return getDummyResponse("src/main/resources/dummyimpl/DummyToscaPolicyTypeDeleteResponse.json");
+    }
+
+    @Override
+    public ToscaServiceTemplate getPolicies(@NonNull PfConceptKey policyKey) throws PfModelException {
+        return getDummyResponse("src/main/resources/dummyimpl/DummyToscaPolicyGetResponse.json");
+    }
+
+    @Override
+    public ToscaServiceTemplate createPolicies(@NonNull ToscaServiceTemplate serviceTemplate) throws PfModelException {
+        return serviceTemplate;
+    }
+
+    @Override
+    public ToscaServiceTemplate updatePolicies(@NonNull ToscaServiceTemplate serviceTemplate) throws PfModelException {
+        return serviceTemplate;
+    }
+
+    @Override
+    public ToscaServiceTemplate deletePolicies(@NonNull PfConceptKey policyKey) throws PfModelException {
+        return getDummyResponse("src/main/resources/dummyimpl/DummyToscaPolicyDeleteResponse.json");
+    }
+
+    @Override
+    public LegacyOperationalPolicy getOperationalPolicy(@NonNull String policyId) throws PfModelException {
+        return new LegacyOperationalPolicy();
+    }
+
+    @Override
+    public LegacyOperationalPolicy createOperationalPolicy(@NonNull LegacyOperationalPolicy legacyOperationalPolicy)
+            throws PfModelException {
+        return legacyOperationalPolicy;
+    }
+
+    @Override
+    public LegacyOperationalPolicy updateOperationalPolicy(@NonNull LegacyOperationalPolicy legacyOperationalPolicy)
+            throws PfModelException {
+        return legacyOperationalPolicy;
+    }
+
+    @Override
+    public LegacyOperationalPolicy deleteOperationalPolicy(@NonNull String policyId) throws PfModelException {
+        return new LegacyOperationalPolicy();
+    }
+
+    @Override
+    public LegacyGuardPolicy getGuardPolicy(@NonNull String policyId) throws PfModelException {
+        return new LegacyGuardPolicy();
+    }
+
+    @Override
+    public LegacyGuardPolicy createGuardPolicy(@NonNull LegacyGuardPolicy legacyGuardPolicy) throws PfModelException {
+        return legacyGuardPolicy;
+    }
+
+    @Override
+    public LegacyGuardPolicy updateGuardPolicy(@NonNull LegacyGuardPolicy legacyGuardPolicy) throws PfModelException {
+        return legacyGuardPolicy;
+    }
+
+    @Override
+    public LegacyGuardPolicy deleteGuardPolicy(@NonNull String policyId) throws PfModelException {
+        return new LegacyGuardPolicy();
+    }
+
+    @Override
+    public Object getPdpGroups(@NonNull Object somePdpGroupFilter) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public Object createPdpGroups(@NonNull Object somePdpGroupSpecification) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public Object updatePdpGroups(@NonNull Object somePdpGroupSpecification) throws PfModelException {
+        return null;
+    }
+
+    @Override
+    public Object deletePdpGroups(@NonNull Object somePdpGroupFilter) throws PfModelException {
+        return null;
+    }
+
+    /**
+     * Return a ToscaServicetemplate dummy response.
+     *
+     * @param fileName the file name containing the dummy response
+     * @return the ToscaServiceTemplate with the dummy response
+     */
+    private ToscaServiceTemplate getDummyResponse(@NonNull final String fileName) {
+        Gson gson = new ToscaServiceTemplateMessageBodyHandler().getGson();
+        ToscaServiceTemplate serviceTemplate;
+
+        try {
+            serviceTemplate = gson.fromJson(TextFileUtils.getTextFileAsString(fileName), ToscaServiceTemplate.class);
+        } catch (Exception exc) {
+            throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "error serializing object", exc);
+        }
+
+        return serviceTemplate;
+    }
+}
diff --git a/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyDeleteResponse.json b/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyDeleteResponse.json
new file mode 100644 (file)
index 0000000..27de380
--- /dev/null
@@ -0,0 +1,48 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "onap.vcpe.tca": {
+                    "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "onap.vcpe.tca"
+                    },
+                    "properties": {
+                        "domain": "measurementsForVfScaling",
+                        "metricsPerEventName": [
+                            {
+                                "eventName": "Measurement_vGMUX",
+                                "controlLoopSchemaType": "VNF",
+                                "policyScope": "DCAE",
+                                "policyName": "DCAE.Config_tca-hi-lo",
+                                "policyVersion": "v0.0.1",
+                                "thresholds": [
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "EQUAL",
+                                        "severity": "MAJOR",
+                                        "closedLoopEventStatus": "ABATED"
+                                    },
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "GREATER",
+                                        "severity": "CRITICAL",
+                                        "closedLoopEventStatus": "ONSET"
+                                    }
+                                ]
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyGetResponse.json b/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyGetResponse.json
new file mode 100644 (file)
index 0000000..27de380
--- /dev/null
@@ -0,0 +1,48 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "onap.vcpe.tca": {
+                    "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "onap.vcpe.tca"
+                    },
+                    "properties": {
+                        "domain": "measurementsForVfScaling",
+                        "metricsPerEventName": [
+                            {
+                                "eventName": "Measurement_vGMUX",
+                                "controlLoopSchemaType": "VNF",
+                                "policyScope": "DCAE",
+                                "policyName": "DCAE.Config_tca-hi-lo",
+                                "policyVersion": "v0.0.1",
+                                "thresholds": [
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "EQUAL",
+                                        "severity": "MAJOR",
+                                        "closedLoopEventStatus": "ABATED"
+                                    },
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "GREATER",
+                                        "severity": "CRITICAL",
+                                        "closedLoopEventStatus": "ONSET"
+                                    }
+                                ]
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyTypeDeleteResponse.json b/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyTypeDeleteResponse.json
new file mode 100644 (file)
index 0000000..27de380
--- /dev/null
@@ -0,0 +1,48 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "onap.vcpe.tca": {
+                    "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "onap.vcpe.tca"
+                    },
+                    "properties": {
+                        "domain": "measurementsForVfScaling",
+                        "metricsPerEventName": [
+                            {
+                                "eventName": "Measurement_vGMUX",
+                                "controlLoopSchemaType": "VNF",
+                                "policyScope": "DCAE",
+                                "policyName": "DCAE.Config_tca-hi-lo",
+                                "policyVersion": "v0.0.1",
+                                "thresholds": [
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "EQUAL",
+                                        "severity": "MAJOR",
+                                        "closedLoopEventStatus": "ABATED"
+                                    },
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "GREATER",
+                                        "severity": "CRITICAL",
+                                        "closedLoopEventStatus": "ONSET"
+                                    }
+                                ]
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyTypeGetResponse.json b/models-provider/src/main/resources/dummyimpl/DummyToscaPolicyTypeGetResponse.json
new file mode 100644 (file)
index 0000000..27de380
--- /dev/null
@@ -0,0 +1,48 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "onap.vcpe.tca": {
+                    "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "onap.vcpe.tca"
+                    },
+                    "properties": {
+                        "domain": "measurementsForVfScaling",
+                        "metricsPerEventName": [
+                            {
+                                "eventName": "Measurement_vGMUX",
+                                "controlLoopSchemaType": "VNF",
+                                "policyScope": "DCAE",
+                                "policyName": "DCAE.Config_tca-hi-lo",
+                                "policyVersion": "v0.0.1",
+                                "thresholds": [
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "EQUAL",
+                                        "severity": "MAJOR",
+                                        "closedLoopEventStatus": "ABATED"
+                                    },
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "GREATER",
+                                        "severity": "CRITICAL",
+                                        "closedLoopEventStatus": "ONSET"
+                                    }
+                                ]
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderTest.java
new file mode 100644 (file)
index 0000000..d4808ee
--- /dev/null
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.provider.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.provider.PolicyModelsProviderFactory;
+import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+
+/**
+ * Test the dummy moldes provider implementation.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class DummyPolicyModelsProviderTest {
+
+    @Test
+    public void test() throws PfModelException {
+        PolicyModelsProvider dummyProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider();
+
+        ToscaServiceTemplate serviceTemplate = dummyProvider.getPolicies(new PfConceptKey());
+        assertNotNull(serviceTemplate);
+        assertEquals("onap.vcpe.tca:1.0.0",
+                serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vcpe.tca").getId());
+    }
+}
index e8541f5..aed181f 100644 (file)
@@ -38,8 +38,8 @@ import lombok.NonNull;
 import org.apache.commons.lang3.ObjectUtils;
 import org.onap.policy.common.utils.validation.Assertions;
 import org.onap.policy.models.base.PfConcept;
-import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfKey;
+import org.onap.policy.models.base.PfReferenceKey;
 import org.onap.policy.models.base.PfValidationMessage;
 import org.onap.policy.models.base.PfValidationResult;
 import org.onap.policy.models.base.PfValidationResult.ValidationResult;
@@ -59,7 +59,7 @@ public class ToscaTopologyTemplate extends PfConcept {
     private static final long serialVersionUID = 8969698734673232603L;
 
     @EmbeddedId
-    private PfConceptKey key;
+    private PfReferenceKey key;
 
     @Column(name = "description")
     private String description;
@@ -71,7 +71,7 @@ public class ToscaTopologyTemplate extends PfConcept {
      * The Default Constructor creates a {@link ToscaTopologyTemplate} object with a null key.
      */
     public ToscaTopologyTemplate() {
-        this(new PfConceptKey());
+        this(new PfReferenceKey());
     }
 
     /**
@@ -80,7 +80,7 @@ public class ToscaTopologyTemplate extends PfConcept {
      *
      * @param key the key
      */
-    public ToscaTopologyTemplate(@NonNull final PfConceptKey key) {
+    public ToscaTopologyTemplate(@NonNull final PfReferenceKey key) {
         this.key = key;
     }
 
@@ -169,7 +169,7 @@ public class ToscaTopologyTemplate extends PfConcept {
         Assertions.instanceOf(copyObject, PfConcept.class);
 
         final ToscaTopologyTemplate copy = ((ToscaTopologyTemplate) copyObject);
-        copy.setKey(new PfConceptKey(key));
+        copy.setKey(new PfReferenceKey(key));
         copy.setDescription(description);
         copy.setPolicies(policies != null ? new ToscaPolicies(policies) : null);
 
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyGuardMessageBodyHandler.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyGuardMessageBodyHandler.java
new file mode 100644 (file)
index 0000000..b343c9e
--- /dev/null
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.legacy;
+
+import com.google.gson.GsonBuilder;
+
+import org.onap.policy.common.gson.GsonMessageBodyHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provider used to serialize and deserialize TOSCA objects using GSON.
+ */
+public class LegacyGuardMessageBodyHandler extends GsonMessageBodyHandler {
+
+    public static final Logger logger = LoggerFactory.getLogger(LegacyGuardMessageBodyHandler.class);
+
+    /**
+     * Constructs the object.
+     */
+    public LegacyGuardMessageBodyHandler() {
+        this(new GsonBuilder());
+
+        logger.info("Using GSON with TOSCA for REST calls");
+    }
+
+    /**
+     * Constructs the object.
+     *
+     * @param builder builder to use to create the gson object
+     */
+    public LegacyGuardMessageBodyHandler(final GsonBuilder builder) {
+        // @formatter:off
+        super(builder
+                .create()
+        );
+        // @formatter:on
+    }
+
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyGuardPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyGuardPolicy.java
new file mode 100644 (file)
index 0000000..a365696
--- /dev/null
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.legacy;
+
+/**
+ * Definition of a legacy guard policy stored as a TOSCA policy.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class LegacyGuardPolicy {
+
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyOperationalMessageBodyHandler.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyOperationalMessageBodyHandler.java
new file mode 100644 (file)
index 0000000..f51a427
--- /dev/null
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.legacy;
+
+import com.google.gson.GsonBuilder;
+
+import org.onap.policy.common.gson.GsonMessageBodyHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provider used to serialize and deserialize TOSCA objects using GSON.
+ */
+public class LegacyOperationalMessageBodyHandler extends GsonMessageBodyHandler {
+
+    public static final Logger logger = LoggerFactory.getLogger(LegacyOperationalMessageBodyHandler.class);
+
+    /**
+     * Constructs the object.
+     */
+    public LegacyOperationalMessageBodyHandler() {
+        this(new GsonBuilder());
+
+        logger.info("Using GSON with TOSCA for REST calls");
+    }
+
+    /**
+     * Constructs the object.
+     *
+     * @param builder builder to use to create the gson object
+     */
+    public LegacyOperationalMessageBodyHandler(final GsonBuilder builder) {
+        // @formatter:off
+        super(builder
+                .create()
+        );
+        // @formatter:on
+    }
+
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyOperationalPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/legacy/LegacyOperationalPolicy.java
new file mode 100644 (file)
index 0000000..0b63f2d
--- /dev/null
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.legacy;
+
+/**
+ * Definition of a legacy operational policy stored as a TOSCA policy.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class LegacyOperationalPolicy {
+
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaPoliciesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaPoliciesJsonAdapter.java
new file mode 100644 (file)
index 0000000..a12ba8b
--- /dev/null
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.simple;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+import java.util.Iterator;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.tosca.concepts.ToscaPolicies;
+import org.onap.policy.models.tosca.concepts.ToscaPolicy;
+
+/**
+ * GSON type adapter for TOSCA policies.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class ToscaPoliciesJsonAdapter implements JsonSerializer<ToscaPolicies>, JsonDeserializer<ToscaPolicies> {
+    @Override
+    public ToscaPolicies deserialize(@NonNull final JsonElement policiesElement, @NonNull final Type type,
+            @NonNull final JsonDeserializationContext context) {
+        // The incoming JSON
+        final JsonArray policiesJsonArray = policiesElement.getAsJsonArray();
+
+        // The outgoing object
+        final PfConceptKey policiesKey = new PfConceptKey("IncomingPolicies", "0.0.1");
+        final ToscaPolicies policies = new ToscaPolicies(policiesKey);
+
+        // Get the policies
+        for (Iterator<JsonElement> policiesIterator = policiesJsonArray.iterator(); policiesIterator.hasNext(); ) {
+            ToscaPolicy policy = new ToscaPolicyJsonAdapter()
+                    .deserialize(policiesIterator.next(), ToscaPolicy.class, context);
+
+            policies.getConceptMap().put(policy.getKey(), policy);
+        }
+
+        return policies;
+    }
+
+    @Override
+    public JsonElement serialize(@NonNull final ToscaPolicies policy, @NonNull final Type type,
+            @NonNull final JsonSerializationContext context) {
+
+        return null;
+    }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaPolicyJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaPolicyJsonAdapter.java
new file mode 100644 (file)
index 0000000..ae5e596
--- /dev/null
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.simple;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+
+import javax.ws.rs.core.Response;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.concepts.ToscaPolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * GSON type adapter for TOSCA policies.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class ToscaPolicyJsonAdapter implements JsonSerializer<ToscaPolicy>, JsonDeserializer<ToscaPolicy> {
+    // Logger for this class
+    private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyJsonAdapter.class);
+
+    @Override
+    public ToscaPolicy deserialize(@NonNull final JsonElement policyElement, @NonNull final Type type,
+            @NonNull final JsonDeserializationContext context) {
+
+        // The incoming JSON
+        final JsonObject policyJsonMapObject = policyElement.getAsJsonObject();
+
+        // We should only have a single entry for the policy
+        if (policyJsonMapObject.entrySet().size() != 1) {
+            String errorMessage = "a policy list entry may only contain one and only one policy";
+            LOGGER.debug(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, errorMessage);
+        }
+
+        String policyName = policyJsonMapObject.entrySet().iterator().next().getKey();
+        JsonObject policyJsonObject = policyJsonMapObject.entrySet().iterator().next().getValue().getAsJsonObject();
+
+        PfConceptKey policyKey = new PfConceptKey(policyName, policyJsonObject.get("version").getAsString());
+        PfConceptKey policyTypeKey = new PfConceptKey(
+                policyJsonObject.get("type").getAsString(),
+                policyJsonObject.get("version").getAsString());
+        ToscaPolicy policy = new ToscaPolicy(policyKey, policyTypeKey);
+
+        // TODO: Rest of parsing
+
+        return policy;
+    }
+
+    @Override
+    public JsonElement serialize(@NonNull final ToscaPolicy policy, @NonNull final Type type,
+            @NonNull final JsonSerializationContext context) {
+
+        return null;
+    }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaServiceTemplateJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaServiceTemplateJsonAdapter.java
new file mode 100644 (file)
index 0000000..b08a33d
--- /dev/null
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.simple;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.concepts.ToscaTopologyTemplate;
+
+/**
+ * GSON type adapter for TOSCA policies.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class ToscaServiceTemplateJsonAdapter
+        implements JsonSerializer<ToscaServiceTemplate>, JsonDeserializer<ToscaServiceTemplate> {
+    @Override
+    public ToscaServiceTemplate deserialize(@NonNull final JsonElement serviceTemplateElement, @NonNull final Type type,
+            @NonNull final JsonDeserializationContext context) {
+
+        // The incoming JSON
+        final JsonObject serviceTemplateJsonObject = serviceTemplateElement.getAsJsonObject();
+
+        // The outgoing object
+        final PfConceptKey serviceTemplateKey = new PfConceptKey("IncomingServiceTemplate", "0.0.1");
+        final ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(serviceTemplateKey);
+        serviceTemplate
+                .setToscaDefinitionsVersion(serviceTemplateJsonObject.get("tosca_definitions_version").getAsString());
+
+        if (serviceTemplateJsonObject.has("topology_template")) {
+            serviceTemplate.setTopologyTemplate(new ToscaTopologyTemplateJsonAdapter().deserialize(
+                    serviceTemplateJsonObject.get("topology_template"), ToscaTopologyTemplate.class, context));
+        }
+
+        // Set the parent key of the topology template to be this service template
+        serviceTemplate.getTopologyTemplate().getKey().setParentConceptKey(serviceTemplateKey);
+
+        return serviceTemplate;
+    }
+
+    @Override
+    public JsonElement serialize(@NonNull final ToscaServiceTemplate serviceTemplate, @NonNull final Type type,
+            @NonNull final JsonSerializationContext context) {
+
+        return null;
+    }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaServiceTemplateMessageBodyHandler.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaServiceTemplateMessageBodyHandler.java
new file mode 100644 (file)
index 0000000..9abbf1c
--- /dev/null
@@ -0,0 +1,64 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.simple;
+
+import com.google.gson.GsonBuilder;
+
+import org.onap.policy.common.gson.GsonMessageBodyHandler;
+import org.onap.policy.models.tosca.concepts.ToscaPolicies;
+import org.onap.policy.models.tosca.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.concepts.ToscaTopologyTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provider used to serialize and deserialize TOSCA objects using GSON.
+ */
+public class ToscaServiceTemplateMessageBodyHandler extends GsonMessageBodyHandler {
+
+    public static final Logger logger = LoggerFactory.getLogger(ToscaServiceTemplateMessageBodyHandler.class);
+
+    /**
+     * Constructs the object.
+     */
+    public ToscaServiceTemplateMessageBodyHandler() {
+        this(new GsonBuilder());
+
+        logger.info("Using GSON with TOSCA for REST calls");
+    }
+
+    /**
+     * Constructs the object.
+     *
+     * @param builder builder to use to create the gson object
+     */
+    public ToscaServiceTemplateMessageBodyHandler(final GsonBuilder builder) {
+        // @formatter:off
+        super(builder
+                .registerTypeAdapter(ToscaServiceTemplate.class, new ToscaServiceTemplateJsonAdapter())
+                .registerTypeAdapter(ToscaTopologyTemplate.class, new ToscaTopologyTemplateJsonAdapter())
+                .registerTypeAdapter(ToscaPolicies.class, new ToscaPoliciesJsonAdapter())
+                .registerTypeAdapter(ToscaPolicy.class, new ToscaPolicyJsonAdapter())
+                .create()
+        );
+        // @formatter:on
+    }
+
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaTopologyTemplateJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/serialization/simple/ToscaTopologyTemplateJsonAdapter.java
new file mode 100644 (file)
index 0000000..4f2f590
--- /dev/null
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization.simple;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfReferenceKey;
+import org.onap.policy.models.tosca.concepts.ToscaPolicies;
+import org.onap.policy.models.tosca.concepts.ToscaTopologyTemplate;
+
+/**
+ * GSON type adapter for TOSCA policies.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class ToscaTopologyTemplateJsonAdapter
+        implements JsonSerializer<ToscaTopologyTemplate>, JsonDeserializer<ToscaTopologyTemplate> {
+
+    @Override
+    public ToscaTopologyTemplate deserialize(@NonNull final JsonElement toplogyTemplateElement,
+            @NonNull final Type type, @NonNull final JsonDeserializationContext context) {
+
+        // The incoming JSON
+        final JsonObject topologyTemplateJsonObject = toplogyTemplateElement.getAsJsonObject();
+
+        // The outgoing object
+        final PfReferenceKey topologyTemplateKey = new PfReferenceKey(new PfConceptKey(), "IncomingTopologyTemplate");
+        final ToscaTopologyTemplate topologyTemplate = new ToscaTopologyTemplate(topologyTemplateKey);
+
+        if (topologyTemplateJsonObject.has("policies")) {
+            topologyTemplate.setPolicies(new ToscaPoliciesJsonAdapter()
+                    .deserialize(topologyTemplateJsonObject.get("policies"), ToscaPolicies.class, context));
+        }
+
+        return topologyTemplate;
+    }
+
+    @Override
+    public JsonElement serialize(@NonNull final ToscaTopologyTemplate topologyTemplate, @NonNull final Type type,
+            @NonNull final JsonSerializationContext context) {
+
+        return null;
+    }
+}
index 0fc7a0b..5d86158 100644 (file)
@@ -31,6 +31,7 @@ import java.util.TreeMap;
 
 import org.junit.Test;
 import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfReferenceKey;
 import org.onap.policy.models.base.PfValidationResult;
 
 /**
@@ -103,7 +104,7 @@ public class ToscaServiceTemplateTest {
         tst.setPolicyTypes(policyTypes);
         assertEquals(policyTypes, tst.getPolicyTypes());
 
-        PfConceptKey tttKey = new PfConceptKey("TopologyTemplate", "0.0.1");
+        PfReferenceKey tttKey = new PfReferenceKey(tstKey, "TopologyTemplate");
         ToscaTopologyTemplate ttt = new ToscaTopologyTemplate(tttKey);
         tst.setTopologyTemplate(ttt);
         assertEquals(ttt, tst.getTopologyTemplate());
index 4a288f1..97bbdbe 100644 (file)
@@ -31,6 +31,7 @@ import java.util.TreeMap;
 
 import org.junit.Test;
 import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfReferenceKey;
 import org.onap.policy.models.base.PfValidationResult;
 
 /**
@@ -43,11 +44,11 @@ public class ToscaTopologyTemplateTest {
     @Test
     public void testTopologyTemplatePojo() {
         assertNotNull(new ToscaTopologyTemplate());
-        assertNotNull(new ToscaTopologyTemplate(new PfConceptKey()));
+        assertNotNull(new ToscaTopologyTemplate(new PfReferenceKey()));
         assertNotNull(new ToscaTopologyTemplate(new ToscaTopologyTemplate()));
 
         try {
-            new ToscaTopologyTemplate((PfConceptKey) null);
+            new ToscaTopologyTemplate((PfReferenceKey) null);
             fail("test should throw an exception");
         } catch (Exception exc) {
             assertEquals("key is marked @NonNull but is null", exc.getMessage());
@@ -60,7 +61,7 @@ public class ToscaTopologyTemplateTest {
             assertEquals("copyConcept is marked @NonNull but is null", exc.getMessage());
         }
 
-        PfConceptKey tttKey = new PfConceptKey("ttt", "0.0.1");
+        PfReferenceKey tttKey = new PfReferenceKey("tst", "0.0.1", "ttt");
         ToscaTopologyTemplate ttt = new ToscaTopologyTemplate(tttKey);
 
         ttt.setDescription("A Description");
@@ -89,7 +90,7 @@ public class ToscaTopologyTemplateTest {
         assertEquals(0, ttt.compareTo(ttt));
         assertFalse(ttt.compareTo(ttt.getKey()) == 0);
 
-        PfConceptKey otherDtKey = new PfConceptKey("otherDt", "0.0.1");
+        PfReferenceKey otherDtKey = new PfReferenceKey("otherSt", "0.0.1", "otherDt");
         ToscaTopologyTemplate otherDt = new ToscaTopologyTemplate(otherDtKey);
 
         assertFalse(ttt.compareTo(otherDt) == 0);
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/serialization/MonitoringPolicySerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/serialization/MonitoringPolicySerializationTest.java
new file mode 100644 (file)
index 0000000..07f5bca
--- /dev/null
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.serialization;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
+
+import java.io.IOException;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.resources.TextFileUtils;
+import org.onap.policy.models.base.PfValidationResult;
+import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.serialization.simple.ToscaServiceTemplateMessageBodyHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.yaml.snakeyaml.Yaml;
+
+/**
+ * Test serialization of monitoring policies.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class MonitoringPolicySerializationTest {
+    // Logger for this class
+    private static final Logger LOGGER = LoggerFactory.getLogger(MonitoringPolicySerializationTest.class);
+
+    private Gson gson;
+
+    @Before
+    public void setUp() {
+        gson = new ToscaServiceTemplateMessageBodyHandler().getGson();
+    }
+
+    @Test
+    public void testJsonDeserialization() throws JsonSyntaxException, IOException {
+        ToscaServiceTemplate serviceTemplate = gson.fromJson(
+                TextFileUtils
+                        .getTextFileAsString("src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(serviceTemplate);
+        LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString());
+        assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid());
+
+        assertEquals("onap.vcpe.tca:1.0.0",
+                serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vcpe.tca").getId());
+        assertEquals("onap.vcpe.tca:1.0.0",
+                serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vcpe.tca").getId());
+    }
+
+    @Test
+    public void testYamlDeserialization() throws JsonSyntaxException, IOException {
+        Yaml yaml = new Yaml();
+        Object yamlObject = yaml.load(TextFileUtils
+                .getTextFileAsString("src/test/resources/policies/vCPE.policy.monitoring.input.tosca.yaml"));
+
+        String yamlAsJsonString = new Gson().toJson(yamlObject);
+
+        ToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, ToscaServiceTemplate.class);
+
+        assertNotNull(serviceTemplate);
+        LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString());
+        assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid());
+
+        assertEquals("onap.vcpe.tca:1.0.0",
+                serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vcpe.tca").getId());
+        assertEquals("onap.vcpe.tca:1.0.0",
+                serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vcpe.tca").getId());
+    }
+}
diff --git a/models-tosca/src/test/resources/logback-test.xml b/models-tosca/src/test/resources/logback-test.xml
new file mode 100644 (file)
index 0000000..6e2737d
--- /dev/null
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. 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.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<configuration>
+
+    <contextName>Apex</contextName>
+    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
+    <property name="LOG_DIR" value="${java.io.tmpdir}/pf_logging/" />
+
+    <!-- USE FOR STD OUT ONLY -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
+        </encoder>
+    </appender>
+
+    <root level="info">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOG_DIR}/apex.log</file>
+        <encoder>
+            <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+                %logger{26} - %msg %n %ex{full}</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.onap.policy" level="info" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+</configuration>
diff --git a/models-tosca/src/test/resources/policies/README.txt b/models-tosca/src/test/resources/policies/README.txt
new file mode 100644 (file)
index 0000000..942913d
--- /dev/null
@@ -0,0 +1,25 @@
+The "input" prefix indicates that this is what the payload looks like on the POST. While the "output" prefix
+indicates that this is what the payload looks like when the response goes back to the caller.
+
+For each of the use cases, there is at least one configuration policy for DCAE Microservice. 
+
+*.monitoring.input.[json|yaml] <-- POST request
+
+*.monitoring.output.[json|yaml] --> POST response
+
+The Operational Policies:
+
+*.operational.input.yaml --> Can Pam change this to JSON??
+
+*.operational.output.json --> POST response
+
+The Guard Policies:
+
+*.guard.[frequency|minmax].json <-- POST request
+
+*.guard.[frequency|minmax].json --> POST response
+
+For DBAO, the following are internal TOSCA Representations for the Operational and Guard policies, with the
+contents of the yaml or JSON URL Encoded:
+
+*.output.tosca.yaml
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json b/models-tosca/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.json
new file mode 100644 (file)
index 0000000..27de380
--- /dev/null
@@ -0,0 +1,48 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "onap.vcpe.tca": {
+                    "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "onap.vcpe.tca"
+                    },
+                    "properties": {
+                        "domain": "measurementsForVfScaling",
+                        "metricsPerEventName": [
+                            {
+                                "eventName": "Measurement_vGMUX",
+                                "controlLoopSchemaType": "VNF",
+                                "policyScope": "DCAE",
+                                "policyName": "DCAE.Config_tca-hi-lo",
+                                "policyVersion": "v0.0.1",
+                                "thresholds": [
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "EQUAL",
+                                        "severity": "MAJOR",
+                                        "closedLoopEventStatus": "ABATED"
+                                    },
+                                    {
+                                        "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                                        "version": "1.0.2",
+                                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+                                        "thresholdValue": 0,
+                                        "direction": "GREATER",
+                                        "severity": "CRITICAL",
+                                        "closedLoopEventStatus": "ONSET"
+                                    }
+                                ]
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.yaml b/models-tosca/src/test/resources/policies/vCPE.policy.monitoring.input.tosca.yaml
new file mode 100644 (file)
index 0000000..a193cba
--- /dev/null
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+     -
+       onap.vcpe.tca:
+           type: onap.policies.monitoring.cdap.tca.hi.lo.app
+           version: 1.0.0
+           metadata:
+             policy-id: onap.vcpe.tca
+           properties:
+             domain: measurementsForVfScaling
+             metricsPerEventName: 
+               - 
+                 eventName: Measurement_vGMUX
+                 controlLoopSchemaType: VNF
+                 policyScope: DCAE
+                 policyName: "DCAE.Config_tca-hi-lo"
+                 policyVersion: "v0.0.1"
+                 thresholds: 
+                   - 
+                     closedLoopControlName: "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e"
+                     version: "1.0.2"
+                     fieldPath: "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value"
+                     thresholdValue: 0
+                     direction: EQUAL
+                     severity: MAJOR
+                     closedLoopEventStatus: ABATED
+                   - 
+                     closedLoopControlName: "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e"
+                     version: "1.0.2"
+                     fieldPath: "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value"
+                     thresholdValue: 0
+                     direction: GREATER
+                     severity: CRITICAL
+                     closedLoopEventStatus: ONSET
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.monitoring.output.tosca.yaml b/models-tosca/src/test/resources/policies/vCPE.policy.monitoring.output.tosca.yaml
new file mode 100644 (file)
index 0000000..53ac55d
--- /dev/null
@@ -0,0 +1,36 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+     -
+       onap.vcpe.tca:
+           type: onap.policies.monitoring.cdap.tca.hi.lo.app
+           version: 1.0.0
+           metadata:
+             policy-id: onap.vcpe.tca
+             policy-version: 1
+           properties:
+             domain: measurementsForVfScaling
+             metricsPerEventName: 
+               - 
+                 eventName: Measurement_vGMUX
+                 controlLoopSchemaType: VNF
+                 policyScope: DCAE
+                 policyName: "DCAE.Config_tca-hi-lo"
+                 policyVersion: "v0.0.1"
+                 thresholds: 
+                   - 
+                     closedLoopControlName: "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e"
+                     version: "1.0.2"
+                     fieldPath: "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value"
+                     thresholdValue: 0
+                     direction: EQUAL
+                     severity: MAJOR
+                     closedLoopEventStatus: ABATED
+                   - 
+                     closedLoopControlName: "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e"
+                     version: "1.0.2"
+                     fieldPath: "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value"
+                     thresholdValue: 0
+                     direction: GREATER
+                     severity: CRITICAL
+                     closedLoopEventStatus: ONSET
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.operational.input.json b/models-tosca/src/test/resources/policies/vCPE.policy.operational.input.json
new file mode 100644 (file)
index 0000000..393cb02
--- /dev/null
@@ -0,0 +1,4 @@
+{
+  "policy-id" : "operational.restart",
+  "content" : "controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20controlLoopName%3A%20ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e%0A%20%20trigger_policy%3A%20unique-policy-id-1-restart%0A%20%20timeout%3A%203600%0A%20%20abatement%3A%20true%0A%20%0Apolicies%3A%0A%20%20-%20id%3A%20unique-policy-id-1-restart%0A%20%20%20%20name%3A%20Restart%20the%20VM%0A%20%20%20%20description%3A%0A%20%20%20%20actor%3A%20APPC%0A%20%20%20%20recipe%3A%20Restart%0A%20%20%20%20target%3A%0A%20%20%20%20%20%20type%3A%20VM%0A%20%20%20%20retry%3A%203%0A%20%20%20%20timeout%3A%201200%0A%20%20%20%20success%3A%20final_success%0A%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20failure_guard%3A%20final_failure_guard"
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.operational.input.tosca.yaml b/models-tosca/src/test/resources/policies/vCPE.policy.operational.input.tosca.yaml
new file mode 100644 (file)
index 0000000..dda0169
--- /dev/null
@@ -0,0 +1,33 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+     -
+      operational.restart:
+         type: onap.policies.controlloop.Operational
+         version: 1.0.0
+         metadata: 
+           policy-id: operational.restart
+         properties:
+           controlLoop:
+             version: 2.0.0
+             controlLoopName: ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
+             trigger_policy: unique-policy-id-1-restart
+             timeout: 3600
+             abatement: true
+           policies:
+             - id: unique-policy-id-1-restart
+               name: Restart the VM
+               description:
+               actor: APPC
+               recipe: Restart
+               target:
+                 type: VM
+               retry: 3
+               timeout: 1200
+               success: final_success
+               failure: final_failure
+               failure_timeout: final_failure_timeout
+               failure_retries: final_failure_retries
+               failure_exception: final_failure_exception
+               failure_guard: final_failure_guard
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.operational.output.json b/models-tosca/src/test/resources/policies/vCPE.policy.operational.output.json
new file mode 100644 (file)
index 0000000..7d26e8e
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "policy-id" : "operational.restart",
+  "policy-version" : "1",
+  "content" : "controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20controlLoopName%3A%20ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e%0A%20%20trigger_policy%3A%20unique-policy-id-1-restart%0A%20%20timeout%3A%203600%0A%20%20abatement%3A%20true%0A%20%0Apolicies%3A%0A%20%20-%20id%3A%20unique-policy-id-1-restart%0A%20%20%20%20name%3A%20Restart%20the%20VM%0A%20%20%20%20description%3A%0A%20%20%20%20actor%3A%20APPC%0A%20%20%20%20recipe%3A%20Restart%0A%20%20%20%20target%3A%0A%20%20%20%20%20%20type%3A%20VM%0A%20%20%20%20retry%3A%203%0A%20%20%20%20timeout%3A%201200%0A%20%20%20%20success%3A%20final_success%0A%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20failure_guard%3A%20final_failure_guard"
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.operational.output.tosca.json b/models-tosca/src/test/resources/policies/vCPE.policy.operational.output.tosca.json
new file mode 100644 (file)
index 0000000..d738537
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "operational.restart": {
+                    "type": "onap.policies.controlloop.Operational",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "operational.restart",
+                        "policy-version": 1
+                    },
+                    "properties": {
+                        "controlLoop": {
+                            "version": "2.0.0",
+                            "controlLoopName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
+                            "trigger_policy": "unique-policy-id-1-restart",
+                            "timeout": 3600,
+                            "abatement": true
+                        },
+                        "policies": [
+                            {
+                                "id": "unique-policy-id-1-restart",
+                                "name": "Restart the VM",
+                                "description": null,
+                                "actor": "APPC",
+                                "recipe": "Restart",
+                                "target": {
+                                    "type": "VM"
+                                },
+                                "retry": 3,
+                                "timeout": 1200,
+                                "success": "final_success",
+                                "failure": "final_failure",
+                                "failure_timeout": "final_failure_timeout",
+                                "failure_retries": "final_failure_retries",
+                                "failure_exception": "final_failure_exception",
+                                "failure_guard": "final_failure_guard"
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vCPE.policy.operational.output.tosca.yaml b/models-tosca/src/test/resources/policies/vCPE.policy.operational.output.tosca.yaml
new file mode 100644 (file)
index 0000000..e4a0694
--- /dev/null
@@ -0,0 +1,34 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+     -
+       operational.restart: 
+         type: onap.policies.controlloop.Operational
+         version: 1.0.0
+         metadata: 
+           policy-id: operational.restart
+           policy-version: 1
+         properties:
+           controlLoop:
+             version: 2.0.0
+             controlLoopName: ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
+             trigger_policy: unique-policy-id-1-restart
+             timeout: 3600
+             abatement: true
+           policies:
+             - id: unique-policy-id-1-restart
+               name: Restart the VM
+               description:
+               actor: APPC
+               recipe: Restart
+               target:
+                 type: VM
+               retry: 3
+               timeout: 1200
+               success: final_success
+               failure: final_failure
+               failure_timeout: final_failure_timeout
+               failure_retries: final_failure_retries
+               failure_exception: final_failure_exception
+               failure_guard: final_failure_guard
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.guard.frequency.input.json b/models-tosca/src/test/resources/policies/vDNS.policy.guard.frequency.input.json
new file mode 100644 (file)
index 0000000..442f3ec
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "policy-id" : "guard.frequency.scaleout",
+  "content" : {
+            "actor": "SO",
+            "recipe": "scaleOut",
+            "targets": ".*",
+            "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+            "limit": "1",
+            "timeWindow": "10",
+            "timeUnits": "minute",
+            "guardActiveStart": "00:00:01-05:00",
+            "guardActiveEnd": "23:59:59-05:00"
+   }
+}
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.guard.frequency.output.json b/models-tosca/src/test/resources/policies/vDNS.policy.guard.frequency.output.json
new file mode 100644 (file)
index 0000000..48c92c3
--- /dev/null
@@ -0,0 +1,23 @@
+{
+    "guard.frequency.scaleout": {
+        "type": "onap.policies.controlloop.guard.FrequencyLimiter",
+        "version": "1.0.0",
+        "metadata": {
+            "policy-id": "guard.frequency.scaleout",
+            "policy-version": 1
+        },
+        "properties": {
+           "content": {
+                "actor": "SO",
+                "recipe": "scaleOut",
+                "targets": ".*",
+                "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+                "limit": "1",
+                "timeWindow": "10",
+                "timeUnits": "minute",
+                "guardActiveStart": "00:00:01-05:00",
+                "guardActiveEnd": "23:59:59-05:00"
+           }
+        }
+    }
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.guard.minmax.input.json b/models-tosca/src/test/resources/policies/vDNS.policy.guard.minmax.input.json
new file mode 100644 (file)
index 0000000..c62a229
--- /dev/null
@@ -0,0 +1,14 @@
+{
+{
+  "policy-id" : "guard.minmax.scaleout",
+  "contents" : {
+        "actor": "SO",
+        "recipe": "scaleOut",
+        "targets": ".*",
+        "clname": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+        "min": "1",
+        "max": "5",
+        "guardActiveStart": "00:00:01-05:00",
+        "guardActiveEnd": "23:59:59-05:00"
+    }
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.guard.minmax.output.json b/models-tosca/src/test/resources/policies/vDNS.policy.guard.minmax.output.json
new file mode 100644 (file)
index 0000000..83d2f27
--- /dev/null
@@ -0,0 +1,10 @@
+{
+    "guard.minmax.scaleout": {
+        "type": "onap.policies.controlloop.guard.MinMax",
+        "version": "1.0.0",
+        "metadata": {
+            "policy-id": "guard.minmax.scaleout",
+            "policy-version": 1
+        }
+    }
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.monitoring.input.tosca.json b/models-tosca/src/test/resources/policies/vDNS.policy.monitoring.input.tosca.json
new file mode 100644 (file)
index 0000000..69b5212
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "policies": [
+        {
+            "onap.scaleout.tca": {
+                "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+                "version": "1.0.0",
+                "metadata": {
+                    "policy-id": "onap.scaleout.tca"
+                },
+                "properties": {
+                    "domain": "measurementsForVfScaling",
+                    "metricsPerEventName": [
+                        {
+                            "eventName": "vLoadBalancer",
+                            "controlLoopSchemaType": "VNF",
+                            "policyScope": "type=configuration",
+                            "policyName": "onap.scaleout.tca",
+                            "policyVersion": "v0.0.1",
+                            "thresholds": [
+                                {
+                                    "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+                                    "closedLoopEventStatus": "ONSET",
+                                    "version": "1.0.2",
+                                    "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+                                    "thresholdValue": 500,
+                                    "direction": "LESS_OR_EQUAL",
+                                    "severity": "MAJOR"
+                                },
+                                {
+                                    "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+                                    "closedLoopEventStatus": "ONSET",
+                                    "version": "1.0.2",
+                                    "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+                                    "thresholdValue": 5000,
+                                    "direction": "GREATER_OR_EQUAL",
+                                    "severity": "CRITICAL"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.monitoring.input.tosca.yaml b/models-tosca/src/test/resources/policies/vDNS.policy.monitoring.input.tosca.yaml
new file mode 100644 (file)
index 0000000..054b994
--- /dev/null
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+      -
+         onap.scaleout.tca:
+            type: onap.policies.monitoring.cdap.tca.hi.lo.app
+            version: 1.0.0
+            metadata:
+               policy-id: onap.scaleout.tca
+            properties:
+               domain: measurementsForVfScaling
+               metricsPerEventName:
+                  -
+                     eventName: vLoadBalancer
+                     controlLoopSchemaType: VNF
+                     policyScope: "type=configuration"
+                     policyName: "onap.scaleout.tca"
+                     policyVersion: "v0.0.1"
+                     thresholds:
+                     - 
+                        closedLoopControlName: "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3"
+                        closedLoopEventStatus: ONSET
+                        version: "1.0.2"
+                        fieldPath: "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated"
+                        thresholdValue: 500
+                        direction: LESS_OR_EQUAL
+                        severity: MAJOR
+                     -
+                        closedLoopControlName: "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3"
+                        closedLoopEventStatus: ONSET
+                        version: "1.0.2"
+                        fieldPath: "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated"
+                        thresholdValue: 5000
+                        direction: GREATER_OR_EQUAL
+                        severity: CRITICAL
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.monitoring.output.tosca.yaml b/models-tosca/src/test/resources/policies/vDNS.policy.monitoring.output.tosca.yaml
new file mode 100644 (file)
index 0000000..5a2fac7
--- /dev/null
@@ -0,0 +1,36 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+      -
+         onap.scaleout.tca:
+            type: onap.policies.monitoring.cdap.tca.hi.lo.app
+            version: 1.0.0
+            metadata:
+               policy-id: onap.scaleout.tca
+               policy-version: 1
+            properties:
+               domain: measurementsForVfScaling
+               metricsPerEventName:
+                  -
+                     eventName: vLoadBalancer
+                     controlLoopSchemaType: VNF
+                     policyScope: "type=configuration"
+                     policyName: "onap.scaleout.tca"
+                     policyVersion: "v0.0.1"
+                     thresholds:
+                     - 
+                        closedLoopControlName: "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3"
+                        closedLoopEventStatus: ONSET
+                        version: "1.0.2"
+                        fieldPath: "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated"
+                        thresholdValue: 500
+                        direction: LESS_OR_EQUAL
+                        severity: MAJOR
+                     -
+                        closedLoopControlName: "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3"
+                        closedLoopEventStatus: ONSET
+                        version: "1.0.2"
+                        fieldPath: "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated"
+                        thresholdValue: 5000
+                        direction: GREATER_OR_EQUAL
+                        severity: CRITICAL
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.operational.input.json b/models-tosca/src/test/resources/policies/vDNS.policy.operational.input.json
new file mode 100644 (file)
index 0000000..dabde01
--- /dev/null
@@ -0,0 +1,4 @@
+{
+  "policy-id" : "operational.scaleout",
+  "content" : "controlLoop%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20version%3A%202.0.0%0A%20%20%20%20%20%20%20%20%20%20%20%20%20controlLoopName%3A%20ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3%0A%20%20%20%20%20%20%20%20%20%20%20%20%20trigger_policy%3A%20unique-policy-id-1-scale-up%0A%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%201200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20abatement%3A%20false%0A%20%20%20%20%20%20%20%20%20%20%20policies%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20-%20id%3A%20unique-policy-id-1-scale-up%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20Create%20a%20new%20VF%20Module%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20actor%3A%20SO%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recipe%3A%20VF%20Module%20Create%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20VNF%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20payload%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20requestParameters%3A%20'%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20configurationParameters%3A%20'%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B9%5D%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B16%5D%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B23%5D%22%7D%5D'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retry%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%201200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20success%3A%20final_success%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_guard%3A%20final_failure_guard"
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.operational.input.tosca.yaml b/models-tosca/src/test/resources/policies/vDNS.policy.operational.input.tosca.yaml
new file mode 100644 (file)
index 0000000..0f54988
--- /dev/null
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+      -
+        operational.scaleout:
+           type: onap.policies.controlloop.Operational
+           version: 1.0.0
+           metadata: 
+             policy-id: operational.scaleout
+           properties:
+           controlLoop:
+             version: 2.0.0
+             controlLoopName: ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
+             trigger_policy: unique-policy-id-1-scale-up
+             timeout: 1200
+             abatement: false
+           policies:
+             - id: unique-policy-id-1-scale-up
+               name: Create a new VF Module
+               description:
+               actor: SO
+               recipe: VF Module Create
+               target:
+                 type: VNF
+               payload:
+                 requestParameters: '{"usePreload":true,"userParams":[]}'
+                 configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[9]","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[16]","enabled":"$.vf-module-topology.vf-module-parameters.param[23]"}]'
+               retry: 0
+               timeout: 1200
+               success: final_success
+               failure: final_failure
+               failure_timeout: final_failure_timeout
+               failure_retries: final_failure_retries
+               failure_exception: final_failure_exception
+               failure_guard: final_failure_guard
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.operational.output.json b/models-tosca/src/test/resources/policies/vDNS.policy.operational.output.json
new file mode 100644 (file)
index 0000000..5ce44e0
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "policy-id" : "operational.scaleout",
+  "policy-version" : "1",
+  "content" : "controlLoop%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20version%3A%202.0.0%0A%20%20%20%20%20%20%20%20%20%20%20%20%20controlLoopName%3A%20ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3%0A%20%20%20%20%20%20%20%20%20%20%20%20%20trigger_policy%3A%20unique-policy-id-1-scale-up%0A%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%201200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20abatement%3A%20false%0A%20%20%20%20%20%20%20%20%20%20%20policies%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20-%20id%3A%20unique-policy-id-1-scale-up%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20Create%20a%20new%20VF%20Module%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20actor%3A%20SO%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recipe%3A%20VF%20Module%20Create%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20VNF%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20payload%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20requestParameters%3A%20'%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20configurationParameters%3A%20'%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B9%5D%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B16%5D%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B23%5D%22%7D%5D'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retry%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%201200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20success%3A%20final_success%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_guard%3A%20final_failure_guard"
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.operational.output.tosca.json b/models-tosca/src/test/resources/policies/vDNS.policy.operational.output.tosca.json
new file mode 100644 (file)
index 0000000..2478ff0
--- /dev/null
@@ -0,0 +1,49 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "operational.scaleout": {
+                    "type": "onap.policies.controlloop.Operational",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "operational.scaleout",
+                        "policy-version": 1
+                    },
+                    "properties": null,
+                    "controlLoop": {
+                        "version": "2.0.0",
+                        "controlLoopName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
+                        "trigger_policy": "unique-policy-id-1-scale-up",
+                        "timeout": 1200,
+                        "abatement": false
+                    },
+                    "policies": [
+                        {
+                            "id": "unique-policy-id-1-scale-up",
+                            "name": "Create a new VF Module",
+                            "description": null,
+                            "actor": "SO",
+                            "recipe": "VF Module Create",
+                            "target": {
+                                "type": "VNF"
+                            },
+                            "payload": {
+                                "requestParameters": "{\"usePreload\":true,\"userParams\":[]}",
+                                "configurationParameters": "[{\"ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[9]\",\"oam-ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[16]\",\"enabled\":\"$.vf-module-topology.vf-module-parameters.param[23]\"}]"
+                            },
+                            "retry": 0,
+                            "timeout": 1200,
+                            "success": "final_success",
+                            "failure": "final_failure",
+                            "failure_timeout": "final_failure_timeout",
+                            "failure_retries": "final_failure_retries",
+                            "failure_exception": "final_failure_exception",
+                            "failure_guard": "final_failure_guard"
+                        }
+                    ]
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vDNS.policy.operational.output.tosca.yaml b/models-tosca/src/test/resources/policies/vDNS.policy.operational.output.tosca.yaml
new file mode 100644 (file)
index 0000000..a09a235
--- /dev/null
@@ -0,0 +1,36 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+      -
+        operational.scaleout:
+           type: onap.policies.controlloop.Operational
+           version: 1.0.0
+           metadata: 
+             policy-id: operational.scaleout
+             policy-version: 1
+           properties:
+           controlLoop:
+             version: 2.0.0
+             controlLoopName: ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
+             trigger_policy: unique-policy-id-1-scale-up
+             timeout: 1200
+             abatement: false
+           policies:
+             - id: unique-policy-id-1-scale-up
+               name: Create a new VF Module
+               description:
+               actor: SO
+               recipe: VF Module Create
+               target:
+                 type: VNF
+               payload:
+                 requestParameters: '{"usePreload":true,"userParams":[]}'
+                 configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[9]","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[16]","enabled":"$.vf-module-topology.vf-module-parameters.param[23]"}]'
+               retry: 0
+               timeout: 1200
+               success: final_success
+               failure: final_failure
+               failure_timeout: final_failure_timeout
+               failure_retries: final_failure_retries
+               failure_exception: final_failure_exception
+               failure_guard: final_failure_guard
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vFirewall.policy.monitoring.input.tosca.json b/models-tosca/src/test/resources/policies/vFirewall.policy.monitoring.input.tosca.json
new file mode 100644 (file)
index 0000000..1593d20
--- /dev/null
@@ -0,0 +1,43 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "policies": [
+        {
+            "onap.vfirewall.tca": {
+                "type": "onap.policy.monitoring.cdap.tca.hi.lo.app",
+                "version": "1.0.0",
+                "properties": {
+                    "domain": "measurementsForVfScaling",
+                    "metricsPerEventName": [
+                        {
+                            "eventName": "vLoadBalancer",
+                            "controlLoopSchemaType": "VNF",
+                            "policyScope": "resource=vLoadBalancer;type=configuration",
+                            "policyName": "onap.vfirewall.tca",
+                            "policyVersion": "v0.0.1",
+                            "thresholds": [
+                                {
+                                    "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
+                                    "closedLoopEventStatus": "ONSET",
+                                    "version": "1.0.2",
+                                    "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+                                    "thresholdValue": 500,
+                                    "direction": "LESS_OR_EQUAL",
+                                    "severity": "MAJOR"
+                                },
+                                {
+                                    "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
+                                    "closedLoopEventStatus": "ONSET",
+                                    "version": "1.0.2",
+                                    "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+                                    "thresholdValue": 5000,
+                                    "direction": "GREATER_OR_EQUAL",
+                                    "severity": "CRITICAL"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vFirewall.policy.monitoring.input.tosca.yaml b/models-tosca/src/test/resources/policies/vFirewall.policy.monitoring.input.tosca.yaml
new file mode 100644 (file)
index 0000000..c59b890
--- /dev/null
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+  policies:
+    -
+      onap.vfirewall.tca:
+        type: onap.policy.monitoring.cdap.tca.hi.lo.app
+        version: 1.0.0
+        metadata:
+           policy-id: onap.vfirewall.tca
+        properties:
+           domain: measurementsForVfScaling
+           metricsPerEventName:
+           -
+             eventName: vLoadBalancer
+             controlLoopSchemaType: VNF
+             policyScope: "resource=vLoadBalancer;type=configuration"
+             policyName: "onap.vfirewall.tca"
+             policyVersion: "v0.0.1"
+             thresholds:
+                -
+                    closedLoopControlName: "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a"
+                    closedLoopEventStatus: ONSET
+                    version: "1.0.2"
+                    fieldPath: "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated"
+                    thresholdValue: 500
+                    direction: LESS_OR_EQUAL
+                    severity: MAJOR
+                -
+                    closedLoopControlName: "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a"
+                    closedLoopEventStatus: ONSET
+                    version: "1.0.2"
+                    fieldPath: "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated"
+                    thresholdValue: 5000
+                    direction: GREATER_OR_EQUAL
+                    severity: CRITICAL
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.json b/models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.json
new file mode 100644 (file)
index 0000000..623a689
--- /dev/null
@@ -0,0 +1,4 @@
+{
+  "policy-id" : "operational.modifyconfig",
+  "content" : "controlLoop%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20version%3A%202.0.0%0A%20%20%20%20%20%20%20%20%20%20%20%20%20controlLoopName%3A%20ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a%0A%20%20%20%20%20%20%20%20%20%20%20%20%20trigger_policy%3A%20unique-policy-id-1-modifyConfig%0A%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%201200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20abatement%3A%20false%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20policies%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20id%3A%20unique-policy-id-1-modifyConfig%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20modify%20packet%20gen%20config%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20actor%3A%20APPC%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recipe%3A%20ModifyConfig%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20TBD%20-%20Cannot%20be%20known%20until%20instantiation%20is%20done%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20resourceID%3A%20Eace933104d443b496b8.nodes.heat.vpg%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20VNF%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retry%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%20300%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20success%3A%20final_success%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_guard%3A%20final_failure_guard"
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.tosca.json b/models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.tosca.json
new file mode 100644 (file)
index 0000000..63c0d8b
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "operational.modifyconfig": {
+                    "type": "onap.policies.controlloop.Operational",
+                    "version": "1.0.0",
+                    "metadata": {
+                        "policy-id": "operational.modifyconfig"
+                    },
+                    "properties": {
+                        "controlLoop": {
+                            "version": "2.0.0",
+                            "controlLoopName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
+                            "trigger_policy": "unique-policy-id-1-modifyConfig",
+                            "timeout": 1200,
+                            "abatement": false
+                        },
+                        "policies": [
+                            {
+                                "id": "unique-policy-id-1-modifyConfig",
+                                "name": "modify packet gen config",
+                                "description": null,
+                                "actor": "APPC",
+                                "recipe": "ModifyConfig",
+                                "target": {
+                                    "resourceID": "Eace933104d443b496b8.nodes.heat.vpg",
+                                    "type": "VNF"
+                                },
+                                "retry": 0,
+                                "timeout": 300,
+                                "success": "final_success",
+                                "failure": "final_failure",
+                                "failure_timeout": "final_failure_timeout",
+                                "failure_retries": "final_failure_retries",
+                                "failure_exception": "final_failure_exception",
+                                "failure_guard": "final_failure_guard"
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.tosca.yaml b/models-tosca/src/test/resources/policies/vFirewall.policy.operational.input.tosca.yaml
new file mode 100644 (file)
index 0000000..ca36d53
--- /dev/null
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+     -
+      operational.modifyconfig:
+         type: onap.policies.controlloop.Operational
+         version: 1.0.0
+         metadata: 
+           policy-id: operational.modifyconfig
+         properties:
+           controlLoop:
+             version: 2.0.0
+             controlLoopName: ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
+             trigger_policy: unique-policy-id-1-modifyConfig
+             timeout: 1200
+             abatement: false
+           policies:
+              - id: unique-policy-id-1-modifyConfig
+                name: modify packet gen config
+                description:
+                actor: APPC
+                recipe: ModifyConfig
+                target:
+                  # TBD - Cannot be known until instantiation is done
+                  resourceID: Eace933104d443b496b8.nodes.heat.vpg
+                  type: VNF
+                retry: 0
+                timeout: 300
+                success: final_success
+                failure: final_failure
+                failure_timeout: final_failure_timeout
+                failure_retries: final_failure_retries
+                failure_exception: final_failure_exception
+                failure_guard: final_failure_guard
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vFirewall.policy.operational.output.json b/models-tosca/src/test/resources/policies/vFirewall.policy.operational.output.json
new file mode 100644 (file)
index 0000000..bb8b907
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "policy-id" : "operational.modifyconfig",
+  "policy-version" : "1",
+  "content" : "controlLoop%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20version%3A%202.0.0%0A%20%20%20%20%20%20%20%20%20%20%20%20%20controlLoopName%3A%20ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a%0A%20%20%20%20%20%20%20%20%20%20%20%20%20trigger_policy%3A%20unique-policy-id-1-modifyConfig%0A%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%201200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20abatement%3A%20false%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20policies%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20id%3A%20unique-policy-id-1-modifyConfig%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20modify%20packet%20gen%20config%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20actor%3A%20APPC%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recipe%3A%20ModifyConfig%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20TBD%20-%20Cannot%20be%20known%20until%20instantiation%20is%20done%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20resourceID%3A%20Eace933104d443b496b8.nodes.heat.vpg%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20VNF%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retry%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20timeout%3A%20300%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20success%3A%20final_success%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20failure_guard%3A%20final_failure_guard"
+}
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policies/vFirewall.policy.operational.output.tosca.yaml b/models-tosca/src/test/resources/policies/vFirewall.policy.operational.output.tosca.yaml
new file mode 100644 (file)
index 0000000..42ea511
--- /dev/null
@@ -0,0 +1,36 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+   policies:
+     -
+      operational.modifyconfig:
+         type: onap.policies.controlloop.Operational
+         version: 1.0.0
+         metadata: 
+           policy-id: operational.modifyconfig
+           policy-version: 1
+         properties:
+           controlLoop:
+             version: 2.0.0
+             controlLoopName: ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
+             trigger_policy: unique-policy-id-1-modifyConfig
+             timeout: 1200
+             abatement: false
+           policies:
+              - id: unique-policy-id-1-modifyConfig
+                name: modify packet gen config
+                description:
+                actor: APPC
+                recipe: ModifyConfig
+                target:
+                  # TBD - Cannot be known until instantiation is done
+                  resourceID: Eace933104d443b496b8.nodes.heat.vpg
+                  type: VNF
+                retry: 0
+                timeout: 300
+                success: final_success
+                failure: final_failure
+                failure_timeout: final_failure_timeout
+                failure_retries: final_failure_retries
+                failure_exception: final_failure_exception
+                failure_guard: final_failure_guard
\ No newline at end of file
diff --git a/models-tosca/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml b/models-tosca/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml
new file mode 100644 (file)
index 0000000..5a093dd
--- /dev/null
@@ -0,0 +1,17 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+  version: 1.0.0
+  onap.policies.Monitoring:
+    derived_from: tosca.policies.Root
+    description: a base policy type for all policies that govern monitoring provision
+    version: 1.0.0
+  onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:
+    derived_from: policy.nodes.Root
+    version: 1.0.0
+    properties:
+      buscontroller_feed_publishing_endpoint:
+        type: string
+        description: DMAAP Bus Controller feed endpoint
+      datafile.policy:
+        type: string
+        description: datafile Policy JSON as string
diff --git a/models-tosca/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml b/models-tosca/src/test/resources/policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml
new file mode 100644 (file)
index 0000000..699cffd
--- /dev/null
@@ -0,0 +1,158 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+    onap.policies.Monitoring:
+        derived_from: tosca.policies.Root
+        description: a base policy type for all policies that governs monitoring provisioning
+    onap.policy.monitoring.cdap.tca.hi.lo.app:
+        derived_from: onap.policies.Monitoring
+        version: 1.0.0
+        properties:
+            tca_policy:
+                type: map
+                description: TCA Policy JSON
+                entry_schema:
+                    type: onap.datatypes.monitoring.tca_policy
+data_types:
+    onap.datatypes.monitoring.metricsPerEventName:
+        derived_from: tosca.datatypes.Root
+        properties:
+            controlLoopSchemaType:
+                type: string
+                required: true
+                description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM
+                constraints:
+                  - valid_values:
+                      - VM
+                      - VNF
+            eventName:
+                type: string
+                required: true
+                description: Event name to which thresholds need to be applied
+            policyName:
+                type: string
+                required: true
+                description: TCA Policy Scope Name
+            policyScope:
+                type: string
+                required: true
+                description: TCA Policy Scope
+            policyVersion:
+                type: string
+                required: true
+                description: TCA Policy Scope Version
+            thresholds:
+                type: list
+                required: true
+                description: Thresholds associated with eventName
+                entry_schema:
+                    type: onap.datatypes.monitoring.thresholds
+    onap.datatypes.monitoring.tca_policy:
+        derived_from: tosca.datatypes.Root
+        properties:
+            domain:
+                type: string
+                required: true
+                description: Domain name to which TCA needs to be applied
+                default: measurementsForVfScaling
+                constraints:
+                  - equal: measurementsForVfScaling
+            metricsPerEventName:
+                type: list
+                required: true
+                description: Contains eventName and threshold details that need to be applied to given eventName
+                entry_schema:
+                    type: onap.datatypes.monitoring.metricsPerEventName
+    onap.datatypes.monitoring.thresholds:
+        derived_from: tosca.datatypes.Root
+        properties:
+            closedLoopControlName:
+                type: string
+                required: true
+                description: Closed Loop Control Name associated with the threshold
+            closedLoopEventStatus:
+                type: string
+                required: true
+                description: Closed Loop Event Status of the threshold
+                constraints:
+                  - valid_values:
+                      - ONSET
+                      - ABATED
+            direction:
+                type: string
+                required: true
+                description: Direction of the threshold
+                constraints:
+                  - valid_values:
+                      - LESS
+                      - LESS_OR_EQUAL
+                      - GREATER
+                      - GREATER_OR_EQUAL
+                      - EQUAL
+            fieldPath:
+                type: string
+                required: true
+                description: Json field Path as per CEF message which needs to be analyzed for TCA
+                constraints:
+                  - valid_values:
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait
+                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage
+                      - $.event.measurementsForVfScalingFields.meanRequestLatency
+                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered
+                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached
+                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured
+                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree
+                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed
+                      - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value
+            severity:
+                type: string
+                required: true
+                description: Threshold Event Severity
+                constraints:
+                  - valid_values:
+                      - CRITICAL
+                      - MAJOR
+                      - MINOR
+                      - WARNING
+                      - NORMAL
+            thresholdValue:
+                type: integer
+                required: true
+                description: Threshold value for the field Path inside CEF message
+            version:
+                type: string
+                required: true
+                description: Version number associated with the threshold
diff --git a/pom.xml b/pom.xml
index ee5092e..245dfc9 100644 (file)
--- a/pom.xml
+++ b/pom.xml
             <artifactId>gson</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>1.21</version>
+        </dependency>
+
         <dependency>
             <groupId>javax.ws.rs</groupId>
             <artifactId>javax.ws.rs-api</artifactId>