From b1db9f9be085d367059698c2c215160e31f72436 Mon Sep 17 00:00:00 2001 From: sebdet Date: Mon, 11 Mar 2019 14:33:54 +0100 Subject: Add sql Add sql file to the project, so the csit can use the docker-compose Change-Id: I1b7fd810d3686f686803b30ffce41823a2f3abd3 Issue-ID: CLAMP-299 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 70 ++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 extra/sql/bulkload/create-tables.sql (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql new file mode 100644 index 000000000..6d490c305 --- /dev/null +++ b/extra/sql/bulkload/create-tables.sql @@ -0,0 +1,70 @@ + + create table hibernate_sequence ( + next_val bigint + ) engine=InnoDB; + + insert into hibernate_sequence values ( 1 ); + + create table loop_logs ( + id bigint not null, + log_instant datetime(6) not null, + log_type varchar(255) not null, + message varchar(255) not null, + loop_id varchar(255) not null, + primary key (id) + ) engine=InnoDB; + + create table loops ( + name varchar(255) not null, + blueprint_yaml varchar(255) not null, + dcae_blueprint_id varchar(255), + dcae_deployment_id varchar(255), + dcae_deployment_status_url varchar(255), + global_properties_json json, + last_computed_state varchar(255) not null, + model_properties_json json, + svg_representation varchar(255), + primary key (name) + ) engine=InnoDB; + + create table loops_microservicepolicies ( + loop_id varchar(255) not null, + microservicepolicy_id varchar(255) not null, + primary key (loop_id, microservicepolicy_id) + ) engine=InnoDB; + + create table micro_service_policies ( + name varchar(255) not null, + json_representation json not null, + policy_tosca varchar(255) not null, + properties json, + shared bit not null, + primary key (name) + ) engine=InnoDB; + + create table operational_policies ( + name varchar(255) not null, + configurations_json json, + loop_id varchar(255) not null, + primary key (name) + ) engine=InnoDB; + + alter table loop_logs + add constraint FK1j0cda46aickcaoxqoo34khg2 + foreign key (loop_id) + references loops (name); + + alter table loops_microservicepolicies + add constraint FKem7tp1cdlpwe28av7ef91j1yl + foreign key (microservicepolicy_id) + references micro_service_policies (name); + + alter table loops_microservicepolicies + add constraint FKsvx91jekgdkfh34iaxtjfgebt + foreign key (loop_id) + references loops (name); + + alter table operational_policies + add constraint FK1ddoggk9ni2bnqighv6ecmuwu + foreign key (loop_id) + references loops (name); -- cgit 1.2.3-korg From 92cc4185fca63ddd882be5bcd9d4a626b627164f Mon Sep 17 00:00:00 2001 From: sebdet Date: Tue, 12 Mar 2019 15:08:11 +0100 Subject: Add unit tests Add unit tests and fix code to support them, columns modified and csar installer fixed as well Issue-ID: CLAMP-306 Change-Id: I946ef1aa957ca36bbb00357308ac67a3f07dcdce Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 4 +- .../clamp/clds/tosca/ToscaYamlToJsonConvertor.java | 10 ++- .../org/onap/clamp/loop/CsarInstallerImpl.java | 81 ++++++++------------- src/main/java/org/onap/clamp/loop/Loop.java | 2 +- .../policy/microservice/MicroServicePolicy.java | 15 +++- .../controller/installer/CsarInstallerItCase.java | 18 +++-- .../sdc/controller/installer/CsarHandlerTest.java | 2 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 48 +++++++++--- .../example/sdc/service-Simsfoimap0112.csar | Bin 52391 -> 52568 bytes 9 files changed, 100 insertions(+), 80 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 6d490c305..93c80cb36 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -16,7 +16,7 @@ create table loops ( name varchar(255) not null, - blueprint_yaml varchar(255) not null, + blueprint_yaml MEDIUMTEXT not null, dcae_blueprint_id varchar(255), dcae_deployment_id varchar(255), dcae_deployment_status_url varchar(255), @@ -36,7 +36,7 @@ create table micro_service_policies ( name varchar(255) not null, json_representation json not null, - policy_tosca varchar(255) not null, + policy_tosca MEDIUMTEXT not null, properties json, shared bit not null, primary key (name) diff --git a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java index 784d95e94..8a172abbc 100644 --- a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java +++ b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java @@ -82,13 +82,15 @@ public class ToscaYamlToJsonConvertor { this.cldsDao = cldsDao; } - @SuppressWarnings("unchecked") public String parseToscaYaml(String yamlString) { Yaml yaml = new Yaml(); - LinkedHashMap loadedYaml = (LinkedHashMap) yaml.load(yamlString); - LinkedHashMap nodeTypes = new LinkedHashMap(); - LinkedHashMap dataNodes = new LinkedHashMap(); + LinkedHashMap loadedYaml = yaml.load(yamlString); + if (loadedYaml == null) { + return ""; + } + LinkedHashMap nodeTypes = new LinkedHashMap<>(); + LinkedHashMap dataNodes = new LinkedHashMap<>(); JSONObject jsonEditorObject = new JSONObject(); JSONObject jsonParentObject = new JSONObject(); JSONObject jsonTempObject = new JSONObject(); diff --git a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java index 9627445d6..6e12f2940 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java @@ -33,7 +33,6 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; -import java.util.Optional; import org.json.simple.parser.ParseException; import org.onap.clamp.clds.client.DcaeInventoryServices; @@ -53,6 +52,7 @@ import org.onap.clamp.policy.operational.OperationalPolicy; import org.onap.sdc.tosca.parser.enums.SdcTypes; import org.onap.sdc.toscaparser.api.NodeTemplate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.yaml.snakeyaml.Yaml; @@ -71,63 +71,40 @@ public class CsarInstallerImpl implements CsarInstaller { public static final String MODEL_NAME_PREFIX = "Loop_"; @Autowired - protected LoopsRepository loopRepository; + LoopsRepository loopRepository; @Autowired - private BlueprintParser blueprintParser; + BlueprintParser blueprintParser; @Autowired - private ChainGenerator chainGenerator; + ChainGenerator chainGenerator; @Autowired DcaeInventoryServices dcaeInventoryService; - @Autowired - public void CsarInstallerImpl(LoopsRepository loopRepository, BlueprintParser blueprintParser, - ChainGenerator chainGenerator, DcaeInventoryServices dcaeInventoryService) { - this.loopRepository = loopRepository; - this.blueprintParser = blueprintParser; - this.chainGenerator = chainGenerator; - this.dcaeInventoryService = dcaeInventoryService; - } - @Override public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { boolean alreadyInstalled = true; for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { alreadyInstalled = alreadyInstalled - && loopRepository.existsById(buildModelName(csar, blueprint.getValue())); + && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), + csar.getSdcNotification().getServiceVersion(), + blueprint.getValue().getResourceAttached().getResourceInstanceName(), + blueprint.getValue().getBlueprintArtifactName())); } return alreadyInstalled; } - public static String buildModelName(CsarHandler csar, BlueprintArtifact artifact) { - - return (MODEL_NAME_PREFIX + "_" + csar.getSdcCsarHelper().getServiceMetadata().getValue("name") + "_v" - + csar.getSdcNotification().getServiceVersion() + "_" - + artifact.getResourceAttached().getResourceInstanceName().replaceAll(" ", "") + "_" - + artifact.getBlueprintArtifactName().replace(".yaml", "")).replace('.', '_'); - } - - public static String buildOperationalPolicyName(CsarHandler csar, BlueprintArtifact artifact) { - - return (MODEL_NAME_PREFIX + "_" + csar.getSdcCsarHelper().getServiceMetadata().getValue("name") + "_v" - + csar.getSdcNotification().getServiceVersion() + "_" - + artifact.getResourceAttached().getResourceInstanceName().replaceAll(" ", "") + "_" - + artifact.getBlueprintArtifactName().replace(".yaml", "")).replace('.', '_'); - } - @Override - @Transactional + @Transactional(propagation = Propagation.REQUIRED) public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException, PolicyModelException { try { logger.info("Installing the CSAR " + csar.getFilePath()); for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { logger.info("Processing blueprint " + blueprint.getValue().getBlueprintArtifactName()); - createLoopFromBlueprint(csar, blueprint.getValue()); + loopRepository.save(createLoopFromBlueprint(csar, blueprint.getValue())); } - createPolicyModel(csar); logger.info("Successfully installed the CSAR " + csar.getFilePath()); } catch (IOException e) { throw new SdcArtifactInstallerException("Exception caught during the Csar installation in database", e); @@ -136,15 +113,6 @@ public class CsarInstallerImpl implements CsarInstaller { } } - private void createPolicyModel(CsarHandler csar) throws PolicyModelException { - try { - Optional policyModelYaml = csar.getPolicyModelYaml(); - // save policy model into the database - } catch (IOException e) { - throw new PolicyModelException("TransformerException when decoding the YamlText", e); - } - } - private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact) throws IOException, ParseException, InterruptedException { Loop newLoop = new Loop(); @@ -154,15 +122,8 @@ public class CsarInstallerImpl implements CsarInstaller { blueprintArtifact.getResourceAttached().getResourceInstanceName(), blueprintArtifact.getBlueprintArtifactName())); newLoop.setLastComputedState(LoopState.DESIGN); - for (MicroService microService : blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())) { - newLoop.getMicroServicePolicies().add(new MicroServicePolicy(microService.getName(), - csar.getPolicyModelYaml().orElse(""), false, new JsonObject(), new HashSet<>(Arrays.asList(newLoop)))); - } - newLoop.setOperationalPolicies( - new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", - csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject())))); + newLoop.setMicroServicePolicies(createMicroServicePolicies(csar, blueprintArtifact, newLoop)); + newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop)); // Set SVG XML computed // newLoop.setSvgRepresentation(svgRepresentation); newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(csar, blueprintArtifact)); @@ -172,6 +133,24 @@ public class CsarInstallerImpl implements CsarInstaller { return newLoop; } + private HashSet createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact, + Loop newLoop) { + return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", + csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject()))); + } + + private HashSet createMicroServicePolicies(CsarHandler csar, + BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException { + HashSet newSet = new HashSet<>(); + for (MicroService microService : blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())) { + newSet.add(new MicroServicePolicy(microService.getName(), csar.getPolicyModelYaml().orElse(""), false, + new HashSet<>(Arrays.asList(newLoop)))); + } + return newSet; + } + private JsonObject createGlobalPropertiesJson(CsarHandler csar, BlueprintArtifact blueprintArtifact) { JsonObject globalProperties = new JsonObject(); globalProperties.add("dcaeDeployParameters", getAllBlueprintParametersInJson(blueprintArtifact)); diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index cc7f1803c..a4cd86d07 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -91,7 +91,7 @@ public class Loop implements Serializable { @Column(columnDefinition = "json", name = "model_properties_json") private JsonObject modelPropertiesJson; - @Column(nullable = false, name = "blueprint_yaml") + @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") private String blueprint; @Expose diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 7ebe0edb2..857a3d747 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -39,6 +39,8 @@ import javax.persistence.Table; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; +import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; import org.onap.clamp.policy.Policy; @@ -66,7 +68,7 @@ public class MicroServicePolicy implements Serializable, Policy { @Column(name = "shared", nullable = false) private Boolean shared; - @Column(name = "policy_tosca", nullable = false) + @Column(columnDefinition = "MEDIUMTEXT", name = "policy_tosca", nullable = false) private String policyTosca; @Expose @@ -81,13 +83,22 @@ public class MicroServicePolicy implements Serializable, Policy { // serialization } + public MicroServicePolicy(String name, String policyTosca, Boolean shared, Set usedByLoops) { + this.name = name; + this.policyTosca = policyTosca; + this.shared = shared; + this.jsonRepresentation = JsonUtils.GSON_JPA_MODEL + .fromJson(new ToscaYamlToJsonConvertor(null).parseToscaYaml(policyTosca), JsonObject.class); + this.usedByLoops = usedByLoops; + } + public MicroServicePolicy(String name, String policyTosca, Boolean shared, JsonObject jsonRepresentation, Set usedByLoops) { this.name = name; this.policyTosca = policyTosca; this.shared = shared; - this.jsonRepresentation = jsonRepresentation; this.usedByLoops = usedByLoops; + this.jsonRepresentation = jsonRepresentation; } @Override diff --git a/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java index ce8a493da..d3a823fbc 100644 --- a/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java @@ -30,6 +30,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -68,7 +69,6 @@ import org.springframework.test.context.junit4.SpringRunner; @ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller") public class CsarInstallerItCase { - private static final String CSAR_ARTIFACT_NAME = "testArtifact.csar"; private static final String INVARIANT_SERVICE_UUID = "4cc5b45a-1f63-4194-8100-cd8e14248c92"; private static final String INVARIANT_RESOURCE1_UUID = "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"; private static final String INVARIANT_RESOURCE2_UUID = "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"; @@ -89,7 +89,8 @@ public class CsarInstallerItCase { blueprintMap.put("resourceid", blueprintArtifact); Mockito.when(csarHandler.getMapOfBlueprints()).thenReturn(blueprintMap); Mockito.when(blueprintArtifact.getDcaeBlueprint()).thenReturn( - IOUtils.toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/not-recognized.yaml"))); + IOUtils.toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/not-recognized.yaml"), + StandardCharsets.UTF_8)); csarInstaller.installTheCsar(csarHandler); fail("Should have raised an SdcArtifactInstallerException"); } @@ -164,16 +165,17 @@ public class CsarInstallerItCase { csarInstaller.installTheCsar(csar); CldsModel cldsModel1 = verifyClosedLoopModelLoadedInDb(csar, "tca.yaml"); JSONAssert.assertEquals( - IOUtils.toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca.json")), + IOUtils.toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca.json"), + StandardCharsets.UTF_8), cldsModel1.getPropText(), true); CldsModel cldsModel2 = verifyClosedLoopModelLoadedInDb(csar, "tca_2.yaml"); - JSONAssert.assertEquals( - IOUtils - .toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca-2.json")), - cldsModel2.getPropText(), true); + JSONAssert.assertEquals(IOUtils.toString( + ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca-2.json"), + StandardCharsets.UTF_8), cldsModel2.getPropText(), true); CldsModel cldsModel3 = verifyClosedLoopModelLoadedInDb(csar, "tca_3.yaml"); JSONAssert.assertEquals( - IOUtils.toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca.json")), + IOUtils.toString(ResourceFileUtil.getResourceAsStream("example/sdc/blueprint-dcae/prop-text-for-tca.json"), + StandardCharsets.UTF_8), cldsModel3.getPropText(), true); } diff --git a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java index 544c8ca1d..e00887478 100644 --- a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java +++ b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java @@ -161,7 +161,7 @@ public class CsarHandlerTest { CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests"); csar.save(buildFakeSdcResut()); String policyModelYaml = csar.getPolicyModelYaml().get(); - assertTrue(policyModelYaml.contains("tosca_simple_yaml_1_1")); + assertTrue(policyModelYaml.contains("tosca_simple_yaml_1_0_0")); } @Test diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index 6bfee4c41..d1a4bdc56 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -23,8 +23,7 @@ package org.onap.clamp.loop; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; import java.util.ArrayList; @@ -33,6 +32,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import javax.transaction.Transactional; + import org.apache.commons.lang3.RandomStringUtils; import org.json.JSONException; import org.junit.Test; @@ -62,13 +63,16 @@ import org.springframework.test.context.junit4.SpringRunner; @ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller-new") public class CsarInstallerItCase { - private static final String CSAR_ARTIFACT_NAME = "testArtifact.csar"; + private static final String CSAR_ARTIFACT_NAME = "example/sdc/service-Simsfoimap0112.csar"; private static final String INVARIANT_SERVICE_UUID = "4cc5b45a-1f63-4194-8100-cd8e14248c92"; private static final String INVARIANT_RESOURCE1_UUID = "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"; private static final String INVARIANT_RESOURCE2_UUID = "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"; private static final String RESOURCE_INSTANCE_NAME_RESOURCE1 = "ResourceInstanceName1"; private static final String RESOURCE_INSTANCE_NAME_RESOURCE2 = "ResourceInstanceName2"; + @Autowired + private LoopsRepository loopsRepo; + @Autowired private CsarInstaller csarInstaller; @@ -113,10 +117,6 @@ public class CsarInstallerItCase { "example/sdc/blueprint-dcae/tca_3.yaml", "tca_3.yaml", INVARIANT_SERVICE_UUID); blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); - SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); - ISdcCsarHelper sdcHelper = factory.getSdcCsarHelper(Thread.currentThread().getContextClassLoader() - .getResource("example/sdc/service-Simsfoimap0112.csar").getFile()); - // Build fake csarhandler Mockito.when(csarHandler.getSdcNotification()).thenReturn(notificationData); // Build fake csar Helper @@ -125,28 +125,54 @@ public class CsarInstallerItCase { Mockito.when(data.getValue("name")).thenReturn(generatedName); Mockito.when(notificationData.getServiceName()).thenReturn(generatedName); Mockito.when(csarHelper.getServiceMetadata()).thenReturn(data); + + // Create helper based on real csar to test policy yaml and global properties + // set + SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); + ISdcCsarHelper sdcHelper = factory + .getSdcCsarHelper(Thread.currentThread().getContextClassLoader().getResource(CSAR_ARTIFACT_NAME).getFile()); Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(sdcHelper); + // Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(csarHelper); - Mockito.when(csarHandler.getPolicyModelYaml()).thenReturn(Optional.ofNullable("")); + Mockito.when(csarHandler.getPolicyModelYaml()) + .thenReturn(Optional.ofNullable(ResourceFileUtil.getResourceAsString("tosca/tca-policy-test.yaml"))); return csarHandler; } + @Test + @Transactional public void testIsCsarAlreadyDeployedTca() throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException, InterruptedException, PolicyModelException { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csarHandler = buildFakeCsarHandler(generatedName); - assertFalse(csarInstaller.isCsarAlreadyDeployed(csarHandler)); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); csarInstaller.installTheCsar(csarHandler); - assertTrue(csarInstaller.isCsarAlreadyDeployed(csarHandler)); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isTrue(); } @Test + @Transactional public void testInstallTheCsarTca() throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException, JSONException, InterruptedException, PolicyModelException { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csar = buildFakeCsarHandler(generatedName); csarInstaller.installTheCsar(csar); - + assertThat(loopsRepo + .existsById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml"))) + .isTrue(); + assertThat(loopsRepo + .existsById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml"))) + .isTrue(); + assertThat(loopsRepo + .existsById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml"))) + .isTrue(); + // Verify now that policy and json representation, global properties are well + // set + Loop loop = loopsRepo + .findById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml")).get(); + + assertThat(loop.getModelPropertiesJson().get("serviceDetails")).isNotNull(); + assertThat(loop.getModelPropertiesJson().get("resourceDetails")).isNotNull(); } } diff --git a/src/test/resources/example/sdc/service-Simsfoimap0112.csar b/src/test/resources/example/sdc/service-Simsfoimap0112.csar index ea0e44a22..8c16d31ee 100644 Binary files a/src/test/resources/example/sdc/service-Simsfoimap0112.csar and b/src/test/resources/example/sdc/service-Simsfoimap0112.csar differ -- cgit 1.2.3-korg From d022281adea3da26beee6457767577a313c5b617 Mon Sep 17 00:00:00 2001 From: sebdet Date: Tue, 12 Mar 2019 16:35:25 +0100 Subject: Add svg support Add SVG support to the CSAR installer so that UI could render the loop Issue-ID: CLAMP-306 Change-Id: Ief963c4ad8e4c142f20c16b2049cad3a8aeedfb0 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 2 +- .../sdc/controller/installer/ChainGenerator.java | 18 +++++----- .../org/onap/clamp/loop/CsarInstallerImpl.java | 42 +++++++++++++++++----- src/main/java/org/onap/clamp/loop/Loop.java | 2 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 5 ++- 5 files changed, 49 insertions(+), 20 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 93c80cb36..b35606353 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -23,7 +23,7 @@ global_properties_json json, last_computed_state varchar(255) not null, model_properties_json json, - svg_representation varchar(255), + svg_representation MEDIUMTEXT, primary key (name) ) engine=InnoDB; diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java index b05b80f00..27c5b9cbd 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java @@ -26,21 +26,23 @@ import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; + import org.springframework.stereotype.Component; @Component public class ChainGenerator { - ChainGenerator() {} + ChainGenerator() { + } - List getChainOfMicroServices(Set input) { + public List getChainOfMicroServices(Set input) { LinkedList returnList = new LinkedList<>(); - if(preValidate(input)) { + if (preValidate(input)) { LinkedList theList = new LinkedList<>(); for (MicroService ms : input) { insertNodeTemplateIntoChain(ms, theList); } - if(postValidate(theList)) { + if (postValidate(theList)) { returnList = theList; } } @@ -48,16 +50,16 @@ public class ChainGenerator { } private boolean preValidate(Set input) { - List noInputs = - input.stream().filter(ms -> "".equals(ms.getInputFrom())).collect(Collectors.toList()); + List noInputs = input.stream().filter(ms -> "".equals(ms.getInputFrom())) + .collect(Collectors.toList()); return noInputs.size() == 1; } private boolean postValidate(LinkedList microServices) { for (int i = 1; i < microServices.size() - 1; i++) { - MicroService prev = microServices.get(i-1); + MicroService prev = microServices.get(i - 1); MicroService current = microServices.get(i); - if(!current.getInputFrom().equals(prev.getName())) { + if (!current.getInputFrom().equals(prev.getName())) { return false; } } diff --git a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java index 6e12f2940..07f1b777f 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java @@ -31,6 +31,7 @@ import com.google.gson.JsonObject; import java.io.IOException; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -46,6 +47,7 @@ import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller; import org.onap.clamp.clds.sdc.controller.installer.MicroService; import org.onap.clamp.clds.util.JsonUtils; +import org.onap.clamp.clds.util.drawing.SvgFacade; import org.onap.clamp.policy.Policy; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -82,6 +84,9 @@ public class CsarInstallerImpl implements CsarInstaller { @Autowired DcaeInventoryServices dcaeInventoryService; + @Autowired + private SvgFacade svgFacade; + @Override public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { boolean alreadyInstalled = true; @@ -113,6 +118,16 @@ public class CsarInstallerImpl implements CsarInstaller { } } + private String getSvgInLoop(BlueprintArtifact blueprintArtifact) { + List microServicesChain = chainGenerator + .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); + if (microServicesChain.isEmpty()) { + microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); + } + return svgFacade.getSvgImage(microServicesChain); + + } + private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact) throws IOException, ParseException, InterruptedException { Loop newLoop = new Loop(); @@ -124,10 +139,10 @@ public class CsarInstallerImpl implements CsarInstaller { newLoop.setLastComputedState(LoopState.DESIGN); newLoop.setMicroServicePolicies(createMicroServicePolicies(csar, blueprintArtifact, newLoop)); newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop)); - // Set SVG XML computed - // newLoop.setSvgRepresentation(svgRepresentation); - newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(csar, blueprintArtifact)); - newLoop.setModelPropertiesJson(createModelPropertiesJson(csar, blueprintArtifact)); + + newLoop.setSvgRepresentation(getSvgInLoop(blueprintArtifact)); + newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact)); + newLoop.setModelPropertiesJson(createModelPropertiesJson(csar)); DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact); newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId()); return newLoop; @@ -144,21 +159,30 @@ public class CsarInstallerImpl implements CsarInstaller { private HashSet createMicroServicePolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException { HashSet newSet = new HashSet<>(); - for (MicroService microService : blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())) { - newSet.add(new MicroServicePolicy(microService.getName(), csar.getPolicyModelYaml().orElse(""), false, - new HashSet<>(Arrays.asList(newLoop)))); + List microServicesChain = chainGenerator + .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); + if (microServicesChain.isEmpty()) { + microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); + } + for (MicroService microService : microServicesChain) { + newSet.add(new MicroServicePolicy( + Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), + csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName()), + csar.getPolicyModelYaml().orElse(""), false, new HashSet<>(Arrays.asList(newLoop)))); } return newSet; } - private JsonObject createGlobalPropertiesJson(CsarHandler csar, BlueprintArtifact blueprintArtifact) { + private JsonObject createGlobalPropertiesJson(BlueprintArtifact blueprintArtifact) { JsonObject globalProperties = new JsonObject(); globalProperties.add("dcaeDeployParameters", getAllBlueprintParametersInJson(blueprintArtifact)); return globalProperties; } - private JsonObject createModelPropertiesJson(CsarHandler csar, BlueprintArtifact blueprintArtifact) { + private JsonObject createModelPropertiesJson(CsarHandler csar) { JsonObject modelProperties = new JsonObject(); Gson gson = new Gson(); modelProperties.add("serviceDetails", diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index a4cd86d07..473364ae4 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -78,7 +78,7 @@ public class Loop implements Serializable { @Column(name = "dcae_blueprint_id") private String dcaeBlueprintId; - @Column(name = "svg_representation") + @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation") private String svgRepresentation; @Expose diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index d1a4bdc56..afa07236d 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -170,7 +170,10 @@ public class CsarInstallerItCase { // set Loop loop = loopsRepo .findById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml")).get(); - + assertThat(loop.getSvgRepresentation()).startsWith(" Date: Thu, 28 Mar 2019 10:05:25 +0100 Subject: Rework the submit operation Rework the logic to create/delete ms config policies. Issue-ID: CLAMP-303 Change-Id: I317e262ab68280a7518a6e31e82e5fcb0a7f94ed Signed-off-by: xg353y --- extra/sql/bulkload/create-tables.sql | 2 + .../clamp/clds/client/DcaeDispatcherServices.java | 4 +- .../clamp/clds/client/DcaeInventoryServices.java | 2 +- .../sdc/controller/installer/BlueprintParser.java | 27 +++- .../sdc/controller/installer/MicroService.java | 22 ++- .../org/onap/clamp/loop/CsarInstallerImpl.java | 4 +- src/main/java/org/onap/clamp/loop/Loop.java | 2 +- .../org/onap/clamp/operation/LoopOperation.java | 164 ++++++++++++++++++++- .../org/onap/clamp/policy/PolicyOperation.java | 131 ++++++++++++++++ .../policy/microservice/MicroServicePolicy.java | 30 +++- .../microservice/MicroservicePolicyService.java | 4 +- .../org/onap/clamp/util/HttpConnectionManager.java | 36 ++++- .../resources/designer/scripts/CldsModelService.js | 2 +- src/main/resources/application-noaaf.properties | 3 + src/main/resources/application.properties | 3 + .../resources/clds/camel/rest/clamp-api-v2.xml | 18 +++ .../clds/client/DcaeDispatcherServicesTest.java | 12 +- .../clamp/clds/it/HttpConnectionManagerItCase.java | 10 +- .../controller/installer/BlueprintParserTest.java | 15 +- .../controller/installer/ChainGeneratorTest.java | 24 +-- .../clds/util/drawing/ClampGraphBuilderTest.java | 8 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 1 - .../onap/clamp/loop/LoopRepositoriesItCase.java | 8 +- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 18 +-- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 8 +- src/test/resources/application.properties | 3 + .../clds/blueprint-with-microservice-chain.yaml | 6 + .../clds/single-microservice-fragment-valid.yaml | 2 + 28 files changed, 492 insertions(+), 77 deletions(-) create mode 100644 src/main/java/org/onap/clamp/policy/PolicyOperation.java (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index b35606353..29e0facda 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -35,7 +35,9 @@ create table micro_service_policies ( name varchar(255) not null, + blueprint_name varchar(255) not null, json_representation json not null, + model_type varchar(255) not null, policy_tosca MEDIUMTEXT not null, properties json, shared bit not null, diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java index e2a4c2f48..0f4659591 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java @@ -99,7 +99,7 @@ public class DcaeDispatcherServices { Date startTime = new Date(); LoggingUtils.setTargetContext("DCAE", "getOperationStatus"); try { - String responseStr = dcaeHttpConnectionManager.doGeneralHttpQuery(statusUrl, "GET", null, null, "DCAE"); + String responseStr = dcaeHttpConnectionManager.doGeneralHttpQuery(statusUrl, "GET", null, null, "DCAE", null, null); JSONObject jsonObj = parseResponse(responseStr); String operationType = (String) jsonObj.get("operationType"); String status = (String) jsonObj.get(DCAE_STATUS_FIELD); @@ -190,7 +190,7 @@ public class DcaeDispatcherServices { String nodeAttr) throws IOException, ParseException { Date startTime = new Date(); try { - String responseStr = dcaeHttpConnectionManager.doGeneralHttpQuery(url, requestMethod, payload, contentType, "DCAE"); + String responseStr = dcaeHttpConnectionManager.doGeneralHttpQuery(url, requestMethod, payload, contentType, "DCAE", null, null); JSONObject jsonObj = parseResponse(responseStr); JSONObject linksObj = (JSONObject) jsonObj.get(node); String statusUrl = (String) linksObj.get(nodeAttr); diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java index 63fdc6187..d8bfeeaec 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java @@ -207,7 +207,7 @@ public class DcaeInventoryServices { } for (int i = 0; i < retryLimit; i++) { metricsLogger.info("Attempt n°" + i + " to contact DCAE inventory"); - String response = httpConnectionManager.doGeneralHttpQuery(fullUrl, "GET", null, null, "DCAE"); + String response = httpConnectionManager.doGeneralHttpQuery(fullUrl, "GET", null, null, "DCAE", null, null); int totalCount = getTotalCountFromDcaeInventoryResponse(response); metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount); if (totalCount > 0) { diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java index c8de4c589..7447fbae1 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java @@ -27,6 +27,7 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import java.util.Collections; import java.util.HashSet; @@ -51,6 +52,8 @@ public class BlueprintParser { private static final String TYPE = "type"; private static final String PROPERTIES = "properties"; private static final String NAME = "name"; + private static final String POLICYID = "policy_id"; + private static final String POLICY_TYPEID = "policy_type_id"; private static final String RELATIONSHIPS = "relationships"; private static final String CLAMP_NODE_RELATIONSHIPS_GETS_INPUT_FROM = "clamp_node.relationships.gets_input_from"; private static final String TARGET = "target"; @@ -85,7 +88,7 @@ public class BlueprintParser { } } String msName = theBiggestMicroServiceKey.toLowerCase().contains(HOLMES_PREFIX) ? HOLMES : TCA; - return Collections.singletonList(new MicroService(msName, "", "")); + return Collections.singletonList(new MicroService(msName, "", "", "", "")); } String getName(Entry entry) { @@ -114,10 +117,30 @@ public class BlueprintParser { return ""; } + String getModelType(Entry entry) { + JsonObject ob = entry.getValue().getAsJsonObject(); + if (ob.has(PROPERTIES)) { + JsonObject properties = ob.get(PROPERTIES).getAsJsonObject(); + if (properties.has(POLICYID)) { + JsonObject policyIdObj = properties.get(POLICYID).getAsJsonObject(); + if (policyIdObj.has(POLICY_TYPEID)) { + return policyIdObj.get(POLICY_TYPEID).getAsString(); + } + } + } + return ""; + } + + String getBlueprintName(Entry entry) { + return entry.getKey(); + } + MicroService getNodeRepresentation(Entry entry) { String name = getName(entry); String getInputFrom = getInput(entry); - return new MicroService(name, getInputFrom, ""); + String modelType = getModelType(entry); + String blueprintName = getBlueprintName(entry); + return new MicroService(name, modelType, getInputFrom, "", blueprintName); } private String getTarget(JsonObject elementObject) { diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java index 198bf0ede..a785f41ef 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java @@ -27,27 +27,39 @@ import java.util.Objects; public class MicroService { private final String name; + private final String modelType; + private final String blueprintName; private final String inputFrom; private String mappedNameJpa; - public MicroService(String name, String inputFrom, String mappedNameJpa) { + public MicroService(String name, String modelType, String inputFrom, String mappedNameJpa, String blueprintName) { this.name = name; this.inputFrom = inputFrom; this.mappedNameJpa = mappedNameJpa; + this.modelType = modelType; + this.blueprintName = blueprintName; } public String getName() { return name; } + public String getModelType() { + return modelType; + } + public String getInputFrom() { return inputFrom; } + public String getBlueprintName() { + return blueprintName; + } + @Override public String toString() { - return "MicroService{" + "name='" + name + '\'' + ", inputFrom='" + inputFrom + '\'' + ", mappedNameJpa='" - + mappedNameJpa + '\'' + '}'; + return "MicroService{" + "name='" + name + '\'' + ", modelType='" + modelType + '\'' + ", inputFrom='" + inputFrom + '\'' + ", mappedNameJpa='" + + mappedNameJpa + '\'' + ", blueprintName='" + blueprintName + '\'' + '}'; } public String getMappedNameJpa() { @@ -67,11 +79,11 @@ public class MicroService { return false; } MicroService that = (MicroService) o; - return name.equals(that.name) && inputFrom.equals(that.inputFrom) && mappedNameJpa.equals(that.mappedNameJpa); + return name.equals(that.name) && modelType.equals(that.modelType) && inputFrom.equals(that.inputFrom) && mappedNameJpa.equals(that.mappedNameJpa) && blueprintName.equals(that.blueprintName); } @Override public int hashCode() { - return Objects.hash(name, inputFrom, mappedNameJpa); + return Objects.hash(name, modelType, inputFrom, mappedNameJpa, blueprintName); } } diff --git a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java index fed2c65b7..05d5c480c 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java @@ -163,8 +163,8 @@ public class CsarInstallerImpl implements CsarInstaller { Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), - csar.getPolicyModelYaml().orElse(""), false, new HashSet<>(Arrays.asList(newLoop))); + blueprintArtifact.getBlueprintArtifactName()), microService.getModelType(), + csar.getPolicyModelYaml().orElse(""), false, new HashSet<>(Arrays.asList(newLoop)), microService.getBlueprintName()); newSet.add(microServicePolicy); microService.setMappedNameJpa(microServicePolicy.getName()); diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 6dc73e987..cc04ce5d2 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -183,7 +183,7 @@ public class Loop implements Serializable { this.operationalPolicies = operationalPolicies; } - Set getMicroServicePolicies() { + public Set getMicroServicePolicies() { return microServicePolicies; } diff --git a/src/main/java/org/onap/clamp/operation/LoopOperation.java b/src/main/java/org/onap/clamp/operation/LoopOperation.java index af615af11..bdb4b3f0f 100644 --- a/src/main/java/org/onap/clamp/operation/LoopOperation.java +++ b/src/main/java/org/onap/clamp/operation/LoopOperation.java @@ -31,6 +31,7 @@ import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; +import java.io.IOException; import java.lang.reflect.Array; import java.util.Collection; import java.util.Date; @@ -40,12 +41,15 @@ import javax.servlet.http.HttpServletRequest; import org.apache.camel.Exchange; import org.onap.clamp.clds.client.DcaeDispatcherServices; +import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.util.LoggingUtils; import org.onap.clamp.clds.util.ONAPLogConstants; import org.onap.clamp.exception.OperationException; import org.onap.clamp.loop.Loop; import org.onap.clamp.loop.LoopService; import org.onap.clamp.loop.LoopState; +import org.onap.clamp.policy.PolicyOperation; +import org.onap.clamp.util.HttpConnectionManager; import org.slf4j.event.Level; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -63,14 +67,17 @@ public class LoopOperation { private final DcaeDispatcherServices dcaeDispatcherServices; private final LoopService loopService; private LoggingUtils util = new LoggingUtils(logger); + private PolicyOperation policyOp; @Autowired private HttpServletRequest request; @Autowired - public LoopOperation(LoopService loopService, DcaeDispatcherServices dcaeDispatcherServices) { + public LoopOperation(LoopService loopService, DcaeDispatcherServices dcaeDispatcherServices, + ClampProperties refProp, HttpConnectionManager httpConnectionManager, PolicyOperation policyOp) { this.loopService = loopService; this.dcaeDispatcherServices = dcaeDispatcherServices; + this.policyOp = policyOp; } /** @@ -209,4 +216,159 @@ public class LoopOperation { // otherwise take it as a string return new JsonPrimitive(String.valueOf(o)); } + + /** + * Submit the Ms policies. + * + * @param loopName the loop name + * @return the updated loop + * @throws IOException IO exception + * @throws Exceptions during the operation + */ + public Loop submitMsPolicies (String loopName) throws OperationException, IOException { + util.entering(request, "LoopOperation: delete microservice policies"); + Date startTime = new Date(); + Loop loop = loopService.getLoop(loopName); + + if (loop == null) { + String msg = "Submit MS policies exception: Not able to find closed loop:" + loopName; + util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // verify the current closed loop state + if (loop.getLastComputedState() != LoopState.SUBMITTED && loop.getLastComputedState() != LoopState.DESIGN) { + String msg = "Submit MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + + ". It could be deleted only when it is in SUBMITTED state."; + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // Establish the api call to Policy to create the ms services + policyOp.createMsPolicy(loop.getMicroServicePolicies()); + + // audit log + LoggingUtils.setTimeContext(startTime, new Date()); + auditLogger.info("Deletion of MS policies completed"); + util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); + return loop; + } + + + /** + * Delete the Ms policies. + * + * @param loopName the loop name + * @return the updated loop + * @throws IOException IO exception + * @throws Exceptions during the operation + */ + public Loop deleteMsPolicies (Exchange camelExchange, String loopName) throws OperationException, IOException { + util.entering(request, "LoopOperation: delete microservice policies"); + Date startTime = new Date(); + Loop loop = loopService.getLoop(loopName); + + if (loop == null) { + String msg = "Delete MS policies exception: Not able to find closed loop:" + loopName; + util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // verify the current closed loop state + if (loop.getLastComputedState() != LoopState.SUBMITTED) { + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + + ". It could be deleted only when it is in SUBMITTED state."; + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // Establish the api call to Policy to create the ms services + policyOp.deleteMsPolicy(loop.getMicroServicePolicies()); + + // audit log + LoggingUtils.setTimeContext(startTime, new Date()); + auditLogger.info("Deletion of MS policies completed"); + util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); + return loop; + } + + /** + * Delete the operational policy. + * + * @param loopName the loop name + * @return the updated loop + * @throws Exceptions during the operation + */ + public Loop deleteOpPolicy (Exchange camelExchange, String loopName) throws OperationException { + util.entering(request, "LoopOperation: delete guard policy"); + Date startTime = new Date(); + Loop loop = loopService.getLoop(loopName); + + if (loop == null) { + String msg = "Delete guard policy exception: Not able to find closed loop:" + loopName; + util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // verify the current closed loop state + if (loop.getLastComputedState() != LoopState.SUBMITTED) { + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + + ". It could be deleted only when it is in SUBMITTED state."; + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // Establish the api call to Policy to delete operational policy + //client.deleteOpPolicy(); + + // audit log + LoggingUtils.setTimeContext(startTime, new Date()); + auditLogger.info("Deletion of Guard policy completed"); + util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); + return loop; + } + + /** + * Delete the Guard policy. + * + * @param loopName the loop name + * @return the updated loop + * @throws Exceptions during the operation + */ + public Loop deleteGuardPolicy (Exchange camelExchange, String loopName) throws OperationException { + util.entering(request, "LoopOperation: delete operational policy"); + Date startTime = new Date(); + Loop loop = loopService.getLoop(loopName); + + if (loop == null) { + String msg = "Delete operational policy exception: Not able to find closed loop:" + loopName; + util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // verify the current closed loop state + if (loop.getLastComputedState() != LoopState.SUBMITTED) { + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + + ". It could be deleted only when it is in SUBMITTED state."; + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, + ONAPLogConstants.ResponseStatus.ERROR); + throw new OperationException(msg); + } + + // Establish the api call to Policy to delete Guard policy + //client.deleteOpPolicy(); + + // audit log + LoggingUtils.setTimeContext(startTime, new Date()); + auditLogger.info("Deletion of operational policy completed"); + util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); + return loop; + } } diff --git a/src/main/java/org/onap/clamp/policy/PolicyOperation.java b/src/main/java/org/onap/clamp/policy/PolicyOperation.java new file mode 100644 index 000000000..592338c4d --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/PolicyOperation.java @@ -0,0 +1,131 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy; + +import java.io.IOException; +import java.util.Set; + +import org.onap.clamp.clds.config.ClampProperties; +import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.util.HttpConnectionManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +@Component +public class PolicyOperation { + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyOperation.class); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + public static final String POLICY_MSTYPE_PROPERTY_NAME = "policy.ms.type"; + public static final String POLICY_ONAPNAME_PROPERTY_NAME = "policy.onap.name"; + public static final String POLICY_BASENAME_PREFIX_PROPERTY_NAME = "policy.base.policyNamePrefix"; + public static final String POLICY_OP_NAME_PREFIX_PROPERTY_NAME = "policy.op.policyNamePrefix"; + public static final String POLICY_MS_NAME_PREFIX_PROPERTY_NAME = "policy.ms.policyNamePrefix"; + public static final String POLICY_OP_TYPE_PROPERTY_NAME = "policy.op.type"; + public static final String POLICY_GUARD_SUFFIX = "_Guard"; + public static final String POLICY_URL_PROPERTY_NAME = "clamp.config.policy.url"; + public static final String POLICY_URL_SUFFIX = "/versions/1.0.0/policies"; + public static final String POLICY_USER_NAME = "clamp.config.policy.userName"; + public static final String POLICY_PASSWORD = "clamp.config.policy.password"; + + public static final String TOSCA_DEF_VERSION = "tosca_definitions_version"; + public static final String TOSCA_DEF_VERSION_VALUE = "tosca_simple_yaml_1_0_0"; + public static final String TEMPLATE = "topology_template"; + public static final String POLICIES = "policies"; + public static final String MS_TYPE = "type"; + public static final String MS_VERSION = "version"; + public static final String MS_VERSION_VALUE = "1.0.0"; + public static final String MS_METADATA = "metadata"; + public static final String MS_POLICY_ID = "policy_id"; + public static final String MS_PROPERTIES = "properties"; + public static final String MS_policy = "tca_policy"; + + private final ClampProperties refProp; + private final HttpConnectionManager httpConnectionManager; + + @Autowired + public PolicyOperation(ClampProperties refProp, HttpConnectionManager httpConnectionManager) { + this.refProp = refProp; + this.httpConnectionManager = httpConnectionManager; + } + + public void createMsPolicy(Set policyList) throws IOException { + // Get policy first? if exist delete??? + // push pdp group + for (MicroServicePolicy msPolicy:policyList) { + JsonObject payload = createMsPolicyPayload(msPolicy); + String policyType = msPolicy.getModelType(); + String url = refProp.getStringValue(POLICY_URL_PROPERTY_NAME) + policyType + POLICY_URL_SUFFIX; + String userName = refProp.getStringValue(POLICY_USER_NAME); + String encodedPass = refProp.getStringValue(POLICY_PASSWORD); + httpConnectionManager.doGeneralHttpQuery(url, "POST", payload.toString(), "application/json", "POLICY", userName, encodedPass); + } + } + + public void deleteMsPolicy(Set policyList) throws IOException { + for (MicroServicePolicy msPolicy:policyList) { + String policyType = msPolicy.getModelType(); + String url = refProp.getStringValue(POLICY_URL_PROPERTY_NAME) + policyType + POLICY_URL_SUFFIX + "/" + msPolicy.getName(); + String userName = refProp.getStringValue(POLICY_USER_NAME); + String encodedPass = refProp.getStringValue(POLICY_PASSWORD); + httpConnectionManager.doGeneralHttpQuery(url, "POST", null, null, "POLICY", userName, encodedPass); + } + } + + private JsonObject createMsPolicyPayload(MicroServicePolicy microService) { + JsonObject policyConfig = new JsonObject(); + policyConfig.add(MS_policy, microService.getProperties()); + + JsonObject properties = new JsonObject(); + properties.add(MS_policy, policyConfig); + + JsonObject msPolicy = new JsonObject(); + msPolicy.addProperty(MS_TYPE, microService.getModelType()); + msPolicy.addProperty(MS_VERSION, MS_VERSION_VALUE); + JsonObject metaData = new JsonObject(); + metaData.addProperty(MS_POLICY_ID, microService.getName()); + msPolicy.add(MS_METADATA, metaData); + msPolicy.add(MS_PROPERTIES, properties); + + JsonObject msPolicyWithName = new JsonObject(); + msPolicyWithName.add(microService.getName(), msPolicy); + + JsonArray policyArray = new JsonArray(); + policyArray.add(msPolicyWithName); + + JsonObject template = new JsonObject(); + template.add(POLICIES, policyArray); + + JsonObject configPolicy = new JsonObject(); + configPolicy.addProperty(TOSCA_DEF_VERSION, TOSCA_DEF_VERSION_VALUE); + configPolicy.add(TEMPLATE, template); + + return configPolicy; + } + +} diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 3962a3d4e..c2c60c9c0 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -59,6 +59,14 @@ public class MicroServicePolicy implements Serializable, Policy { @Column(nullable = false, name = "name", unique = true) private String name; + @Expose + @Column(nullable = false, name = "model_type") + private String modelType; + + @Expose + @Column(nullable = false, name = "blueprint_name") + private String blueprintName; + @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "properties") @@ -86,34 +94,42 @@ public class MicroServicePolicy implements Serializable, Policy { /** * The constructor. * @param name The name of the MicroService + * @param type The model type of the MicroService + * @param blueprintName The name in the blueprint * @param policyTosca The policy Tosca of the MicroService * @param shared The flag indicate whether the MicroService is shared * @param usedByLoops The list of loops that uses this MicroService */ - public MicroServicePolicy(String name, String policyTosca, Boolean shared, Set usedByLoops) { + public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, Set usedByLoops, String blueprintName) { this.name = name; + this.modelType = modelType; this.policyTosca = policyTosca; this.shared = shared; this.jsonRepresentation = JsonUtils.GSON_JPA_MODEL .fromJson(new ToscaYamlToJsonConvertor(null).parseToscaYaml(policyTosca), JsonObject.class); this.usedByLoops = usedByLoops; + this.blueprintName = blueprintName; } /** * The constructor. * @param name The name of the MicroService + * @param type The model type of the MicroService + * @param blueprintName The name in the blueprint * @param policyTosca The policy Tosca of the MicroService * @param shared The flag indicate whether the MicroService is shared * @param jsonRepresentation The UI representation in json format * @param usedByLoops The list of loops that uses this MicroService */ - public MicroServicePolicy(String name, String policyTosca, Boolean shared, JsonObject jsonRepresentation, - Set usedByLoops) { + public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, JsonObject jsonRepresentation, + Set usedByLoops, String blueprintName) { this.name = name; + this.modelType = modelType; this.policyTosca = policyTosca; this.shared = shared; this.usedByLoops = usedByLoops; this.jsonRepresentation = jsonRepresentation; + this.blueprintName = blueprintName; } @Override @@ -121,6 +137,14 @@ public class MicroServicePolicy implements Serializable, Policy { return name; } + public String getModelType() { + return modelType; + } + + public String getBlueprintName() { + return blueprintName; + } + public JsonObject getProperties() { return properties; } diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java index f473d160f..f95ad3b4e 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java @@ -66,8 +66,8 @@ public class MicroservicePolicyService implements PolicyService updateMicroservicePolicyProperties(p, policy, loop)) - .orElse(new MicroServicePolicy(policy.getName(), policy.getPolicyTosca(), policy.getShared(), - policy.getJsonRepresentation(), Sets.newHashSet(loop))); + .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), policy.getShared(), + policy.getJsonRepresentation(), Sets.newHashSet(loop), policy.getBlueprintName())); } private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy, diff --git a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java b/src/main/java/org/onap/clamp/util/HttpConnectionManager.java index 9443301b1..4e97f29b7 100644 --- a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java +++ b/src/main/java/org/onap/clamp/util/HttpConnectionManager.java @@ -27,17 +27,22 @@ package org.onap.clamp.util; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import sun.misc.BASE64Encoder; + import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.security.GeneralSecurityException; import javax.net.ssl.HttpsURLConnection; import javax.ws.rs.BadRequestException; +import org.apache.commons.codec.DecoderException; import org.apache.commons.io.IOUtils; +import org.onap.clamp.clds.util.CryptoUtils; import org.onap.clamp.clds.util.LoggingUtils; import org.springframework.stereotype.Component; @@ -50,13 +55,15 @@ public class HttpConnectionManager { protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); private static final String REQUEST_FAILED_LOG = "Request Failed - response payload="; - private String doHttpsQuery(URL url, String requestMethod, String payload, String contentType, String target) throws IOException { + private String doHttpsQuery(URL url, String requestMethod, String payload, String contentType, String target, String userName, String password) throws IOException { LoggingUtils utils = new LoggingUtils(logger); logger.info("Using HTTPS URL:" + url.toString()); HttpsURLConnection secureConnection = (HttpsURLConnection) url.openConnection(); secureConnection = utils.invokeHttps(secureConnection, target, requestMethod); secureConnection.setRequestMethod(requestMethod); - secureConnection.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId()); + if (userName != null && password != null) { + secureConnection.setRequestProperty("Authorization", "Basic " + generateBasicAuth(userName, password)); + } if (payload != null && contentType != null) { secureConnection.setRequestProperty("Content-Type", contentType); secureConnection.setDoOutput(true); @@ -84,12 +91,15 @@ public class HttpConnectionManager { } } - private String doHttpQuery(URL url, String requestMethod, String payload, String contentType, String target) throws IOException { + private String doHttpQuery(URL url, String requestMethod, String payload, String contentType, String target, String userName, String password) throws IOException { LoggingUtils utils = new LoggingUtils(logger); logger.info("Using HTTP URL:" + url); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection = utils.invoke(connection, target, requestMethod); connection.setRequestMethod(requestMethod); + if (userName != null && password != null) { + connection.setRequestProperty("Authorization", "Basic " + generateBasicAuth(userName, password)); + } if (payload != null && contentType != null) { connection.setRequestProperty("Content-Type", contentType); connection.setDoOutput(true); @@ -134,13 +144,27 @@ public class HttpConnectionManager { * @throws IOException * In case of issue with the streams */ - public String doGeneralHttpQuery(String url, String requestMethod, String payload, String contentType, String target) + public String doGeneralHttpQuery(String url, String requestMethod, String payload, String contentType, String target, String userName, String password) throws IOException { URL urlObj = new URL(url); if (url.contains("https://")) { // Support for HTTPS - return doHttpsQuery(urlObj, requestMethod, payload, contentType, target); + return doHttpsQuery(urlObj, requestMethod, payload, contentType, target, userName, password); } else { // Support for HTTP - return doHttpQuery(urlObj, requestMethod, payload, contentType, target); + return doHttpQuery(urlObj, requestMethod, payload, contentType, target, userName, password); + } + } + + private String generateBasicAuth(String userName, String encodedPassword) { + String password = ""; + try { + password = CryptoUtils.decrypt(encodedPassword); + } catch (GeneralSecurityException e) { + logger.error("Unable to decrypt the password", e); + } catch (DecoderException e) { + logger.error("Exception caught when decoding the HEX String Key for encryption", e); } + BASE64Encoder enc = new sun.misc.BASE64Encoder(); + String userpassword = userName + ":" + password; + return enc.encode( userpassword.getBytes() ); } } diff --git a/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js b/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js index a71e6caa6..90cdc0d78 100644 --- a/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js +++ b/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js @@ -96,7 +96,7 @@ app var def = $q.defer(); var sets = []; var svcAction = uiAction.toLowerCase(); - var svcUrl = "/restservices/clds/v2/loop/" + "action/" + svcAction + "/" + modelName; + var svcUrl = "/restservices/clds/v2/loop/" + svcAction + "/" + modelName; $http.put(svcUrl).success( function(data) { diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties index 632856e92..f54cbe096 100644 --- a/src/main/resources/application-noaaf.properties +++ b/src/main/resources/application-noaaf.properties @@ -135,6 +135,9 @@ clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment- # # # Configuration Settings for Policy Engine Components +clamp.config.policy.url=http://localhost:8085/ +clamp.config.policy.userName=test +clamp.config.policy.password=test clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 clamp.config.policy.pdpUrl2=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 clamp.config.policy.papUrl=http://policy.api.simpledemo.onap.org:8081/pap/ , testpap, alpha123 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 91c02ef74..5b47d32de 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -150,6 +150,9 @@ clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment- # # # Configuration Settings for Policy Engine Components +clamp.config.policy.url=http://policy.api.simpledemo.onap.org:8081/pdp/ +clamp.config.policy.userName=test +clamp.config.policy.password=test clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 clamp.config.policy.pdpUrl2=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 clamp.config.policy.papUrl=http://policy.api.simpledemo.onap.org:8081/pap/ , testpap, alpha123 diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml index c5828b284..f339d5d70 100644 --- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml @@ -71,6 +71,24 @@ + + + + + + + + + + + + + + + + diff --git a/src/test/java/org/onap/clamp/clds/client/DcaeDispatcherServicesTest.java b/src/test/java/org/onap/clamp/clds/client/DcaeDispatcherServicesTest.java index caab61f18..549c2d117 100644 --- a/src/test/java/org/onap/clamp/clds/client/DcaeDispatcherServicesTest.java +++ b/src/test/java/org/onap/clamp/clds/client/DcaeDispatcherServicesTest.java @@ -85,7 +85,7 @@ public class DcaeDispatcherServicesTest { @Test public void shouldReturnDcaeOperationSataus() throws IOException { //given - Mockito.when(httpConnectionManager.doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE")) + Mockito.when(httpConnectionManager.doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE", null, null)) .thenReturn(STATUS_RESPONSE_PROCESSING); //when String operationStatus = dcaeDispatcherServices.getOperationStatus(DEPLOYMENT_STATUS_URL); @@ -98,7 +98,7 @@ public class DcaeDispatcherServicesTest { public void shouldTryMultipleTimesWhenProcessing() throws IOException, InterruptedException { //given Mockito.when(httpConnectionManager.doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", - null, null, "DCAE")) + null, null, "DCAE", null, null)) .thenReturn(STATUS_RESPONSE_PROCESSING, STATUS_RESPONSE_PROCESSING, STATUS_RESPONSE_ACTIVE); //when String operationStatus = dcaeDispatcherServices.getOperationStatusWithRetry(DEPLOYMENT_STATUS_URL); @@ -106,7 +106,7 @@ public class DcaeDispatcherServicesTest { //then Assertions.assertThat(operationStatus).isEqualTo("succeeded"); Mockito.verify(httpConnectionManager, Mockito.times(3)) - .doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE"); + .doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE", null, null); } @@ -114,7 +114,7 @@ public class DcaeDispatcherServicesTest { public void shouldTryOnlyAsManyTimesAsConfigured() throws IOException, InterruptedException { //given Mockito.when(httpConnectionManager - .doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE")) + .doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE", null, null)) .thenReturn(STATUS_RESPONSE_PROCESSING, STATUS_RESPONSE_PROCESSING, STATUS_RESPONSE_PROCESSING, STATUS_RESPONSE_PROCESSING, STATUS_RESPONSE_PROCESSING); //when @@ -123,7 +123,7 @@ public class DcaeDispatcherServicesTest { //then Assertions.assertThat(operationStatus).isEqualTo("processing"); Mockito.verify(httpConnectionManager, Mockito.times(3)) - .doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE"); + .doGeneralHttpQuery(DEPLOYMENT_STATUS_URL, "GET", null, null, "DCAE", null, null); } @@ -140,7 +140,7 @@ public class DcaeDispatcherServicesTest { + "/dcae-deployments/closedLoop_152367c8-b172-47b3-9e58-c53add75d869_deploymentId", "PUT", "{\"serviceTypeId\":\"e2ba40f7-bf42-41e7-acd7-48fd07586d90\",\"inputs\":{}}", - "application/json", "DCAE")) + "application/json", "DCAE", null, null)) .thenReturn(DEPLOY_RESPONSE_STRING); JsonObject blueprintInputJson = new JsonObject(); diff --git a/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java b/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java index 42e9c7f63..4db0e5c27 100644 --- a/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java @@ -110,7 +110,7 @@ public class HttpConnectionManagerItCase { @Test public void testHttpGet() throws Exception { String response = httpConnectionManager - .doGeneralHttpQuery("http://localhost:" + this.httpPort + "/designer/index.html", "GET", null, null, "DCAE"); + .doGeneralHttpQuery("http://localhost:" + this.httpPort + "/designer/index.html", "GET", null, null, "DCAE", null, null); assertNotNull(response); // Should be a redirection so 302, so empty assertTrue(response.isEmpty()); @@ -119,7 +119,7 @@ public class HttpConnectionManagerItCase { @Test public void testHttpsGet() throws Exception { String response = httpConnectionManager - .doGeneralHttpQuery("https://localhost:" + this.httpsPort + "/designer/index.html", "GET", null, null, "DCAE"); + .doGeneralHttpQuery("https://localhost:" + this.httpsPort + "/designer/index.html", "GET", null, null, "DCAE", null, null); assertNotNull(response); // Should contain something assertTrue(!response.isEmpty()); @@ -128,21 +128,21 @@ public class HttpConnectionManagerItCase { @Test(expected = BadRequestException.class) public void testHttpsGet404() throws IOException { httpConnectionManager.doGeneralHttpQuery("https://localhost:" + this.httpsPort + "/designer/index1.html", - "GET", null, null, "DCAE"); + "GET", null, null, "DCAE", null, null); fail("Should have raised an BadRequestException"); } @Test(expected = BadRequestException.class) public void testHttpsPost404() throws IOException { httpConnectionManager.doGeneralHttpQuery("https://localhost:" + this.httpsPort + "/designer/index1.html", - "POST", "", "application/json", "DCAE"); + "POST", "", "application/json", "DCAE", null, null); fail("Should have raised an BadRequestException"); } @Test(expected = BadRequestException.class) public void testHttpException() throws IOException { httpConnectionManager.doGeneralHttpQuery("http://localhost:" + this.httpsPort + "/designer/index.html", "GET", - null, null, "DCAE"); + null, null, "DCAE", null, null); fail("Should have raised an BadRequestException"); } } diff --git a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java index 551ac1b30..fbe6e63ca 100644 --- a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java +++ b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java @@ -47,6 +47,9 @@ public class BlueprintParserTest { private static final String FIRST_APPP = "first_app"; private static final String SECOND_APPP = "second_app"; private static final String THIRD_APPP = "third_app"; + private static final String MODEL_TYPE1 = "type1"; + private static final String MODEL_TYPE2 = "type2"; + private static final String MODEL_TYPE3 = "type3"; private static String microServiceTheWholeBlueprintValid; private static String microServiceBlueprintOldStyleTCA; @@ -139,7 +142,7 @@ public class BlueprintParserTest { public void getNodeRepresentationFromCompleteYaml() { final JsonObject jsonObject = jsonObjectBlueprintValid; - MicroService expected = new MicroService(SECOND_APPP, FIRST_APPP, ""); + MicroService expected = new MicroService(SECOND_APPP, MODEL_TYPE1, FIRST_APPP, "", SECOND_APPP); Entry entry = jsonObject.entrySet().iterator().next(); MicroService actual = new BlueprintParser().getNodeRepresentation(entry); @@ -148,9 +151,9 @@ public class BlueprintParserTest { @Test public void getMicroServicesFromBlueprintTest() { - MicroService thirdApp = new MicroService(THIRD_APPP, "", ""); - MicroService firstApp = new MicroService(FIRST_APPP, THIRD_APPP, ""); - MicroService secondApp = new MicroService(SECOND_APPP, FIRST_APPP, ""); + MicroService thirdApp = new MicroService(THIRD_APPP, MODEL_TYPE3, "", "", THIRD_APPP); + MicroService firstApp = new MicroService(FIRST_APPP, MODEL_TYPE1, THIRD_APPP, "", FIRST_APPP); + MicroService secondApp = new MicroService(SECOND_APPP, MODEL_TYPE2, FIRST_APPP, "", SECOND_APPP); Set expected = new HashSet<>(Arrays.asList(firstApp, secondApp, thirdApp)); Set actual = new BlueprintParser().getMicroServices(microServiceTheWholeBlueprintValid); @@ -160,7 +163,7 @@ public class BlueprintParserTest { @Test public void fallBackToOneMicroServiceTCATest() { - MicroService tcaMS = new MicroService(BlueprintParser.TCA, "", ""); + MicroService tcaMS = new MicroService(BlueprintParser.TCA, "", "", "", ""); List expected = Collections.singletonList(tcaMS); List actual = new BlueprintParser().fallbackToOneMicroService(microServiceBlueprintOldStyleTCA); @@ -170,7 +173,7 @@ public class BlueprintParserTest { @Test public void fallBackToOneMicroServiceHolmesTest() { - MicroService holmesMS = new MicroService(BlueprintParser.HOLMES, "", ""); + MicroService holmesMS = new MicroService(BlueprintParser.HOLMES, "", "", "", ""); List expected = Collections.singletonList(holmesMS); List actual = new BlueprintParser() diff --git a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java index 2ec508799..1eb66eadd 100644 --- a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java +++ b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java @@ -38,10 +38,10 @@ public class ChainGeneratorTest { @Test public void getChainOfMicroServicesTest() { - MicroService ms1 = new MicroService(FIRST_APPP, "", ""); - MicroService ms2 = new MicroService(SECOND_APPP, FIRST_APPP, ""); - MicroService ms3 = new MicroService(THIRD_APPP, SECOND_APPP, ""); - MicroService ms4 = new MicroService(FOURTH_APPP, THIRD_APPP, ""); + MicroService ms1 = new MicroService(FIRST_APPP, "", "", "", ""); + MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, "", ""); + MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, "", ""); + MicroService ms4 = new MicroService(FOURTH_APPP, "", THIRD_APPP, "", ""); List expectedList = Arrays.asList(ms1, ms2, ms3, ms4); Set inputSet = new HashSet<>(expectedList); @@ -52,10 +52,10 @@ public class ChainGeneratorTest { @Test public void getChainOfMicroServicesTwiceNoInputTest() { - MicroService ms1 = new MicroService(FIRST_APPP, "", ""); - MicroService ms2 = new MicroService(SECOND_APPP, "", ""); - MicroService ms3 = new MicroService(THIRD_APPP, SECOND_APPP, ""); - MicroService ms4 = new MicroService(FOURTH_APPP, FIRST_APPP, ""); + MicroService ms1 = new MicroService(FIRST_APPP, "", "", "", ""); + MicroService ms2 = new MicroService(SECOND_APPP, "", "", "", ""); + MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, "", ""); + MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, "", ""); Set inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4)); List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); @@ -64,10 +64,10 @@ public class ChainGeneratorTest { @Test public void getChainOfMicroServicesBranchingTest() { - MicroService ms1 = new MicroService(FIRST_APPP, "", ""); - MicroService ms2 = new MicroService(SECOND_APPP, FIRST_APPP, ""); - MicroService ms3 = new MicroService(THIRD_APPP, FIRST_APPP, ""); - MicroService ms4 = new MicroService(FOURTH_APPP, FIRST_APPP, ""); + MicroService ms1 = new MicroService(FIRST_APPP, "", "", "", ""); + MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, "", ""); + MicroService ms3 = new MicroService(THIRD_APPP, "", FIRST_APPP, "", ""); + MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, "", ""); Set inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4)); List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); diff --git a/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java b/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java index 459a701fe..f7d2fe76e 100644 --- a/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java +++ b/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java @@ -56,8 +56,8 @@ public class ClampGraphBuilderTest { @Test public void clampGraphBuilderCompleteChainTest() { String collector = "VES"; - MicroService ms1 = new MicroService("ms1", "", "ms1_jpa_id"); - MicroService ms2 = new MicroService("ms2", "", "ms2_jpa_id"); + MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id", ""); + MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id", ""); ; String policy = "Policy"; List microServices = Arrays.asList(ms1, ms2); @@ -76,8 +76,8 @@ public class ClampGraphBuilderTest { @Test(expected = InvalidStateException.class) public void clampGraphBuilderNoPolicyGivenTest() { String collector = "VES"; - MicroService ms1 = new MicroService("ms1", "", "ms1_jpa_id"); - MicroService ms2 = new MicroService("ms2", "", "ms2_jpa_id"); + MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id", ""); + MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id", ""); ClampGraphBuilder clampGraphBuilder = new ClampGraphBuilder(mockPainter); clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).build(); diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index fcef5b79e..2578f68ed 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -173,7 +173,6 @@ public class CsarInstallerItCase { assertThat(loop.getSvgRepresentation()).startsWith("()); + MicroServicePolicy µService = new MicroServicePolicy(name, modelType, policyTosca, shared, + gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>(), ""); µService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class)); return µService; } @@ -105,7 +105,7 @@ public class LoopRepositoriesItCase { "123456789", "https://dcaetest.org", "UUID-blueprint"); OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest"); loopTest.addOperationalPolicy(opPolicy); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "{\"configtype\":\"json\"}", + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", "{\"configtype\":\"json\"}", "YamlContent", "{\"param1\":\"value1\"}", true); loopTest.addMicroServicePolicy(microServicePolicy); LoopLog loopLog = getLoopLog(LogType.INFO, "test message"); diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index 4011a7867..9a44d41bc 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -114,7 +114,7 @@ public class LoopServiceTestItCase { JsonObject confJson = JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class); String policyName = "policyName"; String policyTosca = "policyTosca"; - MicroServicePolicy microServicePolicy = new MicroServicePolicy(policyName, policyTosca, false, confJson, null); + MicroServicePolicy microServicePolicy = new MicroServicePolicy(policyName, "", policyTosca, false, confJson, null, ""); //when Loop actualLoop = loopService @@ -141,12 +141,12 @@ public class LoopServiceTestItCase { JsonObject newJsonRepresentation = JsonUtils.GSON.fromJson("{}", JsonObject.class); String secondPolicyName = "secondPolicyName"; String secondPolicyTosca = "secondPolicyTosca"; - MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "policyTosca", - false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "", "policyTosca", + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, ""); loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); - MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, secondPolicyTosca, true, - newJsonRepresentation, null); + MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, "", secondPolicyTosca, true, + newJsonRepresentation, null, ""); //when firstMicroServicePolicy.setProperties(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class)); @@ -178,12 +178,12 @@ public class LoopServiceTestItCase { String firstPolicyName = "firstPolicyName"; String secondPolicyName = "policyName"; String secondPolicyTosca = "secondPolicyTosca"; - MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "policyTosca", - false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy(firstPolicyName, "", "policyTosca", + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, ""); loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); - MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, secondPolicyTosca, true, - jsonRepresentation, null); + MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy(secondPolicyName, "", secondPolicyTosca, true, + jsonRepresentation, null, ""); //when Loop actualLoop = loopService diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index 92a0e14cf..1c218977d 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -58,10 +58,10 @@ public class LoopToJsonTest { return loop; } - private MicroServicePolicy getMicroServicePolicy(String name, String jsonRepresentation, String policyTosca, + private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, String policyTosca, String jsonProperties, boolean shared) { - MicroServicePolicy µService = new MicroServicePolicy(name, policyTosca, shared, - gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); + MicroServicePolicy µService = new MicroServicePolicy(name, modelType, policyTosca, shared, + gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>(), ""); µService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class)); return µService; @@ -81,7 +81,7 @@ public class LoopToJsonTest { "123456789", "https://dcaetest.org", "UUID-blueprint"); OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest"); loopTest.addOperationalPolicy(opPolicy); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "{\"configtype\":\"json\"}", + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", "{\"configtype\":\"json\"}", "YamlContent", "{\"param1\":\"value1\"}", true); loopTest.addMicroServicePolicy(microServicePolicy); LoopLog loopLog = getLoopLog(LogType.INFO, "test message"); diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index e15b8737a..99d5da8b3 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -141,6 +141,9 @@ clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment- # # # Configuration Settings for Policy Engine Components +clamp.config.policy.url=http://localhost:${docker.http-cache.port.host} +clamp.config.policy.userName=test +clamp.config.policy.password=test clamp.config.policy.pdpUrl1=http://localhost:${docker.http-cache.port.host}/pdp/ , testpdp, alpha123 clamp.config.policy.pdpUrl2=http://localhost:${docker.http-cache.port.host}/pdp/ , testpdp, alpha123 clamp.config.policy.papUrl=http://localhost:${docker.http-cache.port.host}/pap/ , testpap, alpha123 diff --git a/src/test/resources/clds/blueprint-with-microservice-chain.yaml b/src/test/resources/clds/blueprint-with-microservice-chain.yaml index 7b7148d54..4a7e5d7aa 100644 --- a/src/test/resources/clds/blueprint-with-microservice-chain.yaml +++ b/src/test/resources/clds/blueprint-with-microservice-chain.yaml @@ -30,6 +30,8 @@ node_templates: service_component_type: dcaegen2-analytics-tca service_component_name_override: second_app image: { get_input: second_app_docker_image } + policy_id: + policy_type_id: type2 interfaces: cloudify.interfaces.lifecycle: start: @@ -53,6 +55,8 @@ node_templates: dns_name: "first_app" image: { get_input: first_app_docker_image } container_port: 6565 + policy_id: + policy_type_id: type1 interfaces: cloudify.interfaces.lifecycle: start: @@ -76,6 +80,8 @@ node_templates: dns_name: "third_app" image: { get_input: third_app_docker_image } container_port: 443 + policy_id: + policy_type_id: type3 interfaces: cloudify.interfaces.lifecycle: start: diff --git a/src/test/resources/clds/single-microservice-fragment-valid.yaml b/src/test/resources/clds/single-microservice-fragment-valid.yaml index abaae20b3..269ee5062 100644 --- a/src/test/resources/clds/single-microservice-fragment-valid.yaml +++ b/src/test/resources/clds/single-microservice-fragment-valid.yaml @@ -5,6 +5,8 @@ second_app: service_component_name_override: second_app image: { get_input: second_app_docker_image } name: second_app + policy_id: + policy_type_id: type1 interfaces: cloudify.interfaces.lifecycle: start: -- cgit 1.2.3-korg From dfa86ca8a3d8380487261da22cbf582b547e3276 Mon Sep 17 00:00:00 2001 From: sebdet Date: Fri, 5 Apr 2019 15:15:31 +0200 Subject: Introduce Camel route Camel route for Submit operation using http4 component Issue-ID: CLAMP-303 Change-Id: I29804a7db6286dfa84f7eed63813f25299a385e6 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 1 - pom.xml | 4 + .../java/org/onap/clamp/loop/LoopOperation.java | 126 +++++------ .../org/onap/clamp/policy/PolicyOperation.java | 131 ------------ .../policy/operational/OperationalPolicy.java | 38 +++- src/main/resources/application-noaaf.properties | 2 +- src/main/resources/application.properties | 2 +- .../resources/clds/camel/rest/clamp-api-v2.xml | 235 +++++++++++++-------- .../resources/clds/camel/routes/flexible-flow.xml | 172 ++++++++++----- .../microservice/OperationalPolicyPayloadTest.java | 64 ++++++ .../resources/tosca/guard1-policy-payload.json | 16 ++ .../resources/tosca/guard2-policy-payload.json | 16 ++ .../tosca/operational-policy-payload.yaml | 31 +++ .../tosca/operational-policy-properties.json | 71 +++++++ 14 files changed, 562 insertions(+), 347 deletions(-) delete mode 100644 src/main/java/org/onap/clamp/policy/PolicyOperation.java create mode 100644 src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java create mode 100644 src/test/resources/tosca/guard1-policy-payload.json create mode 100644 src/test/resources/tosca/guard2-policy-payload.json create mode 100644 src/test/resources/tosca/operational-policy-payload.yaml create mode 100644 src/test/resources/tosca/operational-policy-properties.json (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 29e0facda..3c261eb4f 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -35,7 +35,6 @@ create table micro_service_policies ( name varchar(255) not null, - blueprint_name varchar(255) not null, json_representation json not null, model_type varchar(255) not null, policy_tosca MEDIUMTEXT not null, diff --git a/pom.xml b/pom.xml index dbe87387d..f60833ffc 100644 --- a/pom.xml +++ b/pom.xml @@ -284,6 +284,10 @@ ${tomcat.version} + + org.apache.camel + camel-http4 + org.apache.camel camel-spring-boot-starter diff --git a/src/main/java/org/onap/clamp/loop/LoopOperation.java b/src/main/java/org/onap/clamp/loop/LoopOperation.java index 7def783b5..5b55ab0de 100644 --- a/src/main/java/org/onap/clamp/loop/LoopOperation.java +++ b/src/main/java/org/onap/clamp/loop/LoopOperation.java @@ -45,7 +45,6 @@ import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.util.LoggingUtils; import org.onap.clamp.clds.util.ONAPLogConstants; import org.onap.clamp.exception.OperationException; -import org.onap.clamp.policy.PolicyOperation; import org.onap.clamp.util.HttpConnectionManager; import org.slf4j.event.Level; import org.springframework.beans.factory.annotation.Autowired; @@ -59,30 +58,30 @@ import org.yaml.snakeyaml.Yaml; @Component public class LoopOperation { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopOperation.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger(); + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopOperation.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger(); private final DcaeDispatcherServices dcaeDispatcherServices; private final LoopService loopService; private LoggingUtils util = new LoggingUtils(logger); - private PolicyOperation policyOp; @Autowired private HttpServletRequest request; @Autowired - public LoopOperation(LoopService loopService, DcaeDispatcherServices dcaeDispatcherServices, - ClampProperties refProp, HttpConnectionManager httpConnectionManager, PolicyOperation policyOp) { + public LoopOperation(LoopService loopService, DcaeDispatcherServices dcaeDispatcherServices, + ClampProperties refProp, HttpConnectionManager httpConnectionManager) { this.loopService = loopService; this.dcaeDispatcherServices = dcaeDispatcherServices; - this.policyOp = policyOp; } /** * Deploy the closed loop. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws Exceptions during the operation + * @throws Exceptions + * during the operation */ public Loop deployLoop(Exchange camelExchange, String loopName) throws OperationException { util.entering(request, "CldsService: Deploy model"); @@ -98,10 +97,9 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Deploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Deploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deployed only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } @@ -118,25 +116,27 @@ public class LoopOperation { Map yamlMap = yaml.load(loop.getBlueprint()); JsonObject bluePrint = wrapSnakeObject(yamlMap).getAsJsonObject(); - loop.setDcaeDeploymentStatusUrl(dcaeDispatcherServices.createNewDeployment(deploymentId, loop.getDcaeBlueprintId(), bluePrint)); + loop.setDcaeDeploymentStatusUrl( + dcaeDispatcherServices.createNewDeployment(deploymentId, loop.getDcaeBlueprintId(), bluePrint)); loop.setLastComputedState(LoopState.DEPLOYED); // save the updated loop - loopService.saveOrUpdateLoop (loop); + loopService.saveOrUpdateLoop(loop); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deploy model completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } /** * Un deploy closed loop. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop */ - public Loop unDeployLoop(String loopName) throws OperationException { + public Loop unDeployLoop(String loopName) throws OperationException { util.entering(request, "LoopOperation: Undeploy the closed loop"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -146,14 +146,13 @@ public class LoopOperation { util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); - } + } // verify the current closed loop state if (loop.getLastComputedState() != LoopState.DEPLOYED) { - String msg = "Unploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Unploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be undeployed only when it is in DEPLOYED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } @@ -165,7 +164,7 @@ public class LoopOperation { loop.setLastComputedState(LoopState.SUBMITTED); // save the updated loop - loopService.saveOrUpdateLoop (loop); + loopService.saveOrUpdateLoop(loop); // audit log LoggingUtils.setTimeContext(startTime, new Date()); @@ -175,14 +174,14 @@ public class LoopOperation { } private JsonElement wrapSnakeObject(Object o) { - //NULL => JsonNull + // NULL => JsonNull if (o == null) return JsonNull.INSTANCE; // Collection => JsonArray if (o instanceof Collection) { JsonArray array = new JsonArray(); - for (Object childObj : (Collection)o) + for (Object childObj : (Collection) o) array.add(wrapSnakeObject(childObj)); return array; } @@ -192,14 +191,14 @@ public class LoopOperation { JsonArray array = new JsonArray(); int length = Array.getLength(array); - for (int i=0; i JsonObject if (o instanceof Map) { - Map map = (Map)o; + Map map = (Map) o; JsonObject jsonObject = new JsonObject(); for (final Map.Entry entry : map.entrySet()) { @@ -217,12 +216,15 @@ public class LoopOperation { /** * Submit the Ms policies. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws IOException IO exception - * @throws Exceptions during the operation + * @throws IOException + * IO exception + * @throws Exceptions + * during the operation */ - public Loop submitMsPolicies (String loopName) throws OperationException, IOException { + public Loop submitMsPolicies(String loopName) throws OperationException, IOException { util.entering(request, "LoopOperation: delete microservice policies"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -236,33 +238,34 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED && loop.getLastComputedState() != LoopState.DESIGN) { - String msg = "Submit MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Submit MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to create the ms services - policyOp.createMsPolicy(loop.getMicroServicePolicies()); + // policyOp.createMsPolicy(loop.getMicroServicePolicies()); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of MS policies completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } - /** * Delete the Ms policies. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws IOException IO exception - * @throws Exceptions during the operation + * @throws IOException + * IO exception + * @throws Exceptions + * during the operation */ - public Loop deleteMsPolicies (Exchange camelExchange, String loopName) throws OperationException, IOException { + public Loop deleteMsPolicies(Exchange camelExchange, String loopName) throws OperationException, IOException { util.entering(request, "LoopOperation: delete microservice policies"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -276,31 +279,32 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to create the ms services - policyOp.deleteMsPolicy(loop.getMicroServicePolicies()); + // policyOp.deleteMsPolicy(loop.getMicroServicePolicies()); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of MS policies completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } /** * Delete the operational policy. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws Exceptions during the operation + * @throws Exceptions + * during the operation */ - public Loop deleteOpPolicy (Exchange camelExchange, String loopName) throws OperationException { + public Loop deleteOpPolicy(Exchange camelExchange, String loopName) throws OperationException { util.entering(request, "LoopOperation: delete guard policy"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -314,31 +318,32 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to delete operational policy - //client.deleteOpPolicy(); + // client.deleteOpPolicy(); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of Guard policy completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } /** * Delete the Guard policy. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws Exceptions during the operation + * @throws Exceptions + * during the operation */ - public Loop deleteGuardPolicy (Exchange camelExchange, String loopName) throws OperationException { + public Loop deleteGuardPolicy(Exchange camelExchange, String loopName) throws OperationException { util.entering(request, "LoopOperation: delete operational policy"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -352,20 +357,19 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to delete Guard policy - //client.deleteOpPolicy(); + // client.deleteOpPolicy(); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of operational policy completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } } diff --git a/src/main/java/org/onap/clamp/policy/PolicyOperation.java b/src/main/java/org/onap/clamp/policy/PolicyOperation.java deleted file mode 100644 index edce8ff50..000000000 --- a/src/main/java/org/onap/clamp/policy/PolicyOperation.java +++ /dev/null @@ -1,131 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.policy; - -import java.io.IOException; -import java.util.Set; - -import org.onap.clamp.clds.config.ClampProperties; -import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.util.HttpConnectionManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - -@Component -public class PolicyOperation { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyOperation.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - public static final String POLICY_MSTYPE_PROPERTY_NAME = "policy.ms.type"; - public static final String POLICY_ONAPNAME_PROPERTY_NAME = "policy.onap.name"; - public static final String POLICY_BASENAME_PREFIX_PROPERTY_NAME = "policy.base.policyNamePrefix"; - public static final String POLICY_OP_NAME_PREFIX_PROPERTY_NAME = "policy.op.policyNamePrefix"; - public static final String POLICY_MS_NAME_PREFIX_PROPERTY_NAME = "policy.ms.policyNamePrefix"; - public static final String POLICY_OP_TYPE_PROPERTY_NAME = "policy.op.type"; - public static final String POLICY_GUARD_SUFFIX = "_Guard"; - public static final String POLICY_URL_PROPERTY_NAME = "clamp.config.policy.url"; - public static final String POLICY_URL_SUFFIX = "/versions/1.0.0/policies"; - public static final String POLICY_USER_NAME = "clamp.config.policy.userName"; - public static final String POLICY_PASSWORD = "clamp.config.policy.password"; - - public static final String TOSCA_DEF_VERSION = "tosca_definitions_version"; - public static final String TOSCA_DEF_VERSION_VALUE = "tosca_simple_yaml_1_0_0"; - public static final String TEMPLATE = "topology_template"; - public static final String POLICIES = "policies"; - public static final String MS_TYPE = "type"; - public static final String MS_VERSION = "version"; - public static final String MS_VERSION_VALUE = "1.0.0"; - public static final String MS_METADATA = "metadata"; - public static final String MS_POLICY_ID = "policy_id"; - public static final String MS_PROPERTIES = "properties"; - public static final String MS_policy = "tca_policy"; - - private final ClampProperties refProp; - private final HttpConnectionManager httpConnectionManager; - - @Autowired - public PolicyOperation(ClampProperties refProp, HttpConnectionManager httpConnectionManager) { - this.refProp = refProp; - this.httpConnectionManager = httpConnectionManager; - } - - public void createMsPolicy(Set policyList) throws IOException { - // Get policy first? if exist delete??? - // push pdp group - for (MicroServicePolicy msPolicy:policyList) { - JsonObject payload = createMsPolicyPayload(msPolicy); - String policyType = msPolicy.getModelType(); - String url = refProp.getStringValue(POLICY_URL_PROPERTY_NAME) + policyType + POLICY_URL_SUFFIX; - String userName = refProp.getStringValue(POLICY_USER_NAME); - String encodedPass = refProp.getStringValue(POLICY_PASSWORD); - httpConnectionManager.doHttpRequest(url, "POST", payload.toString(), "application/json", "POLICY", userName, encodedPass); - } - } - - public void deleteMsPolicy(Set policyList) throws IOException { - for (MicroServicePolicy msPolicy:policyList) { - String policyType = msPolicy.getModelType(); - String url = refProp.getStringValue(POLICY_URL_PROPERTY_NAME) + policyType + POLICY_URL_SUFFIX + "/" + msPolicy.getName(); - String userName = refProp.getStringValue(POLICY_USER_NAME); - String encodedPass = refProp.getStringValue(POLICY_PASSWORD); - httpConnectionManager.doHttpRequest(url, "POST", null, null, "POLICY", userName, encodedPass); - } - } - - private JsonObject createMsPolicyPayload(MicroServicePolicy microService) { - JsonObject policyConfig = new JsonObject(); - policyConfig.add(MS_policy, microService.getProperties()); - - JsonObject properties = new JsonObject(); - properties.add(MS_policy, policyConfig); - - JsonObject msPolicy = new JsonObject(); - msPolicy.addProperty(MS_TYPE, microService.getModelType()); - msPolicy.addProperty(MS_VERSION, MS_VERSION_VALUE); - JsonObject metaData = new JsonObject(); - metaData.addProperty(MS_POLICY_ID, microService.getName()); - msPolicy.add(MS_METADATA, metaData); - msPolicy.add(MS_PROPERTIES, properties); - - JsonObject msPolicyWithName = new JsonObject(); - msPolicyWithName.add(microService.getName(), msPolicy); - - JsonArray policyArray = new JsonArray(); - policyArray.add(msPolicyWithName); - - JsonObject template = new JsonObject(); - template.add(POLICIES, policyArray); - - JsonObject configPolicy = new JsonObject(); - configPolicy.addProperty(TOSCA_DEF_VERSION, TOSCA_DEF_VERSION_VALUE); - configPolicy.add(TEMPLATE, template); - - return configPolicy; - } - -} diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index 674bd71d7..b6b591db2 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -23,12 +23,18 @@ package org.onap.clamp.policy.operational; +import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import javax.persistence.Column; import javax.persistence.Entity; @@ -44,6 +50,7 @@ import org.hibernate.annotations.TypeDefs; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; import org.onap.clamp.policy.Policy; +import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "operational_policies") @@ -156,11 +163,36 @@ public class OperationalPolicy implements Serializable, Policy { JsonArray policiesArray = new JsonArray(); topologyTemplateNode.add("policies", policiesArray); - return new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult); + JsonObject operationalPolicy = new JsonObject(); + policiesArray.add(operationalPolicy); + + JsonObject operationalPolicyDetails = new JsonObject(); + operationalPolicy.add(this.name, operationalPolicyDetails); + operationalPolicyDetails.addProperty("type", "onap.policies.controlloop.Operational"); + operationalPolicyDetails.addProperty("version", "1.0.0"); + + JsonObject metadata = new JsonObject(); + operationalPolicyDetails.add("metadata", metadata); + metadata.addProperty("policy-id", this.name); + + operationalPolicyDetails.add("properties", this.configurationsJson.get("operational_policy")); + + Gson gson = new GsonBuilder().create(); + Map jsonMap = gson.fromJson(gson.toJson(policyPayloadResult), Map.class); + return (new Yaml()).dump(jsonMap); } - public String createGuardPolicyPayload() { - return null; + public List createGuardPolicyPayloads() { + List result = new ArrayList<>(); + + JsonObject guard = new JsonObject(); + JsonElement guardsList = this.getConfigurationsJson().get("guard_policies"); + for (Entry guardElem : guardsList.getAsJsonObject().entrySet()) { + guard.addProperty("policy-id", guardElem.getKey()); + guard.add("contents", guardElem.getValue()); + result.add(new GsonBuilder().create().toJson(guard)); + } + return result; } } diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties index 82b2a283f..84e97ea30 100644 --- a/src/main/resources/application-noaaf.properties +++ b/src/main/resources/application-noaaf.properties @@ -135,7 +135,7 @@ clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment- # # # Configuration Settings for Policy Engine Components -clamp.config.policy.url=http://localhost:8085/ +clamp.config.policy.url=http://policy.api.simpledemo.onap.org:8081/policy/api/v1 clamp.config.policy.userName=test clamp.config.policy.password=test clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b8c633566..4792d057d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -150,7 +150,7 @@ clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment- # # # Configuration Settings for Policy Engine Components -clamp.config.policy.url=http://policy.api.simpledemo.onap.org:8081/pdp/ +clamp.config.policy.url=http://policy.api.simpledemo.onap.org:8081/policy/api/v1 clamp.config.policy.userName=test clamp.config.policy.password=test clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml index f339d5d70..c17595e18 100644 --- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml @@ -1,94 +1,147 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${header.loopName} + + + + + + + + ${header.LoopObject.getMicroServicePolicies()} + + + false + + + + + true + + + ${body.createPolicyPayload()} + + + + + + + + + + + + + + + diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml index 2103b4acf..b8244990b 100644 --- a/src/main/resources/clds/camel/routes/flexible-flow.xml +++ b/src/main/resources/clds/camel/routes/flexible-flow.xml @@ -1,61 +1,117 @@ - - - - - ${exchangeProperty.actionCd} == 'SUBMIT' || ${exchangeProperty.actionCd} == 'RESUBMIT' - - - - - 30000 - - - - - - - ${exchangeProperty.actionCd} == 'DELETE' - - - - - 30000 - - - - - - - - ${exchangeProperty.actionCd} == 'UPDATE' - - - - - 30000 - - - - - - - ${exchangeProperty.actionCd} == 'STOP' - - - - - - - ${exchangeProperty.actionCd} == 'RESTART' - - - - - - - + + + + + ${exchangeProperty.actionCd} == 'SUBMIT' || + ${exchangeProperty.actionCd} == 'RESUBMIT' + + + + + + 30000 + + + + + + + ${exchangeProperty.actionCd} == 'DELETE' + + + + + 30000 + + + + + + + + ${exchangeProperty.actionCd} == 'UPDATE' + + + + + 30000 + + + + + + + ${exchangeProperty.actionCd} == 'STOP' + + + + + + + ${exchangeProperty.actionCd} == 'RESTART' + + + + + + + + + + + + DELETE + + + {{clamp.config.policy.url}}/policyTypes/${body.getModelType()}/versions/1.0.0/policies/${body.getName()} + + + + null + + + + + + + + + + + POST + + + {{clamp.config.policy.url}}/policyTypes/${body.getModelType()}/versions/1.0.0/policies + + + + + + \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java new file mode 100644 index 000000000..1f57422c5 --- /dev/null +++ b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java @@ -0,0 +1,64 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.microservice; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.util.List; + +import org.junit.Test; +import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.policy.operational.OperationalPolicy; +import org.skyscreamer.jsonassert.JSONAssert; + +public class OperationalPolicyPayloadTest { + + @Test + public void testOperationalPolicyPayloadConstruction() throws IOException { + JsonObject jsonConfig = new GsonBuilder().create().fromJson( + ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); + OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); + assertThat(policy.createPolicyPayload()) + .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.yaml")); + } + + @Test + public void testGuardPolicyPayloadConstruction() throws IOException { + JsonObject jsonConfig = new GsonBuilder().create().fromJson( + ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); + OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); + + List guardsList = policy.createGuardPolicyPayloads(); + + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/guard1-policy-payload.json"), + guardsList.get(0), false); + + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/guard2-policy-payload.json"), + guardsList.get(1), false); + } +} diff --git a/src/test/resources/tosca/guard1-policy-payload.json b/src/test/resources/tosca/guard1-policy-payload.json new file mode 100644 index 000000000..bacf174fe --- /dev/null +++ b/src/test/resources/tosca/guard1-policy-payload.json @@ -0,0 +1,16 @@ +{ + "policy-id": "guard1", + "contents": { + "recipe": "Rebuild", + "actor": "SO", + "clname": "testloop", + "guardTargets": ".*", + "minGuard": "3", + "maxGuard": "7", + "limitGuard": "", + "timeUnitsGuard": "", + "timeWindowGuard": "", + "guardActiveStart": "00:00:01-05:00", + "guardActiveEnd": "23:59:01-05:00" + } +} \ No newline at end of file diff --git a/src/test/resources/tosca/guard2-policy-payload.json b/src/test/resources/tosca/guard2-policy-payload.json new file mode 100644 index 000000000..89f7ec89c --- /dev/null +++ b/src/test/resources/tosca/guard2-policy-payload.json @@ -0,0 +1,16 @@ +{ + "policy-id": "guard2", + "contents": { + "recipe": "Migrate", + "actor": "SO", + "clname": "testloop", + "guardTargets": ".*", + "minGuard": "1", + "maxGuard": "2", + "limitGuard": "", + "timeUnitsGuard": "", + "timeWindowGuard": "", + "guardActiveStart": "00:00:01-05:00", + "guardActiveEnd": "23:59:01-05:00" + } +} \ No newline at end of file diff --git a/src/test/resources/tosca/operational-policy-payload.yaml b/src/test/resources/tosca/operational-policy-payload.yaml new file mode 100644 index 000000000..68116b00b --- /dev/null +++ b/src/test/resources/tosca/operational-policy-payload.yaml @@ -0,0 +1,31 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0 +topology_template: + policies: + - testPolicy: + type: onap.policies.controlloop.Operational + version: 1.0.0 + metadata: {policy-id: testPolicy} + properties: + controlLoop: {controlLoopName: control loop, version: 2.0.0, trigger_policy: new1, + timeout: '30', abatement: 'true'} + policies: + - id: new1 + recipe: Rebuild + retry: '10' + timeout: '20' + actor: SO + payload: test + success: new2 + failure: new2 + failure_timeout: new2 + failure_retries: new2 + failure_exception: new2 + failure_guard: new2 + target: {type: VFC, resourceTargetId: test} + - id: new2 + recipe: Migrate + retry: '30' + timeout: '40' + actor: SDNC + payload: test + target: {type: VFC, resourceTargetId: test} diff --git a/src/test/resources/tosca/operational-policy-properties.json b/src/test/resources/tosca/operational-policy-properties.json new file mode 100644 index 000000000..503616593 --- /dev/null +++ b/src/test/resources/tosca/operational-policy-properties.json @@ -0,0 +1,71 @@ +{ + "guard_policies": { + "guard1":{ + "recipe": "Rebuild", + "actor": "SO", + "clname": "testloop", + "guardTargets": ".*", + "minGuard": "3", + "maxGuard": "7", + "limitGuard": "", + "timeUnitsGuard": "", + "timeWindowGuard": "", + "guardActiveStart": "00:00:01-05:00", + "guardActiveEnd": "23:59:01-05:00" + }, + "guard2":{ + "recipe": "Migrate", + "actor": "SO", + "clname": "testloop", + "guardTargets": ".*", + "minGuard": "1", + "maxGuard": "2", + "limitGuard": "", + "timeUnitsGuard": "", + "timeWindowGuard": "", + "guardActiveStart": "00:00:01-05:00", + "guardActiveEnd": "23:59:01-05:00" + } + }, + "operational_policy": { + "controlLoop": { + "controlLoopName": "control loop", + "version": "2.0.0", + "trigger_policy": "new1", + "timeout": "30", + "abatement": "true" + }, + "policies": [ + { + "id": "new1", + "recipe": "Rebuild", + "retry": "10", + "timeout": "20", + "actor": "SO", + "payload": "test", + "success": "new2", + "failure": "new2", + "failure_timeout": "new2", + "failure_retries": "new2", + "failure_exception": "new2", + "failure_guard": "new2", + "target": { + "type": "VFC", + "resourceTargetId": "test" + } + }, + { + "id": "new2", + "recipe": "Migrate", + "retry": "30", + "timeout": "40", + "actor": "SDNC", + "payload": "test", + "target": { + "type": "VFC", + "resourceTargetId": "test" + } + } + ] + } +} -- cgit 1.2.3-korg From 584cc4a3f093edc5cdbdff0dcb5dcbe8457e197d Mon Sep 17 00:00:00 2001 From: sebdet Date: Fri, 3 May 2019 14:32:53 +0200 Subject: Fix log reporting Fix loop log reported in UI, in case of failure it's not working correclty Issue-ID: CLAMP-360 Change-Id: I4533c650134b254619523d8c9cfe2791e9b6584b Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 2 +- src/main/java/org/onap/clamp/loop/log/LoopLog.java | 2 +- src/main/resources/clds/camel/rest/clamp-api-v2.xml | 8 ++++---- src/main/resources/clds/camel/routes/flexible-flow.xml | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 3c261eb4f..da39ca5fe 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -9,7 +9,7 @@ id bigint not null, log_instant datetime(6) not null, log_type varchar(255) not null, - message varchar(255) not null, + message MEDIUMTEXT not null, loop_id varchar(255) not null, primary key (id) ) engine=InnoDB; diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLog.java b/src/main/java/org/onap/clamp/loop/log/LoopLog.java index 3edb2ee59..cea495712 100644 --- a/src/main/java/org/onap/clamp/loop/log/LoopLog.java +++ b/src/main/java/org/onap/clamp/loop/log/LoopLog.java @@ -69,7 +69,7 @@ public class LoopLog implements Serializable { private LogType logType; @Expose - @Column(name = "message", nullable = false) + @Column(name = "message", columnDefinition = "MEDIUMTEXT", nullable = false) private String message; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml index 5c5f122cd..4c1cd8126 100644 --- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml @@ -286,7 +286,7 @@ loggingLevel="ERROR" message="STOP request failed for loop: $${header.loopName}" /> + uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" /> @@ -331,7 +331,7 @@ loggingLevel="ERROR" message="START request failed for loop: ${header.loopName}" /> + uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('START request failed, Error reported: ${exception}','INFO',${exchangeProperty[loopObject]})" /> @@ -439,7 +439,7 @@ loggingLevel="ERROR" message="SUBMIT request failed for loop: ${header.loopName}" /> + uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" /> @@ -521,7 +521,7 @@ loggingLevel="ERROR" message="DELETE request failed for loop: ${header.loopName}" /> + uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" /> diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml index 75341de93..1ae6e3d96 100644 --- a/src/main/resources/clds/camel/routes/flexible-flow.xml +++ b/src/main/resources/clds/camel/routes/flexible-flow.xml @@ -478,8 +478,7 @@ false - ${exchangeProperty[policyName]} PDP Group removal status - + PDP Group removal, Error reported: ${exception} @@ -500,7 +499,8 @@ + + uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO',${exchangeProperty[loopObject]})" /> \ No newline at end of file -- cgit 1.2.3-korg From 09bc8450b2b0c4f60eb4a241efc548d13c5c9912 Mon Sep 17 00:00:00 2001 From: sebdet Date: Thu, 23 May 2019 17:34:07 +0200 Subject: Rework the loop state Rework the state loop so there is no bug in the loop state anymore, now the components are scanned + upgrade to 4.0.4 Issue-ID: CLAMP-384 Change-Id: If7649238ee52864c84bfb9b6b8471d1738752e29 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 1 + pom.xml | 9 +- src/main/java/org/onap/clamp/clds/Application.java | 57 +- .../onap/clamp/clds/config/CamelConfiguration.java | 7 +- .../clds/model/dcae/DcaeInventoryResponse.java | 5 + .../org/onap/clamp/clds/model/dcae/DcaeLinks.java | 60 ++ .../model/dcae/DcaeOperationStatusResponse.java | 88 +++ src/main/java/org/onap/clamp/loop/Loop.java | 92 ++- .../java/org/onap/clamp/loop/LoopOperation.java | 265 --------- src/main/java/org/onap/clamp/loop/LoopService.java | 15 +- .../loop/components/external/DcaeComponent.java | 162 ++++++ .../components/external/ExternalComponent.java | 61 ++ .../external/ExternalComponentState.java | 61 ++ .../loop/components/external/PolicyComponent.java | 123 ++++ src/main/java/org/onap/clamp/loop/log/LoopLog.java | 31 +- .../org/onap/clamp/loop/log/LoopLogService.java | 6 +- .../resources/designer/modeler/dist/index.html | 8 +- .../resources/designer/scripts/CldsModelService.js | 75 +-- .../META-INF/resources/designer/scripts/app.js | 28 +- .../designer/scripts/propertyController.js | 30 +- .../resources/clds/camel/rest/clamp-api-v2.xml | 64 +-- .../resources/clds/camel/routes/dcae-flows.xml | 187 ++++++ .../resources/clds/camel/routes/flexible-flow.xml | 638 --------------------- .../resources/clds/camel/routes/loop-flows.xml | 250 ++++++++ .../resources/clds/camel/routes/policy-flows.xml | 476 +++++++++++++++ .../resources/clds/camel/routes/utils-flows.xml | 17 + .../org/onap/clamp/loop/CsarInstallerItCase.java | 5 +- .../org/onap/clamp/loop/DcaeComponentTest.java | 93 +++ .../onap/clamp/loop/LoopOperationTestItCase.java | 244 -------- .../onap/clamp/loop/LoopRepositoriesItCase.java | 6 +- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 2 +- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 13 +- src/test/javascript/propertyController.test.js | 12 - src/test/resources/http-cache/third_party_proxy.py | 69 ++- src/test/resources/https/https-test.properties | 1 + 35 files changed, 1854 insertions(+), 1407 deletions(-) create mode 100644 src/main/java/org/onap/clamp/clds/model/dcae/DcaeLinks.java create mode 100644 src/main/java/org/onap/clamp/clds/model/dcae/DcaeOperationStatusResponse.java delete mode 100644 src/main/java/org/onap/clamp/loop/LoopOperation.java create mode 100644 src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java create mode 100644 src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java create mode 100644 src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java create mode 100644 src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java create mode 100644 src/main/resources/clds/camel/routes/dcae-flows.xml create mode 100644 src/main/resources/clds/camel/routes/loop-flows.xml create mode 100644 src/main/resources/clds/camel/routes/policy-flows.xml create mode 100644 src/main/resources/clds/camel/routes/utils-flows.xml create mode 100644 src/test/java/org/onap/clamp/loop/DcaeComponentTest.java delete mode 100644 src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index da39ca5fe..121c5e689 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -7,6 +7,7 @@ create table loop_logs ( id bigint not null, + log_component varchar(255) not null, log_instant datetime(6) not null, log_type varchar(255) not null, message MEDIUMTEXT not null, diff --git a/pom.xml b/pom.xml index 4fdbea37b..df8b0e27a 100644 --- a/pom.xml +++ b/pom.xml @@ -61,12 +61,9 @@ UTF-8 UTF-8 - git-server - 1.8 - 1.0.0 - 2.23.2 - 2.1.4.RELEASE + 2.24.0 + 2.1.5.RELEASE jacoco ${project.build.directory}/surefire-reports @@ -89,7 +86,7 @@ true false - 9.0.16 + 9.0.20 diff --git a/src/main/java/org/onap/clamp/clds/Application.java b/src/main/java/org/onap/clamp/clds/Application.java index f6dfdc0c3..bac328d6d 100644 --- a/src/main/java/org/onap/clamp/clds/Application.java +++ b/src/main/java/org/onap/clamp/clds/Application.java @@ -29,15 +29,21 @@ import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import java.io.IOException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Enumeration; import org.apache.catalina.connector.Connector; import org.onap.clamp.clds.model.properties.Holmes; import org.onap.clamp.clds.model.properties.ModelProperties; import org.onap.clamp.clds.util.ClampVersioning; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @@ -51,6 +57,7 @@ import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @@ -82,6 +89,9 @@ public class Application extends SpringBootServletInitializer { @Value("${server.ssl.key-store:none}") private String sslKeystoreFile; + @Autowired + private Environment env; + @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); @@ -102,14 +112,15 @@ public class Application extends SpringBootServletInitializer { * This method is used to declare the camel servlet. * * @return A servlet bean - * @throws IOException IO Exception + * @throws IOException + * IO Exception */ @Bean public ServletRegistrationBean camelServletRegistrationBean() throws IOException { - eelfLogger.info(ResourceFileUtil.getResourceAsString("boot-message.txt") + "(v" - + ClampVersioning.getCldsVersionFromProps() + ")" + System.getProperty("line.separator")); - ServletRegistrationBean registration = new ServletRegistrationBean(new ClampServlet(), - "/restservices/clds/*"); + eelfLogger.info( + ResourceFileUtil.getResourceAsString("boot-message.txt") + "(v" + ClampVersioning.getCldsVersionFromProps() + + ")" + System.getProperty("line.separator") + getSslExpirationDate()); + ServletRegistrationBean registration = new ServletRegistrationBean(new ClampServlet(), "/restservices/clds/*"); registration.setName("CamelServlet"); return registration; } @@ -135,9 +146,8 @@ public class Application extends SpringBootServletInitializer { private Connector createRedirectConnector(int redirectSecuredPort) { if (redirectSecuredPort <= 0) { - eelfLogger.warn( - "HTTP port redirection to HTTPS is disabled because the HTTPS port is 0 (random port) or -1" - + " (Connector disabled)"); + eelfLogger.warn("HTTP port redirection to HTTPS is disabled because the HTTPS port is 0 (random port) or -1" + + " (Connector disabled)"); return null; } Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); @@ -147,4 +157,33 @@ public class Application extends SpringBootServletInitializer { connector.setRedirectPort(redirectSecuredPort); return connector; } + + private String getSslExpirationDate() throws IOException { + StringBuilder result = new StringBuilder(" :: SSL Certificates :: "); + try { + if (env.getProperty("server.ssl.key-store") != null) { + + KeyStore keystore = KeyStore.getInstance(env.getProperty("server.ssl.key-store-type")); + keystore.load( + ResourceFileUtil + .getResourceAsStream(env.getProperty("server.ssl.key-store").replaceAll("classpath:", "")), + env.getProperty("server.ssl.key-store-password").toCharArray()); + Enumeration aliases = keystore.aliases(); + while (aliases.hasMoreElements()) { + String alias = aliases.nextElement(); + if ("X.509".equals(keystore.getCertificate(alias).getType())) { + result.append("* " + alias + " expires " + + ((X509Certificate) keystore.getCertificate(alias)).getNotAfter() + + System.getProperty("line.separator")); + } + } + } else { + result.append("* NONE HAS been configured"); + } + } catch (CertificateException | NoSuchAlgorithmException | KeyStoreException e) { + eelfLogger.warn("SSL certificate access error ", e); + + } + return result.toString(); + } } diff --git a/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java b/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java index 3dc807388..271dc84ff 100644 --- a/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java @@ -63,13 +63,13 @@ public class CamelConfiguration extends RouteBuilder { private void configureDefaultSslProperties() { if (env.getProperty("server.ssl.trust-store") != null) { - URL storeResource = CamelConfiguration.class + URL storeResource = Thread.currentThread().getContextClassLoader() .getResource(env.getProperty("server.ssl.trust-store").replaceAll("classpath:", "")); System.setProperty("javax.net.ssl.trustStore", storeResource.getPath()); System.setProperty("javax.net.ssl.trustStorePassword", env.getProperty("server.ssl.trust-store-password")); System.setProperty("javax.net.ssl.trustStoreType", "jks"); System.setProperty("ssl.TrustManagerFactory.algorithm", "PKIX"); - storeResource = CamelConfiguration.class + storeResource = Thread.currentThread().getContextClassLoader() .getResource(env.getProperty("server.ssl.key-store").replaceAll("classpath:", "")); System.setProperty("javax.net.ssl.keyStore", storeResource.getPath()); System.setProperty("javax.net.ssl.keyStorePassword", env.getProperty("server.ssl.key-store-password")); @@ -82,7 +82,7 @@ public class CamelConfiguration extends RouteBuilder { if (env.getProperty("server.ssl.trust-store") != null) { KeyStore truststore = KeyStore.getInstance("JKS"); truststore.load( - getClass().getClassLoader() + Thread.currentThread().getContextClassLoader() .getResourceAsStream(env.getProperty("server.ssl.trust-store").replaceAll("classpath:", "")), env.getProperty("server.ssl.trust-store-password").toCharArray()); @@ -118,6 +118,7 @@ public class CamelConfiguration extends RouteBuilder { .apiContextPath("api-doc").apiVendorExtension(true).apiProperty("api.title", "Clamp Rest API") .apiProperty("api.version", ClampVersioning.getCldsVersionFromProps()) .apiProperty("base.path", "/restservices/clds/"); + // camelContext.setTracing(true); configureDefaultSslProperties(); diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java index 74582a865..972450665 100644 --- a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java +++ b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java @@ -24,12 +24,17 @@ package org.onap.clamp.clds.model.dcae; +import com.google.gson.annotations.Expose; + /** * This class maps the DCAE inventory answer to a nice pojo. */ public class DcaeInventoryResponse { + @Expose private String typeName; + + @Expose private String typeId; public String getTypeName() { diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeLinks.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeLinks.java new file mode 100644 index 000000000..368e1b8e6 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeLinks.java @@ -0,0 +1,60 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.model.dcae; + +import com.google.gson.annotations.Expose; + +public class DcaeLinks { + @Expose + private String self; + @Expose + private String status; + @Expose + private String uninstall; + + public String getSelf() { + return self; + } + + public void setSelf(String self) { + this.self = self; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getUninstall() { + return uninstall; + } + + public void setUninstall(String uninstall) { + this.uninstall = uninstall; + } + +} diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeOperationStatusResponse.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeOperationStatusResponse.java new file mode 100644 index 000000000..aee7d0613 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeOperationStatusResponse.java @@ -0,0 +1,88 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.model.dcae; + +import com.google.gson.annotations.Expose; + +/** + * This class maps the DCAE deployment handler response to a nice pojo. + */ +public class DcaeOperationStatusResponse { + + @Expose + private String operationType; + + @Expose + private String status; + + @Expose + private String requestId; + + @Expose + private String error; + + @Expose + private DcaeLinks links; + + public String getOperationType() { + return operationType; + } + + public void setOperationType(String operationType) { + this.operationType = operationType; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + public DcaeLinks getLinks() { + return links; + } + + public void setLinks(DcaeLinks links) { + this.links = links; + } + +} diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 6de2863ea..2393f2498 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -23,18 +23,16 @@ package org.onap.clamp.loop; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import java.io.Serializable; -import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; -import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -47,14 +45,17 @@ import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; -import javax.persistence.OrderBy; import javax.persistence.Table; import javax.persistence.Transient; +import org.hibernate.annotations.SortNatural; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; +import org.onap.clamp.loop.components.external.DcaeComponent; +import org.onap.clamp.loop.components.external.ExternalComponent; +import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -69,9 +70,6 @@ public class Loop implements Serializable { */ private static final long serialVersionUID = -286522707701388642L; - @Transient - private static final EELFLogger logger = EELFManager.getInstance().getLogger(Loop.class); - @Id @Expose @Column(nullable = false, name = "name", unique = true) @@ -110,6 +108,10 @@ public class Loop implements Serializable { @Enumerated(EnumType.STRING) private LoopState lastComputedState; + @Expose + @Transient + private final Map components = new HashMap<>(); + @Expose @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop") private Set operationalPolicies = new HashSet<>(); @@ -121,10 +123,16 @@ public class Loop implements Serializable { @Expose @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop") - @OrderBy("id DESC") - private Set loopLogs = new HashSet<>(); + @SortNatural + private SortedSet loopLogs = new TreeSet<>(); + + private void initializeExternalComponents() { + this.addComponent(new PolicyComponent()); + this.addComponent(new DcaeComponent()); + } public Loop() { + initializeExternalComponents(); } /** @@ -136,6 +144,7 @@ public class Loop implements Serializable { this.blueprint = blueprint; this.lastComputedState = LoopState.DESIGN; this.globalPropertiesJson = new JsonObject(); + initializeExternalComponents(); } public String getName() { @@ -214,7 +223,7 @@ public class Loop implements Serializable { return loopLogs; } - void setLoopLogs(Set loopLogs) { + void setLoopLogs(SortedSet loopLogs) { this.loopLogs = loopLogs; } @@ -228,9 +237,9 @@ public class Loop implements Serializable { microServicePolicy.getUsedByLoops().add(this); } - void addLog(LoopLog log) { - loopLogs.add(log); + public void addLog(LoopLog log) { log.setLoop(this); + this.loopLogs.add(log); } public String getDcaeBlueprintId() { @@ -249,6 +258,18 @@ public class Loop implements Serializable { this.modelPropertiesJson = modelPropertiesJson; } + public Map getComponents() { + return components; + } + + public ExternalComponent getComponent(String componentName) { + return this.components.get(componentName); + } + + public void addComponent(ExternalComponent component) { + this.components.put(component.getComponentName(), component); + } + /** * Generate the loop name. * @@ -269,47 +290,6 @@ public class Loop implements Serializable { return buffer.toString().replace('.', '_').replaceAll(" ", ""); } - /** - * Generates the Json that must be sent to policy to add all policies to Active - * PDP group. - * - * @return The json, payload to send - */ - public String createPoliciesPayloadPdpGroup() { - JsonObject jsonObject = new JsonObject(); - JsonArray jsonArray = new JsonArray(); - jsonObject.add("policies", jsonArray); - - for (String policyName : this.listPolicyNamesPdpGroup()) { - JsonObject policyNode = new JsonObject(); - jsonArray.add(policyNode); - policyNode.addProperty("policy-id", policyName); - } - String payload = new GsonBuilder().setPrettyPrinting().create().toJson(jsonObject); - logger.info("PdpGroup policy payload: " + payload); - return payload; - } - - /** - * Generates the list of policy names that must be send/remove to/from active - * PDP group. - * - * @return A list of policy names - */ - public List listPolicyNamesPdpGroup() { - List policyNamesList = new ArrayList<>(); - for (OperationalPolicy opPolicy : this.getOperationalPolicies()) { - policyNamesList.add(opPolicy.getName()); - for (String guardName : opPolicy.createGuardPolicyPayloads().keySet()) { - policyNamesList.add(guardName); - } - } - for (MicroServicePolicy microServicePolicy : this.getMicroServicePolicies()) { - policyNamesList.add(microServicePolicy.getName()); - } - return policyNamesList; - } - @Override public int hashCode() { final int prime = 31; diff --git a/src/main/java/org/onap/clamp/loop/LoopOperation.java b/src/main/java/org/onap/clamp/loop/LoopOperation.java deleted file mode 100644 index 87effa5fd..000000000 --- a/src/main/java/org/onap/clamp/loop/LoopOperation.java +++ /dev/null @@ -1,265 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.loop; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.google.gson.JsonObject; - -import java.io.IOException; -import java.util.Iterator; -import java.util.Set; -import java.util.UUID; - -import org.apache.camel.Exchange; -import org.apache.camel.Message; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.onap.clamp.policy.operational.OperationalPolicy; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * Closed loop operations. - */ -@Component -public class LoopOperation { - - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopOperation.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger(); - private static final String DCAE_LINK_FIELD = "links"; - private static final String DCAE_STATUS_FIELD = "status"; - private static final String DCAE_SERVICETYPE_ID = "serviceTypeId"; - private static final String DCAE_INPUTS = "inputs"; - private static final String DCAE_DEPLOYMENT_PREFIX = "CLAMP_"; - private static final String DEPLOYMENT_PARA = "dcaeDeployParameters"; - private final LoopService loopService; - - public enum TempLoopState { - NOT_SUBMITTED, SUBMITTED, DEPLOYED, NOT_DEPLOYED, PROCESSING, IN_ERROR; - } - - /** - * The constructor. - * - * @param loopService - * The loop service - * @param refProp - * The clamp properties - */ - @Autowired - public LoopOperation(LoopService loopService) { - this.loopService = loopService; - } - - /** - * Get the payload used to send the deploy closed loop request. - * - * @param loop - * The loop - * @return The payload used to send deploy closed loop request - * @throws IOException - * IOException - */ - public String getDeployPayload(Loop loop) throws IOException { - JsonObject globalProp = loop.getGlobalPropertiesJson(); - JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARA); - - String serviceTypeId = loop.getDcaeBlueprintId(); - - JsonObject rootObject = new JsonObject(); - rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId); - if (deploymentProp != null) { - rootObject.add(DCAE_INPUTS, deploymentProp); - } - String apiBodyString = rootObject.toString(); - logger.info("Dcae api Body String - " + apiBodyString); - - return apiBodyString; - } - - /** - * Get the deployment id. - * - * @param loop - * The loop - * @return The deployment id - * @throws IOException - * IOException - */ - public String getDeploymentId(Loop loop) { - // Set the deploymentId if not present yet - String deploymentId = ""; - // If model is already deployed then pass same deployment id - if (loop.getDcaeDeploymentId() != null && !loop.getDcaeDeploymentId().isEmpty()) { - deploymentId = loop.getDcaeDeploymentId(); - } else { - deploymentId = DCAE_DEPLOYMENT_PREFIX + UUID.randomUUID(); - } - return deploymentId; - } - - /** - * Update the loop info. - * - * @param camelExchange - * The camel exchange - * @param loop - * The loop - * @param deploymentId - * The deployment id - * @throws ParseException - * The parse exception - */ - public void updateLoopInfo(Exchange camelExchange, Loop loop, String deploymentId) throws ParseException { - Message in = camelExchange.getIn(); - String msg = in.getBody(String.class); - - JSONParser parser = new JSONParser(); - Object obj0 = parser.parse(msg); - JSONObject jsonObj = (JSONObject) obj0; - - JSONObject linksObj = (JSONObject) jsonObj.get(DCAE_LINK_FIELD); - String statusUrl = (String) linksObj.get(DCAE_STATUS_FIELD); - - if (deploymentId == null) { - loop.setDcaeDeploymentId(null); - loop.setDcaeDeploymentStatusUrl(null); - } else { - loop.setDcaeDeploymentId(deploymentId); - loop.setDcaeDeploymentStatusUrl(statusUrl.replaceAll("http:", "http4:").replaceAll("https:", "https4:")); - } - loopService.saveOrUpdateLoop(loop); - } - - /** - * Get the Closed Loop status based on the reply from Policy. - * - * @param statusCode - * The status code - * @return The state based on policy response - * @throws ParseException - * The parse exception - */ - public String analysePolicyResponse(int statusCode) { - if (statusCode == 200) { - return TempLoopState.SUBMITTED.toString(); - } else if (statusCode == 404) { - return TempLoopState.NOT_SUBMITTED.toString(); - } - return TempLoopState.IN_ERROR.toString(); - } - - /** - * Get the name of the first Operational policy. - * - * @param loop - * The closed loop - * @return The name of the first operational policy - */ - public String getOperationalPolicyName(Loop loop) { - Set opSet = loop.getOperationalPolicies(); - Iterator iterator = opSet.iterator(); - while (iterator.hasNext()) { - OperationalPolicy policy = iterator.next(); - return policy.getName(); - } - return null; - } - - /** - * Get the Closed Loop status based on the reply from DCAE. - * - * @param camelExchange - * The camel exchange - * @return The state based on DCAE response - * @throws ParseException - * The parse exception - */ - public String analyseDcaeResponse(Exchange camelExchange, Integer statusCode) throws ParseException { - if (statusCode == null) { - return TempLoopState.NOT_DEPLOYED.toString(); - } - if (statusCode == 200) { - Message in = camelExchange.getIn(); - String msg = in.getBody(String.class); - - JSONParser parser = new JSONParser(); - Object obj0 = parser.parse(msg); - JSONObject jsonObj = (JSONObject) obj0; - - String opType = (String) jsonObj.get("operationType"); - String status = (String) jsonObj.get("status"); - - // status = processing/successded/failed - if (status.equals("succeeded")) { - if (opType.equals("install")) { - return TempLoopState.DEPLOYED.toString(); - } else if (opType.equals("uninstall")) { - return TempLoopState.NOT_DEPLOYED.toString(); - } - } else if (status.equals("processing")) { - return TempLoopState.PROCESSING.toString(); - } - } else if (statusCode == 404) { - return TempLoopState.NOT_DEPLOYED.toString(); - } - return TempLoopState.IN_ERROR.toString(); - } - - /** - * Update the status of the closed loop based on the response from Policy and - * DCAE. - * - * @param loop - * The closed loop - * @param policyState - * The state get from Policy - * @param dcaeState - * The state get from DCAE - * @throws ParseException - * The parse exception - */ - public LoopState updateLoopStatus(Loop loop, TempLoopState policyState, TempLoopState dcaeState) { - LoopState clState = LoopState.IN_ERROR; - if (policyState == TempLoopState.SUBMITTED) { - if (dcaeState == TempLoopState.DEPLOYED) { - clState = LoopState.DEPLOYED; - } else if (dcaeState == TempLoopState.PROCESSING) { - clState = LoopState.WAITING; - } else if (dcaeState == TempLoopState.NOT_DEPLOYED) { - clState = LoopState.SUBMITTED; - } - } else if (policyState == TempLoopState.NOT_SUBMITTED) { - if (dcaeState == TempLoopState.NOT_DEPLOYED) { - clState = LoopState.DESIGN; - } - } - loop.setLastComputedState(clState); - loopService.saveOrUpdateLoop(loop); - return clState; - } - -} diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java index 4c1392253..d1ab0e396 100644 --- a/src/main/java/org/onap/clamp/loop/LoopService.java +++ b/src/main/java/org/onap/clamp/loop/LoopService.java @@ -71,6 +71,17 @@ public class LoopService { loopsRepository.deleteById(loopName); } + public void updateDcaeDeploymentFields(Loop loop, String deploymentId, String deploymentUrl) { + loop.setDcaeDeploymentId(deploymentId); + loop.setDcaeDeploymentStatusUrl(deploymentUrl); + loopsRepository.save(loop); + } + + public void updateLoopState(Loop loop, String newState) { + loop.setLastComputedState(LoopState.valueOf(newState)); + loopsRepository.save(loop); + } + Loop updateAndSaveOperationalPolicies(String loopName, List newOperationalPolicies) { Loop loop = findClosedLoopByName(loopName); Set newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies); @@ -93,9 +104,7 @@ public class LoopService { MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) { Loop loop = findClosedLoopByName(loopName); - MicroServicePolicy newPolicies = microservicePolicyService.getAndUpdateMicroServicePolicy(loop, - newMicroservicePolicy); - return newPolicies; + return microservicePolicyService.getAndUpdateMicroServicePolicy(loop, newMicroservicePolicy); } private Loop findClosedLoopByName(String loopName) { diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java new file mode 100644 index 000000000..35b3a454b --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java @@ -0,0 +1,162 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.components.external; + +import com.google.gson.JsonObject; + +import java.util.UUID; + +import org.apache.camel.Exchange; +import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; +import org.onap.clamp.clds.util.JsonUtils; +import org.onap.clamp.loop.Loop; + +public class DcaeComponent extends ExternalComponent { + + private static final String DCAE_DEPLOYMENT_PREFIX = "CLAMP_"; + private static final String DEPLOYMENT_PARAMETER = "dcaeDeployParameters"; + private static final String DCAE_SERVICETYPE_ID = "serviceTypeId"; + private static final String DCAE_INPUTS = "inputs"; + + public static final ExternalComponentState BLUEPRINT_DEPLOYED = new ExternalComponentState("BLUEPRINT_DEPLOYED", + "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop"); + public static final ExternalComponentState PROCESSING_MICROSERVICE_INSTALLATION = new ExternalComponentState( + "PROCESSING_MICROSERVICE_INSTALLATION", + "Clamp has requested DCAE to install the microservices defined in the DCAE blueprint and it's currently processing the request"); + public static final ExternalComponentState MICROSERVICE_INSTALLATION_FAILED = new ExternalComponentState( + "MICROSERVICE_INSTALLATION_FAILED", + "Clamp has requested DCAE to install the microservices defined in the DCAE blueprint and it failed"); + public static final ExternalComponentState MICROSERVICE_INSTALLED_SUCCESSFULLY = new ExternalComponentState( + "MICROSERVICE_INSTALLED_SUCCESSFULLY", + "Clamp has requested DCAE to install the DCAE blueprint and it has been installed successfully"); + public static final ExternalComponentState PROCESSING_MICROSERVICE_UNINSTALLATION = new ExternalComponentState( + "PROCESSING_MICROSERVICE_UNINSTALLATION", + "Clamp has requested DCAE to uninstall the microservices defined in the DCAE blueprint and it's currently processing the request"); + public static final ExternalComponentState MICROSERVICE_UNINSTALLATION_FAILED = new ExternalComponentState( + "MICROSERVICE_UNINSTALLATION_FAILED", + "Clamp has requested DCAE to uninstall the microservices defined in the DCAE blueprint and it failed"); + public static final ExternalComponentState MICROSERVICE_UNINSTALLED_SUCCESSFULLY = new ExternalComponentState( + "MICROSERVICE_UNINSTALLED_SUCCESSFULLY", + "Clamp has requested DCAE to uninstall the DCAE blueprint and it has been uninstalled successfully"); + public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR", + "There was an error during the request done to DCAE, look at the logs or try again"); + + public DcaeComponent() { + super(BLUEPRINT_DEPLOYED); + } + + @Override + public String getComponentName() { + return "DCAE"; + } + + public static DcaeOperationStatusResponse convertDcaeResponse(String responseBody) { + if (responseBody != null && !responseBody.isEmpty()) { + return JsonUtils.GSON_JPA_MODEL.fromJson(responseBody, DcaeOperationStatusResponse.class); + } else { + return null; + } + } + + /** + * Generate the deployment id, it's random + * + * @return The deployment id + */ + public static String generateDeploymentId() { + return DCAE_DEPLOYMENT_PREFIX + UUID.randomUUID(); + } + + /** + * This method prepare the url returned by DCAE to check the status if fine. + * + * @param statusUrl + * @return the Right Url modified if needed + */ + public static String getStatusUrl(DcaeOperationStatusResponse dcaeResponse) { + return dcaeResponse.getLinks().getStatus().replaceAll("http:", "http4:").replaceAll("https:", "https4:"); + } + + /** + * Return the deploy payload for DCAE. + * + * @param loop + * The loop object + * @return The payload used to send deploy closed loop request + */ + public static String getDeployPayload(Loop loop) { + JsonObject globalProp = loop.getGlobalPropertiesJson(); + JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER); + + String serviceTypeId = loop.getDcaeBlueprintId(); + + JsonObject rootObject = new JsonObject(); + rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId); + if (deploymentProp != null) { + rootObject.add(DCAE_INPUTS, deploymentProp); + } + return rootObject.toString(); + } + + /** + * Return the uninstallation payload for DCAE. + * + * @param loop + * The loop object + * @return The payload in string (json) + */ + public static String getUndeployPayload(Loop loop) { + JsonObject rootObject = new JsonObject(); + rootObject.addProperty(DCAE_SERVICETYPE_ID, loop.getDcaeBlueprintId()); + return rootObject.toString(); + } + + @Override + public ExternalComponentState computeState(Exchange camelExchange) { + + DcaeOperationStatusResponse dcaeResponse = (DcaeOperationStatusResponse) camelExchange.getIn().getExchange() + .getProperty("dcaeResponse"); + + if (dcaeResponse == null) { + setState(BLUEPRINT_DEPLOYED); + } else if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus().equals("succeeded")) { + setState(MICROSERVICE_INSTALLED_SUCCESSFULLY); + } else if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus().equals("processing")) { + setState(PROCESSING_MICROSERVICE_INSTALLATION); + } else if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus().equals("failed")) { + setState(MICROSERVICE_INSTALLATION_FAILED); + } else if (dcaeResponse.getOperationType().equals("uninstall") + && dcaeResponse.getStatus().equals("succeeded")) { + setState(MICROSERVICE_UNINSTALLED_SUCCESSFULLY); + } else if (dcaeResponse.getOperationType().equals("uninstall") + && dcaeResponse.getStatus().equals("processing")) { + setState(PROCESSING_MICROSERVICE_UNINSTALLATION); + } else if (dcaeResponse.getOperationType().equals("uninstall") && dcaeResponse.getStatus().equals("failed")) { + setState(MICROSERVICE_UNINSTALLATION_FAILED); + } else { + setState(IN_ERROR); + } + return this.getState(); + } +} diff --git a/src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java b/src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java new file mode 100644 index 000000000..a8aae2038 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java @@ -0,0 +1,61 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.components.external; + +import com.google.gson.annotations.Expose; + +import org.apache.camel.Exchange; + +/** + * + * SHould be abstract but Gson can't instantiate it if it's an abstract + * + */ +public class ExternalComponent { + @Expose + private ExternalComponentState componentState; + + public void setState(ExternalComponentState newState) { + this.componentState = newState; + } + + public ExternalComponentState getState() { + return this.componentState; + } + + public String getComponentName() { + return null; + } + + public ExternalComponentState computeState(Exchange camelExchange) { + return new ExternalComponentState("INIT", "no desc"); + } + + public ExternalComponent(ExternalComponentState initialState) { + setState(initialState); + } + + public ExternalComponent() { + } +} diff --git a/src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java b/src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java new file mode 100644 index 000000000..6a723c24e --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java @@ -0,0 +1,61 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.components.external; + +import com.google.gson.annotations.Expose; + +/** + * This is a transient state reflecting the deployment status of a component. It + * can be Policy, DCAE, or whatever... This is object is generic. Clamp is now + * stateless, so it triggers the different components at runtime, the status per + * component is stored here. + * + */ +public class ExternalComponentState { + @Expose + private String stateName; + @Expose + private String description; + + public ExternalComponentState(String stateName, String description) { + this.stateName = stateName; + this.description = description; + } + + public ExternalComponentState() { + } + + public String getStateName() { + return stateName; + } + + public String getDescription() { + return description; + } + + @Override + public String toString() { + return stateName; + } +} diff --git a/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java b/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java new file mode 100644 index 000000000..acd6115fe --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java @@ -0,0 +1,123 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.components.external; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Transient; + +import org.apache.camel.Exchange; +import org.onap.clamp.loop.Loop; +import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.policy.operational.OperationalPolicy; + +public class PolicyComponent extends ExternalComponent { + + @Transient + private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyComponent.class); + + public static final ExternalComponentState NOT_SENT = new ExternalComponentState("NOT_SENT", + "The policies defined have NOT yet been created on the policy engine"); + public static final ExternalComponentState SENT = new ExternalComponentState("SENT", + "The policies defined have been created but NOT deployed on the policy engine"); + public static final ExternalComponentState SENT_AND_DEPLOYED = new ExternalComponentState("SENT_AND_DEPLOYED", + "The policies defined have been created and deployed on the policy engine"); + public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR", + "There was an error during the sending to policy, the policy engine may be corrupted or inconsistent"); + + public PolicyComponent() { + super(NOT_SENT); + } + + @Override + public String getComponentName() { + return "POLICY"; + } + + /** + * Generates the Json that must be sent to policy to add all policies to Active + * PDP group. + * + * @return The json, payload to send + */ + public static String createPoliciesPayloadPdpGroup(Loop loop) { + JsonObject jsonObject = new JsonObject(); + JsonArray jsonArray = new JsonArray(); + jsonObject.add("policies", jsonArray); + + for (String policyName : PolicyComponent.listPolicyNamesPdpGroup(loop)) { + JsonObject policyNode = new JsonObject(); + jsonArray.add(policyNode); + policyNode.addProperty("policy-id", policyName); + } + String payload = new GsonBuilder().setPrettyPrinting().create().toJson(jsonObject); + logger.info("PdpGroup policy payload: " + payload); + return new GsonBuilder().setPrettyPrinting().create().toJson(jsonObject); + } + + /** + * Generates the list of policy names that must be send/remove to/from active + * PDP group. + * + * @return A list of policy names + */ + public static List listPolicyNamesPdpGroup(Loop loop) { + List policyNamesList = new ArrayList<>(); + for (OperationalPolicy opPolicy : loop.getOperationalPolicies()) { + policyNamesList.add(opPolicy.getName()); + for (String guardName : opPolicy.createGuardPolicyPayloads().keySet()) { + policyNamesList.add(guardName); + } + } + for (MicroServicePolicy microServicePolicy : loop.getMicroServicePolicies()) { + policyNamesList.add(microServicePolicy.getName()); + } + return policyNamesList; + } + + @Override + public ExternalComponentState computeState(Exchange camelExchange) { + boolean oneNotFound = (boolean) camelExchange.getIn().getExchange().getProperty("atLeastOnePolicyNotFound"); + boolean oneNotDeployed = (boolean) camelExchange.getIn().getExchange() + .getProperty("atLeastOnePolicyNotDeployed"); + + if (oneNotFound && oneNotDeployed) { + this.setState(NOT_SENT); + } else if (!oneNotFound && oneNotDeployed) { + this.setState(SENT); + } else if (!oneNotFound && !oneNotDeployed) { + this.setState(SENT_AND_DEPLOYED); + } else { + this.setState(IN_ERROR); + } + return this.getState(); + } +} diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLog.java b/src/main/java/org/onap/clamp/loop/log/LoopLog.java index cea495712..3feff254d 100644 --- a/src/main/java/org/onap/clamp/loop/log/LoopLog.java +++ b/src/main/java/org/onap/clamp/loop/log/LoopLog.java @@ -52,7 +52,7 @@ import org.onap.clamp.loop.Loop; */ @Entity @Table(name = "loop_logs") -public class LoopLog implements Serializable { +public class LoopLog implements Serializable, Comparable { /** * The serial version ID. */ @@ -68,6 +68,10 @@ public class LoopLog implements Serializable { @Enumerated(EnumType.STRING) private LogType logType; + @Expose + @Column(name = "log_component", nullable = false) + private String logComponent; + @Expose @Column(name = "message", columnDefinition = "MEDIUMTEXT", nullable = false) private String message; @@ -83,10 +87,11 @@ public class LoopLog implements Serializable { public LoopLog() { } - public LoopLog(String message, LogType logType, Loop loop) { + public LoopLog(String message, LogType logType, String logComponent, Loop loop) { this.message = message; this.logType = logType; this.loop = loop; + this.logComponent = logComponent; } public Long getId() { @@ -129,6 +134,14 @@ public class LoopLog implements Serializable { this.logInstant = logInstant.truncatedTo(ChronoUnit.SECONDS); } + public String getLogComponent() { + return logComponent; + } + + public void setLogComponent(String logComponent) { + this.logComponent = logComponent; + } + @Override public int hashCode() { final int prime = 31; @@ -159,4 +172,18 @@ public class LoopLog implements Serializable { return true; } + @Override + public int compareTo(LoopLog arg0) { + // Reverse it, so that by default we have the latest + if (getId() == null) { + return 1; + } + if (arg0.getId() == null) { + return -1; + } + + return arg0.getId().compareTo(this.getId()); + + } + } diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLogService.java b/src/main/java/org/onap/clamp/loop/log/LoopLogService.java index b02bc11c4..d02d0b278 100644 --- a/src/main/java/org/onap/clamp/loop/log/LoopLogService.java +++ b/src/main/java/org/onap/clamp/loop/log/LoopLogService.java @@ -38,7 +38,11 @@ public class LoopLogService { } public void addLog(String message, String logType, Loop loop) { - repository.save(new LoopLog(message, LogType.valueOf(logType), loop)); + this.addLogForComponent(message, logType, "CLAMP", loop); + } + + public void addLogForComponent(String message, String logType, String component, Loop loop) { + loop.addLog(repository.save(new LoopLog(message, LogType.valueOf(logType), component, loop))); } public boolean isExisting(Long logId) { diff --git a/src/main/resources/META-INF/resources/designer/modeler/dist/index.html b/src/main/resources/META-INF/resources/designer/modeler/dist/index.html index ab337de8f..cd7d6668b 100644 --- a/src/main/resources/META-INF/resources/designer/modeler/dist/index.html +++ b/src/main/resources/META-INF/resources/designer/modeler/dist/index.html @@ -59,15 +59,17 @@
Date - Type + Type + Component Log - {{log.logInstant}} + {{log.logInstant}} {{log.logType}} - {{log.message}} + {{log.logComponent}} + {{log.message}} diff --git a/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js b/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js index 0cc5c38f3..2b27a7fd5 100644 --- a/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js +++ b/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js @@ -41,32 +41,8 @@ app ToscaModelWindow(); } } - this.toggleDeploy = function(uiAction, modelName) { - var svcAction = uiAction.toLowerCase(); - var deployUrl = "/restservices/clds/v2/loop/" + svcAction + "Loop/" + modelName; - var def = $q.defer(); - var sets = []; - $http.put(deployUrl).success( - function(data) { - def.resolve(data); - alertService.alertMessage("Action Successful: " + svcAction, 1) - // update deploymentID, lastUpdatedStatus - setLastComputedState(data.lastComputedState); - setDeploymentStatusURL(data.dcaeDeploymentStatusUrl); - setDeploymentID(data.dcaeDeploymentId); - setStatus(data.lastComputedState); - enableDisableMenuOptions(); - }).error( - function(data) { - def.resolve(data); - alertService.alertMessage("Action Failure: " + svcAction, 2); - def.reject(svcAction + " not successful"); - }); - return def.promise; - } this.getModel = function(modelName) { var def = $q.defer(); - var sets = []; var svcUrl = "/restservices/clds/v2/loop/" + modelName; $http.get(svcUrl).success(function(data) { cl_props = data; @@ -79,7 +55,6 @@ app }; this.getSavedModel = function() { var def = $q.defer(); - var sets = []; var svcUrl = "/restservices/clds/v2/loop/getAllNames"; $http.get(svcUrl).success(function(data) { @@ -92,7 +67,6 @@ app }; this.processAction = function(uiAction, modelName) { var def = $q.defer(); - var sets = []; var svcAction = uiAction.toLowerCase(); var svcUrl = "/restservices/clds/v2/loop/" + svcAction + "/" + modelName; @@ -100,10 +74,6 @@ app function(data) { def.resolve(data); alertService.alertMessage("Action Successful: " + svcAction, 1) - // update deploymentID, lastUpdatedStatus - setLastComputedState(data.lastComputedState); - setDeploymentStatusURL(data.dcaeDeploymentStatusUrl); - setDeploymentID(data.dcaeDeploymentId); }).error( function(data) { def.resolve(data); @@ -116,7 +86,6 @@ app this.manageAction = function(modelName, typeId, typeName) { var def = $q.defer(); - var sets = []; var config = { url : "/restservices/clds/v1/clds/getDispatcherInfo", method : "GET", @@ -143,37 +112,34 @@ app }; this.refreshStatus = function(modelName) { var def = $q.defer(); - var sets = []; var svcUrl = "/restservices/clds/v2/loop/getstatus/" + modelName; $http.get(svcUrl).success(function(data) { + cl_props = data; setStatus(data.lastComputedState); def.resolve(data); }).error(function(data) { def.reject("Refresh Status not successful"); }); return def.promise; - enableDisableMenuOptions(); } function setStatus(status) { // apply color to status var statusColor = 'white'; if (status.trim() === "DESIGN") { statusColor = 'gray' - } else if (status.trim() === "DISTRIBUTED") { - statusColor = 'blue' } else if (status.trim() === "SUBMITTED") { + statusColor = 'blue' + } else if (status.trim() === "DEPLOYED") { + statusColor = 'blue' + } else if (status.trim() === "RUNNING") { statusColor = 'green' } else if (status.trim() === "STOPPED") { - statusColor = 'red' - } else if (status.trim() === "DELETING") { - statusColor = 'pink' - } else if (status.trim() === "ERROR") { statusColor = 'orange' - } else if (status.trim() === "UNKNOWN") { - statusColor = 'blue' - } else { - statusColor = null; - } + } else if (status.trim() === "IN_ERROR") { + statusColor = 'red' + } else if (status.trim() === "WAITING") { + statusColor = 'greenyellow' + } var statusMsg = '   ' @@ -185,6 +151,22 @@ app .append( 'Status: ' + statusMsg + ''); + + var statusTable = ''; + + $.each(cl_props['components'], function(componentIndex, componentValue) { + statusTable+=''; + statusTable+=''; + statusTable+=''; + }); + statusTable+= '
ComponentStateDescription
'+componentIndex+''+componentValue['componentState']['stateName']+''+componentValue['componentState']['description']+'
'; + if ($("#status_components").length >= 1) + $("#status_components").remove(); + $("#activity_modeler") + .append( + '' + + statusTable + ''); + } function manageCLImage(modelName) { getModelImage(modelName).then(function(pars) { @@ -203,13 +185,12 @@ app }, function(data) { }); } - enableDisableMenuOptions = function() { + function enableDisableMenuOptions () { enableDefaultMenu(); enableAllActionMenu(); } - getModelImage = function(modelName) { + function getModelImage(modelName) { var def = $q.defer(); - var sets = []; var svcUrl = "/restservices/clds/v2/loop/svgRepresentation/" + modelName; $http.get(svcUrl).success(function(data) { def.resolve(data); diff --git a/src/main/resources/META-INF/resources/designer/scripts/app.js b/src/main/resources/META-INF/resources/designer/scripts/app.js index 5597bd992..7dda84799 100644 --- a/src/main/resources/META-INF/resources/designer/scripts/app.js +++ b/src/main/resources/META-INF/resources/designer/scripts/app.js @@ -388,7 +388,7 @@ function($scope, $rootScope, $timeout, dialogs) { }; $scope.propertyExplorerErrorMessage = function(msg) { - var dlg = dialogs.notify('Error', msg); + dialogs.notify('Error', msg); } $scope.activityModelling = function() { @@ -505,7 +505,8 @@ function($scope, $rootScope, $timeout, dialogs) { cldsModelService.processAction(uiAction, modelName).then(function(pars) { console.log("cldsPerformAction: pars=" + pars); - cldsModelService.getModel(modelName).then(function(pars) { + cldsModelService.refreshStatus(modelName).then(function(pars) { + console.log("refreshStatus: pars=" + pars); $rootScope.refreshLoopLog(); }, function(data) { }); @@ -514,9 +515,10 @@ function($scope, $rootScope, $timeout, dialogs) { }; $scope.refreshStatus = function() { var modelName = selected_model; - console.log("refreStatus modelName=" + modelName); + console.log("refreshStatus modelName=" + modelName); cldsModelService.refreshStatus(modelName).then(function(pars) { - console.log("refreStatus: pars=" + pars); + console.log("refreshStatus: pars=" + pars); + $rootScope.refreshLoopLog(); }, function(data) { }); @@ -547,7 +549,7 @@ function($scope, $rootScope, $timeout, dialogs) { 'Are you sure you want to deploy the closed loop?'); confirm.result.then(function() { - cldsToggleDeploy("deploy"); + $scope.cldsPerformAction("deploy"); }); }); }; @@ -557,24 +559,12 @@ function($scope, $rootScope, $timeout, dialogs) { + uiAction.toLowerCase() + ' the closed loop?'); dlg.result.then(function(btn) { - cldsToggleDeploy(uiAction.toLowerCase()); + $scope.cldsPerformAction(uiAction.toLowerCase()); }, function(btn) { }); }; - function cldsToggleDeploy(uiAction) { - console.log("cldsPerformAction: " + uiAction + " modelName=" - + selected_model); - cldsModelService.toggleDeploy(uiAction, selected_model).then( - function(pars) { - cldsModelService.getModel(selected_model).then(function(pars) { - $rootScope.refreshLoopLog(); - }, function(data) { - }); - }, function(data) { - }); - - } + $scope.ToscaModelWindow = function (tosca_model) { var dlg = dialogs.create('partials/portfolios/tosca_model_properties.html','ToscaModelCtrl',{closable:true,draggable:true},{size:'lg',keyboard: true,backdrop: 'static',windowClass: 'my-class'}); diff --git a/src/main/resources/META-INF/resources/designer/scripts/propertyController.js b/src/main/resources/META-INF/resources/designer/scripts/propertyController.js index a8aa83c06..0323529ee 100644 --- a/src/main/resources/META-INF/resources/designer/scripts/propertyController.js +++ b/src/main/resources/META-INF/resources/designer/scripts/propertyController.js @@ -91,30 +91,6 @@ function getMsUI(type) { return null; } -function getLastUpdatedStatus() { - return cl_props["lastComputedState"]; -} - -function setLastComputedState(status) { - cl_props["lastComputedState"] = status; -} - -function getDeploymentID() { - return cl_props["dcaeDeploymentId"]; -} - -function setDeploymentID(deploymentId) { - cl_props["dcaeDeploymentId"] = deploymentId; -} - -function getDeploymentStatusURL() { - return cl_props["dcaeDeploymentStatusUrl"]; -} - -function setDeploymentStatusURL(deploymentStatusURL) { - cl_props["dcaeDeploymentStatusUrl"] = deploymentStatusURL; -} - function getResourceDetailsVfProperty() { return cl_props["modelPropertiesJson"]["resourceDetails"]["VF"]; } @@ -127,4 +103,8 @@ function getLoopLogsArray() { return cl_props.loopLogs; } -module.exports = { getOperationalPolicyProperty,getGlobalProperty,getMsProperty,getMsUI,getLastUpdatedStatus,getDeploymentID,getDeploymentStatusURL,getResourceDetailsVfProperty,getResourceDetailsVfModuleProperty }; +function getComponentStates() { + return cl_props.components; +} + +module.exports = { getOperationalPolicyProperty,getGlobalProperty,getMsProperty,getMsUI,getResourceDetailsVfProperty,getResourceDetailsVfModuleProperty }; diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml index da856e947..101449492 100644 --- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml @@ -193,7 +193,7 @@ @@ -212,27 +212,8 @@ - - - - - - ${exchangeProperty[policyStatus]} == 'SUBMITTED' and - ${exchangeProperty[dcaeStatus]} == 'NOT_DEPLOYED' - - - - - - - - - + + @@ -257,7 +238,7 @@ @@ -275,21 +256,8 @@ - - - - ${exchangeProperty[dcaeStatus]} == 'DEPLOYED' or ${exchangeProperty[dcaeStatus]} == 'IN_ERROR' or ${exchangeProperty[dcaeStatus]} == 'PROCESSING' - - - - - - - + @@ -524,6 +492,7 @@ + ${exchangeProperty[loopObject].getMicroServicePolicies()} @@ -609,20 +578,16 @@ - - false - - - - - + + + + + + java.lang.Exception @@ -637,8 +602,9 @@ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" /> - + + ${exchangeProperty[loopObject]} + diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml new file mode 100644 index 000000000..b69c4fb8d --- /dev/null +++ b/src/main/resources/clds/camel/routes/dcae-flows.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + PUT + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + DEPLOY loop status + (Dep-id:${exchangeProperty[dcaeDeploymentId]}, + StatusUrl:${exchangeProperty[dcaeStatusUrl]}) + + + + + + + + + + + + + + ${exchangeProperty[loopObject].getDcaeDeploymentId()} + != null + + + + + + + DELETE + + + application/json + + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + UNDEPLOY loop status + + + + + + + + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + DCAE deployment status + + + + + + + \ No newline at end of file diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml index 1bad5fbbe..bc79fc211 100644 --- a/src/main/resources/clds/camel/routes/flexible-flow.xml +++ b/src/main/resources/clds/camel/routes/flexible-flow.xml @@ -75,642 +75,4 @@ - - - - - ${header.loopName} - - - - - - - ${exchangeProperty[loopObject]} == null - - 404 - - - - - - - - - - - - - ${exchangeProperty[microServicePolicy].createPolicyPayload()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[microServicePolicy].getName()} creation - status - - - - - - - - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - - ${exchangeProperty[microServicePolicy].getName()} removal - status - - - - - - - - - - - - - - ${exchangeProperty[operationalPolicy].createPolicyPayload()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[operationalPolicy].getName()} creation - status - - - - - - - - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[operationalPolicy].getName()} removal - status - - - - - - - - - - - - - - ${exchangeProperty[guardPolicy].getValue()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[guardPolicy].getKey()} creation status - - - - - - - - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - - ${exchangeProperty[guardPolicy].getKey()} removal status - - - - - - - - - - - - - - ${exchangeProperty[loopObject].createPoliciesPayloadPdpGroup()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - - PDP Group push ALL status - - - - - - - - - - - - - ${exchangeProperty[loopObject].listPolicyNamesPdpGroup()} - - - ${body} - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - ${exchangeProperty[policyName]} PDP Group removal status - - - - - - java.lang.Exception - - false - - - PDP Group removal, Error reported: ${exception} - - - - - - - - - - - - - - - - - - - - - - PUT - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - - DEPLOY loop status (id:${exchangeProperty[deploymentId]}) - - - - - - - - - - - - - - {\"serviceTypeId\": \"${exchangeProperty[loopObject].getDcaeBlueprintId()}\"} - - - - DELETE - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - - UNDEPLOY loop status - - - - - - - - - - - - - - - GET - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - Policy deployment status - - - - - - - - - - - - - - ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} == null - - - - - - - - - - - GET - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - DCAE deployment status - - - - - - - - - - - - - - - true - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/clds/camel/routes/loop-flows.xml b/src/main/resources/clds/camel/routes/loop-flows.xml new file mode 100644 index 000000000..ede899e71 --- /dev/null +++ b/src/main/resources/clds/camel/routes/loop-flows.xml @@ -0,0 +1,250 @@ + + + + + ${header.loopName} + + + + + + + ${exchangeProperty[loopObject]} == null + + 404 + + + + + + + + + false + + + false + + + ${exchangeProperty[loopObject].getComponent('POLICY')} + + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body.getName()} + + + ${body.getModelType()} + + + null + + + + false + + + + ${header.CamelHttpResponseCode} != 200 + + true + + + + + ${header.CamelHttpResponseCode} != 200 + + true + + + + + + ${exchangeProperty[loopObject].getOperationalPolicies()} + + + ${body.getName()} + + + onap.policies.controlloop.Operational + + + ${body} + + + null + + + + false + + + + ${header.CamelHttpResponseCode} != 200 + + true + + + + + ${header.CamelHttpResponseCode} != 200 + + true + + + + + + ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} + + + ${body.getKey()} + + + onap.policies.controlloop.Guard + + + null + + + + false + + + + ${header.CamelHttpResponseCode} != 200 + + true + + + + + ${header.CamelHttpResponseCode} != 200 + + true + + + + + + ${exchangeProperty[policyComponent].computeState(*)} + + + + + + + + + + ${exchangeProperty[loopObject].getComponent('DCAE')} + + + ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} + != null + + + false + + + + ${header.CamelHttpResponseCode} == 200 + + + + + + + + + ${exchangeProperty[dcaeComponent].computeState(*)} + + + + + + + + + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'BLUEPRINT_DEPLOYED' and ${exchangeProperty['policyState'].getStateName()} == 'NOT_SENT' + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'IN_ERROR' or ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLATION_FAILED' + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_UNINSTALLATION_FAILED' or ${exchangeProperty['policyState'].getStateName()} == 'IN_ERROR' + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED' + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT' + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'BLUEPRINT_DEPLOYED' or ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_UNINSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED' + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'PROCESSING_MICROSERVICE_INSTALLATION' or ${exchangeProperty['dcaeState'].getStateName()} == 'PROCESSING_MICROSERVICE_UNINSTALLATION' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED' + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} != 'NOT_SENT' + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml new file mode 100644 index 000000000..8cc594d2e --- /dev/null +++ b/src/main/resources/clds/camel/routes/policy-flows.xml @@ -0,0 +1,476 @@ + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET + Policy status + + + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET Policy deployment + status + + + + + + + + + + + + + ${exchangeProperty[microServicePolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[microServicePolicy].getName()} creation + status + + + + + + + + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + ${exchangeProperty[microServicePolicy].getName()} removal + status + + + + + + + + + + + + + + ${exchangeProperty[operationalPolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} creation + status + + + + + + + + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} removal + status + + + + + + + + + + + + + + ${exchangeProperty[guardPolicy].getValue()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[guardPolicy].getKey()} creation status + + + + + + + + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + ${exchangeProperty[guardPolicy].getKey()} removal status + + + + + + + + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + PDP Group push ALL status + + + + + + + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])} + + + ${body} + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + ${exchangeProperty[policyName]} PDP Group removal status + + + + + + java.lang.Exception + + false + + + PDP Group removal, Error reported: ${exception} + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/clds/camel/routes/utils-flows.xml b/src/main/resources/clds/camel/routes/utils-flows.xml new file mode 100644 index 000000000..adf843ffe --- /dev/null +++ b/src/main/resources/clds/camel/routes/utils-flows.xml @@ -0,0 +1,17 @@ + + + + + true + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index ed912831e..773332ddd 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -27,7 +27,6 @@ package org.onap.clamp.loop; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.any; import java.io.IOException; import java.util.ArrayList; @@ -65,6 +64,7 @@ import org.skyscreamer.jsonassert.JSONAssert; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -223,7 +223,8 @@ public class CsarInstallerItCase { @Test(expected = SdcArtifactInstallerException.class) @Transactional - public void shouldThrowSdcArtifactInstallerException() throws SdcArtifactInstallerException, SdcToscaParserException, IOException, InterruptedException, PolicyModelException { + public void shouldThrowSdcArtifactInstallerException() throws SdcArtifactInstallerException, + SdcToscaParserException, IOException, InterruptedException, PolicyModelException { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csarHandler = buildFakeCsarHandler(generatedName); Mockito.when(csarHandler.getMapOfBlueprints()).thenThrow(IOException.class); diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java new file mode 100644 index 000000000..0a3c1e167 --- /dev/null +++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.util.HashSet; + +import org.junit.Test; +import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; +import org.onap.clamp.loop.components.external.DcaeComponent; +import org.onap.clamp.policy.microservice.MicroServicePolicy; + +public class DcaeComponentTest { + + private Loop createTestLoop() { + String yaml = "imports:\n" + " - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n" + + "node_templates:\n" + " docker_service_host:\n" + " type: dcae.nodes.SelectedDockerHost"; + + Loop loopTest = new Loop("ControlLoopTest", yaml, ""); + loopTest.setGlobalPropertiesJson( + new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class)); + loopTest.setLastComputedState(LoopState.DESIGN); + loopTest.setDcaeDeploymentId("123456789"); + loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085"); + loopTest.setDcaeBlueprintId("UUID-blueprint"); + + MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, + new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>()); + microServicePolicy.setProperties(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class)); + + loopTest.addMicroServicePolicy(microServicePolicy); + return loopTest; + } + + @Test + public void convertDcaeResponseTest() throws IOException { + String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state','error':'errorMessage', 'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}"; + DcaeOperationStatusResponse responseObject = DcaeComponent.convertDcaeResponse(dcaeFakeResponse); + assertThat(responseObject.getRequestId()).isEqualTo("testId"); + assertThat(responseObject.getOperationType()).isEqualTo("install"); + assertThat(responseObject.getStatus()).isEqualTo("state"); + assertThat(responseObject.getError()).isEqualTo("errorMessage"); + assertThat(responseObject.getLinks()).isNotNull(); + assertThat(responseObject.getLinks().getSelf()).isEqualTo("selfUrl"); + assertThat(responseObject.getLinks().getUninstall()).isEqualTo("uninstallUrl"); + + assertThat(responseObject.getLinks().getStatus()).isNull(); + } + + @Test + public void testGetDeployPayload() throws IOException { + Loop loop = this.createTestLoop(); + String deploymentPayload = DcaeComponent.getDeployPayload(loop); + String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\",\"inputs\":{\"policy_id\":\"name\"}}"; + assertThat(deploymentPayload).isEqualTo(expectedPayload); + } + + @Test + public void testGetUndeployPayload() throws IOException { + Loop loop = this.createTestLoop(); + String unDeploymentPayload = DcaeComponent.getUndeployPayload(loop); + String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\"}"; + assertThat(unDeploymentPayload).isEqualTo(expectedPayload); + } + +} diff --git a/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java deleted file mode 100644 index a2c97e0c0..000000000 --- a/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java +++ /dev/null @@ -1,244 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Nokia Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; - -import java.io.IOException; -import java.util.HashSet; - -import org.apache.camel.Exchange; -import org.apache.camel.Message; -import org.json.simple.parser.ParseException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.onap.clamp.clds.Application; -import org.onap.clamp.loop.LoopOperation.TempLoopState; -import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.policy.operational.OperationalPolicy; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class LoopOperationTestItCase { - - private Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create(); - @Autowired - LoopService loopService; - - private Loop createTestLoop() { - String yaml = "imports:\n" + " - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n" - + "node_templates:\n" + " docker_service_host:\n" + " type: dcae.nodes.SelectedDockerHost"; - - Loop loopTest = new Loop("ControlLoopTest", yaml, ""); - loopTest.setGlobalPropertiesJson( - new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class)); - loopTest.setLastComputedState(LoopState.DESIGN); - loopTest.setDcaeDeploymentId("123456789"); - loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085"); - loopTest.setDcaeBlueprintId("UUID-blueprint"); - - MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, - gson.fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>()); - microServicePolicy.setProperties(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class)); - - loopTest.addMicroServicePolicy(microServicePolicy); - return loopTest; - } - - @Test - public void testAnalysePolicyResponse() { - LoopOperation loopOp = new LoopOperation(loopService); - String status1 = loopOp.analysePolicyResponse(200); - String status2 = loopOp.analysePolicyResponse(404); - String status3 = loopOp.analysePolicyResponse(500); - String status4 = loopOp.analysePolicyResponse(503); - - // then - assertThat(status1).isEqualTo("SUBMITTED"); - assertThat(status2).isEqualTo("NOT_SUBMITTED"); - assertThat(status3).isEqualTo("IN_ERROR"); - assertThat(status4).isEqualTo("IN_ERROR"); - } - - @Test - public void testGetOperationalPolicyName() { - LoopOperation loopOp = new LoopOperation(loopService); - Loop loop = this.createTestLoop(); - String opName1 = loopOp.getOperationalPolicyName(loop); - assertThat(opName1).isNull(); - - OperationalPolicy opPolicy1 = new OperationalPolicy("OperationalPolicyTest1", null, - gson.fromJson("{\"type\":\"Operational\"}", JsonObject.class)); - loop.addOperationalPolicy(opPolicy1); - String opName2 = loopOp.getOperationalPolicyName(loop); - assertThat(opName2).isEqualTo("OperationalPolicyTest1"); - } - - @Test - public void testAnalyseDcaeResponse() throws ParseException { - LoopOperation loopOp = new LoopOperation(loopService); - String dcaeStatus1 = loopOp.analyseDcaeResponse(null, null); - assertThat(dcaeStatus1).isEqualTo("NOT_DEPLOYED"); - - String dcaeStatus2 = loopOp.analyseDcaeResponse(null, 500); - assertThat(dcaeStatus2).isEqualTo("IN_ERROR"); - - String dcaeStatus3 = loopOp.analyseDcaeResponse(null, 404); - assertThat(dcaeStatus3).isEqualTo("NOT_DEPLOYED"); - - Exchange camelExchange = Mockito.mock(Exchange.class); - Message mockMessage = Mockito.mock(Message.class); - Mockito.when(camelExchange.getIn()).thenReturn(mockMessage); - Mockito.when(mockMessage.getBody(String.class)) - .thenReturn("{\"operationType\":\"install\",\"status\":\"succeeded\"}"); - String dcaeStatus4 = loopOp.analyseDcaeResponse(camelExchange, 200); - assertThat(dcaeStatus4).isEqualTo("DEPLOYED"); - - Mockito.when(mockMessage.getBody(String.class)) - .thenReturn("{\"operationType\":\"install\",\"status\":\"processing\"}"); - String dcaeStatus5 = loopOp.analyseDcaeResponse(camelExchange, 200); - assertThat(dcaeStatus5).isEqualTo("PROCESSING"); - - Mockito.when(mockMessage.getBody(String.class)) - .thenReturn("{\"operationType\":\"install\",\"status\":\"failed\"}"); - String dcaeStatus6 = loopOp.analyseDcaeResponse(camelExchange, 200); - assertThat(dcaeStatus6).isEqualTo("IN_ERROR"); - - Mockito.when(mockMessage.getBody(String.class)) - .thenReturn("{\"operationType\":\"uninstall\",\"status\":\"succeeded\"}"); - String dcaeStatus7 = loopOp.analyseDcaeResponse(camelExchange, 200); - assertThat(dcaeStatus7).isEqualTo("NOT_DEPLOYED"); - - Mockito.when(mockMessage.getBody(String.class)) - .thenReturn("{\"operationType\":\"uninstall\",\"status\":\"processing\"}"); - String dcaeStatus8 = loopOp.analyseDcaeResponse(camelExchange, 200); - assertThat(dcaeStatus8).isEqualTo("PROCESSING"); - - Mockito.when(mockMessage.getBody(String.class)) - .thenReturn("{\"operationType\":\"uninstall\",\"status\":\"failed\"}"); - String dcaeStatus9 = loopOp.analyseDcaeResponse(camelExchange, 200); - assertThat(dcaeStatus9).isEqualTo("IN_ERROR"); - } - - @Test - public void testUpdateLoopStatus() { - LoopOperation loopOp = new LoopOperation(loopService); - Loop loop = this.createTestLoop(); - loopService.saveOrUpdateLoop(loop); - LoopState newState1 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.DEPLOYED); - LoopState dbState1 = loopService.getLoop(loop.getName()).getLastComputedState(); - assertThat(newState1).isEqualTo(LoopState.DEPLOYED); - assertThat(dbState1).isEqualTo(LoopState.DEPLOYED); - - LoopState newState2 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.NOT_DEPLOYED); - LoopState dbState2 = loopService.getLoop(loop.getName()).getLastComputedState(); - assertThat(newState2).isEqualTo(LoopState.SUBMITTED); - assertThat(dbState2).isEqualTo(LoopState.SUBMITTED); - - LoopState newState3 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.PROCESSING); - assertThat(newState3).isEqualTo(LoopState.WAITING); - - LoopState newState4 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.IN_ERROR); - assertThat(newState4).isEqualTo(LoopState.IN_ERROR); - - LoopState newState5 = loopOp.updateLoopStatus(loop, TempLoopState.NOT_SUBMITTED, TempLoopState.DEPLOYED); - assertThat(newState5).isEqualTo(LoopState.IN_ERROR); - - LoopState newState6 = loopOp.updateLoopStatus(loop, TempLoopState.NOT_SUBMITTED, TempLoopState.PROCESSING); - assertThat(newState6).isEqualTo(LoopState.IN_ERROR); - - LoopState newState7 = loopOp.updateLoopStatus(loop, TempLoopState.NOT_SUBMITTED, TempLoopState.NOT_DEPLOYED); - assertThat(newState7).isEqualTo(LoopState.DESIGN); - - LoopState newState8 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.DEPLOYED); - assertThat(newState8).isEqualTo(LoopState.IN_ERROR); - - LoopState newState9 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.NOT_DEPLOYED); - assertThat(newState9).isEqualTo(LoopState.IN_ERROR); - - LoopState newState10 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.PROCESSING); - assertThat(newState10).isEqualTo(LoopState.IN_ERROR); - - LoopState newState11 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.IN_ERROR); - assertThat(newState11).isEqualTo(LoopState.IN_ERROR); - } - - @Test - public void testUpdateLoopInfo() throws ParseException { - Loop loop = this.createTestLoop(); - loopService.saveOrUpdateLoop(loop); - - Exchange camelExchange = Mockito.mock(Exchange.class); - Message mockMessage = Mockito.mock(Message.class); - Mockito.when(camelExchange.getIn()).thenReturn(mockMessage); - Mockito.when(mockMessage.getBody(String.class)) - .thenReturn("{\"links\":{\"status\":\"http://testhost/dcae-operationstatus\",\"test2\":\"test2\"}}"); - - LoopOperation loopOp = new LoopOperation(loopService); - loopOp.updateLoopInfo(camelExchange, loop, "testNewId"); - - Loop newLoop = loopService.getLoop(loop.getName()); - String newDeployId = newLoop.getDcaeDeploymentId(); - String newDeploymentStatusUrl = newLoop.getDcaeDeploymentStatusUrl(); - - assertThat(newDeployId).isEqualTo("testNewId"); - assertThat(newDeploymentStatusUrl).isEqualTo("http4://testhost/dcae-operationstatus"); - } - - @Test - public void testGetDeploymentId() { - Loop loop = this.createTestLoop(); - LoopOperation loopOp = new LoopOperation(loopService); - String deploymentId1 = loopOp.getDeploymentId(loop); - assertThat(deploymentId1).isEqualTo("123456789"); - - loop.setDcaeDeploymentId(null); - String deploymentId2 = loopOp.getDeploymentId(loop); - assertThat(deploymentId2).startsWith("CLAMP_"); - - loop.setDcaeDeploymentId(""); - String deploymentId3 = loopOp.getDeploymentId(loop); - assertThat(deploymentId3).startsWith("CLAMP_"); - assertThat(deploymentId3).isNotEqualTo(deploymentId2); - } - - @Test - public void testGetDeployPayload() throws IOException { - Loop loop = this.createTestLoop(); - LoopOperation loopOp = new LoopOperation(loopService); - String deploymentPayload = loopOp.getDeployPayload(loop); - - String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\",\"inputs\":{\"policy_id\":\"name\"}}"; - assertThat(deploymentPayload).isEqualTo(expectedPayload); - } -} \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java index a935808ab..9a82ec097 100644 --- a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java @@ -92,7 +92,7 @@ public class LoopRepositoriesItCase { } private LoopLog getLoopLog(LogType type, String message, Loop loop) { - return new LoopLog(message, type, loop); + return new LoopLog(message, type, "CLAMP", loop); } @Test @@ -116,7 +116,7 @@ public class LoopRepositoriesItCase { // Now set the ID in the previous model so that we can compare the objects loopLog.setId(((LoopLog) loopInDb.getLoopLogs().toArray()[0]).getId()); - assertThat(loopInDb).isEqualToComparingFieldByField(loopTest); + assertThat(loopInDb).isEqualToIgnoringGivenFields(loopTest, "components"); assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(true); assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(true); assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(true); @@ -124,7 +124,7 @@ public class LoopRepositoriesItCase { // Now attempt to read from database Loop loopInDbRetrieved = loopRepository.findById(loopTest.getName()).get(); - assertThat(loopInDbRetrieved).isEqualToComparingFieldByField(loopTest); + assertThat(loopInDbRetrieved).isEqualToIgnoringGivenFields(loopTest, "components"); assertThat((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).isEqualToComparingFieldByField(loopLog); assertThat((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]) .isEqualToComparingFieldByField(opPolicy); diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index c4254ec8c..8add1a7be 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -296,7 +296,7 @@ public class LoopServiceTestItCase { saveTestLoopToDb(); // Add log Loop loop = loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null); - loop.addLog(new LoopLog("test", LogType.INFO, loop)); + loop.addLog(new LoopLog("test", LogType.INFO, "CLAMP", loop)); loop = loopService.saveOrUpdateLoop(loop); // Add op policy OperationalPolicy operationalPolicy = new OperationalPolicy("opPolicy", null, diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index dcad1a516..8899a36c7 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -36,6 +36,7 @@ import java.util.Random; import org.junit.Test; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.policy.microservice.MicroServicePolicy; @@ -71,7 +72,7 @@ public class LoopToJsonTest { } private LoopLog getLoopLog(LogType type, String message, Loop loop) { - LoopLog log = new LoopLog(message, type, loop); + LoopLog log = new LoopLog(message, type, "CLAMP", loop); log.setId(Long.valueOf(new Random().nextInt())); return log; } @@ -95,8 +96,12 @@ public class LoopToJsonTest { System.out.println(jsonSerialized); Loop loopTestDeserialized = JsonUtils.GSON_JPA_MODEL.fromJson(jsonSerialized, Loop.class); assertNotNull(loopTestDeserialized); - assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest, "svgRepresentation", "blueprint"); - + assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest, "svgRepresentation", "blueprint", + "components"); + assertThat(loopTestDeserialized.getComponent("DCAE").getState()) + .isEqualToComparingFieldByField(loopTest.getComponent("DCAE").getState()); + assertThat(loopTestDeserialized.getComponent("POLICY").getState()) + .isEqualToComparingFieldByField(loopTest.getComponent("POLICY").getState()); // svg and blueprint not exposed so wont be deserialized assertThat(loopTestDeserialized.getBlueprint()).isEqualTo(null); assertThat(loopTestDeserialized.getSvgRepresentation()).isEqualTo(null); @@ -121,6 +126,6 @@ public class LoopToJsonTest { loopTest.addMicroServicePolicy(microServicePolicy); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/pdp-group-policy-payload.json"), - loopTest.createPoliciesPayloadPdpGroup(), false); + PolicyComponent.createPoliciesPayloadPdpGroup(loopTest), false); } } diff --git a/src/test/javascript/propertyController.test.js b/src/test/javascript/propertyController.test.js index fbbc6beca..e71999669 100644 --- a/src/test/javascript/propertyController.test.js +++ b/src/test/javascript/propertyController.test.js @@ -30,16 +30,4 @@ describe('Property controller tests', function() { test('getMsUINotExist', () => { expect(propertyController.getMsUI("test")).toEqual(null); }); - - test('getLastUpdatedStatus', () => { - expect(propertyController.getLastUpdatedStatus()).toEqual('DESIGN'); - }); - - test('getDeploymentID', () => { - expect(propertyController.getDeploymentID()).toEqual('testId'); - }); - - test('getDeploymentStatusURL', () => { - expect(propertyController.getDeploymentStatusURL()).toEqual('testUrl'); - }); }); \ No newline at end of file diff --git a/src/test/resources/http-cache/third_party_proxy.py b/src/test/resources/http-cache/third_party_proxy.py index 0db977bb4..ce61ea063 100755 --- a/src/test/resources/http-cache/third_party_proxy.py +++ b/src/test/resources/http-cache/third_party_proxy.py @@ -127,10 +127,10 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): with open(cached_file_content, 'w') as f: f.write(jsonGenerated) return True - elif self.path.startswith("/dcae-operationstatus") and http_type == "GET": + elif self.path.startswith("/dcae-operationstatus/install") and http_type == "GET": if not _file_available: - print "self.path start with /dcae-operationstatus, generating response json..." - jsonGenerated = "{\"operationType\": \"operationType1\", \"status\": \"succeeded\"}" + print "self.path start with /dcae-operationstatus/install, generating response json..." + jsonGenerated = "{\"operationType\": \"install\", \"status\": \"succeeded\"}" print "jsonGenerated: " + jsonGenerated try: @@ -145,24 +145,29 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): with open(cached_file_content, 'w') as f: f.write(jsonGenerated) return True - elif self.path.startswith("/sdc/v1/catalog/services/") and http_type == "POST": + elif self.path.startswith("/dcae-operationstatus/uninstall") and http_type == "GET": if not _file_available: - print "self.path start with /sdc/v1/catalog/services/, generating response json..." - jsondata = json.loads(self.data_string) - jsonGenerated = "{\"artifactName\":\"" + jsondata['artifactName'] + "\",\"artifactType\":\"" + jsondata['artifactType'] + "\",\"artifactURL\":\"" + self.path + "\",\"artifactDescription\":\"" + jsondata['description'] + "\",\"artifactChecksum\":\"ZjJlMjVmMWE2M2M1OTM2MDZlODlmNTVmZmYzNjViYzM=\",\"artifactUUID\":\"" + str(uuid.uuid4()) + "\",\"artifactVersion\":\"1\"}" + print "self.path start with /dcae-operationstatus/uninstall, generating response json..." + jsonGenerated = "{\"operationType\": \"uninstall\", \"status\": \"succeeded\"}" print "jsonGenerated: " + jsonGenerated - os.makedirs(cached_file_folder, 0777) + try: + os.makedirs(cached_file_folder, 0777) + except OSError as e: + if e.errno != errno.EEXIST: + raise + print(cached_file_folder+" already exists") + with open(cached_file_header, 'w') as f: f.write("{\"Content-Length\": \"" + str(len(jsonGenerated)) + "\", \"Content-Type\": \"application/json\"}") with open(cached_file_content, 'w') as f: f.write(jsonGenerated) - return True; - elif self.path.startswith("/dcae-deployments/") and (http_type == "PUT" or http_type == "DELETE"): + return True + elif self.path.startswith("/sdc/v1/catalog/services/") and http_type == "POST": if not _file_available: - print "self.path start with /dcae-deployments/, generating response json..." - #jsondata = json.loads(self.data_string) - jsonGenerated = "{\"links\":{\"status\":\"http:\/\/" + PROXY_ADDRESS + "\/dcae-operationstatus\",\"test2\":\"test2\"}}" + print "self.path start with /sdc/v1/catalog/services/, generating response json..." + jsondata = json.loads(self.data_string) + jsonGenerated = "{\"artifactName\":\"" + jsondata['artifactName'] + "\",\"artifactType\":\"" + jsondata['artifactType'] + "\",\"artifactURL\":\"" + self.path + "\",\"artifactDescription\":\"" + jsondata['description'] + "\",\"artifactChecksum\":\"ZjJlMjVmMWE2M2M1OTM2MDZlODlmNTVmZmYzNjViYzM=\",\"artifactUUID\":\"" + str(uuid.uuid4()) + "\",\"artifactVersion\":\"1\"}" print "jsonGenerated: " + jsonGenerated os.makedirs(cached_file_folder, 0777) @@ -171,6 +176,30 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): with open(cached_file_content, 'w') as f: f.write(jsonGenerated) return True + elif self.path.startswith("/dcae-deployments/") and http_type == "PUT": + print "self.path start with /dcae-deployments/ DEPLOY, generating response json..." + #jsondata = json.loads(self.data_string) + jsonGenerated = "{\"operationType\":\"install\",\"status\":\"processing\",\"links\":{\"status\":\"http:\/\/" + PROXY_ADDRESS + "\/dcae-operationstatus/install\"}}" + print "jsonGenerated: " + jsonGenerated + if not os.path.exists(cached_file_folder): + os.makedirs(cached_file_folder, 0777) + with open(cached_file_header, 'w+') as f: + f.write("{\"Content-Length\": \"" + str(len(jsonGenerated)) + "\", \"Content-Type\": \"application/json\"}") + with open(cached_file_content, 'w+') as f: + f.write(jsonGenerated) + return True + elif self.path.startswith("/dcae-deployments/") and http_type == "DELETE": + print "self.path start with /dcae-deployments/ UNDEPLOY, generating response json..." + #jsondata = json.loads(self.data_string) + jsonGenerated = "{\"operationType\":\"uninstall\",\"status\":\"processing\",\"links\":{\"status\":\"http:\/\/" + PROXY_ADDRESS + "\/dcae-operationstatus/uninstall\"}}" + print "jsonGenerated: " + jsonGenerated + if not os.path.exists(cached_file_folder): + os.makedirs(cached_file_folder, 0777) + with open(cached_file_header, 'w+') as f: + f.write("{\"Content-Length\": \"" + str(len(jsonGenerated)) + "\", \"Content-Type\": \"application/json\"}") + with open(cached_file_content, 'w+') as f: + f.write(jsonGenerated) + return True elif (self.path.startswith("/pdp/api/") and (http_type == "PUT" or http_type == "DELETE")) or (self.path.startswith("/pdp/api/policyEngineImport") and http_type == "POST"): print "self.path start with /pdp/api/, copying body to response ..." if not os.path.exists(cached_file_folder): @@ -180,7 +209,7 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): with open(cached_file_content, 'w+') as f: f.write(self.data_string) return True - elif self.path.startswith("/policy/api/v1/policyTypes/") and http_type == "POST": + elif self.path.startswith("/policy/api/v1/policytypes/") and http_type == "POST": print "self.path start with POST new policy API /pdp/api/, copying body to response ..." if not os.path.exists(cached_file_folder): os.makedirs(cached_file_folder, 0777) @@ -189,11 +218,21 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): with open(cached_file_content, 'w+') as f: f.write(self.data_string) return True - elif self.path.startswith("/policy/api/v1/policyTypes/") and http_type == "DELETE": + elif self.path.startswith("/policy/api/v1/policytypes/") and http_type == "DELETE": print "self.path start with DELETE new policy API /policy/api/v1/policyTypes/ ..." if not os.path.exists(cached_file_folder): os.makedirs(cached_file_folder, 0777) + with open(cached_file_header, 'w+') as f: + f.write("{\"Content-Length\": \"" + str(len("")) + "\", \"Content-Type\": \""+str("")+"\"}") + with open(cached_file_content, 'w+') as f: + f.write(self.data_string) + return True + elif self.path.startswith("/policy/pap/v1/pdps/policies") and http_type == "POST": + print "self.path start with POST new policy API /policy/pap/v1/pdps/ ..." + if not os.path.exists(cached_file_folder): + os.makedirs(cached_file_folder, 0777) + with open(cached_file_header, 'w+') as f: f.write("{\"Content-Length\": \"" + str(len("")) + "\", \"Content-Type\": \""+str("")+"\"}") with open(cached_file_content, 'w+') as f: diff --git a/src/test/resources/https/https-test.properties b/src/test/resources/https/https-test.properties index 7614e1770..0be9e298a 100644 --- a/src/test/resources/https/https-test.properties +++ b/src/test/resources/https/https-test.properties @@ -30,6 +30,7 @@ server.port=${clamp.it.tests.https} server.ssl.key-store=classpath:https/keystore-test.jks server.ssl.key-store-password=testpass server.ssl.key-password=testpass +server.ssl.key-store-type=JKS ### In order to be user friendly when HTTPS is enabled, ### you can add another HTTP port that will be automatically redirected to HTTPS -- cgit 1.2.3-korg From f9e2ceeae29504505f631086e612fad4e1e16979 Mon Sep 17 00:00:00 2001 From: sebdet Date: Fri, 9 Aug 2019 18:36:09 +0200 Subject: Draft of op policy First draft of the Operational policy based on JsonEditor, it's a wip code Issue-ID: CLAMP-430 Change-Id: I2c7970e94488f4020377fd9d4d00691a3590b13e Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 1 + src/main/java/org/onap/clamp/loop/Loop.java | 39 +- .../org/onap/clamp/loop/LoopCsarInstaller.java | 68 +-- .../operational/LegacyOperationalPolicy.java | 37 +- .../policy/operational/OperationalPolicy.java | 37 +- .../OperationalPolicyRepresentationBuilder.java | 146 ++++++ .../operational_policies/operational_policy.json | 362 +++++++++++++ .../microservice/OperationalPolicyPayloadTest.java | 20 +- ...OperationalPolicyRepresentationBuilderTest.java | 52 ++ ...OperationalPolicyRepresentationBuilderTest.java | 52 ++ .../resources/tosca/guard1-policy-payload.json | 19 +- .../resources/tosca/guard2-policy-payload.json | 20 +- .../tosca/operational-policy-json-schema.json | 574 +++++++++++++++++++++ .../tosca/operational-policy-payload-legacy.yaml | 52 +- .../tosca/operational-policy-payload.json | 2 +- .../tosca/operational-policy-payload.yaml | 60 ++- .../tosca/operational-policy-properties.json | 149 +++--- .../resources/tosca/pdp-group-policy-payload.json | 4 +- ui-react/package.json | 2 +- ui-react/src/LoopUI.js | 7 +- ui-react/src/api/LoopCache.js | 4 + ui-react/src/api/LoopService.js | 24 + .../ConfigurationPolicyModal.js | 2 +- .../OperationalPolicy/OperationalPolicyModal.js | 533 +++---------------- ui-react/src/index.js | 2 +- ui-react/src/theme/globalStyle.js | 13 + 26 files changed, 1579 insertions(+), 702 deletions(-) create mode 100644 src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java create mode 100644 src/main/resources/clds/json-schema/operational_policies/operational_policy.json create mode 100644 src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java create mode 100644 src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java create mode 100644 src/test/resources/tosca/operational-policy-json-schema.json (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 121c5e689..aef3a7e7d 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -24,6 +24,7 @@ global_properties_json json, last_computed_state varchar(255) not null, model_properties_json json, + operational_policy_schema json not null, svg_representation MEDIUMTEXT, primary key (name) ) engine=InnoDB; diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 2393f2498..37d597eeb 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -23,9 +23,13 @@ package org.onap.clamp.loop; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; import com.google.gson.annotations.Expose; +import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; @@ -59,6 +63,7 @@ import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; +import org.onap.clamp.policy.operational.OperationalPolicyRepresentationBuilder; @Entity @Table(name = "loops") @@ -70,6 +75,9 @@ public class Loop implements Serializable { */ private static final long serialVersionUID = -286522707701388642L; + @Transient + private static final EELFLogger logger = EELFManager.getInstance().getLogger(Loop.class); + @Id @Expose @Column(nullable = false, name = "name", unique = true) @@ -90,6 +98,11 @@ public class Loop implements Serializable { @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation") private String svgRepresentation; + @Expose + @Type(type = "json") + @Column(columnDefinition = "json", name = "operational_policy_schema") + private JsonObject operationalPolicySchema; + @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "global_properties_json") @@ -131,6 +144,9 @@ public class Loop implements Serializable { this.addComponent(new DcaeComponent()); } + /** + * Public constructor. + */ public Loop() { initializeExternalComponents(); } @@ -256,6 +272,13 @@ public class Loop implements Serializable { void setModelPropertiesJson(JsonObject modelPropertiesJson) { this.modelPropertiesJson = modelPropertiesJson; + try { + this.operationalPolicySchema = OperationalPolicyRepresentationBuilder + .generateOperationalPolicySchema(this.getModelPropertiesJson()); + } catch (JsonSyntaxException | IOException | NullPointerException e) { + logger.error("Unable to generate the operational policy Schema ... ", e); + this.operationalPolicySchema = new JsonObject(); + } } public Map getComponents() { @@ -273,20 +296,16 @@ public class Loop implements Serializable { /** * Generate the loop name. * - * @param serviceName - * The service name - * @param serviceVersion - * The service version - * @param resourceName - * The resource name - * @param blueprintFileName - * The blueprint file name + * @param serviceName The service name + * @param serviceVersion The service version + * @param resourceName The resource name + * @param blueprintFileName The blueprint file name * @return The generated loop name */ static String generateLoopName(String serviceName, String serviceVersion, String resourceName, - String blueprintFilename) { + String blueprintFilename) { StringBuilder buffer = new StringBuilder("LOOP_").append(serviceName).append("_v").append(serviceVersion) - .append("_").append(resourceName).append("_").append(blueprintFilename.replaceAll(".yaml", "")); + .append("_").append(resourceName).append("_").append(blueprintFilename.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } diff --git a/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java b/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java index ad13ad34d..41d34a224 100644 --- a/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java +++ b/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java @@ -99,10 +99,10 @@ public class LoopCsarInstaller implements CsarInstaller { boolean alreadyInstalled = true; for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { alreadyInstalled = alreadyInstalled - && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), - blueprint.getValue().getResourceAttached().getResourceInstanceName(), - blueprint.getValue().getBlueprintArtifactName())); + && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), + csar.getSdcNotification().getServiceVersion(), + blueprint.getValue().getResourceAttached().getResourceInstanceName(), + blueprint.getValue().getBlueprintArtifactName())); } return alreadyInstalled; } @@ -110,7 +110,7 @@ public class LoopCsarInstaller implements CsarInstaller { @Override @Transactional(propagation = Propagation.REQUIRED) public void installTheCsar(CsarHandler csar) - throws SdcArtifactInstallerException, InterruptedException, PolicyModelException { + throws SdcArtifactInstallerException, InterruptedException, PolicyModelException { try { logger.info("Installing the CSAR " + csar.getFilePath()); for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { @@ -126,53 +126,53 @@ public class LoopCsarInstaller implements CsarInstaller { } private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact) - throws IOException, ParseException, InterruptedException { + throws IOException, ParseException, InterruptedException { Loop newLoop = new Loop(); newLoop.setBlueprint(blueprintArtifact.getDcaeBlueprint()); newLoop.setName(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName())); + csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName())); newLoop.setLastComputedState(LoopState.DESIGN); List microServicesChain = chainGenerator - .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); + .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); if (microServicesChain.isEmpty()) { microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); } - - newLoop - .setMicroServicePolicies(createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop)); + newLoop.setModelPropertiesJson(createModelPropertiesJson(csar)); + newLoop.setMicroServicePolicies( + createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop)); newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop)); newLoop.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact, newLoop)); - newLoop.setModelPropertiesJson(createModelPropertiesJson(csar)); + DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact); newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId()); return newLoop; } private HashSet createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact, - Loop newLoop) { + Loop newLoop) { return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", - csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject()))); + csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject()))); } private HashSet createMicroServicePolicies(List microServicesChain, - CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException { + CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException { HashSet newSet = new HashSet<>(); for (MicroService microService : microServicesChain) { MicroServicePolicy microServicePolicy = new MicroServicePolicy( - Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), - microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false, - new HashSet<>(Arrays.asList(newLoop))); + Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), + csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName()), + microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false, + new HashSet<>(Arrays.asList(newLoop))); newSet.add(microServicePolicy); microService.setMappedNameJpa(microServicePolicy.getName()); @@ -191,8 +191,8 @@ public class LoopCsarInstaller implements CsarInstaller { // Loop on all Groups defined in the service (VFModule entries type: // org.openecomp.groups.VfModule) for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity( - EntityQuery.newBuilder(EntityTemplateType.GROUP).build(), - TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) { + EntityQuery.newBuilder(EntityTemplateType.GROUP).build(), + TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) { // Get all metadata info JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties()); vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps); @@ -200,7 +200,7 @@ public class LoopCsarInstaller implements CsarInstaller { // volume_group, etc ... fields under the VFmodule name for (Entry additionalProp : entity.getProperties().entrySet()) { allVfProps.add(additionalProp.getValue().getName(), - JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue())); + JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue())); } } return vfModuleProps; @@ -214,7 +214,7 @@ public class LoopCsarInstaller implements CsarInstaller { // For each type, get the metadata of each nodetemplate for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) { resourcesPropByType.add(nodeTemplate.getName(), - JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties())); + JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties())); } resourcesProp.add(type.getValue(), resourcesPropByType); } @@ -225,7 +225,7 @@ public class LoopCsarInstaller implements CsarInstaller { JsonObject modelProperties = new JsonObject(); // Add service details modelProperties.add("serviceDetails", JsonUtils.GSON.fromJson( - JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class)); + JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class)); // Add properties details for each type, VfModule, VF, VFC, .... JsonObject resourcesProp = createServicePropertiesByType(csar); resourcesProp.add("VFModule", createVfModuleProperties(csar)); @@ -237,7 +237,7 @@ public class LoopCsarInstaller implements CsarInstaller { JsonObject node = new JsonObject(); Yaml yaml = new Yaml(); Map inputsNodes = ((Map) ((Map) yaml - .load(blueprintArtifact.getDcaeBlueprint())).get("inputs")); + .load(blueprintArtifact.getDcaeBlueprint())).get("inputs")); inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> { Object defaultValue = ((Map) elem.getValue()).get("default"); if (defaultValue != null) { @@ -258,10 +258,10 @@ public class LoopCsarInstaller implements CsarInstaller { * @return The DcaeInventoryResponse object containing the dcae values */ private DcaeInventoryResponse queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact) - throws IOException, ParseException, InterruptedException { + throws IOException, ParseException, InterruptedException { return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(), - blueprintArtifact.getBlueprintInvariantServiceUuid(), - blueprintArtifact.getResourceAttached().getResourceInvariantUUID()); + blueprintArtifact.getBlueprintInvariantServiceUuid(), + blueprintArtifact.getResourceAttached().getResourceInvariantUUID()); } private void addPropertyToNode(JsonObject node, String key, Object value) { diff --git a/src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java index 33148f0b6..dd156d8f3 100644 --- a/src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java @@ -25,6 +25,7 @@ package org.onap.clamp.policy.operational; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.List; @@ -33,16 +34,15 @@ import java.util.Map.Entry; import java.util.TreeMap; import org.apache.commons.lang3.math.NumberUtils; +import org.onap.clamp.loop.Loop; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.DumperOptions.ScalarStyle; import org.yaml.snakeyaml.Yaml; /** - * * This class contains the code required to support the sending of Legacy * operational payload to policy engine. This will probably disappear in El * Alto. - * */ public class LegacyOperationalPolicy { @@ -76,6 +76,13 @@ public class LegacyOperationalPolicy { return jsonElement; } + /** + * This method rework the payload attribute (yaml) that is normally wrapped in a + * string when coming from the UI. + * + * @param policyJson The operational policy json config + * @return The same object reference but modified + */ public static JsonElement reworkPayloadAttributes(JsonElement policyJson) { for (JsonElement policy : policyJson.getAsJsonObject().get("policies").getAsJsonArray()) { JsonElement payloadElem = policy.getAsJsonObject().get("payload"); @@ -135,9 +142,15 @@ public class LegacyOperationalPolicy { return mapResult; } + /** + * This method transforms the configuration json to a Yaml format. + * + * @param operationalPolicyJsonElement The operational policy json config + * @return The Yaml as string + */ public static String createPolicyPayloadYamlLegacy(JsonElement operationalPolicyJsonElement) { JsonElement opPolicy = fulfillPoliciesTreeField( - removeAllQuotes(reworkPayloadAttributes(operationalPolicyJsonElement.getAsJsonObject().deepCopy()))); + removeAllQuotes(reworkPayloadAttributes(operationalPolicyJsonElement.getAsJsonObject().deepCopy()))); Map jsonMap = createMap(opPolicy); DumperOptions options = new DumperOptions(); options.setDefaultScalarStyle(ScalarStyle.PLAIN); @@ -147,4 +160,22 @@ public class LegacyOperationalPolicy { options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); return (new Yaml(options)).dump(jsonMap); } + + /** + * This method load mandatory field in the operational policy configuration + * JSON. + * + * @param configurationsJson The operational policy JSON + * @param loop The parent loop object + */ + public static void preloadConfiguration(JsonObject configurationsJson, Loop loop) { + if (configurationsJson.entrySet().isEmpty()) { + JsonObject controlLoopName = new JsonObject(); + controlLoopName.addProperty("controlLoopName", + loop != null ? loop.getName() : "Empty (NO loop loaded yet)"); + JsonObject controlLoop = new JsonObject(); + controlLoop.add("controlLoop", controlLoopName); + configurationsJson.add("operational_policy", controlLoop); + } + } } diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index 62c5a1e9f..86f8ac391 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -38,7 +38,6 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import javax.persistence.Column; import javax.persistence.Entity; @@ -91,17 +90,16 @@ public class OperationalPolicy implements Serializable, Policy { /** * The constructor. * - * @param name - * The name of the operational policy - * @param loop - * The loop that uses this operational policy - * @param configurationsJson - * The operational policy property in the format of json + * @param name The name of the operational policy + * @param loop The loop that uses this operational policy + * @param configurationsJson The operational policy property in the format of + * json */ public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson) { this.name = name; this.loop = loop; this.configurationsJson = configurationsJson; + LegacyOperationalPolicy.preloadConfiguration(this.configurationsJson, loop); } @Override @@ -117,11 +115,6 @@ public class OperationalPolicy implements Serializable, Policy { return loop; } - @Override - public JsonObject getJsonRepresentation() { - return configurationsJson; - } - public JsonObject getConfigurationsJson() { return configurationsJson; } @@ -130,6 +123,11 @@ public class OperationalPolicy implements Serializable, Policy { this.configurationsJson = configurationsJson; } + @Override + public JsonObject getJsonRepresentation() { + return null; + } + @Override public int hashCode() { final int prime = 31; @@ -184,7 +182,7 @@ public class OperationalPolicy implements Serializable, Policy { metadata.addProperty("policy-id", this.name); operationalPolicyDetails.add("properties", LegacyOperationalPolicy - .reworkPayloadAttributes(this.configurationsJson.get("operational_policy").deepCopy())); + .reworkPayloadAttributes(this.configurationsJson.get("operational_policy").deepCopy())); Gson gson = new GsonBuilder().create(); @@ -204,9 +202,8 @@ public class OperationalPolicy implements Serializable, Policy { // Now using the legacy payload fo Dublin JsonObject payload = new JsonObject(); payload.addProperty("policy-id", this.getName()); - payload.addProperty("content", URLEncoder.encode( - LegacyOperationalPolicy.createPolicyPayloadYamlLegacy(this.configurationsJson.get("operational_policy")), - StandardCharsets.UTF_8.toString())); + payload.addProperty("content", URLEncoder.encode(LegacyOperationalPolicy.createPolicyPayloadYamlLegacy( + this.configurationsJson.get("operational_policy")), StandardCharsets.UTF_8.toString())); String opPayload = new GsonBuilder().setPrettyPrinting().create().toJson(payload); logger.info("Operational policy payload: " + opPayload); return opPayload; @@ -222,11 +219,9 @@ public class OperationalPolicy implements Serializable, Policy { JsonElement guardsList = this.getConfigurationsJson().get("guard_policies"); if (guardsList != null) { - for (Entry guardElem : guardsList.getAsJsonObject().entrySet()) { - JsonObject guard = new JsonObject(); - guard.addProperty("policy-id", guardElem.getKey()); - guard.add("content", guardElem.getValue()); - result.put(guardElem.getKey(), new GsonBuilder().create().toJson(guard)); + for (JsonElement guardElem : guardsList.getAsJsonArray()) { + result.put(guardElem.getAsJsonObject().get("policy-id").getAsString(), + new GsonBuilder().create().toJson(guardElem)); } } logger.info("Guard policy payload: " + result); diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java new file mode 100644 index 000000000..f6f3f498d --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java @@ -0,0 +1,146 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.operational; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; + +import java.io.IOException; +import java.util.Map.Entry; + +import org.onap.clamp.clds.util.JsonUtils; +import org.onap.clamp.clds.util.ResourceFileUtil; + +public class OperationalPolicyRepresentationBuilder { + + /** + * This method generates the operational policy json representation that will be + * used by ui for rendering. It uses the model (VF and VFModule) defined in the + * loop object to do so, so it's dynamic. It also uses the operational policy + * schema template defined in the resource folder. + * + * @param modelJson The loop model json + * @return The json representation + * @throws JsonSyntaxException If the schema template cannot be parsed + * @throws IOException In case of issue when opening the schema template + */ + public static JsonObject generateOperationalPolicySchema(JsonObject modelJson) + throws JsonSyntaxException, IOException { + JsonObject jsonSchema = JsonUtils.GSON.fromJson( + ResourceFileUtil.getResourceAsString("clds/json-schema/operational_policies/operational_policy.json"), + JsonObject.class); + jsonSchema.get("schema").getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject() + .get("configurationsJson").getAsJsonObject().get("properties").getAsJsonObject() + .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies") + .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("target") + .getAsJsonObject().get("anyOf").getAsJsonArray().addAll(createAnyOfArray(modelJson)); + return jsonSchema; + } + + private static JsonObject createSchemaProperty(String title, String type, String defaultValue, String readOnlyFlag, + String[] enumArray) { + JsonObject property = new JsonObject(); + property.addProperty("title", title); + property.addProperty("type", type); + property.addProperty("default", defaultValue); + property.addProperty("readOnly", readOnlyFlag); + + if (enumArray != null) { + JsonArray jsonArray = new JsonArray(); + property.add("enum", jsonArray); + for (String val : enumArray) { + jsonArray.add(val); + } + } + return property; + } + + private static JsonArray createVnfSchema(JsonObject modelJson) { + JsonArray vnfSchemaArray = new JsonArray(); + JsonObject modelVnfs = modelJson.get("resourceDetails").getAsJsonObject().get("VF").getAsJsonObject(); + + for (Entry entry : modelVnfs.entrySet()) { + JsonObject vnfOneOfSchema = new JsonObject(); + vnfOneOfSchema.addProperty("title", "VNF" + "-" + entry.getKey()); + JsonObject properties = new JsonObject(); + properties.add("type", createSchemaProperty("Type", "string", "VNF", "True", null)); + properties.add("resourceID", createSchemaProperty("Resource ID", "string", + modelVnfs.get(entry.getKey()).getAsJsonObject().get("name").getAsString(), "True", null)); + + vnfOneOfSchema.add("properties", properties); + vnfSchemaArray.add(vnfOneOfSchema); + } + return vnfSchemaArray; + } + + private static JsonArray createVfModuleSchema(JsonObject modelJson) { + JsonArray vfModuleOneOfSchemaArray = new JsonArray(); + JsonObject modelVfModules = modelJson.get("resourceDetails").getAsJsonObject().get("VFModule") + .getAsJsonObject(); + + for (Entry entry : modelVfModules.entrySet()) { + JsonObject vfModuleOneOfSchema = new JsonObject(); + vfModuleOneOfSchema.addProperty("title", "VFMODULE" + "-" + entry.getKey()); + JsonObject properties = new JsonObject(); + properties.add("type", createSchemaProperty("Type", "string", "VFMODULE", "True", null)); + properties.add("resourceID", + createSchemaProperty("Resource ID", "string", + modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(), + "True", null)); + properties.add("modelInvariantId", + createSchemaProperty("Model Invariant Id (ModelInvariantUUID)", "string", modelVfModules + .get(entry.getKey()).getAsJsonObject().get("vfModuleModelInvariantUUID").getAsString(), + "True", null)); + properties.add("modelVersionId", + createSchemaProperty("Model Version Id (ModelUUID)", "string", + modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelUUID").getAsString(), + "True", null)); + properties.add("modelName", + createSchemaProperty("Model Name", "string", + modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(), + "True", null)); + properties.add("modelVersion", createSchemaProperty("Model Version", "string", + modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelVersion").getAsString(), + "True", null)); + properties + .add("modelCustomizationId", + createSchemaProperty("Customization ID", "string", modelVfModules.get(entry.getKey()) + .getAsJsonObject().get("vfModuleModelCustomizationUUID").getAsString(), "True", + null)); + + vfModuleOneOfSchema.add("properties", properties); + vfModuleOneOfSchemaArray.add(vfModuleOneOfSchema); + } + return vfModuleOneOfSchemaArray; + } + + private static JsonArray createAnyOfArray(JsonObject modelJson) { + JsonArray targetOneOfStructure = new JsonArray(); + targetOneOfStructure.addAll(createVnfSchema(modelJson)); + targetOneOfStructure.addAll(createVfModuleSchema(modelJson)); + return targetOneOfStructure; + } +} diff --git a/src/main/resources/clds/json-schema/operational_policies/operational_policy.json b/src/main/resources/clds/json-schema/operational_policies/operational_policy.json new file mode 100644 index 000000000..93738c809 --- /dev/null +++ b/src/main/resources/clds/json-schema/operational_policies/operational_policy.json @@ -0,0 +1,362 @@ +{ + "schema": { + "uniqueItems": "true", + "format": "tabs", + "type": "array", + "minItems": 1, + "maxItems": 1, + "title": "Operational policies", + "items": { + "type": "object", + "title": "Operational Policy Item", + "id": "operational_policy_item", + "headerTemplate": "{{self.name}}", + "required": [ + "name", + "configurationsJson" + ], + "properties": { + "name": { + "type": "string", + "title": "Operational policy name", + "readOnly": "True" + }, + "configurationsJson": { + "type": "object", + "title": "Configuration", + "required": [ + "operational_policy", + "guard_policies" + ], + "properties": { + "operational_policy": { + "type": "object", + "title": "Related Parameters", + "required": [ + "controlLoop", + "policies" + ], + "properties": { + "controlLoop": { + "type": "object", + "title": "Control Loop details", + "required": [ + "timeout", + "abatement", + "trigger_policy", + "controlLoopName" + ], + "properties": { + "timeout": { + "type": "string", + "title": "Overall Time Limit", + "default": "0", + "format": "number" + }, + "abatement": { + "type": "string", + "title": "Abatement", + "enum": [ + "True", + "False" + ] + }, + "trigger_policy": { + "type": "string", + "title": "Policy Decision Entry" + }, + "controlLoopName": { + "type": "string", + "title": "Control loop name", + "readOnly": "True" + } + } + }, + "policies": { + "uniqueItems": "true", + "id": "policies_array", + "type": "array", + "title": "Policy Decision Tree", + "format": "tabs-top", + "items": { + "title": "Policy Decision", + "type": "object", + "id": "policy_item", + "headerTemplate": "{{self.id}} - {{self.recipe}}", + "format": "categories", + "basicCategoryTitle": "recipe", + "required": [ + "id", + "recipe", + "retry", + "timeout", + "actor", + "success", + "failure", + "failure_timeout", + "failure_retries", + "failure_exception", + "failure_guard", + "target" + ], + "properties": { + "id": { + "default": "Policy 1", + "title": "Policy ID", + "type": "string" + }, + "recipe": { + "title": "Recipe", + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "retry": { + "default": "0", + "title": "Number of Retry", + "type": "string", + "format": "number" + }, + "timeout": { + "default": "0", + "title": "Timeout", + "type": "string", + "format": "number" + }, + "actor": { + "title": "Actor", + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "payload": { + "title": "Payload (YAML)", + "type": "string", + "format": "textarea" + }, + "success": { + "default": "final_success", + "title": "When Success", + "type": "string" + }, + "failure": { + "default": "final_failure", + "title": "When Failure", + "type": "string" + }, + "failure_timeout": { + "default": "final_failure_timeout", + "title": "When Failure Timeout", + "type": "string" + }, + "failure_retries": { + "default": "final_failure_retries", + "title": "When Failure Retries", + "type": "string" + }, + "failure_exception": { + "default": "final_failure_exception", + "title": "When Failure Exception", + "type": "string" + }, + "failure_guard": { + "default": "final_failure_guard", + "title": "When Failure Guard", + "type": "string" + }, + "target": { + "type": "object", + "required": [ + "type", + "resourceID" + ], + "anyOf": [ + { + "title": "User Defined", + "additionalProperties":"True", + "properties": { + "type": { + "title": "Target type", + "type": "string", + "default": "", + "enum": [ + "VNF", + "VFMODULE", + "VM" + ] + }, + "resourceID": { + "title": "Target type", + "type": "string", + "default": "" + } + } + } + ] + } + } + } + } + } + }, + "guard_policies": { + "type": "array", + "format": "tabs-top", + "title": "Associated Guard policies", + "items": { + "headerTemplate": "{{self.policy-id}} - {{self.content.recipe}}", + "anyOf": [ + { + "title": "Guard MinMax", + "type": "object", + "properties": { + "policy-id": { + "type": "string", + "default": "guard.minmax.new", + "pattern": "^(guard.minmax\\..*)$" + }, + "content": { + "properties": { + "actor": { + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "recipe": { + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "targets": { + "type": "string", + "default": ".*" + }, + "clname": { + "type": "string", + "template": "{{loopName}}", + "watch": { + "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" + } + }, + "guardActiveStart": { + "type": "string", + "default": "00:00:00Z" + }, + "guardActiveEnd": { + "type": "string", + "default": "10:00:00Z" + }, + "min": { + "type": "string", + "default": "0" + }, + "max": { + "type": "string", + "default": "1" + } + } + } + } + }, + { + "title": "Guard Frequency", + "type": "object", + "properties": { + "policy-id": { + "type": "string", + "default": "guard.frequency.new", + "pattern": "^(guard.frequency\\..*)$" + }, + "content": { + "properties": { + "actor": { + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "recipe": { + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "targets": { + "type": "string", + "default": ".*" + }, + "clname": { + "type": "string", + "template": "{{loopName}}", + "watch": { + "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" + } + }, + "guardActiveStart": { + "type": "string", + "default": "00:00:00Z" + }, + "guardActiveEnd": { + "type": "string", + "default": "10:00:00Z" + }, + "limit": { + "type": "string" + }, + "timeWindow": { + "type": "string" + }, + "timeUnits": { + "type": "string", + "enum":["minute","hour","day","week","month","year"] + } + } + } + } + } + ] + } + } + } + } + } + } + } +} diff --git a/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java index 8972e5117..728b61cc9 100644 --- a/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java +++ b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java @@ -42,29 +42,29 @@ public class OperationalPolicyPayloadTest { @Test public void testOperationalPolicyPayloadConstruction() throws IOException { JsonObject jsonConfig = new GsonBuilder().create().fromJson( - ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); + ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); assertThat(policy.createPolicyPayloadYaml()) - .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.yaml")); + .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.yaml")); assertThat(policy.createPolicyPayload()) - .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.json")); + .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.json")); } @Test public void testLegacyOperationalPolicyPayloadConstruction() throws IOException { JsonObject jsonConfig = new GsonBuilder().create().fromJson( - ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); + ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); assertThat(LegacyOperationalPolicy.createPolicyPayloadYamlLegacy(jsonConfig.get("operational_policy"))) - .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload-legacy.yaml")); + .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload-legacy.yaml")); } @Test public void testGuardPolicyEmptyPayloadConstruction() throws IOException { JsonObject jsonConfig = new GsonBuilder().create().fromJson( - ResourceFileUtil.getResourceAsString("tosca/operational-policy-no-guard-properties.json"), - JsonObject.class); + ResourceFileUtil.getResourceAsString("tosca/operational-policy-no-guard-properties.json"), + JsonObject.class); OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); Map guardsMap = policy.createGuardPolicyPayloads(); assertThat(guardsMap).isEmpty(); @@ -74,15 +74,15 @@ public class OperationalPolicyPayloadTest { @Test public void testGuardPolicyPayloadConstruction() throws IOException { JsonObject jsonConfig = new GsonBuilder().create().fromJson( - ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); + ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); Map guardsMap = policy.createGuardPolicyPayloads(); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/guard1-policy-payload.json"), - guardsMap.get("guard1"), false); + guardsMap.get("guard.minmax.new"), false); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/guard2-policy-payload.json"), - guardsMap.get("guard2"), false); + guardsMap.get("guard.frequency.new"), false); } } diff --git a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java new file mode 100644 index 000000000..904525bea --- /dev/null +++ b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.operational; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; + +import java.io.IOException; + +import org.junit.Test; +import org.onap.clamp.clds.util.ResourceFileUtil; +import org.skyscreamer.jsonassert.JSONAssert; + +public class OperationalPolicyRepresentationBuilderTest { + + @Test + public void testOperationalPolicyPayloadConstruction() throws IOException { + JsonObject jsonModel = new GsonBuilder().create() + .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class); + + JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(jsonModel); + + assertThat(jsonSchema).isNotNull(); + + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/operational-policy-json-schema.json"), + new GsonBuilder().create().toJson(jsonSchema), false); + } + +} diff --git a/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java b/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java new file mode 100644 index 000000000..904525bea --- /dev/null +++ b/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.operational; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; + +import java.io.IOException; + +import org.junit.Test; +import org.onap.clamp.clds.util.ResourceFileUtil; +import org.skyscreamer.jsonassert.JSONAssert; + +public class OperationalPolicyRepresentationBuilderTest { + + @Test + public void testOperationalPolicyPayloadConstruction() throws IOException { + JsonObject jsonModel = new GsonBuilder().create() + .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class); + + JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(jsonModel); + + assertThat(jsonSchema).isNotNull(); + + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/operational-policy-json-schema.json"), + new GsonBuilder().create().toJson(jsonSchema), false); + } + +} diff --git a/src/test/resources/tosca/guard1-policy-payload.json b/src/test/resources/tosca/guard1-policy-payload.json index b4e0809c9..1c03df306 100644 --- a/src/test/resources/tosca/guard1-policy-payload.json +++ b/src/test/resources/tosca/guard1-policy-payload.json @@ -1,16 +1,13 @@ { - "policy-id": "guard1", + "policy-id": "guard.minmax.new", "content": { - "recipe": "Rebuild", - "actor": "SO", - "clname": "testloop", + "actor": "APPC", + "recipe": "Restart", "targets": ".*", - "min": "3", - "max": "7", - "limit": "", - "timeUnits": "", - "timeWindow": "", - "guardActiveStart": "00:00:01-05:00", - "guardActiveEnd": "23:59:01-05:00" + "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca", + "guardActiveStart": "00:00:00Z", + "guardActiveEnd": "10:00:00Z", + "min": "0", + "max": "1" } } \ No newline at end of file diff --git a/src/test/resources/tosca/guard2-policy-payload.json b/src/test/resources/tosca/guard2-policy-payload.json index 29beb6b98..559a56840 100644 --- a/src/test/resources/tosca/guard2-policy-payload.json +++ b/src/test/resources/tosca/guard2-policy-payload.json @@ -1,16 +1,14 @@ { - "policy-id": "guard2", + "policy-id": "guard.frequency.new", "content": { - "recipe": "Migrate", - "actor": "SO", - "clname": "testloop", + "actor": "APPC", + "recipe": "Rebuild", "targets": ".*", - "min": "1", - "max": "2", - "limit": "", - "timeUnits": "", - "timeWindow": "", - "guardActiveStart": "00:00:01-05:00", - "guardActiveEnd": "23:59:01-05:00" + "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca", + "guardActiveStart": "00:00:00Z", + "guardActiveEnd": "10:00:00Z", + "limit": "1", + "timeWindow": "2", + "timeUnits": "minute" } } \ No newline at end of file diff --git a/src/test/resources/tosca/operational-policy-json-schema.json b/src/test/resources/tosca/operational-policy-json-schema.json new file mode 100644 index 000000000..d6870dc9d --- /dev/null +++ b/src/test/resources/tosca/operational-policy-json-schema.json @@ -0,0 +1,574 @@ +{ + "schema": { + "uniqueItems": "true", + "format": "tabs", + "type": "array", + "minItems": 1, + "maxItems": 1, + "title": "Operational policies", + "items": { + "type": "object", + "title": "Operational Policy Item", + "id": "operational_policy_item", + "headerTemplate": "{{self.name}}", + "required": [ + "name", + "configurationsJson" + ], + "properties": { + "name": { + "type": "string", + "title": "Operational policy name", + "readOnly": "True" + }, + "configurationsJson": { + "type": "object", + "title": "Configuration", + "required": [ + "operational_policy", + "guard_policies" + ], + "properties": { + "operational_policy": { + "type": "object", + "title": "Related Parameters", + "required": [ + "controlLoop", + "policies" + ], + "properties": { + "controlLoop": { + "type": "object", + "title": "Control Loop details", + "required": [ + "timeout", + "abatement", + "trigger_policy", + "controlLoopName" + ], + "properties": { + "timeout": { + "type": "string", + "title": "Overall Time Limit", + "default": "0", + "format": "number" + }, + "abatement": { + "type": "string", + "title": "Abatement", + "enum": [ + "True", + "False" + ] + }, + "trigger_policy": { + "type": "string", + "title": "Policy Decision Entry" + }, + "controlLoopName": { + "type": "string", + "title": "Control loop name", + "readOnly": "True" + } + } + }, + "policies": { + "uniqueItems": "true", + "id": "policies_array", + "type": "array", + "title": "Policy Decision Tree", + "format": "tabs-top", + "items": { + "title": "Policy Decision", + "type": "object", + "id": "policy_item", + "headerTemplate": "{{self.id}} - {{self.recipe}}", + "format": "categories", + "basicCategoryTitle": "recipe", + "required": [ + "id", + "recipe", + "retry", + "timeout", + "actor", + "success", + "failure", + "failure_timeout", + "failure_retries", + "failure_exception", + "failure_guard", + "target" + ], + "properties": { + "id": { + "default": "Policy 1", + "title": "Policy ID", + "type": "string" + }, + "recipe": { + "title": "Recipe", + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "retry": { + "default": "0", + "title": "Number of Retry", + "type": "string", + "format": "number" + }, + "timeout": { + "default": "0", + "title": "Timeout", + "type": "string", + "format": "number" + }, + "actor": { + "title": "Actor", + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "payload": { + "title": "Payload (YAML)", + "type": "string", + "format": "textarea" + }, + "success": { + "default": "final_success", + "title": "When Success", + "type": "string" + }, + "failure": { + "default": "final_failure", + "title": "When Failure", + "type": "string" + }, + "failure_timeout": { + "default": "final_failure_timeout", + "title": "When Failure Timeout", + "type": "string" + }, + "failure_retries": { + "default": "final_failure_retries", + "title": "When Failure Retries", + "type": "string" + }, + "failure_exception": { + "default": "final_failure_exception", + "title": "When Failure Exception", + "type": "string" + }, + "failure_guard": { + "default": "final_failure_guard", + "title": "When Failure Guard", + "type": "string" + }, + "target": { + "type": "object", + "required": [ + "type", + "resourceID" + ], + "anyOf": [ + { + "title": "User Defined", + "additionalProperties": "True", + "properties": { + "type": { + "title": "Target type", + "type": "string", + "default": "", + "enum": [ + "VNF", + "VFMODULE", + "VM" + ] + }, + "resourceID": { + "title": "Target type", + "type": "string", + "default": "" + } + } + }, + { + "title": "VNF-vLoadBalancerMS 0", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VNF", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "vLoadBalancerMS", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..vpkg..module-1", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..vpkg..module-1", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "ca052563-eb92-4b5b-ad41-9111768ce043", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "1e725ccc-b823-4f67-82b9-4f4367070dbc", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..vpkg..module-1", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "1bffdc31-a37d-4dee-b65c-dde623a76e52", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..vdns..module-3", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..vdns..module-3", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "4c10ba9b-f88f-415e-9de3-5d33336047fa", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "4fa73b49-8a6c-493e-816b-eb401567b720", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..vdns..module-3", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "bafcdab0-801d-4d81-9ead-f464640a38b1", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..base_template..module-0", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..base_template..module-0", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "63734409-f745-4e4d-a38b-131638a0edce", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..base_template..module-0", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "86baddea-c730-4fb8-9410-cd2e17fd7f27", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..vlb..module-2", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..vlb..module-2", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "a772a1f4-0064-412c-833d-4749b15828dd", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "0f5c3f6a-650a-4303-abb6-fff3e573a07a", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..vlb..module-2", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806", + "readOnly": "True" + } + } + } + ] + } + } + } + } + } + }, + "guard_policies": { + "type": "array", + "format": "tabs-top", + "title": "Associated Guard policies", + "items": { + "headerTemplate": "{{self.policy-id}} - {{self.content.recipe}}", + "anyOf": [ + { + "title": "Guard MinMax", + "type": "object", + "properties": { + "policy-id": { + "type": "string", + "default": "guard.minmax.new", + "pattern": "^(guard.minmax\\..*)$" + }, + "content": { + "properties": { + "actor": { + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "recipe": { + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "targets": { + "type": "string", + "default": ".*" + }, + "clname": { + "type": "string", + "template": "{{loopName}}", + "watch": { + "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" + } + }, + "guardActiveStart": { + "type": "string", + "default": "00:00:00Z" + }, + "guardActiveEnd": { + "type": "string", + "default": "10:00:00Z" + }, + "min": { + "type": "string", + "default": "0" + }, + "max": { + "type": "string", + "default": "1" + } + } + } + } + }, + { + "title": "Guard Frequency", + "type": "object", + "properties": { + "policy-id": { + "type": "string", + "default": "guard.frequency.new", + "pattern": "^(guard.frequency\\..*)$" + }, + "content": { + "properties": { + "actor": { + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "recipe": { + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "targets": { + "type": "string", + "default": ".*" + }, + "clname": { + "type": "string", + "template": "{{loopName}}", + "watch": { + "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" + } + }, + "guardActiveStart": { + "type": "string", + "default": "00:00:00Z" + }, + "guardActiveEnd": { + "type": "string", + "default": "10:00:00Z" + }, + "limit": { + "type": "string" + }, + "timeWindow": { + "type": "string" + }, + "timeUnits": { + "type": "string", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "year" + ] + } + } + } + } + } + ] + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/test/resources/tosca/operational-policy-payload-legacy.yaml b/src/test/resources/tosca/operational-policy-payload-legacy.yaml index 41184c9c9..4d2b9f361 100644 --- a/src/test/resources/tosca/operational-policy-payload-legacy.yaml +++ b/src/test/resources/tosca/operational-policy-payload-legacy.yaml @@ -1,39 +1,43 @@ controlLoop: abatement: true - controlLoopName: control loop - timeout: 30 - trigger_policy: new1 - version: 2.0.0 + controlLoopName: LOOP_ASJOy_v1_0_ResourceInstanceName1_tca + timeout: 0 + trigger_policy: policy1 policies: -- actor: SO - failure: new2 - failure_exception: new2 - failure_guard: new2 - failure_retries: new2 - failure_timeout: new2 - id: new1 +- actor: APPC + failure: policy2 + failure_exception: final_failure_exception + failure_guard: final_failure_guard + failure_retries: final_failure_retries + failure_timeout: final_failure_timeout + id: policy1 payload: configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[10].value","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[15].value","enabled":"$.vf-module-topology.vf-module-parameters.param[22].value"}]' requestParameters: '{"usePreload":true,"userParams":[]}' - recipe: Rebuild - retry: 10 - success: new2 + recipe: Restart + retry: 0 + success: final_success target: - resourceTargetId: test - type: VFC - timeout: 20 -- actor: SDNC + resourceID: vLoadBalancerMS + type: VNF + timeout: 0 +- actor: SO failure: final_failure failure_exception: final_failure_exception failure_guard: final_failure_guard failure_retries: final_failure_retries failure_timeout: final_failure_timeout - id: new2 + id: policy2 payload: '' - recipe: Migrate - retry: 30 + recipe: VF Module Create + retry: 0 success: final_success target: - resourceTargetId: test - type: VFC - timeout: 40 + modelCustomizationId: 1bffdc31-a37d-4dee-b65c-dde623a76e52 + modelInvariantId: ca052563-eb92-4b5b-ad41-9111768ce043 + modelName: Vloadbalancerms..vpkg..module-1 + modelVersion: 1 + modelVersionId: 1e725ccc-b823-4f67-82b9-4f4367070dbc + resourceID: Vloadbalancerms..vpkg..module-1 + type: VFMODULE + timeout: 0 diff --git a/src/test/resources/tosca/operational-policy-payload.json b/src/test/resources/tosca/operational-policy-payload.json index 5097654da..ed0197606 100644 --- a/src/test/resources/tosca/operational-policy-payload.json +++ b/src/test/resources/tosca/operational-policy-payload.json @@ -1,4 +1,4 @@ { "policy-id": "testPolicy", - "content": "controlLoop%3A%0A++abatement%3A+true%0A++controlLoopName%3A+control+loop%0A++timeout%3A+30%0A++trigger_policy%3A+new1%0A++version%3A+2.0.0%0Apolicies%3A%0A-+actor%3A+SO%0A++failure%3A+new2%0A++failure_exception%3A+new2%0A++failure_guard%3A+new2%0A++failure_retries%3A+new2%0A++failure_timeout%3A+new2%0A++id%3A+new1%0A++payload%3A%0A++++configurationParameters%3A+%27%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B10%5D.value%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B15%5D.value%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B22%5D.value%22%7D%5D%27%0A++++requestParameters%3A+%27%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D%27%0A++recipe%3A+Rebuild%0A++retry%3A+10%0A++success%3A+new2%0A++target%3A%0A++++resourceTargetId%3A+test%0A++++type%3A+VFC%0A++timeout%3A+20%0A-+actor%3A+SDNC%0A++failure%3A+final_failure%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+new2%0A++payload%3A+%27%27%0A++recipe%3A+Migrate%0A++retry%3A+30%0A++success%3A+final_success%0A++target%3A%0A++++resourceTargetId%3A+test%0A++++type%3A+VFC%0A++timeout%3A+40%0A" + "content": "controlLoop%3A%0A++abatement%3A+true%0A++controlLoopName%3A+LOOP_ASJOy_v1_0_ResourceInstanceName1_tca%0A++timeout%3A+0%0A++trigger_policy%3A+policy1%0Apolicies%3A%0A-+actor%3A+APPC%0A++failure%3A+policy2%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+policy1%0A++payload%3A%0A++++configurationParameters%3A+%27%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B10%5D.value%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B15%5D.value%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B22%5D.value%22%7D%5D%27%0A++++requestParameters%3A+%27%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D%27%0A++recipe%3A+Restart%0A++retry%3A+0%0A++success%3A+final_success%0A++target%3A%0A++++resourceID%3A+vLoadBalancerMS%0A++++type%3A+VNF%0A++timeout%3A+0%0A-+actor%3A+SO%0A++failure%3A+final_failure%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+policy2%0A++payload%3A+%27%27%0A++recipe%3A+VF+Module+Create%0A++retry%3A+0%0A++success%3A+final_success%0A++target%3A%0A++++modelCustomizationId%3A+1bffdc31-a37d-4dee-b65c-dde623a76e52%0A++++modelInvariantId%3A+ca052563-eb92-4b5b-ad41-9111768ce043%0A++++modelName%3A+Vloadbalancerms..vpkg..module-1%0A++++modelVersion%3A+1%0A++++modelVersionId%3A+1e725ccc-b823-4f67-82b9-4f4367070dbc%0A++++resourceID%3A+Vloadbalancerms..vpkg..module-1%0A++++type%3A+VFMODULE%0A++timeout%3A+0%0A" } \ No newline at end of file diff --git a/src/test/resources/tosca/operational-policy-payload.yaml b/src/test/resources/tosca/operational-policy-payload.yaml index c3a6b5c23..ed03842f5 100644 --- a/src/test/resources/tosca/operational-policy-payload.yaml +++ b/src/test/resources/tosca/operational-policy-payload.yaml @@ -8,35 +8,45 @@ topology_template: policy-id: testPolicy properties: controlLoop: - controlLoopName: control loop - version: 2.0.0 - trigger_policy: new1 - timeout: '30' - abatement: 'true' + timeout: '0' + abatement: 'True' + trigger_policy: policy1 + controlLoopName: LOOP_ASJOy_v1_0_ResourceInstanceName1_tca policies: - - id: new1 - recipe: Rebuild - retry: '10' - timeout: '20' - actor: SO + - id: policy1 + recipe: Restart + retry: '0' + timeout: '0' + actor: APPC payload: requestParameters: '{"usePreload":true,"userParams":[]}' configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[10].value","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[15].value","enabled":"$.vf-module-topology.vf-module-parameters.param[22].value"}]' - success: new2 - failure: new2 - failure_timeout: new2 - failure_retries: new2 - failure_exception: new2 - failure_guard: new2 + success: final_success + failure: policy2 + failure_timeout: final_failure_timeout + failure_retries: final_failure_retries + failure_exception: final_failure_exception + failure_guard: final_failure_guard target: - type: VFC - resourceTargetId: test - - id: new2 - recipe: Migrate - retry: '30' - timeout: '40' - actor: SDNC + type: VNF + resourceID: vLoadBalancerMS + - id: policy2 + recipe: VF Module Create + retry: '0' + timeout: '0' + actor: SO payload: '' + 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 target: - type: VFC - resourceTargetId: test + type: VFMODULE + resourceID: Vloadbalancerms..vpkg..module-1 + modelInvariantId: ca052563-eb92-4b5b-ad41-9111768ce043 + modelVersionId: 1e725ccc-b823-4f67-82b9-4f4367070dbc + modelName: Vloadbalancerms..vpkg..module-1 + modelVersion: '1' + modelCustomizationId: 1bffdc31-a37d-4dee-b65c-dde623a76e52 diff --git a/src/test/resources/tosca/operational-policy-properties.json b/src/test/resources/tosca/operational-policy-properties.json index bfce6b331..ac1314ecb 100644 --- a/src/test/resources/tosca/operational-policy-properties.json +++ b/src/test/resources/tosca/operational-policy-properties.json @@ -1,71 +1,82 @@ { - "guard_policies": { - "guard1":{ - "recipe": "Rebuild", - "actor": "SO", - "clname": "testloop", - "targets": ".*", - "min": "3", - "max": "7", - "limit": "", - "timeUnits": "", - "timeWindow": "", - "guardActiveStart": "00:00:01-05:00", - "guardActiveEnd": "23:59:01-05:00" - }, - "guard2":{ - "recipe": "Migrate", - "actor": "SO", - "clname": "testloop", - "targets": ".*", - "min": "1", - "max": "2", - "limit": "", - "timeUnits": "", - "timeWindow": "", - "guardActiveStart": "00:00:01-05:00", - "guardActiveEnd": "23:59:01-05:00" - } - }, - "operational_policy": { - "controlLoop": { - "controlLoopName": "control loop", - "version": "2.0.0", - "trigger_policy": "new1", - "timeout": "30", - "abatement": "true" - }, - "policies": [ - { - "id": "new1", - "recipe": "Rebuild", - "retry": "10", - "timeout": "20", - "actor": "SO", - "payload": "requestParameters: '{\"usePreload\":true,\"userParams\":[]}'\r\nconfigurationParameters: '[{\"ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[10].value\",\"oam-ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[15].value\",\"enabled\":\"$.vf-module-topology.vf-module-parameters.param[22].value\"}]'", - "success": "new2", - "failure": "new2", - "failure_timeout": "new2", - "failure_retries": "new2", - "failure_exception": "new2", - "failure_guard": "new2", - "target": { - "type": "VFC", - "resourceTargetId": "test" - } - }, - { - "id": "new2", - "recipe": "Migrate", - "retry": "30", - "timeout": "40", - "actor": "SDNC", - "payload": "", - "target": { - "type": "VFC", - "resourceTargetId": "test" - } - } - ] - } + "operational_policy": { + "controlLoop": { + "timeout": "0", + "abatement": "True", + "trigger_policy": "policy1", + "controlLoopName": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca" + }, + "policies": [ + { + "id": "policy1", + "recipe": "Restart", + "retry": "0", + "timeout": "0", + "actor": "APPC", + "payload": "requestParameters: '{\"usePreload\":true,\"userParams\":[]}'\r\nconfigurationParameters: '[{\"ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[10].value\",\"oam-ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[15].value\",\"enabled\":\"$.vf-module-topology.vf-module-parameters.param[22].value\"}]'", + "success": "final_success", + "failure": "policy2", + "failure_timeout": "final_failure_timeout", + "failure_retries": "final_failure_retries", + "failure_exception": "final_failure_exception", + "failure_guard": "final_failure_guard", + "target": { + "type": "VNF", + "resourceID": "vLoadBalancerMS" + } + }, + { + "id": "policy2", + "recipe": "VF Module Create", + "retry": "0", + "timeout": "0", + "actor": "SO", + "payload": "", + "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", + "target": { + "type": "VFMODULE", + "resourceID": "Vloadbalancerms..vpkg..module-1", + "modelInvariantId": "ca052563-eb92-4b5b-ad41-9111768ce043", + "modelVersionId": "1e725ccc-b823-4f67-82b9-4f4367070dbc", + "modelName": "Vloadbalancerms..vpkg..module-1", + "modelVersion": "1", + "modelCustomizationId": "1bffdc31-a37d-4dee-b65c-dde623a76e52" + } + } + ] + }, + "guard_policies": [ + { + "policy-id": "guard.minmax.new", + "content": { + "actor": "APPC", + "recipe": "Restart", + "targets": ".*", + "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca", + "guardActiveStart": "00:00:00Z", + "guardActiveEnd": "10:00:00Z", + "min": "0", + "max": "1" + } + }, + { + "policy-id": "guard.frequency.new", + "content": { + "actor": "APPC", + "recipe": "Rebuild", + "targets": ".*", + "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca", + "guardActiveStart": "00:00:00Z", + "guardActiveEnd": "10:00:00Z", + "limit": "1", + "timeWindow": "2", + "timeUnits": "minute" + } + } + ] } diff --git a/src/test/resources/tosca/pdp-group-policy-payload.json b/src/test/resources/tosca/pdp-group-policy-payload.json index bf941e516..ad3a5b4c3 100644 --- a/src/test/resources/tosca/pdp-group-policy-payload.json +++ b/src/test/resources/tosca/pdp-group-policy-payload.json @@ -4,10 +4,10 @@ "policy-id": "GuardOpPolicyTest" }, { - "policy-id": "guard2" + "policy-id": "guard.minmax.new" }, { - "policy-id": "guard1" + "policy-id": "guard.frequency.new" }, { "policy-id": "configPolicyTest" diff --git a/ui-react/package.json b/ui-react/package.json index de7cb26d1..9c94ccc3f 100644 --- a/ui-react/package.json +++ b/ui-react/package.json @@ -13,7 +13,7 @@ "author": "ONAP Clamp Team", "license": "Apache-2.0", "dependencies": { - "@json-editor/json-editor": "1.3.5", + "@json-editor/json-editor": "1.4.0-beta.0", "react": "16.8.0", "react-dom": "16.8.0", "react-scripts": "3.0.1", diff --git a/ui-react/src/LoopUI.js b/ui-react/src/LoopUI.js index 5b8283f8f..b64cfbaa3 100644 --- a/ui-react/src/LoopUI.js +++ b/ui-react/src/LoopUI.js @@ -41,9 +41,9 @@ import ConfigurationPolicyModal from './components/dialogs/ConfigurationPolicy/C import LoopProperties from './components/dialogs/LoopProperties'; import UserInfo from './components/dialogs/UserInfo'; import LoopService from './api/LoopService'; -import PerformAction from './components/menu/PerformActions'; -import RefreshStatus from './components/menu/RefreshStatus'; -import DeployLoop from './components/menu/DeployLoop'; +import PerformAction from './components/dialogs/PerformActions'; +import RefreshStatus from './components/dialogs/RefreshStatus'; +import DeployLoop from './components/dialogs/DeployLoop'; const ProjectNameStyled = styled.a` vertical-align: middle; @@ -185,6 +185,7 @@ export default class LoopUI extends React.Component { this.setState({ loopCache: new LoopCache({}), loopName: LoopUI.defaultLoopName }); this.props.history.push('/'); } + render() { return (
diff --git a/ui-react/src/api/LoopCache.js b/ui-react/src/api/LoopCache.js index 3ee5acc68..d83e3ce9d 100644 --- a/ui-react/src/api/LoopCache.js +++ b/ui-react/src/api/LoopCache.js @@ -51,6 +51,10 @@ export default class LoopCache { getOperationalPolicyConfigurationJson() { return this.loopJsonCache["operationalPolicies"]["0"]["configurationsJson"]; } + + getOperationalPolicyJsonSchema() { + return this.loopJsonCache["operationalPolicySchema"]; + } getOperationalPolicies() { return this.loopJsonCache["operationalPolicies"]; diff --git a/ui-react/src/api/LoopService.js b/ui-react/src/api/LoopService.js index 031ec638f..eece20c96 100644 --- a/ui-react/src/api/LoopService.js +++ b/ui-react/src/api/LoopService.js @@ -104,6 +104,30 @@ export default class LoopService { return ""; }); } + + static setOperationalPolicyProperties(loopName, jsonData) { + return fetch('/restservices/clds/v2/loop/updateOperationalPolicies/' + loopName, { + method: 'POST', + credentials: 'same-origin', + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(jsonData), + }) + .then(function (response) { + console.debug("updateOperationalPolicies response received: ", response.status); + if (response.ok) { + return response.text(); + } else { + console.error("updateOperationalPolicies query failed"); + return ""; + } + }) + .catch(function (error) { + console.error("updateOperationalPolicies error received", error); + return ""; + }); + } static updateGlobalProperties(loopName, jsonData) { return fetch('/restservices/clds/v2/loop/updateGlobalProperties/' + loopName, { diff --git a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js index 4fbb7832c..9863ef721 100644 --- a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js +++ b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js @@ -103,7 +103,7 @@ export default class ConfigurationPolicyModal extends React.Component { render() { return ( - + Configuration policies diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js index 2a812c877..6db38fd23 100644 --- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js +++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js @@ -24,8 +24,9 @@ import React from 'react' import Button from 'react-bootstrap/Button'; import Modal from 'react-bootstrap/Modal'; -import './OperationalPolicy.css' import styled from 'styled-components'; +import LoopService from '../../../api/LoopService'; +import JSONEditor from '@json-editor/json-editor'; const ModalStyled = styled(Modal)` background-color: transparent; @@ -36,512 +37,94 @@ export default class OperationalPolicyModal extends React.Component { state = { show: true, loopCache: this.props.loopCache, + jsonEditor: null, }; - allPolicies = []; - policyIds = []; - constructor(props, context) { super(props, context); - this.handleClose = this.handleClose.bind(this); - this.initPolicySelect = this.initPolicySelect.bind(this); - this.initPolicySelect(); + this.handleSave = this.handleSave.bind(this); + this.renderJsonEditor = this.renderJsonEditor.bind(this); + this.setDefaultJsonEditorOptions(); } - handleClose() { - this.setState({ show: false }); - this.props.history.push('/') - } + handleSave() { + var errors = this.state.jsonEditor.validate(); + var editorData = this.state.jsonEditor.getValue(); - initPolicySelect() { - if (this.allPolicies['operational_policy'] === undefined || this.allPolicies['operational_policy'] === null) { - this.allPolicies = this.state.loopCache.getOperationalPolicyConfigurationJson(); + if (errors.length !== 0) { + console.error("Errors detected during config policy data validation ", errors); + alert(errors); } - // Provision all policies ID first - if (this.policyIds.length === 0 && this.allPolicies['operational_policy'] !== undefined) { - - for (let i = 0; i < this.allPolicies['operational_policy']['policies'].length; i++) { - this.policyIds.push(this.allPolicies['operational_policy']['policies'][i]['id']); - } + else { + console.info("NO validation errors found in config policy data"); + this.state.loopCache.updateOperationalPolicyProperties(editorData); + LoopService.setOperationalPolicyProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getOperationalPolicies()).then(resp => { + this.setState({ show: false }); + this.props.history.push('/'); + this.props.loadLoopFunction(this.state.loopCache.getLoopName()); + }); } } - renderPolicyIdSelect() { - return ( - - ); + handleClose() { + this.setState({ show: false }); + this.props.history.push('/'); } - serializeElement(element) { - var o = {}; - element.serializeArray().forEach(function () { - if (o[this.name]) { - if (!o[this.name].push) { - o[this.name] = [o[this.name]]; - } - o[this.name].push(this.value || ''); - } else { - o[this.name] = this.value || ''; - } - }); - return o; + componentDidMount() { + this.renderJsonEditor(); } - // When we change the name of a policy - isDuplicatedId(event) { - // update policy id structure - var formNum = document.getElementById(event.target).closest('.formId').attr('id').substring(6); - var policyId = document.getElementById(event.target).val(); - if (this.policyIds.includes(policyId)) { - console.log("Duplicated ID, cannot proceed"); - return true; - } else { - this.duplicated = false; - this.policyIds.splice(this.policyIds.indexOf(document.getElementById("#formId" + formNum + " #id").val()), 1); - this.policyIds.push(document.getElementById(event.target).val()); - // Update the tab now - document.getElementById("#go_properties_tab" + formNum).text(document.getElementById(event.target).val()); - } + setDefaultJsonEditorOptions() { + JSONEditor.defaults.options.theme = 'bootstrap4'; + // JSONEditor.defaults.options.iconlib = 'bootstrap2'; + + JSONEditor.defaults.options.object_layout = 'grid'; + JSONEditor.defaults.options.disable_properties = true; + JSONEditor.defaults.options.disable_edit_json = false; + JSONEditor.defaults.options.disable_array_reorder = true; + JSONEditor.defaults.options.disable_array_delete_last_row = true; + JSONEditor.defaults.options.disable_array_delete_all_rows = false; + JSONEditor.defaults.options.array_controls_top=true; + JSONEditor.defaults.options.show_errors = 'always'; + JSONEditor.defaults.options.keep_oneof_values=false; + JSONEditor.defaults.options.ajax=true; + JSONEditor.defaults.options.collapsed=true; + //JSONEditor.defaults.options.template = 'default'; } + + renderJsonEditor() { + console.debug("Rendering OperationalPolicyModal"); + var schema_json = this.state.loopCache.getOperationalPolicyJsonSchema(); + + if (schema_json == null) { + console.error("NO Operational policy schema found"); + return; + } + var operationalPoliciesData = this.state.loopCache.getOperationalPolicies(); - configureComponents() { - console.log("Load properties to op policy"); - // Set the header - document.getElementsByClassName('form-control').forEach(function () { - this.val(this.allPolicies['operational_policy']['controlLoop'][this.id]); - }); - // Set the sub-policies - this.allPolicies['operational_policy']['policies'].forEach(function (opPolicyElemIndex, opPolicyElemValue) { - - /* var formNum = add_one_more(); - forEach(document.getElementsByClassName('policyProperties').find('.form-control'), function(opPolicyPropIndex, opPolicyPropValue) { - - $("#formId" + formNum + " .policyProperties").find("#" + opPolicyPropValue.id).val( - allPolicies['operational_policy']['policies'][opPolicyElemIndex][opPolicyPropValue.id]); - }); - - // Initial TargetResourceId options - initTargetResourceIdOptions(allPolicies['operational_policy']['policies'][opPolicyElemIndex]['target']['type'], formNum); - $.each($('.policyTarget').find('.form-control'), function(opPolicyTargetPropIndex, opPolicyTargetPropValue) { - - $("#formId" + formNum + " .policyTarget").find("#" + opPolicyTargetPropValue.id).val( - allPolicies['operational_policy']['policies'][opPolicyElemIndex]['target'][opPolicyTargetPropValue.id]); - }); - - // update the current tab label - $("#go_properties_tab" + formNum).text( - allPolicies['operational_policy']['policies'][opPolicyElemIndex]['id']); - // Check if there is a guard set for it - $.each(allPolicies['guard_policies'], function(guardElemId, guardElemValue) { - - if (guardElemValue.recipe === $($("#formId" + formNum + " #recipe")[0]).val()) { - // Found one, set all guard prop - $.each($('.guardProperties').find('.form-control'), function(guardPropElemIndex, - guardPropElemValue) { - - guardElemValue['id'] = guardElemId; - $("#formId" + formNum + " .guardProperties").find("#" + guardPropElemValue.id).val( - guardElemValue[guardPropElemValue.id]); - }); - iniGuardPolicyType(guardElemId, formNum); - // And finally enable the flag - $("#formId" + formNum + " #enableGuardPolicy").prop("checked", true); - } - });*/ - }); + this.setState({ + jsonEditor: new JSONEditor(document.getElementById("editor"), + { schema: schema_json.schema, startval: operationalPoliciesData }) + }) } render() { return ( - + Operational policies -
-
-
-
-
- -
- {this.renderPolicyIdSelect()} -
- - -
- -
- - -
- -
-
-
- -
- -
-
-
-
- -
-
-
-
-
-
-
- - -
-
- -
- - ID must be unique -
-
-
- -
- -
-
-
- -
- - -
-
-
- -
- -
-
- -
- -
- -
- - -
- -
-
-
- -
- -
-
-
- -
- - -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
- -
- -
-
-
- -
- -
-
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
- -
- -
- -
- -
-
-
- -
- -
- -
-
-
- -
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- -
- -
- -
- -
- -
-
-
- -
- -
- -
- -
-
- -
- -
-
-
+
- diff --git a/ui-react/src/index.js b/ui-react/src/index.js index 39df36427..cbbdc65ef 100644 --- a/ui-react/src/index.js +++ b/ui-react/src/index.js @@ -32,7 +32,7 @@ const routing = ( ); -ReactDOM.render( +export var mainClamp = ReactDOM.render( routing, document.getElementById('root') ) diff --git a/ui-react/src/theme/globalStyle.js b/ui-react/src/theme/globalStyle.js index cbd86b199..0f6fb91c6 100644 --- a/ui-react/src/theme/globalStyle.js +++ b/ui-react/src/theme/globalStyle.js @@ -65,6 +65,19 @@ export const GlobalClampStyle = createGlobalStyle` width: 100%; height: 100%; } + + button { + background-color: ${props => (props.theme.loopViewerHeaderBackgroundColor)}; + border: 1px; + color: white; + padding: 15px 32px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: ${props => props.theme.fontSize}; + font-family: ${props => props.theme.fontFamily}; + + } ` export const DefaultClampTheme = { -- cgit 1.2.3-korg From 292e2c72a13a37791556dee35bb63415f848b50a Mon Sep 17 00:00:00 2001 From: sebdet Date: Tue, 20 Aug 2019 06:51:59 -0700 Subject: Fix SQL Fix SQL due to change in the Loop object Issue-ID: CLAMP-430 Change-Id: Ia97aaf58a71cb7d585ef2c296a97b911635ad8fb Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index aef3a7e7d..0e15d4d3a 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -24,7 +24,7 @@ global_properties_json json, last_computed_state varchar(255) not null, model_properties_json json, - operational_policy_schema json not null, + operational_policy_schema json, svg_representation MEDIUMTEXT, primary key (name) ) engine=InnoDB; -- cgit 1.2.3-korg From 289e8e1f1858e970f92b50a1e601521edeefd44f Mon Sep 17 00:00:00 2001 From: xuegao Date: Fri, 8 Nov 2019 13:10:36 +0100 Subject: Create Service object User Service object to store loop service and resource realted info. Issue-ID: CLAMP-545 Change-Id: I0df6f5d43d7e0575346e02a27bca5c0b5ecdb0a0 Signed-off-by: xuegao --- extra/sql/bulkload/create-tables.sql | 15 +- src/main/java/org/onap/clamp/loop/Loop.java | 18 +- .../org/onap/clamp/loop/LoopCsarInstaller.java | 18 +- .../java/org/onap/clamp/loop/service/Service.java | 137 ++++ .../OperationalPolicyRepresentationBuilder.java | 14 +- .../org/onap/clamp/clds/it/CldsServiceItCase.java | 2 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 9 +- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 4 +- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 28 +- src/test/java/org/onap/clamp/loop/ServiceTest.java | 55 ++ ...OperationalPolicyRepresentationBuilderTest.java | 5 +- src/test/resources/tosca/loop.json | 704 +++++++++++++++++++++ src/test/resources/tosca/model-properties.json | 10 - src/test/resources/tosca/resource-details.json | 96 +++ src/test/resources/tosca/service-details.json | 15 + ui-react/src/api/LoopCache.js | 4 +- ui-react/src/api/LoopCache_mokeLoopJsonCache.json | 2 +- ui-react/src/api/example.json | 2 +- 18 files changed, 1092 insertions(+), 46 deletions(-) create mode 100644 src/main/java/org/onap/clamp/loop/service/Service.java create mode 100644 src/test/java/org/onap/clamp/loop/ServiceTest.java create mode 100644 src/test/resources/tosca/loop.json create mode 100644 src/test/resources/tosca/resource-details.json create mode 100644 src/test/resources/tosca/service-details.json (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 0e15d4d3a..dafd80034 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -23,9 +23,9 @@ dcae_deployment_status_url varchar(255), global_properties_json json, last_computed_state varchar(255) not null, - model_properties_json json, operational_policy_schema json, svg_representation MEDIUMTEXT, + service_uuid varchar(255), primary key (name) ) engine=InnoDB; @@ -52,11 +52,24 @@ primary key (name) ) engine=InnoDB; + create table services ( + service_uuid varchar(255) not null, + name varchar(255) not null, + resource_details json, + service_details json, + primary key (service_uuid) + ) engine=InnoDB; + alter table loop_logs add constraint FK1j0cda46aickcaoxqoo34khg2 foreign key (loop_id) references loops (name); + alter table loops + add constraint FK4b9wnqopxogwek014i1shqw7w + foreign key (service_uuid) + references services (service_uuid); + alter table loops_microservicepolicies add constraint FKem7tp1cdlpwe28av7ef91j1yl foreign key (microservicepolicy_id) diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 37d597eeb..ef70ba80e 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -48,6 +48,7 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; @@ -61,6 +62,7 @@ import org.onap.clamp.loop.components.external.DcaeComponent; import org.onap.clamp.loop.components.external.ExternalComponent; import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LoopLog; +import org.onap.clamp.loop.service.Service; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; import org.onap.clamp.policy.operational.OperationalPolicyRepresentationBuilder; @@ -109,9 +111,9 @@ public class Loop implements Serializable { private JsonObject globalPropertiesJson; @Expose - @Type(type = "json") - @Column(columnDefinition = "json", name = "model_properties_json") - private JsonObject modelPropertiesJson; + @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL) + @JoinColumn(name = "service_uuid") + private Service modelService; @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") private String blueprint; @@ -266,15 +268,15 @@ public class Loop implements Serializable { this.dcaeBlueprintId = dcaeBlueprintId; } - public JsonObject getModelPropertiesJson() { - return modelPropertiesJson; + public Service getModelService() { + return modelService; } - void setModelPropertiesJson(JsonObject modelPropertiesJson) { - this.modelPropertiesJson = modelPropertiesJson; + void setModelService(Service modelService) { + this.modelService = modelService; try { this.operationalPolicySchema = OperationalPolicyRepresentationBuilder - .generateOperationalPolicySchema(this.getModelPropertiesJson()); + .generateOperationalPolicySchema(this.getModelService()); } catch (JsonSyntaxException | IOException | NullPointerException e) { logger.error("Unable to generate the operational policy Schema ... ", e); this.operationalPolicySchema = new JsonObject(); diff --git a/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java b/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java index b8bc1f524..55009bc22 100644 --- a/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java +++ b/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java @@ -46,6 +46,7 @@ import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller; import org.onap.clamp.clds.sdc.controller.installer.MicroService; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.drawing.SvgFacade; +import org.onap.clamp.loop.service.Service; import org.onap.clamp.policy.Policy; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -138,7 +139,7 @@ public class LoopCsarInstaller implements CsarInstaller { if (microServicesChain.isEmpty()) { microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); } - newLoop.setModelPropertiesJson(createModelPropertiesJson(csar)); + newLoop.setModelService(createServiceModel(csar)); newLoop.setMicroServicePolicies( createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop)); newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop)); @@ -219,16 +220,17 @@ public class LoopCsarInstaller implements CsarInstaller { return resourcesProp; } - private static JsonObject createModelPropertiesJson(CsarHandler csar) { - JsonObject modelProperties = new JsonObject(); - // Add service details - modelProperties.add("serviceDetails", JsonUtils.GSON.fromJson( - JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class)); + private Service createServiceModel(CsarHandler csar) { + JsonObject serviceDetails = JsonUtils.GSON.fromJson( + JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); + // Add properties details for each type, VfModule, VF, VFC, .... JsonObject resourcesProp = createServicePropertiesByType(csar); resourcesProp.add("VFModule", createVfModuleProperties(csar)); - modelProperties.add("resourceDetails", resourcesProp); - return modelProperties; + + Service modelService = new Service(serviceDetails, resourcesProp); + + return modelService; } private JsonObject getAllBlueprintParametersInJson(BlueprintArtifact blueprintArtifact, Loop newLoop) { diff --git a/src/main/java/org/onap/clamp/loop/service/Service.java b/src/main/java/org/onap/clamp/loop/service/Service.java new file mode 100644 index 000000000..ac1216b9d --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/service/Service.java @@ -0,0 +1,137 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.service; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.gson.JsonObject; +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; + +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; +import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.dao.model.jsontype.StringJsonUserType; + + +@Entity +@Table(name = "services") +@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) +public class Service implements Serializable { + + /** + * The serial version id. + */ + private static final long serialVersionUID = 1331119060272760758L; + + @Transient + private static final EELFLogger logger = EELFManager.getInstance().getLogger(Service.class); + + @Id + @Column(name = "service_uuid", unique = true) + private String serviceUuid; + + @Column(nullable = false, name = "name") + private String name; + + @Expose + @Type(type = "json") + @Column(columnDefinition = "json", name = "service_details") + private JsonObject serviceDetails; + + @Expose + @Type(type = "json") + @Column(columnDefinition = "json", name = "resource_details") + private JsonObject resourceDetails; + + /** + * Public constructor. + */ + public Service() { + } + + /** + * Constructor. + */ + public Service(JsonObject serviceDetails, JsonObject resourceDetails) { + this.name = serviceDetails.get("name").getAsString(); + this.serviceUuid = serviceDetails.get("UUID").getAsString(); + this.serviceDetails = serviceDetails; + this.resourceDetails = resourceDetails; + } + + public String getServiceUuid() { + return serviceUuid; + } + + public JsonObject getServiceDetails() { + return serviceDetails; + } + + public JsonObject getResourceDetails() { + return resourceDetails; + } + + public JsonObject getResourceByType(String type) { + return (JsonObject) resourceDetails.get(type); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((serviceUuid == null) ? 0 : serviceUuid.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Service other = (Service) obj; + if (serviceUuid == null) { + if (other.serviceUuid != null) { + return false; + } + } else if (!serviceUuid.equals(other.serviceUuid)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java index f6f3f498d..1d0d99080 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java @@ -33,6 +33,7 @@ import java.util.Map.Entry; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.loop.service.Service; public class OperationalPolicyRepresentationBuilder { @@ -47,7 +48,7 @@ public class OperationalPolicyRepresentationBuilder { * @throws JsonSyntaxException If the schema template cannot be parsed * @throws IOException In case of issue when opening the schema template */ - public static JsonObject generateOperationalPolicySchema(JsonObject modelJson) + public static JsonObject generateOperationalPolicySchema(Service modelJson) throws JsonSyntaxException, IOException { JsonObject jsonSchema = JsonUtils.GSON.fromJson( ResourceFileUtil.getResourceAsString("clds/json-schema/operational_policies/operational_policy.json"), @@ -78,9 +79,9 @@ public class OperationalPolicyRepresentationBuilder { return property; } - private static JsonArray createVnfSchema(JsonObject modelJson) { + private static JsonArray createVnfSchema(Service modelService) { JsonArray vnfSchemaArray = new JsonArray(); - JsonObject modelVnfs = modelJson.get("resourceDetails").getAsJsonObject().get("VF").getAsJsonObject(); + JsonObject modelVnfs = modelService.getResourceByType("VF"); for (Entry entry : modelVnfs.entrySet()) { JsonObject vnfOneOfSchema = new JsonObject(); @@ -96,10 +97,9 @@ public class OperationalPolicyRepresentationBuilder { return vnfSchemaArray; } - private static JsonArray createVfModuleSchema(JsonObject modelJson) { + private static JsonArray createVfModuleSchema(Service modelService) { JsonArray vfModuleOneOfSchemaArray = new JsonArray(); - JsonObject modelVfModules = modelJson.get("resourceDetails").getAsJsonObject().get("VFModule") - .getAsJsonObject(); + JsonObject modelVfModules = modelService.getResourceByType("VFModule"); for (Entry entry : modelVfModules.entrySet()) { JsonObject vfModuleOneOfSchema = new JsonObject(); @@ -137,7 +137,7 @@ public class OperationalPolicyRepresentationBuilder { return vfModuleOneOfSchemaArray; } - private static JsonArray createAnyOfArray(JsonObject modelJson) { + private static JsonArray createAnyOfArray(Service modelJson) { JsonArray targetOneOfStructure = new JsonArray(); targetOneOfStructure.addAll(createVnfSchema(modelJson)); targetOneOfStructure.addAll(createVfModuleSchema(modelJson)); diff --git a/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java index 072d57712..40cc0650e 100644 --- a/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java @@ -104,7 +104,6 @@ public class CldsServiceItCase { @Test public void testCldsInfoAuthorized() throws Exception { - Authentication authentication; List authList = new LinkedList(); authList.add(new SimpleGrantedAuthority("permission-type-cl-manage|dev|*")); authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|read")); @@ -113,6 +112,7 @@ public class CldsServiceItCase { authList.add(new SimpleGrantedAuthority("permission-type-template|dev|update")); authList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|*")); authList.add(new SimpleGrantedAuthority("permission-type-cl-event|dev|*")); + Authentication authentication; authentication = new UsernamePasswordAuthenticationToken(new User("admin", "", authList), "", authList); Mockito.when(securityContext.getAuthentication()).thenReturn(authentication); diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index fbf1f2079..e3271c7a6 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -202,10 +202,13 @@ public class CsarInstallerItCase { assertThat(loop.getGlobalPropertiesJson().get("dcaeDeployParameters")).isNotNull(); assertThat(loop.getMicroServicePolicies()).hasSize(1); assertThat(loop.getOperationalPolicies()).hasSize(1); - assertThat(loop.getModelPropertiesJson().get("serviceDetails")).isNotNull(); - assertThat(loop.getModelPropertiesJson().get("resourceDetails")).isNotNull(); + assertThat(loop.getModelService().getServiceUuid()).isEqualTo("63cac700-ab9a-4115-a74f-7eac85e3fce0"); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), - JsonUtils.GSON.toJson(loop.getModelPropertiesJson()), true); + JsonUtils.GSON_JPA_MODEL.toJson(loop.getModelService()), true); + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/service-details.json"), + JsonUtils.GSON_JPA_MODEL.toJson(loop.getModelService().getServiceDetails()), true); + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/resource-details.json"), + JsonUtils.GSON_JPA_MODEL.toJson(loop.getModelService().getResourceDetails()), true); assertThat(((MicroServicePolicy) (loop.getMicroServicePolicies().toArray()[0])).getModelType()).isNotEmpty(); loop = loopsRepo diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index 1fedc9abe..28a92e371 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -347,8 +347,8 @@ public class LoopServiceTestItCase { saveTestLoopToDb(); assertThat(microServicePolicyService.isExisting("policyName")).isFalse(); MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, microServicePolicy); assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); } diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index 3010fe50b..b68bf48a0 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -29,7 +29,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertNotNull; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; import java.io.IOException; import java.util.HashSet; @@ -41,6 +43,7 @@ import org.onap.clamp.clds.util.ResourceFileUtil; import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; +import org.onap.clamp.loop.service.Service; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; import org.skyscreamer.jsonassert.JSONAssert; @@ -54,7 +57,7 @@ public class LoopToJsonTest { } private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, - String dcaeId, String dcaeUrl, String dcaeBlueprintId) { + String dcaeId, String dcaeUrl, String dcaeBlueprintId) throws JsonSyntaxException, IOException { Loop loop = new Loop(name, blueprint, svgRepresentation); loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); loop.setLastComputedState(LoopState.DESIGN); @@ -115,6 +118,29 @@ public class LoopToJsonTest { "loop"); } + @Test + public void loopServiceTest() throws IOException { + Loop loopTest2 = getLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", + "123456789", "https://dcaetest.org", "UUID-blueprint"); + + JsonObject jsonModel = new GsonBuilder().create() + .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class); + Service service = new Service(jsonModel.get("serviceDetails").getAsJsonObject(), + jsonModel.get("resourceDetails").getAsJsonObject()); + loopTest2.setModelService(service); + + String jsonSerialized = JsonUtils.GSON_JPA_MODEL.toJson(loopTest2); + assertThat(jsonSerialized).isNotNull().isNotEmpty(); + System.out.println(jsonSerialized); + JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/loop.json"), + jsonSerialized, true); + + Loop loopTestDeserialized = JsonUtils.GSON_JPA_MODEL.fromJson(jsonSerialized, Loop.class); + assertNotNull(loopTestDeserialized); + assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest2, "modelService", + "svgRepresentation", "blueprint", "components"); + } + @Test public void createPoliciesPayloadPdpGroupTest() throws IOException { Loop loopTest = getLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", diff --git a/src/test/java/org/onap/clamp/loop/ServiceTest.java b/src/test/java/org/onap/clamp/loop/ServiceTest.java new file mode 100644 index 000000000..45de5385e --- /dev/null +++ b/src/test/java/org/onap/clamp/loop/ServiceTest.java @@ -0,0 +1,55 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonObject; + +import org.junit.Test; +import org.onap.clamp.clds.util.JsonUtils; +import org.onap.clamp.loop.service.Service; + +public class ServiceTest { + + @Test + public void equalMethodTest() { + String serviceStr1 = "{\"name\": \"vLoadBalancerMS\", \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\"}"; + String serviceStr2 = "{\"name\": \"vLoadBalancerMS2\", \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\"}"; + String serviceStr3 = "{\"name\": \"vLoadBalancerMS\",\"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fc11\"}"; + String resourceStr = "{\"CP\": {}}"; + + Service service1 = new Service(JsonUtils.GSON.fromJson(serviceStr1, JsonObject.class), + JsonUtils.GSON.fromJson(resourceStr, JsonObject.class)); + + Service service2 = new Service(JsonUtils.GSON.fromJson(serviceStr2, JsonObject.class), null); + + Service service3 = new Service(JsonUtils.GSON.fromJson(serviceStr3, JsonObject.class), + JsonUtils.GSON.fromJson(resourceStr, JsonObject.class)); + + assertThat(service1.equals(service2)).isEqualTo(true); + assertThat(service1.equals(service3)).isEqualTo(false); + } + +} diff --git a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java index 904525bea..673ac323d 100644 --- a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java +++ b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java @@ -32,6 +32,7 @@ import java.io.IOException; import org.junit.Test; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.loop.service.Service; import org.skyscreamer.jsonassert.JSONAssert; public class OperationalPolicyRepresentationBuilderTest { @@ -40,8 +41,10 @@ public class OperationalPolicyRepresentationBuilderTest { public void testOperationalPolicyPayloadConstruction() throws IOException { JsonObject jsonModel = new GsonBuilder().create() .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class); + Service service = new Service(jsonModel.get("serviceDetails").getAsJsonObject(), + jsonModel.get("resourceDetails").getAsJsonObject()); - JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(jsonModel); + JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(service); assertThat(jsonSchema).isNotNull(); diff --git a/src/test/resources/tosca/loop.json b/src/test/resources/tosca/loop.json new file mode 100644 index 000000000..557fa6f69 --- /dev/null +++ b/src/test/resources/tosca/loop.json @@ -0,0 +1,704 @@ +{ + "name": "ControlLoopTest", + "dcaeDeploymentId": "123456789", + "dcaeDeploymentStatusUrl": "https://dcaetest.org", + "dcaeBlueprintId": "UUID-blueprint", + "operationalPolicySchema": { + "schema": { + "uniqueItems": "true", + "format": "tabs", + "type": "array", + "minItems": 1, + "maxItems": 1, + "title": "Operational policies", + "items": { + "type": "object", + "title": "Operational Policy Item", + "id": "operational_policy_item", + "headerTemplate": "{{self.name}}", + "required": [ + "name", + "configurationsJson" + ], + "properties": { + "name": { + "type": "string", + "title": "Operational policy name", + "readOnly": "True" + }, + "configurationsJson": { + "type": "object", + "title": "Configuration", + "required": [ + "operational_policy", + "guard_policies" + ], + "properties": { + "operational_policy": { + "type": "object", + "title": "Related Parameters", + "required": [ + "controlLoop", + "policies" + ], + "properties": { + "controlLoop": { + "type": "object", + "title": "Control Loop details", + "required": [ + "timeout", + "abatement", + "trigger_policy", + "controlLoopName" + ], + "properties": { + "timeout": { + "type": "string", + "title": "Overall Time Limit", + "default": "0", + "format": "number" + }, + "abatement": { + "type": "string", + "title": "Abatement", + "enum": [ + "True", + "False" + ] + }, + "trigger_policy": { + "type": "string", + "title": "Policy Decision Entry" + }, + "controlLoopName": { + "type": "string", + "title": "Control loop name", + "readOnly": "True" + } + } + }, + "policies": { + "uniqueItems": "true", + "id": "policies_array", + "type": "array", + "title": "Policy Decision Tree", + "format": "tabs-top", + "items": { + "title": "Policy Decision", + "type": "object", + "id": "policy_item", + "headerTemplate": "{{self.id}} - {{self.recipe}}", + "format": "categories", + "basicCategoryTitle": "recipe", + "required": [ + "id", + "recipe", + "retry", + "timeout", + "actor", + "success", + "failure", + "failure_timeout", + "failure_retries", + "failure_exception", + "failure_guard", + "target" + ], + "properties": { + "id": { + "default": "Policy 1", + "title": "Policy ID", + "type": "string" + }, + "recipe": { + "title": "Recipe", + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "retry": { + "default": "0", + "title": "Number of Retry", + "type": "string", + "format": "number" + }, + "timeout": { + "default": "0", + "title": "Timeout", + "type": "string", + "format": "number" + }, + "actor": { + "title": "Actor", + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "payload": { + "title": "Payload (YAML)", + "type": "string", + "format": "textarea" + }, + "success": { + "default": "final_success", + "title": "When Success", + "type": "string" + }, + "failure": { + "default": "final_failure", + "title": "When Failure", + "type": "string" + }, + "failure_timeout": { + "default": "final_failure_timeout", + "title": "When Failure Timeout", + "type": "string" + }, + "failure_retries": { + "default": "final_failure_retries", + "title": "When Failure Retries", + "type": "string" + }, + "failure_exception": { + "default": "final_failure_exception", + "title": "When Failure Exception", + "type": "string" + }, + "failure_guard": { + "default": "final_failure_guard", + "title": "When Failure Guard", + "type": "string" + }, + "target": { + "type": "object", + "required": [ + "type", + "resourceID" + ], + "anyOf": [ + { + "title": "User Defined", + "additionalProperties": "True", + "properties": { + "type": { + "title": "Target type", + "type": "string", + "default": "", + "enum": [ + "VNF", + "VFMODULE", + "VM" + ] + }, + "resourceID": { + "title": "Target type", + "type": "string", + "default": "" + } + } + }, + { + "title": "VNF-vLoadBalancerMS 0", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VNF", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "vLoadBalancerMS", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..vpkg..module-1", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..vpkg..module-1", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "ca052563-eb92-4b5b-ad41-9111768ce043", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "1e725ccc-b823-4f67-82b9-4f4367070dbc", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..vpkg..module-1", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "1bffdc31-a37d-4dee-b65c-dde623a76e52", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..vdns..module-3", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..vdns..module-3", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "4c10ba9b-f88f-415e-9de3-5d33336047fa", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "4fa73b49-8a6c-493e-816b-eb401567b720", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..vdns..module-3", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "bafcdab0-801d-4d81-9ead-f464640a38b1", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..base_template..module-0", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..base_template..module-0", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "63734409-f745-4e4d-a38b-131638a0edce", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..base_template..module-0", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "86baddea-c730-4fb8-9410-cd2e17fd7f27", + "readOnly": "True" + } + } + }, + { + "title": "VFMODULE-Vloadbalancerms..vlb..module-2", + "properties": { + "type": { + "title": "Type", + "type": "string", + "default": "VFMODULE", + "readOnly": "True" + }, + "resourceID": { + "title": "Resource ID", + "type": "string", + "default": "Vloadbalancerms..vlb..module-2", + "readOnly": "True" + }, + "modelInvariantId": { + "title": "Model Invariant Id (ModelInvariantUUID)", + "type": "string", + "default": "a772a1f4-0064-412c-833d-4749b15828dd", + "readOnly": "True" + }, + "modelVersionId": { + "title": "Model Version Id (ModelUUID)", + "type": "string", + "default": "0f5c3f6a-650a-4303-abb6-fff3e573a07a", + "readOnly": "True" + }, + "modelName": { + "title": "Model Name", + "type": "string", + "default": "Vloadbalancerms..vlb..module-2", + "readOnly": "True" + }, + "modelVersion": { + "title": "Model Version", + "type": "string", + "default": "1", + "readOnly": "True" + }, + "modelCustomizationId": { + "title": "Customization ID", + "type": "string", + "default": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806", + "readOnly": "True" + } + } + } + ] + } + } + } + } + } + }, + "guard_policies": { + "type": "array", + "format": "tabs-top", + "title": "Associated Guard policies", + "items": { + "headerTemplate": "{{self.policy-id}} - {{self.content.recipe}}", + "anyOf": [ + { + "title": "Guard MinMax", + "type": "object", + "properties": { + "policy-id": { + "type": "string", + "default": "guard.minmax.new", + "pattern": "^(guard.minmax\\..*)$" + }, + "content": { + "properties": { + "actor": { + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "recipe": { + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "targets": { + "type": "string", + "default": ".*" + }, + "clname": { + "type": "string", + "template": "{{loopName}}", + "watch": { + "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" + } + }, + "guardActiveStart": { + "type": "string", + "default": "00:00:00Z" + }, + "guardActiveEnd": { + "type": "string", + "default": "10:00:00Z" + }, + "min": { + "type": "string", + "default": "0" + }, + "max": { + "type": "string", + "default": "1" + } + } + } + } + }, + { + "title": "Guard Frequency", + "type": "object", + "properties": { + "policy-id": { + "type": "string", + "default": "guard.frequency.new", + "pattern": "^(guard.frequency\\..*)$" + }, + "content": { + "properties": { + "actor": { + "type": "string", + "enum": [ + "APPC", + "SO", + "VFC", + "SDNC", + "SDNR" + ] + }, + "recipe": { + "type": "string", + "enum": [ + "Restart", + "Rebuild", + "Migrate", + "Health-Check", + "ModifyConfig", + "VF Module Create", + "VF Module Delete", + "Reroute" + ] + }, + "targets": { + "type": "string", + "default": ".*" + }, + "clname": { + "type": "string", + "template": "{{loopName}}", + "watch": { + "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" + } + }, + "guardActiveStart": { + "type": "string", + "default": "00:00:00Z" + }, + "guardActiveEnd": { + "type": "string", + "default": "10:00:00Z" + }, + "limit": { + "type": "string" + }, + "timeWindow": { + "type": "string" + }, + "timeUnits": { + "type": "string", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "year" + ] + } + } + } + } + } + ] + } + } + } + } + } + } + } + }, + "globalPropertiesJson": { + "testname": "testvalue" + }, + "modelService": { + "serviceDetails": { + "serviceType": "", + "namingPolicy": "", + "environmentContext": "General_Revenue-Bearing", + "serviceEcompNaming": "true", + "serviceRole": "", + "name": "vLoadBalancerMS", + "description": "vLBMS", + "invariantUUID": "30ec5b59-4799-48d8-ac5f-1058a6b0e48f", + "ecompGeneratedNaming": "true", + "category": "Network L4+", + "type": "Service", + "UUID": "63cac700-ab9a-4115-a74f-7eac85e3fce0", + "instantiationType": "A-la-carte" + }, + "resourceDetails": { + "CP": {}, + "VL": {}, + "VF": { + "vLoadBalancerMS 0": { + "resourceVendor": "Test", + "resourceVendorModelNumber": "", + "name": "vLoadBalancerMS", + "description": "vLBMS", + "invariantUUID": "1a31b9f2-e50d-43b7-89b3-a040250cf506", + "subcategory": "Load Balancer", + "category": "Application L4+", + "type": "VF", + "UUID": "b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6", + "version": "1.0", + "resourceVendorRelease": "1.0", + "customizationUUID": "465246dc-7748-45f4-a013-308d92922552" + } + }, + "CR": {}, + "VFC": {}, + "PNF": {}, + "Service": {}, + "CVFC": {}, + "Service Proxy": {}, + "Configuration": {}, + "AllottedResource": {}, + "VFModule": { + "Vloadbalancerms..vpkg..module-1": { + "vfModuleModelInvariantUUID": "ca052563-eb92-4b5b-ad41-9111768ce043", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..vpkg..module-1", + "vfModuleModelUUID": "1e725ccc-b823-4f67-82b9-4f4367070dbc", + "vfModuleModelCustomizationUUID": "1bffdc31-a37d-4dee-b65c-dde623a76e52", + "min_vf_module_instances": 0, + "vf_module_label": "vpkg", + "max_vf_module_instances": 1, + "vf_module_type": "Expansion", + "isBase": false, + "initial_count": 0, + "volume_group": false + }, + "Vloadbalancerms..vdns..module-3": { + "vfModuleModelInvariantUUID": "4c10ba9b-f88f-415e-9de3-5d33336047fa", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..vdns..module-3", + "vfModuleModelUUID": "4fa73b49-8a6c-493e-816b-eb401567b720", + "vfModuleModelCustomizationUUID": "bafcdab0-801d-4d81-9ead-f464640a38b1", + "min_vf_module_instances": 0, + "vf_module_label": "vdns", + "max_vf_module_instances": 50, + "vf_module_type": "Expansion", + "isBase": false, + "initial_count": 0, + "volume_group": false + }, + "Vloadbalancerms..base_template..module-0": { + "vfModuleModelInvariantUUID": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..base_template..module-0", + "vfModuleModelUUID": "63734409-f745-4e4d-a38b-131638a0edce", + "vfModuleModelCustomizationUUID": "86baddea-c730-4fb8-9410-cd2e17fd7f27", + "min_vf_module_instances": 1, + "vf_module_label": "base_template", + "max_vf_module_instances": 1, + "vf_module_type": "Base", + "isBase": true, + "initial_count": 1, + "volume_group": false + }, + "Vloadbalancerms..vlb..module-2": { + "vfModuleModelInvariantUUID": "a772a1f4-0064-412c-833d-4749b15828dd", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..vlb..module-2", + "vfModuleModelUUID": "0f5c3f6a-650a-4303-abb6-fff3e573a07a", + "vfModuleModelCustomizationUUID": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806", + "min_vf_module_instances": 0, + "vf_module_label": "vlb", + "max_vf_module_instances": 1, + "vf_module_type": "Expansion", + "isBase": false, + "initial_count": 0, + "volume_group": false + } + } + } + }, + "lastComputedState": "DESIGN", + "components": { + "POLICY": { + "componentState": { + "stateName": "UNKNOWN", + "description": "The current status is not clear. Need to regresh the status to get the current status." + } + }, + "DCAE": { + "componentState": { + "stateName": "BLUEPRINT_DEPLOYED", + "description": "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop" + } + } + }, + "operationalPolicies": [], + "microServicePolicies": [], + "loopLogs": [] +} diff --git a/src/test/resources/tosca/model-properties.json b/src/test/resources/tosca/model-properties.json index 9e7db8ebc..e41471b16 100644 --- a/src/test/resources/tosca/model-properties.json +++ b/src/test/resources/tosca/model-properties.json @@ -16,10 +16,8 @@ }, "resourceDetails": { "CP": { - }, "VL": { - }, "VF": { "vLoadBalancerMS 0": { @@ -38,28 +36,20 @@ } }, "CR": { - }, "VFC": { - }, "PNF": { - }, "Service": { - }, "CVFC": { - }, "Service Proxy": { - }, "Configuration": { - }, "AllottedResource": { - }, "VFModule": { "Vloadbalancerms..vpkg..module-1": { diff --git a/src/test/resources/tosca/resource-details.json b/src/test/resources/tosca/resource-details.json new file mode 100644 index 000000000..7b53f3972 --- /dev/null +++ b/src/test/resources/tosca/resource-details.json @@ -0,0 +1,96 @@ +{ + "CP": { + }, + "VL": { + }, + "VF": { + "vLoadBalancerMS 0": { + "resourceVendor": "Test", + "resourceVendorModelNumber": "", + "name": "vLoadBalancerMS", + "description": "vLBMS", + "invariantUUID": "1a31b9f2-e50d-43b7-89b3-a040250cf506", + "subcategory": "Load Balancer", + "category": "Application L4+", + "type": "VF", + "UUID": "b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6", + "version": "1.0", + "resourceVendorRelease": "1.0", + "customizationUUID": "465246dc-7748-45f4-a013-308d92922552" + } + }, + "CR": { + }, + "VFC": { + }, + "PNF": { + }, + "Service": { + }, + "CVFC": { + }, + "Service Proxy": { + }, + "Configuration": { + }, + "AllottedResource": { + }, + "VFModule": { + "Vloadbalancerms..vpkg..module-1": { + "vfModuleModelInvariantUUID": "ca052563-eb92-4b5b-ad41-9111768ce043", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..vpkg..module-1", + "vfModuleModelUUID": "1e725ccc-b823-4f67-82b9-4f4367070dbc", + "vfModuleModelCustomizationUUID": "1bffdc31-a37d-4dee-b65c-dde623a76e52", + "min_vf_module_instances": 0, + "vf_module_label": "vpkg", + "max_vf_module_instances": 1, + "vf_module_type": "Expansion", + "isBase": false, + "initial_count": 0, + "volume_group": false + }, + "Vloadbalancerms..vdns..module-3": { + "vfModuleModelInvariantUUID": "4c10ba9b-f88f-415e-9de3-5d33336047fa", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..vdns..module-3", + "vfModuleModelUUID": "4fa73b49-8a6c-493e-816b-eb401567b720", + "vfModuleModelCustomizationUUID": "bafcdab0-801d-4d81-9ead-f464640a38b1", + "min_vf_module_instances": 0, + "vf_module_label": "vdns", + "max_vf_module_instances": 50, + "vf_module_type": "Expansion", + "isBase": false, + "initial_count": 0, + "volume_group": false + }, + "Vloadbalancerms..base_template..module-0": { + "vfModuleModelInvariantUUID": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..base_template..module-0", + "vfModuleModelUUID": "63734409-f745-4e4d-a38b-131638a0edce", + "vfModuleModelCustomizationUUID": "86baddea-c730-4fb8-9410-cd2e17fd7f27", + "min_vf_module_instances": 1, + "vf_module_label": "base_template", + "max_vf_module_instances": 1, + "vf_module_type": "Base", + "isBase": true, + "initial_count": 1, + "volume_group": false + }, + "Vloadbalancerms..vlb..module-2": { + "vfModuleModelInvariantUUID": "a772a1f4-0064-412c-833d-4749b15828dd", + "vfModuleModelVersion": "1", + "vfModuleModelName": "Vloadbalancerms..vlb..module-2", + "vfModuleModelUUID": "0f5c3f6a-650a-4303-abb6-fff3e573a07a", + "vfModuleModelCustomizationUUID": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806", + "min_vf_module_instances": 0, + "vf_module_label": "vlb", + "max_vf_module_instances": 1, + "vf_module_type": "Expansion", + "isBase": false, + "initial_count": 0, + "volume_group": false + } + } +} \ No newline at end of file diff --git a/src/test/resources/tosca/service-details.json b/src/test/resources/tosca/service-details.json new file mode 100644 index 000000000..f41eec107 --- /dev/null +++ b/src/test/resources/tosca/service-details.json @@ -0,0 +1,15 @@ +{ + "serviceType": "", + "namingPolicy": "", + "environmentContext": "General_Revenue-Bearing", + "serviceEcompNaming": "true", + "serviceRole": "", + "name": "vLoadBalancerMS", + "description": "vLBMS", + "invariantUUID": "30ec5b59-4799-48d8-ac5f-1058a6b0e48f", + "ecompGeneratedNaming": "true", + "category": "Network L4+", + "type": "Service", + "UUID": "63cac700-ab9a-4115-a74f-7eac85e3fce0", + "instantiationType": "A-la-carte" +} \ No newline at end of file diff --git a/ui-react/src/api/LoopCache.js b/ui-react/src/api/LoopCache.js index dd8c5b520..95eb9310e 100644 --- a/ui-react/src/api/LoopCache.js +++ b/ui-react/src/api/LoopCache.js @@ -99,11 +99,11 @@ export default class LoopCache { } getResourceDetailsVfProperty() { - return this.loopJsonCache["modelPropertiesJson"]["resourceDetails"]["VF"]; + return this.loopJsonCache["modelService"]["resourceDetails"]["VF"]; } getResourceDetailsVfModuleProperty() { - return this.loopJsonCache["modelPropertiesJson"]["resourceDetails"]["VFModule"]; + return this.loopJsonCache["modelService"]["resourceDetails"]["VFModule"]; } getLoopLogsArray() { diff --git a/ui-react/src/api/LoopCache_mokeLoopJsonCache.json b/ui-react/src/api/LoopCache_mokeLoopJsonCache.json index 184eaf7cd..c84b5b691 100644 --- a/ui-react/src/api/LoopCache_mokeLoopJsonCache.json +++ b/ui-react/src/api/LoopCache_mokeLoopJsonCache.json @@ -8,7 +8,7 @@ "policy_id": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca" } }, - "modelPropertiesJson": { + "modelService": { "serviceDetails": { "serviceType": "", "namingPolicy": "", diff --git a/ui-react/src/api/example.json b/ui-react/src/api/example.json index 108cf78e2..7b9a95a23 100644 --- a/ui-react/src/api/example.json +++ b/ui-react/src/api/example.json @@ -8,7 +8,7 @@ "policy_id": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca" } }, - "modelPropertiesJson": { + "modelService": { "serviceDetails": { "serviceType": "", "namingPolicy": "", -- cgit 1.2.3-korg From 69c24994501aead95d5ee9fa172fff659ae34fa4 Mon Sep 17 00:00:00 2001 From: xuegao Date: Fri, 6 Dec 2019 10:40:49 +0100 Subject: Update service object Seperate the procedure to install service and loops. Issue-ID: CLAMP-566 Change-Id: Ied7143ce8849baffda7678e82f4d6c4d9f1443d9 Signed-off-by: xuegao --- extra/sql/bulkload/create-tables.sql | 1 + .../config/spring/SdcControllerConfiguration.java | 4 +- .../clds/sdc/controller/SdcSingleController.java | 2 +- .../sdc/controller/installer/CsarInstaller.java | 34 --- .../java/org/onap/clamp/loop/CsarInstaller.java | 327 +++++++++++++++++++++ src/main/java/org/onap/clamp/loop/Loop.java | 2 +- .../org/onap/clamp/loop/LoopCsarInstaller.java | 280 ------------------ .../java/org/onap/clamp/loop/service/Service.java | 6 +- .../onap/clamp/loop/service/ServiceRepository.java | 32 ++ .../sdc/controller/SdcSingleControllerItCase.java | 2 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 9 +- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 2 +- src/test/java/org/onap/clamp/loop/ServiceTest.java | 6 +- ...OperationalPolicyRepresentationBuilderTest.java | 2 +- 14 files changed, 382 insertions(+), 327 deletions(-) delete mode 100644 src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java create mode 100644 src/main/java/org/onap/clamp/loop/CsarInstaller.java delete mode 100644 src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java create mode 100644 src/main/java/org/onap/clamp/loop/service/ServiceRepository.java (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index dafd80034..85b8f85f9 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -57,6 +57,7 @@ name varchar(255) not null, resource_details json, service_details json, + version varchar(255), primary key (service_uuid) ) engine=InnoDB; diff --git a/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java b/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java index b4794c940..261288503 100644 --- a/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java @@ -37,7 +37,7 @@ import org.onap.clamp.clds.config.sdc.SdcControllersConfiguration; import org.onap.clamp.clds.exception.sdc.controller.SdcControllerException; import org.onap.clamp.clds.sdc.controller.SdcSingleController; import org.onap.clamp.clds.sdc.controller.SdcSingleControllerStatus; -import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller; +import org.onap.clamp.loop.CsarInstaller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; @@ -58,7 +58,7 @@ public class SdcControllerConfiguration { @Autowired public SdcControllerConfiguration(ClampProperties clampProp, - @Qualifier("loopInstaller") CsarInstaller csarInstaller) { + @Qualifier("csarInstaller") CsarInstaller csarInstaller) { this.clampProp = clampProp; this.csarInstaller = csarInstaller; } diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java index 3e684f425..bd18baea6 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java @@ -39,8 +39,8 @@ import org.onap.clamp.clds.exception.sdc.controller.SdcControllerException; import org.onap.clamp.clds.exception.sdc.controller.SdcDownloadException; import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact; import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller; import org.onap.clamp.clds.util.LoggingUtils; +import org.onap.clamp.loop.CsarInstaller; import org.onap.sdc.api.IDistributionClient; import org.onap.sdc.api.consumer.IDistributionStatusMessage; import org.onap.sdc.api.consumer.INotificationCallback; diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java deleted file mode 100644 index 10e2790f6..000000000 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java +++ /dev/null @@ -1,34 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.clds.sdc.controller.installer; - -import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; - -public interface CsarInstaller { - String TEMPLATE_NAME_PREFIX = "DCAE-Designer-Template-"; - - boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException; - - public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException; -} diff --git a/src/main/java/org/onap/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/clamp/loop/CsarInstaller.java new file mode 100644 index 000000000..3f69e116c --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/CsarInstaller.java @@ -0,0 +1,327 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.json.simple.parser.ParseException; +import org.onap.clamp.clds.client.DcaeInventoryServices; +import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; +import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser; +import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; +import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; +import org.onap.clamp.clds.sdc.controller.installer.MicroService; +import org.onap.clamp.clds.util.JsonUtils; +import org.onap.clamp.clds.util.drawing.SvgFacade; +import org.onap.clamp.loop.service.Service; +import org.onap.clamp.loop.service.ServiceRepository; +import org.onap.clamp.policy.Policy; +import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.policy.operational.OperationalPolicy; +import org.onap.sdc.tosca.parser.api.IEntityDetails; +import org.onap.sdc.tosca.parser.elements.queries.EntityQuery; +import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery; +import org.onap.sdc.tosca.parser.enums.EntityTemplateType; +import org.onap.sdc.tosca.parser.enums.SdcTypes; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.Property; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.yaml.snakeyaml.Yaml; + +/** + * This class will be instantiated by spring config, and used by Sdc Controller. + * There is no state kept by the bean. It's used to deploy the csar/notification + * received from SDC in DB. + */ +@Component +@Qualifier("csarInstaller") +public class CsarInstaller { + + private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarInstaller.class); + public static final String CONTROL_NAME_PREFIX = "ClosedLoop-"; + public static final String GET_INPUT_BLUEPRINT_PARAM = "get_input"; + // This will be used later as the policy scope + public static final String MODEL_NAME_PREFIX = "Loop_"; + + @Autowired + LoopsRepository loopRepository; + + @Autowired + ServiceRepository serviceRepository; + + @Autowired + BlueprintParser blueprintParser; + + @Autowired + ChainGenerator chainGenerator; + + @Autowired + DcaeInventoryServices dcaeInventoryService; + + @Autowired + private SvgFacade svgFacade; + + /** + * Verify whether Csar is deployed. + * + * @param csar The Csar Handler + * @return The flag indicating whether Csar is deployed + * @throws SdcArtifactInstallerException The SdcArtifactInstallerException + */ + public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { + boolean alreadyInstalled = true; + JsonObject serviceDetails = JsonUtils.GSON.fromJson( + JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); + alreadyInstalled = alreadyInstalled + && serviceRepository.existsById(serviceDetails.get("UUID").getAsString()); + + for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { + alreadyInstalled = alreadyInstalled + && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), + csar.getSdcNotification().getServiceVersion(), + blueprint.getValue().getResourceAttached().getResourceInstanceName(), + blueprint.getValue().getBlueprintArtifactName())); + } + + return alreadyInstalled; + } + + /** + * Install the service and loops from the csar. + * + * @param csar The Csar Handler + * @throws SdcArtifactInstallerException The SdcArtifactInstallerException + * @throws InterruptedException The InterruptedException + */ + public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException { + logger.info("Installing the CSAR " + csar.getFilePath()); + installTheLoop(csar, installTheService(csar)); + logger.info("Successfully installed the CSAR " + csar.getFilePath()); + } + + /** + * Install the Loop from the csar. + * + * @param csar The Csar Handler + * @param service The service object that is related to the loop + * @throws SdcArtifactInstallerException The SdcArtifactInstallerException + * @throws InterruptedException The InterruptedException + */ + @Transactional(propagation = Propagation.REQUIRED) + public void installTheLoop(CsarHandler csar, Service service) + throws SdcArtifactInstallerException, InterruptedException { + try { + logger.info("Installing the Loops"); + for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { + logger.info("Processing blueprint " + blueprint.getValue().getBlueprintArtifactName()); + loopRepository.save(createLoopFromBlueprint(csar, blueprint.getValue(), service)); + } + logger.info("Successfully installed the Loops "); + } catch (IOException e) { + throw new SdcArtifactInstallerException("Exception caught during the Loop installation in database", e); + } catch (ParseException e) { + throw new SdcArtifactInstallerException("Exception caught during the Dcae query to get ServiceTypeId", e); + } + } + + /** + * Install the Service from the csar. + * + * @param csar The Csar Handler + * @return The service object + */ + @Transactional + public Service installTheService(CsarHandler csar) { + logger.info("Start to install the Service from csar"); + JsonObject serviceDetails = JsonUtils.GSON.fromJson( + JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); + + // Add properties details for each type, VfModule, VF, VFC, .... + JsonObject resourcesProp = createServicePropertiesByType(csar); + resourcesProp.add("VFModule", createVfModuleProperties(csar)); + + Service modelService = new Service(serviceDetails, resourcesProp, + csar.getSdcNotification().getServiceVersion()); + + serviceRepository.save(modelService); + logger.info("Successfully installed the Service"); + return modelService; + } + + private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact, Service service) + throws IOException, ParseException, InterruptedException { + Loop newLoop = new Loop(); + newLoop.setBlueprint(blueprintArtifact.getDcaeBlueprint()); + newLoop.setName(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), + csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName())); + newLoop.setLastComputedState(LoopState.DESIGN); + + List microServicesChain = chainGenerator + .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); + if (microServicesChain.isEmpty()) { + microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); + } + newLoop.setModelService(service); + newLoop.setMicroServicePolicies( + createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop)); + newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop)); + + newLoop.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); + newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact, newLoop)); + + DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact); + newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId()); + return newLoop; + } + + private HashSet createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact, + Loop newLoop) { + return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", + csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject()))); + } + + private HashSet createMicroServicePolicies(List microServicesChain, + CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException { + HashSet newSet = new HashSet<>(); + + for (MicroService microService : microServicesChain) { + MicroServicePolicy microServicePolicy = new MicroServicePolicy( + Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), + csar.getSdcNotification().getServiceVersion(), + blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact.getBlueprintArtifactName()), + microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false, + new HashSet<>(Arrays.asList(newLoop))); + + newSet.add(microServicePolicy); + microService.setMappedNameJpa(microServicePolicy.getName()); + } + return newSet; + } + + private JsonObject createGlobalPropertiesJson(BlueprintArtifact blueprintArtifact, Loop newLoop) { + JsonObject globalProperties = new JsonObject(); + globalProperties.add("dcaeDeployParameters", getAllBlueprintParametersInJson(blueprintArtifact, newLoop)); + return globalProperties; + } + + private static JsonObject createVfModuleProperties(CsarHandler csar) { + JsonObject vfModuleProps = new JsonObject(); + // Loop on all Groups defined in the service (VFModule entries type: + // org.openecomp.groups.VfModule) + for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity( + EntityQuery.newBuilder(EntityTemplateType.GROUP).build(), + TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) { + // Get all metadata info + JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties()); + vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps); + // now append the properties section so that we can also have isBase, + // volume_group, etc ... fields under the VFmodule name + for (Entry additionalProp : entity.getProperties().entrySet()) { + allVfProps.add(additionalProp.getValue().getName(), + JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue())); + } + } + return vfModuleProps; + } + + private static JsonObject createServicePropertiesByType(CsarHandler csar) { + JsonObject resourcesProp = new JsonObject(); + // Iterate on all types defined in the tosca lib + for (SdcTypes type : SdcTypes.values()) { + JsonObject resourcesPropByType = new JsonObject(); + // For each type, get the metadata of each nodetemplate + for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) { + resourcesPropByType.add(nodeTemplate.getName(), + JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties())); + } + resourcesProp.add(type.getValue(), resourcesPropByType); + } + return resourcesProp; + } + + private JsonObject getAllBlueprintParametersInJson(BlueprintArtifact blueprintArtifact, Loop newLoop) { + JsonObject node = new JsonObject(); + Yaml yaml = new Yaml(); + Map inputsNodes = ((Map) ((Map) yaml + .load(blueprintArtifact.getDcaeBlueprint())).get("inputs")); + inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> { + Object defaultValue = ((Map) elem.getValue()).get("default"); + if (defaultValue != null) { + addPropertyToNode(node, elem.getKey(), defaultValue); + } else { + node.addProperty(elem.getKey(), ""); + } + }); + // For Dublin only one micro service is expected + node.addProperty("policy_id", ((MicroServicePolicy) newLoop.getMicroServicePolicies().toArray()[0]).getName()); + return node; + } + + /** + * ll get the latest version of the artifact (version can be specified to DCAE + * call). + * + * @return The DcaeInventoryResponse object containing the dcae values + */ + private DcaeInventoryResponse queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact) + throws IOException, ParseException, InterruptedException { + return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(), + blueprintArtifact.getBlueprintInvariantServiceUuid(), + blueprintArtifact.getResourceAttached().getResourceInvariantUUID()); + } + + private void addPropertyToNode(JsonObject node, String key, Object value) { + if (value instanceof String) { + node.addProperty(key, (String) value); + } else if (value instanceof Number) { + node.addProperty(key, (Number) value); + } else if (value instanceof Boolean) { + node.addProperty(key, (Boolean) value); + } else if (value instanceof Character) { + node.addProperty(key, (Character) value); + } else { + node.addProperty(key, JsonUtils.GSON.toJson(value)); + } + } +} diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index ef70ba80e..bf6836607 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -111,7 +111,7 @@ public class Loop implements Serializable { private JsonObject globalPropertiesJson; @Expose - @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "service_uuid") private Service modelService; diff --git a/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java b/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java deleted file mode 100644 index 55009bc22..000000000 --- a/src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java +++ /dev/null @@ -1,280 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.loop; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.google.gson.JsonObject; - -import java.io.IOException; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.json.simple.parser.ParseException; -import org.onap.clamp.clds.client.DcaeInventoryServices; -import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; -import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; -import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact; -import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser; -import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; -import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller; -import org.onap.clamp.clds.sdc.controller.installer.MicroService; -import org.onap.clamp.clds.util.JsonUtils; -import org.onap.clamp.clds.util.drawing.SvgFacade; -import org.onap.clamp.loop.service.Service; -import org.onap.clamp.policy.Policy; -import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.policy.operational.OperationalPolicy; -import org.onap.sdc.tosca.parser.api.IEntityDetails; -import org.onap.sdc.tosca.parser.elements.queries.EntityQuery; -import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery; -import org.onap.sdc.tosca.parser.enums.EntityTemplateType; -import org.onap.sdc.tosca.parser.enums.SdcTypes; -import org.onap.sdc.toscaparser.api.NodeTemplate; -import org.onap.sdc.toscaparser.api.Property; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.yaml.snakeyaml.Yaml; - -/** - * This class will be instantiated by spring config, and used by Sdc Controller. - * There is no state kept by the bean. It's used to deploy the csar/notification - * received from SDC in DB. - */ -@Component -@Qualifier("loopInstaller") -public class LoopCsarInstaller implements CsarInstaller { - - private static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopCsarInstaller.class); - public static final String CONTROL_NAME_PREFIX = "ClosedLoop-"; - public static final String GET_INPUT_BLUEPRINT_PARAM = "get_input"; - // This will be used later as the policy scope - public static final String MODEL_NAME_PREFIX = "Loop_"; - - @Autowired - LoopsRepository loopRepository; - - @Autowired - BlueprintParser blueprintParser; - - @Autowired - ChainGenerator chainGenerator; - - @Autowired - DcaeInventoryServices dcaeInventoryService; - - @Autowired - private SvgFacade svgFacade; - - @Override - public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { - boolean alreadyInstalled = true; - for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { - alreadyInstalled = alreadyInstalled - && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), - blueprint.getValue().getResourceAttached().getResourceInstanceName(), - blueprint.getValue().getBlueprintArtifactName())); - } - return alreadyInstalled; - } - - @Override - @Transactional(propagation = Propagation.REQUIRED) - public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException { - try { - logger.info("Installing the CSAR " + csar.getFilePath()); - for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { - logger.info("Processing blueprint " + blueprint.getValue().getBlueprintArtifactName()); - loopRepository.save(createLoopFromBlueprint(csar, blueprint.getValue())); - } - logger.info("Successfully installed the CSAR " + csar.getFilePath()); - } catch (IOException e) { - throw new SdcArtifactInstallerException("Exception caught during the Csar installation in database", e); - } catch (ParseException e) { - throw new SdcArtifactInstallerException("Exception caught during the Dcae query to get ServiceTypeId", e); - } - } - - private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact) - throws IOException, ParseException, InterruptedException { - Loop newLoop = new Loop(); - newLoop.setBlueprint(blueprintArtifact.getDcaeBlueprint()); - newLoop.setName(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName())); - newLoop.setLastComputedState(LoopState.DESIGN); - - List microServicesChain = chainGenerator - .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); - if (microServicesChain.isEmpty()) { - microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); - } - newLoop.setModelService(createServiceModel(csar)); - newLoop.setMicroServicePolicies( - createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop)); - newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop)); - - newLoop.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); - newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact, newLoop)); - - DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact); - newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId()); - return newLoop; - } - - private HashSet createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact, - Loop newLoop) { - return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", - csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject()))); - } - - private HashSet createMicroServicePolicies(List microServicesChain, - CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException { - HashSet newSet = new HashSet<>(); - - for (MicroService microService : microServicesChain) { - MicroServicePolicy microServicePolicy = new MicroServicePolicy( - Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), - microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false, - new HashSet<>(Arrays.asList(newLoop))); - - newSet.add(microServicePolicy); - microService.setMappedNameJpa(microServicePolicy.getName()); - } - return newSet; - } - - private JsonObject createGlobalPropertiesJson(BlueprintArtifact blueprintArtifact, Loop newLoop) { - JsonObject globalProperties = new JsonObject(); - globalProperties.add("dcaeDeployParameters", getAllBlueprintParametersInJson(blueprintArtifact, newLoop)); - return globalProperties; - } - - private static JsonObject createVfModuleProperties(CsarHandler csar) { - JsonObject vfModuleProps = new JsonObject(); - // Loop on all Groups defined in the service (VFModule entries type: - // org.openecomp.groups.VfModule) - for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity( - EntityQuery.newBuilder(EntityTemplateType.GROUP).build(), - TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) { - // Get all metadata info - JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties()); - vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps); - // now append the properties section so that we can also have isBase, - // volume_group, etc ... fields under the VFmodule name - for (Entry additionalProp : entity.getProperties().entrySet()) { - allVfProps.add(additionalProp.getValue().getName(), - JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue())); - } - } - return vfModuleProps; - } - - private static JsonObject createServicePropertiesByType(CsarHandler csar) { - JsonObject resourcesProp = new JsonObject(); - // Iterate on all types defined in the tosca lib - for (SdcTypes type : SdcTypes.values()) { - JsonObject resourcesPropByType = new JsonObject(); - // For each type, get the metadata of each nodetemplate - for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) { - resourcesPropByType.add(nodeTemplate.getName(), - JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties())); - } - resourcesProp.add(type.getValue(), resourcesPropByType); - } - return resourcesProp; - } - - private Service createServiceModel(CsarHandler csar) { - JsonObject serviceDetails = JsonUtils.GSON.fromJson( - JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); - - // Add properties details for each type, VfModule, VF, VFC, .... - JsonObject resourcesProp = createServicePropertiesByType(csar); - resourcesProp.add("VFModule", createVfModuleProperties(csar)); - - Service modelService = new Service(serviceDetails, resourcesProp); - - return modelService; - } - - private JsonObject getAllBlueprintParametersInJson(BlueprintArtifact blueprintArtifact, Loop newLoop) { - JsonObject node = new JsonObject(); - Yaml yaml = new Yaml(); - Map inputsNodes = ((Map) ((Map) yaml - .load(blueprintArtifact.getDcaeBlueprint())).get("inputs")); - inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> { - Object defaultValue = ((Map) elem.getValue()).get("default"); - if (defaultValue != null) { - addPropertyToNode(node, elem.getKey(), defaultValue); - } else { - node.addProperty(elem.getKey(), ""); - } - }); - // For Dublin only one micro service is expected - node.addProperty("policy_id", ((MicroServicePolicy) newLoop.getMicroServicePolicies().toArray()[0]).getName()); - return node; - } - - /** - * ll get the latest version of the artifact (version can be specified to DCAE - * call). - * - * @return The DcaeInventoryResponse object containing the dcae values - */ - private DcaeInventoryResponse queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact) - throws IOException, ParseException, InterruptedException { - return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(), - blueprintArtifact.getBlueprintInvariantServiceUuid(), - blueprintArtifact.getResourceAttached().getResourceInvariantUUID()); - } - - private void addPropertyToNode(JsonObject node, String key, Object value) { - if (value instanceof String) { - node.addProperty(key, (String) value); - } else if (value instanceof Number) { - node.addProperty(key, (Number) value); - } else if (value instanceof Boolean) { - node.addProperty(key, (Boolean) value); - } else if (value instanceof Character) { - node.addProperty(key, (Character) value); - } else { - node.addProperty(key, JsonUtils.GSON.toJson(value)); - } - } -} diff --git a/src/main/java/org/onap/clamp/loop/service/Service.java b/src/main/java/org/onap/clamp/loop/service/Service.java index ac1216b9d..115f9f768 100644 --- a/src/main/java/org/onap/clamp/loop/service/Service.java +++ b/src/main/java/org/onap/clamp/loop/service/Service.java @@ -62,6 +62,9 @@ public class Service implements Serializable { @Column(nullable = false, name = "name") private String name; + @Column(name = "version") + private String version; + @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "service_details") @@ -81,11 +84,12 @@ public class Service implements Serializable { /** * Constructor. */ - public Service(JsonObject serviceDetails, JsonObject resourceDetails) { + public Service(JsonObject serviceDetails, JsonObject resourceDetails, String version) { this.name = serviceDetails.get("name").getAsString(); this.serviceUuid = serviceDetails.get("UUID").getAsString(); this.serviceDetails = serviceDetails; this.resourceDetails = resourceDetails; + this.version = version; } public String getServiceUuid() { diff --git a/src/main/java/org/onap/clamp/loop/service/ServiceRepository.java b/src/main/java/org/onap/clamp/loop/service/ServiceRepository.java new file mode 100644 index 000000000..a6c5ff187 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/service/ServiceRepository.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.service; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ServiceRepository extends CrudRepository { + +} diff --git a/src/test/java/org/onap/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java b/src/test/java/org/onap/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java index 695b85166..2cbabbe8c 100644 --- a/src/test/java/org/onap/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java @@ -45,7 +45,7 @@ import org.onap.clamp.clds.exception.sdc.controller.SdcControllerException; import org.onap.clamp.clds.sdc.controller.SdcSingleController; import org.onap.clamp.clds.sdc.controller.SdcSingleControllerStatus; import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller; +import org.onap.clamp.loop.CsarInstaller; import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.INotificationData; import org.onap.sdc.api.notification.IResourceInstance; diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index e3271c7a6..df952aa16 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -48,9 +48,9 @@ import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact; import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.clamp.clds.sdc.controller.installer.CsarInstaller; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.loop.service.ServiceRepository; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.INotificationData; @@ -83,7 +83,10 @@ public class CsarInstallerItCase { private LoopsRepository loopsRepo; @Autowired - @Qualifier("loopInstaller") + ServiceRepository serviceRepository; + + @Autowired + @Qualifier("csarInstaller") private CsarInstaller csarInstaller; private BlueprintArtifact buildFakeBuildprintArtifact(String instanceName, String invariantResourceUuid, @@ -186,6 +189,8 @@ public class CsarInstallerItCase { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csar = buildFakeCsarHandler(generatedName); csarInstaller.installTheCsar(csar); + assertThat(serviceRepository + .existsById("63cac700-ab9a-4115-a74f-7eac85e3fce0")).isTrue(); assertThat(loopsRepo .existsById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml"))) .isTrue(); diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index b68bf48a0..68fe487ef 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -126,7 +126,7 @@ public class LoopToJsonTest { JsonObject jsonModel = new GsonBuilder().create() .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class); Service service = new Service(jsonModel.get("serviceDetails").getAsJsonObject(), - jsonModel.get("resourceDetails").getAsJsonObject()); + jsonModel.get("resourceDetails").getAsJsonObject(), "1.0"); loopTest2.setModelService(service); String jsonSerialized = JsonUtils.GSON_JPA_MODEL.toJson(loopTest2); diff --git a/src/test/java/org/onap/clamp/loop/ServiceTest.java b/src/test/java/org/onap/clamp/loop/ServiceTest.java index 45de5385e..2b6fab8b6 100644 --- a/src/test/java/org/onap/clamp/loop/ServiceTest.java +++ b/src/test/java/org/onap/clamp/loop/ServiceTest.java @@ -41,12 +41,12 @@ public class ServiceTest { String resourceStr = "{\"CP\": {}}"; Service service1 = new Service(JsonUtils.GSON.fromJson(serviceStr1, JsonObject.class), - JsonUtils.GSON.fromJson(resourceStr, JsonObject.class)); + JsonUtils.GSON.fromJson(resourceStr, JsonObject.class), "1.0"); - Service service2 = new Service(JsonUtils.GSON.fromJson(serviceStr2, JsonObject.class), null); + Service service2 = new Service(JsonUtils.GSON.fromJson(serviceStr2, JsonObject.class), null, "1.0"); Service service3 = new Service(JsonUtils.GSON.fromJson(serviceStr3, JsonObject.class), - JsonUtils.GSON.fromJson(resourceStr, JsonObject.class)); + JsonUtils.GSON.fromJson(resourceStr, JsonObject.class), "1.0"); assertThat(service1.equals(service2)).isEqualTo(true); assertThat(service1.equals(service3)).isEqualTo(false); diff --git a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java index 673ac323d..12ddbaa71 100644 --- a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java +++ b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java @@ -42,7 +42,7 @@ public class OperationalPolicyRepresentationBuilderTest { JsonObject jsonModel = new GsonBuilder().create() .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class); Service service = new Service(jsonModel.get("serviceDetails").getAsJsonObject(), - jsonModel.get("resourceDetails").getAsJsonObject()); + jsonModel.get("resourceDetails").getAsJsonObject(), "1.0"); JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(service); -- cgit 1.2.3-korg From 62a0b7ca40d7810897fce2d1f8eb47e5647a2bf2 Mon Sep 17 00:00:00 2001 From: xuegao Date: Wed, 18 Dec 2019 11:17:53 +0100 Subject: Move jsonRepresentation Move the storage of jsonRepresentation to OperationalPolicy level Issue-ID: CLAMP-582 Change-Id: Id555ebc1f2f04468f7bf0ffd813de7732bcee97f Signed-off-by: xuegao --- extra/sql/bulkload/create-tables.sql | 2 +- src/main/java/org/onap/clamp/loop/Loop.java | 15 - .../policy/operational/OperationalPolicy.java | 20 +- src/test/resources/tosca/loop.json | 574 --------------------- 4 files changed, 20 insertions(+), 591 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 85b8f85f9..6e9ff7c86 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -23,7 +23,6 @@ dcae_deployment_status_url varchar(255), global_properties_json json, last_computed_state varchar(255) not null, - operational_policy_schema json, svg_representation MEDIUMTEXT, service_uuid varchar(255), primary key (name) @@ -48,6 +47,7 @@ create table operational_policies ( name varchar(255) not null, configurations_json json, + json_representation json not null, loop_id varchar(255) not null, primary key (name) ) engine=InnoDB; diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index bf6836607..531587a75 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -26,10 +26,8 @@ package org.onap.clamp.loop; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; import com.google.gson.annotations.Expose; -import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; @@ -65,7 +63,6 @@ import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.service.Service; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; -import org.onap.clamp.policy.operational.OperationalPolicyRepresentationBuilder; @Entity @Table(name = "loops") @@ -100,11 +97,6 @@ public class Loop implements Serializable { @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation") private String svgRepresentation; - @Expose - @Type(type = "json") - @Column(columnDefinition = "json", name = "operational_policy_schema") - private JsonObject operationalPolicySchema; - @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "global_properties_json") @@ -274,13 +266,6 @@ public class Loop implements Serializable { void setModelService(Service modelService) { this.modelService = modelService; - try { - this.operationalPolicySchema = OperationalPolicyRepresentationBuilder - .generateOperationalPolicySchema(this.getModelService()); - } catch (JsonSyntaxException | IOException | NullPointerException e) { - logger.error("Unable to generate the operational policy Schema ... ", e); - this.operationalPolicySchema = new JsonObject(); - } } public Map getComponents() { diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index c6ed49847..14112694e 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -30,8 +30,10 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; import com.google.gson.annotations.Expose; +import java.io.IOException; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -79,6 +81,11 @@ public class OperationalPolicy implements Serializable, Policy { @Column(columnDefinition = "json", name = "configurations_json") private JsonObject configurationsJson; + @Expose + @Type(type = "json") + @Column(columnDefinition = "json", name = "json_representation", nullable = false) + private JsonObject jsonRepresentation; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "loop_id", nullable = false) private Loop loop; @@ -100,6 +107,13 @@ public class OperationalPolicy implements Serializable, Policy { this.loop = loop; this.configurationsJson = configurationsJson; LegacyOperationalPolicy.preloadConfiguration(this.configurationsJson, loop); + try { + this.jsonRepresentation = OperationalPolicyRepresentationBuilder + .generateOperationalPolicySchema(loop.getModelService()); + } catch (JsonSyntaxException | IOException | NullPointerException e) { + logger.error("Unable to generate the operational policy Schema ... ", e); + this.jsonRepresentation = new JsonObject(); + } } @Override @@ -125,7 +139,11 @@ public class OperationalPolicy implements Serializable, Policy { @Override public JsonObject getJsonRepresentation() { - return null; + return jsonRepresentation; + } + + void setJsonRepresentation(JsonObject jsonRepresentation) { + this.jsonRepresentation = jsonRepresentation; } @Override diff --git a/src/test/resources/tosca/loop.json b/src/test/resources/tosca/loop.json index 557fa6f69..cb1697b80 100644 --- a/src/test/resources/tosca/loop.json +++ b/src/test/resources/tosca/loop.json @@ -3,580 +3,6 @@ "dcaeDeploymentId": "123456789", "dcaeDeploymentStatusUrl": "https://dcaetest.org", "dcaeBlueprintId": "UUID-blueprint", - "operationalPolicySchema": { - "schema": { - "uniqueItems": "true", - "format": "tabs", - "type": "array", - "minItems": 1, - "maxItems": 1, - "title": "Operational policies", - "items": { - "type": "object", - "title": "Operational Policy Item", - "id": "operational_policy_item", - "headerTemplate": "{{self.name}}", - "required": [ - "name", - "configurationsJson" - ], - "properties": { - "name": { - "type": "string", - "title": "Operational policy name", - "readOnly": "True" - }, - "configurationsJson": { - "type": "object", - "title": "Configuration", - "required": [ - "operational_policy", - "guard_policies" - ], - "properties": { - "operational_policy": { - "type": "object", - "title": "Related Parameters", - "required": [ - "controlLoop", - "policies" - ], - "properties": { - "controlLoop": { - "type": "object", - "title": "Control Loop details", - "required": [ - "timeout", - "abatement", - "trigger_policy", - "controlLoopName" - ], - "properties": { - "timeout": { - "type": "string", - "title": "Overall Time Limit", - "default": "0", - "format": "number" - }, - "abatement": { - "type": "string", - "title": "Abatement", - "enum": [ - "True", - "False" - ] - }, - "trigger_policy": { - "type": "string", - "title": "Policy Decision Entry" - }, - "controlLoopName": { - "type": "string", - "title": "Control loop name", - "readOnly": "True" - } - } - }, - "policies": { - "uniqueItems": "true", - "id": "policies_array", - "type": "array", - "title": "Policy Decision Tree", - "format": "tabs-top", - "items": { - "title": "Policy Decision", - "type": "object", - "id": "policy_item", - "headerTemplate": "{{self.id}} - {{self.recipe}}", - "format": "categories", - "basicCategoryTitle": "recipe", - "required": [ - "id", - "recipe", - "retry", - "timeout", - "actor", - "success", - "failure", - "failure_timeout", - "failure_retries", - "failure_exception", - "failure_guard", - "target" - ], - "properties": { - "id": { - "default": "Policy 1", - "title": "Policy ID", - "type": "string" - }, - "recipe": { - "title": "Recipe", - "type": "string", - "enum": [ - "Restart", - "Rebuild", - "Migrate", - "Health-Check", - "ModifyConfig", - "VF Module Create", - "VF Module Delete", - "Reroute" - ] - }, - "retry": { - "default": "0", - "title": "Number of Retry", - "type": "string", - "format": "number" - }, - "timeout": { - "default": "0", - "title": "Timeout", - "type": "string", - "format": "number" - }, - "actor": { - "title": "Actor", - "type": "string", - "enum": [ - "APPC", - "SO", - "VFC", - "SDNC", - "SDNR" - ] - }, - "payload": { - "title": "Payload (YAML)", - "type": "string", - "format": "textarea" - }, - "success": { - "default": "final_success", - "title": "When Success", - "type": "string" - }, - "failure": { - "default": "final_failure", - "title": "When Failure", - "type": "string" - }, - "failure_timeout": { - "default": "final_failure_timeout", - "title": "When Failure Timeout", - "type": "string" - }, - "failure_retries": { - "default": "final_failure_retries", - "title": "When Failure Retries", - "type": "string" - }, - "failure_exception": { - "default": "final_failure_exception", - "title": "When Failure Exception", - "type": "string" - }, - "failure_guard": { - "default": "final_failure_guard", - "title": "When Failure Guard", - "type": "string" - }, - "target": { - "type": "object", - "required": [ - "type", - "resourceID" - ], - "anyOf": [ - { - "title": "User Defined", - "additionalProperties": "True", - "properties": { - "type": { - "title": "Target type", - "type": "string", - "default": "", - "enum": [ - "VNF", - "VFMODULE", - "VM" - ] - }, - "resourceID": { - "title": "Target type", - "type": "string", - "default": "" - } - } - }, - { - "title": "VNF-vLoadBalancerMS 0", - "properties": { - "type": { - "title": "Type", - "type": "string", - "default": "VNF", - "readOnly": "True" - }, - "resourceID": { - "title": "Resource ID", - "type": "string", - "default": "vLoadBalancerMS", - "readOnly": "True" - } - } - }, - { - "title": "VFMODULE-Vloadbalancerms..vpkg..module-1", - "properties": { - "type": { - "title": "Type", - "type": "string", - "default": "VFMODULE", - "readOnly": "True" - }, - "resourceID": { - "title": "Resource ID", - "type": "string", - "default": "Vloadbalancerms..vpkg..module-1", - "readOnly": "True" - }, - "modelInvariantId": { - "title": "Model Invariant Id (ModelInvariantUUID)", - "type": "string", - "default": "ca052563-eb92-4b5b-ad41-9111768ce043", - "readOnly": "True" - }, - "modelVersionId": { - "title": "Model Version Id (ModelUUID)", - "type": "string", - "default": "1e725ccc-b823-4f67-82b9-4f4367070dbc", - "readOnly": "True" - }, - "modelName": { - "title": "Model Name", - "type": "string", - "default": "Vloadbalancerms..vpkg..module-1", - "readOnly": "True" - }, - "modelVersion": { - "title": "Model Version", - "type": "string", - "default": "1", - "readOnly": "True" - }, - "modelCustomizationId": { - "title": "Customization ID", - "type": "string", - "default": "1bffdc31-a37d-4dee-b65c-dde623a76e52", - "readOnly": "True" - } - } - }, - { - "title": "VFMODULE-Vloadbalancerms..vdns..module-3", - "properties": { - "type": { - "title": "Type", - "type": "string", - "default": "VFMODULE", - "readOnly": "True" - }, - "resourceID": { - "title": "Resource ID", - "type": "string", - "default": "Vloadbalancerms..vdns..module-3", - "readOnly": "True" - }, - "modelInvariantId": { - "title": "Model Invariant Id (ModelInvariantUUID)", - "type": "string", - "default": "4c10ba9b-f88f-415e-9de3-5d33336047fa", - "readOnly": "True" - }, - "modelVersionId": { - "title": "Model Version Id (ModelUUID)", - "type": "string", - "default": "4fa73b49-8a6c-493e-816b-eb401567b720", - "readOnly": "True" - }, - "modelName": { - "title": "Model Name", - "type": "string", - "default": "Vloadbalancerms..vdns..module-3", - "readOnly": "True" - }, - "modelVersion": { - "title": "Model Version", - "type": "string", - "default": "1", - "readOnly": "True" - }, - "modelCustomizationId": { - "title": "Customization ID", - "type": "string", - "default": "bafcdab0-801d-4d81-9ead-f464640a38b1", - "readOnly": "True" - } - } - }, - { - "title": "VFMODULE-Vloadbalancerms..base_template..module-0", - "properties": { - "type": { - "title": "Type", - "type": "string", - "default": "VFMODULE", - "readOnly": "True" - }, - "resourceID": { - "title": "Resource ID", - "type": "string", - "default": "Vloadbalancerms..base_template..module-0", - "readOnly": "True" - }, - "modelInvariantId": { - "title": "Model Invariant Id (ModelInvariantUUID)", - "type": "string", - "default": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3", - "readOnly": "True" - }, - "modelVersionId": { - "title": "Model Version Id (ModelUUID)", - "type": "string", - "default": "63734409-f745-4e4d-a38b-131638a0edce", - "readOnly": "True" - }, - "modelName": { - "title": "Model Name", - "type": "string", - "default": "Vloadbalancerms..base_template..module-0", - "readOnly": "True" - }, - "modelVersion": { - "title": "Model Version", - "type": "string", - "default": "1", - "readOnly": "True" - }, - "modelCustomizationId": { - "title": "Customization ID", - "type": "string", - "default": "86baddea-c730-4fb8-9410-cd2e17fd7f27", - "readOnly": "True" - } - } - }, - { - "title": "VFMODULE-Vloadbalancerms..vlb..module-2", - "properties": { - "type": { - "title": "Type", - "type": "string", - "default": "VFMODULE", - "readOnly": "True" - }, - "resourceID": { - "title": "Resource ID", - "type": "string", - "default": "Vloadbalancerms..vlb..module-2", - "readOnly": "True" - }, - "modelInvariantId": { - "title": "Model Invariant Id (ModelInvariantUUID)", - "type": "string", - "default": "a772a1f4-0064-412c-833d-4749b15828dd", - "readOnly": "True" - }, - "modelVersionId": { - "title": "Model Version Id (ModelUUID)", - "type": "string", - "default": "0f5c3f6a-650a-4303-abb6-fff3e573a07a", - "readOnly": "True" - }, - "modelName": { - "title": "Model Name", - "type": "string", - "default": "Vloadbalancerms..vlb..module-2", - "readOnly": "True" - }, - "modelVersion": { - "title": "Model Version", - "type": "string", - "default": "1", - "readOnly": "True" - }, - "modelCustomizationId": { - "title": "Customization ID", - "type": "string", - "default": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806", - "readOnly": "True" - } - } - } - ] - } - } - } - } - } - }, - "guard_policies": { - "type": "array", - "format": "tabs-top", - "title": "Associated Guard policies", - "items": { - "headerTemplate": "{{self.policy-id}} - {{self.content.recipe}}", - "anyOf": [ - { - "title": "Guard MinMax", - "type": "object", - "properties": { - "policy-id": { - "type": "string", - "default": "guard.minmax.new", - "pattern": "^(guard.minmax\\..*)$" - }, - "content": { - "properties": { - "actor": { - "type": "string", - "enum": [ - "APPC", - "SO", - "VFC", - "SDNC", - "SDNR" - ] - }, - "recipe": { - "type": "string", - "enum": [ - "Restart", - "Rebuild", - "Migrate", - "Health-Check", - "ModifyConfig", - "VF Module Create", - "VF Module Delete", - "Reroute" - ] - }, - "targets": { - "type": "string", - "default": ".*" - }, - "clname": { - "type": "string", - "template": "{{loopName}}", - "watch": { - "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" - } - }, - "guardActiveStart": { - "type": "string", - "default": "00:00:00Z" - }, - "guardActiveEnd": { - "type": "string", - "default": "10:00:00Z" - }, - "min": { - "type": "string", - "default": "0" - }, - "max": { - "type": "string", - "default": "1" - } - } - } - } - }, - { - "title": "Guard Frequency", - "type": "object", - "properties": { - "policy-id": { - "type": "string", - "default": "guard.frequency.new", - "pattern": "^(guard.frequency\\..*)$" - }, - "content": { - "properties": { - "actor": { - "type": "string", - "enum": [ - "APPC", - "SO", - "VFC", - "SDNC", - "SDNR" - ] - }, - "recipe": { - "type": "string", - "enum": [ - "Restart", - "Rebuild", - "Migrate", - "Health-Check", - "ModifyConfig", - "VF Module Create", - "VF Module Delete", - "Reroute" - ] - }, - "targets": { - "type": "string", - "default": ".*" - }, - "clname": { - "type": "string", - "template": "{{loopName}}", - "watch": { - "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName" - } - }, - "guardActiveStart": { - "type": "string", - "default": "00:00:00Z" - }, - "guardActiveEnd": { - "type": "string", - "default": "10:00:00Z" - }, - "limit": { - "type": "string" - }, - "timeWindow": { - "type": "string" - }, - "timeUnits": { - "type": "string", - "enum": [ - "minute", - "hour", - "day", - "week", - "month", - "year" - ] - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, "globalPropertiesJson": { "testname": "testvalue" }, -- cgit 1.2.3-korg From 825612628f130b394f9ee1aa1ad2cca41b67bc7f Mon Sep 17 00:00:00 2001 From: nrpandya Date: Thu, 21 Nov 2019 11:51:18 -0600 Subject: Add template and tosca model entities and repositories Add Control loop template, tosca model and model policy properties hibernate entity classes and crud repositories Issue-ID: CLAMP-555 Change-Id: Ib7f07aca5ad2ddf5caff7c98ea9341bdc147e817 Signed-off-by: nrpandya --- docs/swagger/swagger.json | 584 +- docs/swagger/swagger.pdf | 9422 ++++++++++++++++---- extra/sql/bulkload/create-tables.sql | 130 +- extra/sql/dump/test-data.sql | 92 +- pom.xml | 14 +- src/main/java/org/onap/clamp/clds/Application.java | 8 +- .../onap/clamp/clds/ClampInUserAuditorAware.java | 46 + .../onap/clamp/clds/filter/ClampCadiFilter.java | 2 +- .../org/onap/clamp/clds/model/CldsDictionary.java | 159 - .../onap/clamp/clds/model/CldsDictionaryItem.java | 214 - .../clamp/clds/tosca/ToscaYamlToJsonConvertor.java | 57 - src/main/java/org/onap/clamp/loop/Loop.java | 25 +- src/main/java/org/onap/clamp/loop/LoopService.java | 28 +- .../java/org/onap/clamp/loop/LoopsRepository.java | 5 +- .../org/onap/clamp/loop/common/AuditEntity.java | 108 + src/main/java/org/onap/clamp/loop/log/LoopLog.java | 2 - .../org/onap/clamp/loop/log/LoopLogRepository.java | 4 +- .../java/org/onap/clamp/loop/service/Service.java | 18 +- .../clamp/loop/service/ServicesRepository.java | 31 + .../org/onap/clamp/loop/template/LoopTemplate.java | 268 + .../loop/template/LoopTemplatesRepository.java | 37 + .../clamp/loop/template/MicroServiceModel.java | 217 + .../template/MicroServiceModelsRepository.java | 31 + .../org/onap/clamp/loop/template/PolicyModel.java | 239 + .../onap/clamp/loop/template/PolicyModelId.java | 93 + .../loop/template/PolicyModelsRepository.java | 38 + .../clamp/loop/template/PolicyModelsService.java | 59 + .../loop/template/TemplateMicroServiceModel.java | 194 + .../loop/template/TemplateMicroServiceModelId.java | 102 + .../policy/microservice/MicroServicePolicy.java | 64 +- .../microservice/MicroServicePolicyRepository.java | 4 +- .../microservice/MicroServicePolicyService.java | 82 + .../microservice/MicroservicePolicyService.java | 82 - .../policy/operational/OperationalPolicy.java | 35 + .../operational/OperationalPolicyRepository.java | 4 +- src/main/java/org/onap/clamp/tosca/Dictionary.java | 174 + .../org/onap/clamp/tosca/DictionaryElement.java | 249 + .../clamp/tosca/DictionaryElementsRepository.java | 32 + .../org/onap/clamp/tosca/DictionaryRepository.java | 38 + .../org/onap/clamp/util/SemanticVersioning.java | 76 + src/main/resources/META-INF/resources/swagger.html | 411 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 6 +- .../onap/clamp/loop/LoopControllerTestItCase.java | 30 +- .../onap/clamp/loop/LoopLogServiceTestItCase.java | 4 +- .../onap/clamp/loop/LoopRepositoriesItCase.java | 137 +- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 84 +- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 37 +- .../onap/clamp/loop/PolicyModelServiceItCase.java | 161 + .../onap/clamp/util/SemanticVersioningTest.java | 71 + 49 files changed, 11167 insertions(+), 2841 deletions(-) create mode 100644 src/main/java/org/onap/clamp/clds/ClampInUserAuditorAware.java delete mode 100644 src/main/java/org/onap/clamp/clds/model/CldsDictionary.java delete mode 100644 src/main/java/org/onap/clamp/clds/model/CldsDictionaryItem.java create mode 100644 src/main/java/org/onap/clamp/loop/common/AuditEntity.java create mode 100644 src/main/java/org/onap/clamp/loop/service/ServicesRepository.java create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopTemplate.java create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopTemplatesRepository.java create mode 100644 src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java create mode 100644 src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java create mode 100644 src/main/java/org/onap/clamp/loop/template/PolicyModel.java create mode 100644 src/main/java/org/onap/clamp/loop/template/PolicyModelId.java create mode 100644 src/main/java/org/onap/clamp/loop/template/PolicyModelsRepository.java create mode 100644 src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java create mode 100644 src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java create mode 100644 src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java create mode 100644 src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java delete mode 100644 src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java create mode 100644 src/main/java/org/onap/clamp/tosca/Dictionary.java create mode 100644 src/main/java/org/onap/clamp/tosca/DictionaryElement.java create mode 100644 src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java create mode 100644 src/main/java/org/onap/clamp/tosca/DictionaryRepository.java create mode 100644 src/main/java/org/onap/clamp/util/SemanticVersioning.java create mode 100644 src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java create mode 100644 src/test/java/org/onap/clamp/util/SemanticVersioningTest.java (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 0738c6f29..32113ccbd 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -1,16 +1,16 @@ { "swagger" : "2.0", "info" : { - "version" : "4.1.2-SNAPSHOT", + "version" : "4.2.0-SNAPSHOT", "title" : "Clamp Rest API" }, - "host" : "localhost:34219", + "host" : "localhost:33953", "basePath" : "/restservices/clds/", "schemes" : [ "http" ], "paths" : { "/v2/loop/{loopName}" : { "get" : { - "operationId" : "route3", + "operationId" : "route20", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -26,13 +26,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route3" + "x-camelContextId" : "camel-2", + "x-routeId" : "route20" } }, "/v2/loop/delete/{loopName}" : { "put" : { - "operationId" : "route13", + "operationId" : "route30", "parameters" : [ { "name" : "loopName", "in" : "path", @@ -42,13 +42,13 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route13" + "x-camelContextId" : "camel-2", + "x-routeId" : "route30" } }, "/v2/loop/deploy/{loopName}" : { "put" : { - "operationId" : "route8", + "operationId" : "route25", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -64,13 +64,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route8" + "x-camelContextId" : "camel-2", + "x-routeId" : "route25" } }, "/v2/loop/getAllNames" : { "get" : { - "operationId" : "route2", + "operationId" : "route19", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -83,13 +83,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route2" + "x-camelContextId" : "camel-2", + "x-routeId" : "route19" } }, "/v2/loop/getstatus/{loopName}" : { "get" : { - "operationId" : "route14", + "operationId" : "route31", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -105,13 +105,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route14" + "x-camelContextId" : "camel-2", + "x-routeId" : "route31" } }, "/v2/loop/restart/{loopName}" : { "put" : { - "operationId" : "route11", + "operationId" : "route28", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -127,13 +127,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route11" + "x-camelContextId" : "camel-2", + "x-routeId" : "route28" } }, "/v2/loop/stop/{loopName}" : { "put" : { - "operationId" : "route10", + "operationId" : "route27", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -149,13 +149,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route10" + "x-camelContextId" : "camel-2", + "x-routeId" : "route27" } }, "/v2/loop/submit/{loopName}" : { "put" : { - "operationId" : "route12", + "operationId" : "route29", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -171,13 +171,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route12" + "x-camelContextId" : "camel-2", + "x-routeId" : "route29" } }, "/v2/loop/svgRepresentation/{loopName}" : { "get" : { - "operationId" : "route4", + "operationId" : "route21", "produces" : [ "application/xml" ], "parameters" : [ { "name" : "loopName", @@ -193,13 +193,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route4" + "x-camelContextId" : "camel-2", + "x-routeId" : "route21" } }, "/v2/loop/undeploy/{loopName}" : { "put" : { - "operationId" : "route9", + "operationId" : "route26", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -215,13 +215,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route9" + "x-camelContextId" : "camel-2", + "x-routeId" : "route26" } }, "/v2/loop/updateGlobalProperties/{loopName}" : { "post" : { - "operationId" : "route5", + "operationId" : "route22", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -245,13 +245,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route5" + "x-camelContextId" : "camel-2", + "x-routeId" : "route22" } }, "/v2/loop/updateMicroservicePolicy/{loopName}" : { "post" : { - "operationId" : "route7", + "operationId" : "route24", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -275,13 +275,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route7" + "x-camelContextId" : "camel-2", + "x-routeId" : "route24" } }, "/v2/loop/updateOperationalPolicies/{loopName}" : { "post" : { - "operationId" : "route6", + "operationId" : "route23", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -305,13 +305,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route6" + "x-camelContextId" : "camel-2", + "x-routeId" : "route23" } }, "/v1/clds/cldsInfo" : { "get" : { - "operationId" : "route15", + "operationId" : "route32", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -321,13 +321,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route15" + "x-camelContextId" : "camel-2", + "x-routeId" : "route32" } }, "/v1/healthcheck" : { "get" : { - "operationId" : "route16", + "operationId" : "route33", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -337,19 +337,19 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route16" + "x-camelContextId" : "camel-2", + "x-routeId" : "route33" } }, "/v1/user/getUser" : { "get" : { - "operationId" : "route17", + "operationId" : "route34", "produces" : [ "text/plain" ], "responses" : { "200" : { } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route17" + "x-camelContextId" : "camel-2", + "x-routeId" : "route34" } } }, @@ -357,6 +357,20 @@ "Loop" : { "type" : "object", "properties" : { + "createdDate" : { + "type" : "integer", + "format" : "int64" + }, + "updatedDate" : { + "type" : "integer", + "format" : "int64" + }, + "updatedBy" : { + "type" : "string" + }, + "createdBy" : { + "type" : "string" + }, "name" : { "type" : "string" }, @@ -375,8 +389,8 @@ "globalPropertiesJson" : { "$ref" : "#/definitions/JsonObject" }, - "modelPropertiesJson" : { - "$ref" : "#/definitions/JsonObject" + "modelService" : { + "$ref" : "#/definitions/Service" }, "blueprint" : { "type" : "string" @@ -411,6 +425,9 @@ "items" : { "$ref" : "#/definitions/LoopLog" } + }, + "loopTemplate" : { + "$ref" : "#/definitions/LoopTemplate" } }, "x-className" : { @@ -418,128 +435,62 @@ "format" : "org.onap.clamp.loop.Loop" } }, - "JsonArray" : { + "MicroServiceModel" : { "type" : "object", "properties" : { - "asBoolean" : { - "type" : "boolean" - }, - "asNumber" : { - "$ref" : "#/definitions/Number" - }, - "asString" : { - "type" : "string" - }, - "asDouble" : { - "type" : "number", - "format" : "double" - }, - "asFloat" : { - "type" : "number", - "format" : "float" - }, - "asLong" : { + "createdDate" : { "type" : "integer", "format" : "int64" }, - "asInt" : { + "updatedDate" : { "type" : "integer", - "format" : "int32" - }, - "asByte" : { - "type" : "string", - "format" : "byte" + "format" : "int64" }, - "asCharacter" : { + "updatedBy" : { "type" : "string" }, - "asBigDecimal" : { - "type" : "number" - }, - "asBigInteger" : { - "type" : "integer" - }, - "asShort" : { - "type" : "integer", - "format" : "int32" - }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" - }, - "jsonArray" : { - "type" : "boolean" - }, - "jsonObject" : { - "type" : "boolean" - }, - "jsonNull" : { - "type" : "boolean" - }, - "jsonPrimitive" : { - "type" : "boolean" - }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" - }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" - } - }, - "x-className" : { - "type" : "string", - "format" : "com.google.gson.JsonArray" - } - }, - "LoopLog" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "integer", - "format" : "int64" + "createdBy" : { + "type" : "string" }, - "logType" : { - "type" : "string", - "enum" : [ "INFO", "WARNING", "ERROR" ] + "name" : { + "type" : "string" }, - "logComponent" : { + "policyType" : { "type" : "string" }, - "message" : { + "blueprint" : { "type" : "string" }, - "loop" : { - "$ref" : "#/definitions/Loop" + "policyModel" : { + "$ref" : "#/definitions/PolicyModel" }, - "logInstant" : { - "type" : "integer", - "format" : "int64" + "usedByLoopTemplates" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/TemplateMicroServiceModel" + } } } }, - "Number" : { - "type" : "object" - }, "JsonPrimitive" : { "type" : "object", "properties" : { + "asBoolean" : { + "type" : "boolean" + }, "boolean" : { "type" : "boolean" }, "number" : { "type" : "boolean" }, - "asBoolean" : { - "type" : "boolean" + "asString" : { + "type" : "string" }, "asNumber" : { "$ref" : "#/definitions/Number" }, - "asString" : { - "type" : "string" - }, "asDouble" : { "type" : "number", "format" : "double" @@ -576,41 +527,61 @@ "string" : { "type" : "boolean" }, + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" + }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, "asJsonPrimitive" : { "$ref" : "#/definitions/JsonPrimitive" }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" - }, "jsonArray" : { "type" : "boolean" }, "jsonObject" : { "type" : "boolean" }, - "jsonNull" : { - "type" : "boolean" - }, "jsonPrimitive" : { "type" : "boolean" }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" + "jsonNull" : { + "type" : "boolean" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" } } }, "MicroServicePolicy" : { "type" : "object", "properties" : { + "createdDate" : { + "type" : "integer", + "format" : "int64" + }, + "updatedDate" : { + "type" : "integer", + "format" : "int64" + }, + "updatedBy" : { + "type" : "string" + }, + "createdBy" : { + "type" : "string" + }, "name" : { "type" : "string" }, "modelType" : { "type" : "string" }, + "context" : { + "type" : "string" + }, + "deviceTypeScope" : { + "type" : "string" + }, "properties" : { "$ref" : "#/definitions/JsonObject" }, @@ -629,6 +600,9 @@ "items" : { "$ref" : "#/definitions/Loop" } + }, + "microServiceModel" : { + "$ref" : "#/definitions/MicroServiceModel" } }, "x-className" : { @@ -639,21 +613,39 @@ "JsonObject" : { "type" : "object", "properties" : { + "asBoolean" : { + "type" : "boolean" + }, + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" + }, + "asString" : { + "type" : "string" + }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, "asJsonPrimitive" : { "$ref" : "#/definitions/JsonPrimitive" }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" + "jsonArray" : { + "type" : "boolean" }, - "asBoolean" : { + "jsonObject" : { "type" : "boolean" }, + "jsonPrimitive" : { + "type" : "boolean" + }, + "jsonNull" : { + "type" : "boolean" + }, + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" + }, "asNumber" : { "$ref" : "#/definitions/Number" }, - "asString" : { - "type" : "string" - }, "asDouble" : { "type" : "number", "format" : "double" @@ -686,39 +678,58 @@ "asShort" : { "type" : "integer", "format" : "int32" + } + }, + "x-className" : { + "type" : "string", + "format" : "com.google.gson.JsonObject" + } + }, + "PolicyModel" : { + "type" : "object", + "properties" : { + "createdDate" : { + "type" : "integer", + "format" : "int64" }, - "jsonArray" : { - "type" : "boolean" + "updatedDate" : { + "type" : "integer", + "format" : "int64" }, - "jsonObject" : { - "type" : "boolean" + "updatedBy" : { + "type" : "string" }, - "jsonNull" : { - "type" : "boolean" + "createdBy" : { + "type" : "string" }, - "jsonPrimitive" : { - "type" : "boolean" + "policyModelType" : { + "type" : "string" }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" + "version" : { + "type" : "string" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "policyModelTosca" : { + "type" : "string" + }, + "policyAcronym" : { + "type" : "string" + }, + "policyVariant" : { + "type" : "string" } - }, - "x-className" : { - "type" : "string", - "format" : "com.google.gson.JsonObject" } }, - "ExternalComponent" : { + "Service" : { "type" : "object", "properties" : { - "state" : { - "$ref" : "#/definitions/ExternalComponentState" - }, - "componentName" : { + "serviceUuid" : { "type" : "string" + }, + "serviceDetails" : { + "$ref" : "#/definitions/JsonObject" + }, + "resourceDetails" : { + "$ref" : "#/definitions/JsonObject" } } }, @@ -734,44 +745,97 @@ "loop" : { "$ref" : "#/definitions/Loop" }, + "policyModel" : { + "$ref" : "#/definitions/PolicyModel" + }, "jsonRepresentation" : { "$ref" : "#/definitions/JsonObject" } } }, - "ExternalComponentState" : { + "JsonNull" : { "type" : "object", "properties" : { - "stateName" : { + "asBoolean" : { + "type" : "boolean" + }, + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" + }, + "asString" : { "type" : "string" }, - "description" : { + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" + }, + "jsonArray" : { + "type" : "boolean" + }, + "jsonObject" : { + "type" : "boolean" + }, + "jsonPrimitive" : { + "type" : "boolean" + }, + "jsonNull" : { + "type" : "boolean" + }, + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" + }, + "asNumber" : { + "$ref" : "#/definitions/Number" + }, + "asDouble" : { + "type" : "number", + "format" : "double" + }, + "asFloat" : { + "type" : "number", + "format" : "float" + }, + "asLong" : { + "type" : "integer", + "format" : "int64" + }, + "asInt" : { + "type" : "integer", + "format" : "int32" + }, + "asByte" : { + "type" : "string", + "format" : "byte" + }, + "asCharacter" : { "type" : "string" }, - "level" : { + "asBigDecimal" : { + "type" : "number" + }, + "asBigInteger" : { + "type" : "integer" + }, + "asShort" : { "type" : "integer", "format" : "int32" } } }, - "JsonNull" : { + "JsonArray" : { "type" : "object", "properties" : { - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" - }, "asBoolean" : { "type" : "boolean" }, - "asNumber" : { - "$ref" : "#/definitions/Number" - }, "asString" : { "type" : "string" }, + "asNumber" : { + "$ref" : "#/definitions/Number" + }, "asDouble" : { "type" : "number", "format" : "double" @@ -805,23 +869,145 @@ "type" : "integer", "format" : "int32" }, + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" + }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" + }, "jsonArray" : { "type" : "boolean" }, "jsonObject" : { "type" : "boolean" }, - "jsonNull" : { + "jsonPrimitive" : { "type" : "boolean" }, - "jsonPrimitive" : { + "jsonNull" : { "type" : "boolean" }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" + } + }, + "x-className" : { + "type" : "string", + "format" : "com.google.gson.JsonArray" + } + }, + "LoopLog" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "format" : "int64" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "logType" : { + "type" : "string", + "enum" : [ "INFO", "WARNING", "ERROR" ] + }, + "logComponent" : { + "type" : "string" + }, + "message" : { + "type" : "string" + }, + "loop" : { + "$ref" : "#/definitions/Loop" + }, + "logInstant" : { + "type" : "integer", + "format" : "int64" + } + } + }, + "TemplateMicroServiceModel" : { + "type" : "object", + "properties" : { + "loopTemplate" : { + "$ref" : "#/definitions/LoopTemplate" + }, + "microServiceModel" : { + "$ref" : "#/definitions/MicroServiceModel" + }, + "flowOrder" : { + "type" : "integer", + "format" : "int32" + } + } + }, + "Number" : { + "type" : "object" + }, + "ExternalComponent" : { + "type" : "object", + "properties" : { + "state" : { + "$ref" : "#/definitions/ExternalComponentState" + }, + "componentName" : { + "type" : "string" + } + } + }, + "LoopTemplate" : { + "type" : "object", + "properties" : { + "createdDate" : { + "type" : "integer", + "format" : "int64" + }, + "updatedDate" : { + "type" : "integer", + "format" : "int64" + }, + "updatedBy" : { + "type" : "string" + }, + "createdBy" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "blueprint" : { + "type" : "string" + }, + "svgRepresentation" : { + "type" : "string" + }, + "microServiceModelUsed" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/TemplateMicroServiceModel" + } + }, + "modelService" : { + "$ref" : "#/definitions/Service" + }, + "maximumInstancesAllowed" : { + "type" : "integer", + "format" : "int32" + } + } + }, + "ExternalComponentState" : { + "type" : "object", + "properties" : { + "stateName" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "level" : { + "type" : "integer", + "format" : "int32" } } }, diff --git a/docs/swagger/swagger.pdf b/docs/swagger/swagger.pdf index 29975894b..8a34cb5e7 100644 --- a/docs/swagger/swagger.pdf +++ b/docs/swagger/swagger.pdf @@ -4,16 +4,16 @@ << /Title (Clamp Rest API) /Creator (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) /Producer (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) -/CreationDate (D:20190924114758+02'00') -/ModDate (D:20190924114758+02'00') +/CreationDate (D:20200116114123+01'00') +/ModDate (D:20200116114123+01'00') >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R /Names 18 0 R -/Outlines 351 0 R -/PageLabels 434 0 R +/Outlines 383 0 R +/PageLabels 471 0 R /PageMode /UseOutlines /OpenAction [7 0 R /FitH 793.0] /ViewerPreferences << /DisplayDocTitle true @@ -22,8 +22,8 @@ endobj endobj 3 0 obj << /Type /Pages -/Count 21 -/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 25 0 R 41 0 R 55 0 R 69 0 R 82 0 R 96 0 R 109 0 R 123 0 R 130 0 R 136 0 R 143 0 R 151 0 R 158 0 R 166 0 R 172 0 R 181 0 R] +/Count 24 +/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 25 0 R 41 0 R 55 0 R 69 0 R 82 0 R 96 0 R 109 0 R 123 0 R 130 0 R 136 0 R 143 0 R 151 0 R 158 0 R 166 0 R 171 0 R 180 0 R 187 0 R 195 0 R 205 0 R] >> endobj 4 0 obj @@ -80,11 +80,11 @@ endobj << /Type /Font /BaseFont /AAAAAA+NotoSerif /Subtype /TrueType -/FontDescriptor 436 0 R +/FontDescriptor 473 0 R /FirstChar 32 /LastChar 255 -/Widths 438 0 R -/ToUnicode 437 0 R +/Widths 475 0 R +/ToUnicode 474 0 R >> endobj 9 0 obj @@ -1559,7 +1559,7 @@ endobj /F1.0 8 0 R >> >> -/Annots [190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R] +/Annots [212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R] >> endobj 11 0 obj @@ -3102,11 +3102,11 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R] +/Annots [284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R] >> endobj 13 0 obj -<< /Length 5124 +<< /Length 9378 >> stream q @@ -3238,7 +3238,7 @@ ET BT 60.24000000000001 689.3459999999999 Td /F1.0 10.5 Tf -<332e31312e204d6963726f53657276696365506f6c696379> Tj +[<332e31312e204c6f6f7054> 29.78515625 <656d706c617465>] TJ ET 0.000 0.000 0.000 SCN @@ -3247,9 +3247,9 @@ ET 0.200 0.200 0.200 SCN BT -187.23524999999995 689.3459999999999 Td +160.51274999999998 689.3459999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -3267,7 +3267,7 @@ ET BT 552.021 689.3459999999999 Td /F1.0 10.5 Tf -<3136> Tj +<3137> Tj ET 0.000 0.000 0.000 SCN @@ -3278,7 +3278,7 @@ ET BT 60.24000000000001 670.8659999999999 Td /F1.0 10.5 Tf -<332e31322e204e756d626572> Tj +<332e31322e204d6963726f536572766963654d6f64656c> Tj ET 0.000 0.000 0.000 SCN @@ -3287,9 +3287,9 @@ ET 0.200 0.200 0.200 SCN BT -128.44574999999998 670.8659999999999 Td +187.23524999999995 670.8659999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -3318,7 +3318,7 @@ ET BT 60.24000000000001 652.3859999999999 Td /F1.0 10.5 Tf -[<332e31332e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +<332e31332e204d6963726f53657276696365506f6c696379> Tj ET 0.000 0.000 0.000 SCN @@ -3327,9 +3327,9 @@ ET 0.200 0.200 0.200 SCN BT -176.54625 652.3859999999999 Td +187.23524999999995 652.3859999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -3347,7 +3347,207 @@ ET BT 552.021 652.3859999999999 Td /F1.0 10.5 Tf -<3137> Tj +<3138> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +60.24000000000001 633.9059999999998 Td +/F1.0 10.5 Tf +<332e31342e204e756d626572> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +128.44574999999998 633.9059999999998 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +BT +550.66125 633.9059999999998 Td +/F1.0 5.25 Tf + Tj +ET + +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.021 633.9059999999998 Td +/F1.0 10.5 Tf +<3139> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +60.24000000000001 615.4259999999998 Td +/F1.0 10.5 Tf +[<332e31352e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +176.54625 615.4259999999998 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +BT +550.66125 615.4259999999998 Td +/F1.0 5.25 Tf + Tj +ET + +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.021 615.4259999999998 Td +/F1.0 10.5 Tf +<3139> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +60.24000000000001 596.9459999999998 Td +/F1.0 10.5 Tf +<332e31362e20506f6c6963794d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +149.82374999999996 596.9459999999998 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +BT +550.66125 596.9459999999998 Td +/F1.0 5.25 Tf + Tj +ET + +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.021 596.9459999999998 Td +/F1.0 10.5 Tf +<3139> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +60.24000000000001 578.4659999999998 Td +/F1.0 10.5 Tf +<332e31372e2053657276696365> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +123.10125 578.4659999999998 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +BT +550.66125 578.4659999999998 Td +/F1.0 5.25 Tf + Tj +ET + +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.021 578.4659999999998 Td +/F1.0 10.5 Tf +<3230> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +60.24000000000001 559.9859999999999 Td +/F1.0 10.5 Tf +[<332e31382e2054> 29.78515625 <656d706c6174654d6963726f536572766963654d6f64656c>] TJ +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +235.33574999999996 559.9859999999999 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +BT +550.66125 559.9859999999999 Td +/F1.0 5.25 Tf + Tj +ET + +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.021 559.9859999999999 Td +/F1.0 10.5 Tf +<3230> Tj ET 0.000 0.000 0.000 SCN @@ -3365,7 +3565,7 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R] +/Annots [360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R] >> endobj 15 0 obj @@ -3414,7 +3614,7 @@ ET BT 85.136384765625 660.036 Td /F1.0 10.5 Tf -[<203a20342e312e322d534e415053484f> 20.01953125 <54>] TJ +[<203a20342e322e302d534e415053484f> 20.01953125 <54>] TJ ET 0.000 0.000 0.000 SCN @@ -3447,7 +3647,7 @@ ET BT 71.30850000000001 592.176 Td /F1.0 10.5 Tf -<203a206c6f63616c686f73743a3334323139> Tj +<203a206c6f63616c686f73743a3333393533> Tj ET 0.000 0.000 0.000 SCN @@ -3548,7 +3748,7 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> >> @@ -3562,18 +3762,18 @@ endobj >> endobj 19 0 obj -<< /Kids [50 0 R 186 0 R 127 0 R 80 0 R 116 0 R 51 0 R 86 0 R] +<< /Kids [50 0 R 190 0 R 127 0 R 80 0 R 116 0 R 51 0 R 86 0 R] >> endobj 20 0 obj << /Type /Font /BaseFont /AAAAAB+NotoSerif-Bold /Subtype /TrueType -/FontDescriptor 440 0 R +/FontDescriptor 477 0 R /FirstChar 32 /LastChar 255 -/Widths 442 0 R -/ToUnicode 441 0 R +/Widths 479 0 R +/ToUnicode 478 0 R >> endobj 21 0 obj @@ -3583,11 +3783,11 @@ endobj << /Type /Font /BaseFont /AAAAAC+NotoSerif-Italic /Subtype /TrueType -/FontDescriptor 444 0 R +/FontDescriptor 481 0 R /FirstChar 32 /LastChar 255 -/Widths 446 0 R -/ToUnicode 445 0 R +/Widths 483 0 R +/ToUnicode 482 0 R >> endobj 23 0 obj @@ -4487,7 +4687,7 @@ endobj /F1.0 8 0 R /F4.0 31 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [29 0 R 34 0 R] @@ -4517,11 +4717,11 @@ endobj << /Type /Font /BaseFont /AAAAAD+mplus1mn-regular /Subtype /TrueType -/FontDescriptor 448 0 R +/FontDescriptor 485 0 R /FirstChar 32 /LastChar 255 -/Widths 450 0 R -/ToUnicode 449 0 R +/Widths 487 0 R +/ToUnicode 486 0 R >> endobj 32 0 obj @@ -5884,7 +6084,7 @@ endobj /F1.0 8 0 R /F4.0 31 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [47 0 R] @@ -5925,8 +6125,8 @@ endobj >> endobj 51 0 obj -<< /Limits [(_responses_3) (_route12)] -/Names [(_responses_3) 37 0 R (_responses_4) 43 0 R (_responses_5) 46 0 R (_responses_6) 52 0 R (_responses_7) 58 0 R (_responses_8) 63 0 R (_responses_9) 70 0 R (_route10) 66 0 R (_route11) 61 0 R (_route12) 73 0 R] +<< /Limits [(_responses_3) (_route25)] +/Names [(_responses_3) 37 0 R (_responses_4) 43 0 R (_responses_5) 46 0 R (_responses_6) 52 0 R (_responses_7) 58 0 R (_responses_8) 63 0 R (_responses_9) 70 0 R (_route19) 49 0 R (_route20) 117 0 R (_route21) 78 0 R (_route22) 91 0 R (_route23) 107 0 R (_route24) 100 0 R (_route25) 44 0 R] >> endobj 52 0 obj @@ -7129,7 +7329,7 @@ endobj /F1.0 8 0 R /F4.0 31 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [59 0 R 64 0 R] @@ -8599,7 +8799,7 @@ endobj /F1.0 8 0 R /F4.0 31 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [71 0 R 76 0 R] @@ -9962,7 +10162,7 @@ endobj /F4.0 31 0 R /F3.0 22 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [89 0 R 93 0 R] @@ -9978,8 +10178,8 @@ endobj [82 0 R /XYZ 0 597.0000000000003 null] endobj 86 0 obj -<< /Limits [(_route13) (_version_information)] -/Names [(_route13) 39 0 R (_route14) 56 0 R (_route15) 27 0 R (_route16) 32 0 R (_route17) 36 0 R (_route2) 49 0 R (_route3) 117 0 R (_route4) 78 0 R (_route5) 91 0 R (_route6) 107 0 R (_route7) 100 0 R (_route8) 44 0 R (_route9) 85 0 R (_uri_scheme) 23 0 R (_version_information) 21 0 R] +<< /Limits [(_route26) (_version_information)] +/Names [(_route26) 85 0 R (_route27) 66 0 R (_route28) 61 0 R (_route29) 73 0 R (_route30) 39 0 R (_route31) 56 0 R (_route32) 27 0 R (_route33) 32 0 R (_route34) 36 0 R (_service) 206 0 R (_templatemicroservicemodel) 209 0 R (_uri_scheme) 23 0 R (_version_information) 21 0 R] >> endobj 87 0 obj @@ -11153,7 +11353,7 @@ endobj /F4.0 31 0 R /F3.0 22 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [97 0 R 102 0 R 104 0 R] @@ -12542,7 +12742,7 @@ endobj /F1.0 8 0 R /F4.0 31 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [111 0 R 113 0 R 120 0 R] @@ -13832,7 +14032,7 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> >> @@ -13848,7 +14048,7 @@ endobj endobj 127 0 obj << /Limits [(_parameters_12) (_produces)] -/Names [(_parameters_12) 118 0 R (_parameters_2) 45 0 R (_parameters_3) 57 0 R (_parameters_4) 62 0 R (_parameters_5) 67 0 R (_parameters_6) 74 0 R (_parameters_7) 79 0 R (_parameters_8) 87 0 R (_parameters_9) 92 0 R (_paths) 26 0 R (_produces) 30 0 R] +/Names [(_parameters_12) 118 0 R (_parameters_2) 45 0 R (_parameters_3) 57 0 R (_parameters_4) 62 0 R (_parameters_5) 67 0 R (_parameters_6) 74 0 R (_parameters_7) 79 0 R (_parameters_8) 87 0 R (_parameters_9) 92 0 R (_paths) 26 0 R (_policymodel) 203 0 R (_produces) 30 0 R] >> endobj 128 0 obj @@ -15427,7 +15627,7 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [131 0 R 134 0 R] @@ -17135,7 +17335,7 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [137 0 R 138 0 R 139 0 R 140 0 R] @@ -18864,7 +19064,7 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [144 0 R 145 0 R 146 0 R 147 0 R 148 0 R] @@ -20692,7 +20892,7 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [152 0 R 153 0 R 154 0 R 155 0 R 156 0 R] @@ -22426,7 +22626,7 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> /Annots [160 0 R 161 0 R 162 0 R 163 0 R 164 0 R] @@ -22476,7 +22676,7 @@ endobj >> endobj 165 0 obj -<< /Length 22082 +<< /Length 21453 >> stream q @@ -23650,7 +23850,7 @@ S BT 51.24 265.5130000000003 Td /F2.0 10.5 Tf -<64636165426c75657072696e744964> Tj +[<6372656174656442> 20.01953125 <79>] TJ ET @@ -23732,7 +23932,7 @@ S BT 51.24 227.95300000000037 Td /F2.0 10.5 Tf -[<646361654465706c6f> 20.01953125 <796d656e744964>] TJ +<6372656174656444617465> Tj ET @@ -23779,7 +23979,7 @@ S BT 272.17692192000004 220.81300000000036 Td /F1.0 10.5 Tf -<737472696e67> Tj +<696e74656765722028696e74363429> Tj ET 0.000 0.000 0.000 scn @@ -23814,7 +24014,7 @@ S BT 51.24 190.39300000000037 Td /F2.0 10.5 Tf -[<646361654465706c6f> 20.01953125 <796d656e7453746174757355726c>] TJ +<64636165426c75657072696e744964> Tj ET @@ -23896,7 +24096,7 @@ S BT 51.24 152.83300000000037 Td /F2.0 10.5 Tf -<676c6f62616c50726f706572746965734a736f6e> Tj +[<646361654465706c6f> 20.01953125 <796d656e744964>] TJ ET @@ -23939,21 +24139,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT 272.17692192000004 145.69300000000035 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -23986,7 +24178,7 @@ S BT 51.24 115.27300000000035 Td /F2.0 10.5 Tf -<6c617374436f6d70757465645374617465> Tj +[<646361654465706c6f> 20.01953125 <796d656e7453746174757355726c>] TJ ET @@ -24031,16 +24223,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 115.27300000000035 Td -/F1.0 10.5 Tf -[<656e756d202844455349474e2c205355424d49545445442c204445504c4f> 29.78515625 <5945442c2052> 9.765625 <554e4e494e472c>] TJ -ET - - -BT -272.17692192000004 100.99300000000035 Td +272.17692192000004 108.13300000000035 Td /F1.0 10.5 Tf -[<53> 20.01953125 <54> 20.01953125 <4f505045442c20494e5f455252> 20.01953125 <4f522c2057> 60.05859375 <414954494e4729>] TJ +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -24075,7 +24260,7 @@ S BT 51.24 77.71300000000032 Td /F2.0 10.5 Tf -<6c6f6f704c6f6773> Tj +<676c6f62616c50726f706572746965734a736f6e> Tj ET @@ -24122,31 +24307,17 @@ S 0.259 0.545 0.792 SCN 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn - -BT -272.17692192000004 70.57300000000032 Td -/F1.0 10.5 Tf -<3c20> Tj -ET - 0.259 0.545 0.792 scn 0.259 0.545 0.792 SCN BT -280.76592192000004 70.57300000000032 Td +272.17692192000004 70.57300000000032 Td /F1.0 10.5 Tf -<4c6f6f704c6f67> Tj +<4a736f6e4f626a656374> Tj ET 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn - -BT -324.10992192000003 70.57300000000032 Td -/F1.0 10.5 Tf -[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ -ET - 0.000 0.000 0.000 scn q 0.000 0.000 0.000 scn @@ -24182,10 +24353,10 @@ endobj /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> -/Annots [168 0 R 169 0 R 170 0 R] +/Annots [168 0 R 169 0 R] >> endobj 167 0 obj @@ -24203,20 +24374,12 @@ endobj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 142.62700000000038 325.32792192000005 156.90700000000038] +/Rect [272.17692192000004 67.50700000000032 325.32792192000005 81.78700000000032] /Type /Annot >> endobj 170 0 obj -<< /Border [0 0 0] -/Dest (_looplog) -/Subtype /Link -/Rect [280.76592192000004 67.50700000000032 324.10992192000003 81.78700000000032] -/Type /Annot ->> -endobj -171 0 obj -<< /Length 21061 +<< /Length 22836 >> stream q @@ -24269,30 +24432,70 @@ f 269.177 544.920 294.583 37.560 re f 0.000 0.000 0.000 scn -0.5 w -/DeviceRGB CS -0.867 0.867 0.867 SCN -48.240 756.000 m -269.177 756.000 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 732.720 m -269.177 732.720 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 756.250 m -48.240 731.970 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 756.250 m -269.177 731.970 l -S +0.976 0.976 0.976 scn +48.240 507.360 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 507.360 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 469.800 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 469.800 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 432.240 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 432.240 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 394.680 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 394.680 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 357.120 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 357.120 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +/DeviceRGB CS +0.867 0.867 0.867 SCN +48.240 756.000 m +269.177 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 756.250 m +48.240 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S [ ] 0 d 1 w 0.000 0.000 0.000 SCN @@ -24371,7 +24574,7 @@ S BT 51.24 716.473 Td /F2.0 10.5 Tf -<6d6963726f53657276696365506f6c6963696573> Tj +<6c617374436f6d70757465645374617465> Tj ET @@ -24414,33 +24617,18 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 709.333 Td -/F1.0 10.5 Tf -<3c20> Tj -ET - -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -280.76592192000004 709.333 Td +272.17692192000004 716.473 Td /F1.0 10.5 Tf -<4d6963726f53657276696365506f6c696379> Tj +[<656e756d202844455349474e2c205355424d49545445442c204445504c4f> 29.78515625 <5945442c2052> 9.765625 <554e4e494e472c>] TJ ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn BT -376.69392192000004 709.333 Td +272.17692192000004 702.193 Td /F1.0 10.5 Tf -[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +[<53> 20.01953125 <54> 20.01953125 <4f505045442c20494e5f455252> 20.01953125 <4f522c2057> 60.05859375 <414954494e4729>] TJ ET 0.000 0.000 0.000 scn @@ -24475,7 +24663,7 @@ S BT 51.24 678.913 Td /F2.0 10.5 Tf -<6d6f64656c50726f706572746965734a736f6e> Tj +<6c6f6f704c6f6773> Tj ET @@ -24522,17 +24710,31 @@ S 0.259 0.545 0.792 SCN 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn + +BT +272.17692192000004 671.7729999999999 Td +/F1.0 10.5 Tf +<3c20> Tj +ET + 0.259 0.545 0.792 scn 0.259 0.545 0.792 SCN BT -272.17692192000004 671.7729999999999 Td +280.76592192000004 671.7729999999999 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<4c6f6f704c6f67> Tj ET 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn + +BT +324.10992192000003 671.7729999999999 Td +/F1.0 10.5 Tf +[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +ET + 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -24565,7 +24767,7 @@ S BT 51.24 641.3529999999998 Td /F2.0 10.5 Tf -<6e616d65> Tj +[<6c6f6f7054> 29.78515625 <656d706c617465>] TJ ET @@ -24608,13 +24810,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 272.17692192000004 634.2129999999999 Td /F1.0 10.5 Tf -<737472696e67> Tj +[<4c6f6f7054> 29.78515625 <656d706c617465>] TJ ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -24647,7 +24857,7 @@ S BT 51.24 603.7929999999999 Td /F2.0 10.5 Tf -[<6f706572> 20.01953125 <6174696f6e616c506f6c6963696573>] TJ +<6d6963726f53657276696365506f6c6963696573> Tj ET @@ -24707,14 +24917,14 @@ ET BT 280.76592192000004 596.6529999999999 Td /F1.0 10.5 Tf -[<4f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +<4d6963726f53657276696365506f6c696379> Tj ET 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn BT -370.37271684187505 596.6529999999999 Td +376.69392192000004 596.6529999999999 Td /F1.0 10.5 Tf [<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET @@ -24751,7 +24961,7 @@ S BT 51.24 566.233 Td /F2.0 10.5 Tf -<737667526570726573656e746174696f6e> Tj +<6d6f64656c53657276696365> Tj ET @@ -24794,103 +25004,44 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 272.17692192000004 559.093 Td /F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 509.49600000000015 Td -/F2.0 18 Tf -<332e31302e204c6f6f704c6f67> Tj +<53657276696365> Tj ET 0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 469.560 220.937 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 469.560 294.583 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 432.000 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 432.000 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 394.440 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 394.440 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 356.880 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 356.880 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 319.320 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 319.320 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 281.760 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 281.760 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 244.200 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 244.200 294.583 37.560 re -f +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 492.840 m -269.177 492.840 l +48.240 544.920 m +269.177 544.920 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -48.240 469.560 m -269.177 469.560 l +48.240 507.360 m +269.177 507.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 493.090 m -48.240 468.810 l +48.240 545.170 m +48.240 507.110 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 493.090 m -269.177 468.810 l +269.177 545.170 m +269.177 507.110 l S [ ] 0 d 1 w @@ -24898,34 +25049,46 @@ S 0.200 0.200 0.200 scn BT -51.24 477.0930000000001 Td +51.24 528.673 Td /F2.0 10.5 Tf -<4e616d65> Tj +<6e616d65> Tj +ET + + +BT +51.24 514.3929999999999 Td +ET + + +BT +51.24 514.3929999999999 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 492.840 m -563.760 492.840 l +269.177 544.920 m +563.760 544.920 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -269.177 469.560 m -563.760 469.560 l +269.177 507.360 m +563.760 507.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 493.090 m -269.177 468.810 l +269.177 545.170 m +269.177 507.110 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 493.090 m -563.760 468.810 l +563.760 545.170 m +563.760 507.110 l S [ ] 0 d 1 w @@ -24933,34 +25096,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 477.0930000000001 Td -/F2.0 10.5 Tf -<536368656d61> Tj +272.17692192000004 521.5329999999999 Td +/F1.0 10.5 Tf +<737472696e67> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 469.560 m -269.177 469.560 l +48.240 507.360 m +269.177 507.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 432.000 m -269.177 432.000 l +48.240 469.800 m +269.177 469.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 469.810 m -48.240 431.750 l +48.240 507.610 m +48.240 469.550 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 469.810 m -269.177 431.750 l +269.177 507.610 m +269.177 469.550 l S [ ] 0 d 1 w @@ -24968,19 +25131,19 @@ S 0.200 0.200 0.200 scn BT -51.24 453.31300000000005 Td +51.24 491.1129999999999 Td /F2.0 10.5 Tf -<6964> Tj +[<6f706572> 20.01953125 <6174696f6e616c506f6c6963696573>] TJ ET BT -51.24 439.033 Td +51.24 476.83299999999986 Td ET BT -51.24 439.033 Td +51.24 476.83299999999986 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -24988,61 +25151,83 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 469.560 m -563.760 469.560 l +269.177 507.360 m +563.760 507.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.000 m -563.760 432.000 l +269.177 469.800 m +563.760 469.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 469.810 m -269.177 431.750 l +269.177 507.610 m +269.177 469.550 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 469.810 m -563.760 431.750 l +563.760 507.610 m +563.760 469.550 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn BT -272.17692192000004 446.17300000000006 Td +272.17692192000004 483.9729999999999 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<3c20> Tj +ET + +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +280.76592192000004 483.9729999999999 Td +/F1.0 10.5 Tf +[<4f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +370.37271684187505 483.9729999999999 Td +/F1.0 10.5 Tf +[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 432.000 m -269.177 432.000 l +48.240 469.800 m +269.177 469.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l +48.240 432.240 m +269.177 432.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 432.250 m -48.240 394.190 l +48.240 470.050 m +48.240 431.990 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.250 m -269.177 394.190 l +269.177 470.050 m +269.177 431.990 l S [ ] 0 d 1 w @@ -25050,19 +25235,19 @@ S 0.200 0.200 0.200 scn BT -51.24 415.7530000000001 Td +51.24 453.55299999999994 Td /F2.0 10.5 Tf -<6c6f67436f6d706f6e656e74> Tj +<737667526570726573656e746174696f6e> Tj ET BT -51.24 401.47300000000007 Td +51.24 439.2729999999999 Td ET BT -51.24 401.47300000000007 Td +51.24 439.2729999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -25070,26 +25255,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 432.000 m -563.760 432.000 l +269.177 469.800 m +563.760 469.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 432.240 m +563.760 432.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.250 m -269.177 394.190 l +269.177 470.050 m +269.177 431.990 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 432.250 m -563.760 394.190 l +563.760 470.050 m +563.760 431.990 l S [ ] 0 d 1 w @@ -25097,7 +25282,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 408.6130000000001 Td +272.17692192000004 446.41299999999995 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -25105,26 +25290,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l +48.240 432.240 m +269.177 432.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 356.880 m -269.177 356.880 l +48.240 394.680 m +269.177 394.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 394.690 m -48.240 356.630 l +48.240 432.490 m +48.240 394.430 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 432.490 m +269.177 394.430 l S [ ] 0 d 1 w @@ -25132,19 +25317,19 @@ S 0.200 0.200 0.200 scn BT -51.24 378.19300000000004 Td +51.24 415.993 Td /F2.0 10.5 Tf -<6c6f67496e7374616e74> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET BT -51.24 363.913 Td +51.24 401.71299999999997 Td ET BT -51.24 363.913 Td +51.24 401.71299999999997 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -25152,26 +25337,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 432.240 m +563.760 432.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 356.880 m -563.760 356.880 l +269.177 394.680 m +563.760 394.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 432.490 m +269.177 394.430 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 394.690 m -563.760 356.630 l +563.760 432.490 m +563.760 394.430 l S [ ] 0 d 1 w @@ -25179,34 +25364,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 371.05300000000005 Td +272.17692192000004 408.853 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 356.880 m -269.177 356.880 l +48.240 394.680 m +269.177 394.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.320 m -269.177 319.320 l +48.240 357.120 m +269.177 357.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 357.130 m -48.240 319.070 l +48.240 394.930 m +48.240 356.870 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.130 m -269.177 319.070 l +269.177 394.930 m +269.177 356.870 l S [ ] 0 d 1 w @@ -25214,19 +25399,19 @@ S 0.200 0.200 0.200 scn BT -51.24 340.6330000000001 Td +51.24 378.43300000000005 Td /F2.0 10.5 Tf -<6c6f6754797065> Tj +<7570646174656444617465> Tj ET BT -51.24 326.35300000000007 Td +51.24 364.153 Td ET BT -51.24 326.35300000000007 Td +51.24 364.153 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -25234,26 +25419,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 356.880 m -563.760 356.880 l +269.177 394.680 m +563.760 394.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.320 m -563.760 319.320 l +269.177 357.120 m +563.760 357.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.130 m -269.177 319.070 l +269.177 394.930 m +269.177 356.870 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 357.130 m -563.760 319.070 l +563.760 394.930 m +563.760 356.870 l S [ ] 0 d 1 w @@ -25261,19 +25446,86 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 333.4930000000001 Td +272.17692192000004 371.29300000000006 Td /F1.0 10.5 Tf -[<656e756d2028494e464f2c2057> 60.05859375 <41524e494e472c20455252> 20.01953125 <4f5229>] TJ +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 321.6960000000001 Td +/F2.0 18 Tf +<332e31302e204c6f6f704c6f67> Tj ET +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 281.760 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 281.760 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 244.200 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 244.200 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 206.640 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 206.640 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 169.080 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 169.080 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 131.520 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 131.520 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 93.960 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 93.960 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 56.400 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 56.400 294.583 37.560 re +f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 319.320 m -269.177 319.320 l +48.240 305.040 m +269.177 305.040 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN 48.240 281.760 m 269.177 281.760 l @@ -25281,14 +25533,14 @@ S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.570 m -48.240 281.510 l +48.240 305.290 m +48.240 281.010 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.570 m -269.177 281.510 l +269.177 305.290 m +269.177 281.010 l S [ ] 0 d 1 w @@ -25296,31 +25548,19 @@ S 0.200 0.200 0.200 scn BT -51.24 303.07300000000004 Td +51.24 289.293 Td /F2.0 10.5 Tf -<6c6f6f70> Tj -ET - - -BT -51.24 288.793 Td -ET - - -BT -51.24 288.793 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 319.320 m -563.760 319.320 l +269.177 305.040 m +563.760 305.040 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN 269.177 281.760 m 563.760 281.760 l @@ -25328,34 +25568,26 @@ S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.570 m -269.177 281.510 l +269.177 305.290 m +269.177 281.010 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 319.570 m -563.760 281.510 l +563.760 305.290 m +563.760 281.010 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 295.93300000000005 Td -/F1.0 10.5 Tf -<4c6f6f70> Tj +272.17692192000004 289.293 Td +/F2.0 10.5 Tf +<536368656d61> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -25386,19 +25618,19 @@ S 0.200 0.200 0.200 scn BT -51.24 265.5130000000001 Td +51.24 265.513 Td /F2.0 10.5 Tf -<6d657373616765> Tj +<6964> Tj ET BT -51.24 251.2330000000001 Td +51.24 251.23299999999998 Td ET BT -51.24 251.2330000000001 Td +51.24 251.23299999999998 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -25433,77 +25665,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 258.3730000000001 Td +272.17692192000004 258.373 Td /F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 208.7760000000001 Td -/F2.0 18 Tf -<332e31312e204d6963726f53657276696365506f6c696379> Tj +<696e74656765722028696e74363429> Tj ET -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 168.840 220.937 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 168.840 294.583 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 131.280 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 131.280 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 93.720 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 93.720 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 56.160 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 56.160 294.583 37.560 re -f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 192.120 m -269.177 192.120 l +48.240 244.200 m +269.177 244.200 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -48.240 168.840 m -269.177 168.840 l +48.240 206.640 m +269.177 206.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 192.370 m -48.240 168.090 l +48.240 244.450 m +48.240 206.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 192.370 m -269.177 168.090 l +269.177 244.450 m +269.177 206.390 l S [ ] 0 d 1 w @@ -25511,34 +25700,46 @@ S 0.200 0.200 0.200 scn BT -51.24 176.3730000000001 Td +51.24 227.95300000000003 Td /F2.0 10.5 Tf -<4e616d65> Tj +<6c6f67436f6d706f6e656e74> Tj +ET + + +BT +51.24 213.67300000000003 Td +ET + + +BT +51.24 213.67300000000003 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 192.120 m -563.760 192.120 l +269.177 244.200 m +563.760 244.200 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -269.177 168.840 m -563.760 168.840 l +269.177 206.640 m +563.760 206.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 192.370 m -269.177 168.090 l +269.177 244.450 m +269.177 206.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 192.370 m -563.760 168.090 l +563.760 244.450 m +563.760 206.390 l S [ ] 0 d 1 w @@ -25546,34 +25747,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 176.3730000000001 Td -/F2.0 10.5 Tf -<536368656d61> Tj +272.17692192000004 220.81300000000002 Td +/F1.0 10.5 Tf +<737472696e67> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 168.840 m -269.177 168.840 l +48.240 206.640 m +269.177 206.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 131.280 m -269.177 131.280 l +48.240 169.080 m +269.177 169.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 169.090 m -48.240 131.030 l +48.240 206.890 m +48.240 168.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 169.090 m -269.177 131.030 l +269.177 206.890 m +269.177 168.830 l S [ ] 0 d 1 w @@ -25581,19 +25782,19 @@ S 0.200 0.200 0.200 scn BT -51.24 152.5930000000001 Td +51.24 190.39300000000003 Td /F2.0 10.5 Tf -<6a736f6e526570726573656e746174696f6e> Tj +<6c6f67496e7374616e74> Tj ET BT -51.24 138.3130000000001 Td +51.24 176.11300000000003 Td ET BT -51.24 138.3130000000001 Td +51.24 176.11300000000003 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -25601,69 +25802,61 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 168.840 m -563.760 168.840 l +269.177 206.640 m +563.760 206.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 131.280 m -563.760 131.280 l +269.177 169.080 m +563.760 169.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 169.090 m -269.177 131.030 l +269.177 206.890 m +269.177 168.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 169.090 m -563.760 131.030 l +563.760 206.890 m +563.760 168.830 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 145.4530000000001 Td +272.17692192000004 183.25300000000001 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<696e74656765722028696e74363429> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 131.280 m -269.177 131.280 l +48.240 169.080 m +269.177 169.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 93.720 m -269.177 93.720 l +48.240 131.520 m +269.177 131.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 131.530 m -48.240 93.470 l +48.240 169.330 m +48.240 131.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 131.530 m -269.177 93.470 l +269.177 169.330 m +269.177 131.270 l S [ ] 0 d 1 w @@ -25671,19 +25864,19 @@ S 0.200 0.200 0.200 scn BT -51.24 115.03300000000009 Td +51.24 152.83300000000003 Td /F2.0 10.5 Tf -<6d6f64656c54797065> Tj +<6c6f6754797065> Tj ET BT -51.24 100.75300000000009 Td +51.24 138.55300000000003 Td ET BT -51.24 100.75300000000009 Td +51.24 138.55300000000003 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -25691,26 +25884,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 131.280 m -563.760 131.280 l +269.177 169.080 m +563.760 169.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 93.720 m -563.760 93.720 l +269.177 131.520 m +563.760 131.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 131.530 m -269.177 93.470 l +269.177 169.330 m +269.177 131.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 131.530 m -563.760 93.470 l +563.760 169.330 m +563.760 131.270 l S [ ] 0 d 1 w @@ -25718,34 +25911,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 107.89300000000009 Td +272.17692192000004 145.693 Td /F1.0 10.5 Tf -<737472696e67> Tj +[<656e756d2028494e464f2c2057> 60.05859375 <41524e494e472c20455252> 20.01953125 <4f5229>] TJ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 93.720 m -269.177 93.720 l +48.240 131.520 m +269.177 131.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 56.160 m -269.177 56.160 l +48.240 93.960 m +269.177 93.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 93.970 m -48.240 55.910 l +48.240 131.770 m +48.240 93.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 93.970 m -269.177 55.910 l +269.177 131.770 m +269.177 93.710 l S [ ] 0 d 1 w @@ -25753,19 +25946,19 @@ S 0.200 0.200 0.200 scn BT -51.24 77.47300000000008 Td +51.24 115.27300000000001 Td /F2.0 10.5 Tf -<6e616d65> Tj +<6c6f6f70> Tj ET BT -51.24 63.19300000000008 Td +51.24 100.99300000000001 Td ET BT -51.24 63.19300000000008 Td +51.24 100.99300000000001 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -25773,54 +25966,144 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 93.720 m -563.760 93.720 l +269.177 131.520 m +563.760 131.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 56.160 m -563.760 56.160 l +269.177 93.960 m +563.760 93.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 93.970 m -269.177 55.910 l +269.177 131.770 m +269.177 93.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 93.970 m -563.760 55.910 l +563.760 131.770 m +563.760 93.710 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -272.17692192000004 70.33300000000008 Td +272.17692192000004 108.13300000000001 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4c6f6f70> Tj ET -0.000 0.000 0.000 scn -q -0.000 0.000 0.000 scn 0.000 0.000 0.000 SCN -1 w -0 J -0 j +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 93.960 m +269.177 93.960 l +S [ ] 0 d -/Stamp1 Do +0.5 w +0.867 0.867 0.867 SCN +48.240 56.400 m +269.177 56.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 94.210 m +48.240 56.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.210 m +269.177 56.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -49.24 14.388 Td -/F1.0 9 Tf -<3136> Tj +51.24 77.71300000000001 Td +/F2.0 10.5 Tf +<6d657373616765> Tj +ET + + +BT +51.24 63.43300000000001 Td +ET + + +BT +51.24 63.43300000000001 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 93.960 m +563.760 93.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 56.400 m +563.760 56.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.210 m +269.177 56.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 94.210 m +563.760 56.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 70.57300000000001 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3136> Tj ET 0.000 0.000 0.000 SCN @@ -25830,137 +26113,201 @@ Q endstream endobj -172 0 obj +171 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 171 0 R +/Contents 170 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 20 0 R /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> -/Annots [173 0 R 174 0 R 175 0 R 177 0 R 179 0 R] +/Annots [172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 178 0 R] +>> +endobj +172 0 obj +<< /Border [0 0 0] +/Dest (_looplog) +/Subtype /Link +/Rect [280.76592192000004 668.707 324.10992192000003 682.987] +/Type /Annot >> endobj 173 0 obj << /Border [0 0 0] -/Dest (_microservicepolicy) +/Dest (_looptemplate) /Subtype /Link -/Rect [280.76592192000004 706.267 376.69392192000004 720.547] +/Rect [272.17692192000004 631.1469999999999 343.82067777937505 645.4269999999999] /Type /Annot >> endobj 174 0 obj << /Border [0 0 0] -/Dest (_jsonobject) +/Dest (_microservicepolicy) /Subtype /Link -/Rect [272.17692192000004 668.707 325.32792192000005 682.987] +/Rect [280.76592192000004 593.587 376.69392192000004 607.867] /Type /Annot >> endobj 175 0 obj << /Border [0 0 0] -/Dest (_operationalpolicy) +/Dest (_service) /Subtype /Link -/Rect [280.76592192000004 593.587 370.37271684187505 607.867] +/Rect [272.17692192000004 556.027 308.65392192 570.307] /Type /Annot >> endobj 176 0 obj -[172 0 R /XYZ 0 532.9200000000001 null] -endobj -177 0 obj << /Border [0 0 0] -/Dest (_loop) +/Dest (_operationalpolicy) /Subtype /Link -/Rect [272.17692192000004 292.867 297.27192192000007 307.14700000000005] +/Rect [280.76592192000004 480.90699999999987 370.37271684187505 495.1869999999999] /Type /Annot >> endobj -178 0 obj -[172 0 R /XYZ 0 232.2000000000001 null] +177 0 obj +[171 0 R /XYZ 0 345.12000000000006 null] endobj -179 0 obj +178 0 obj << /Border [0 0 0] -/Dest (_jsonobject) +/Dest (_loop) /Subtype /Link -/Rect [272.17692192000004 142.3870000000001 325.32792192000005 156.6670000000001] +/Rect [272.17692192000004 105.06700000000001 297.27192192000007 119.34700000000001] /Type /Annot >> endobj -180 0 obj -<< /Length 13104 +179 0 obj +<< /Length 20491 >> stream q /DeviceRGB cs +0.200 0.200 0.200 scn +/DeviceRGB CS +0.200 0.200 0.200 SCN + +BT +48.24 734.976 Td +/F2.0 18 Tf +[<332e31312e204c6f6f7054> 29.78515625 <656d706c617465>] TJ +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 732.720 220.937 23.280 re +48.240 695.040 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 732.720 294.583 23.280 re +269.177 695.040 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 695.160 220.937 37.560 re +48.240 657.480 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 695.160 294.583 37.560 re +269.177 657.480 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 657.600 220.937 37.560 re +48.240 619.920 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 657.600 294.583 37.560 re +269.177 619.920 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 620.040 220.937 37.560 re +48.240 582.360 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 620.040 294.583 37.560 re +269.177 582.360 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 582.480 220.937 37.560 re +48.240 544.800 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 582.480 294.583 37.560 re +269.177 544.800 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 507.240 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 507.240 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 469.680 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 469.680 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 432.120 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 432.120 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 394.560 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 394.560 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 357.000 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 357.000 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 319.440 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 319.440 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w -/DeviceRGB CS 0.867 0.867 0.867 SCN -48.240 756.000 m -269.177 756.000 l +48.240 718.320 m +269.177 718.320 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 732.720 m -269.177 732.720 l +48.240 695.040 m +269.177 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 756.250 m -48.240 731.970 l +48.240 718.570 m +48.240 694.290 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 756.250 m -269.177 731.970 l +269.177 718.570 m +269.177 694.290 l S [ ] 0 d 1 w @@ -25968,7 +26315,7 @@ S 0.200 0.200 0.200 scn BT -51.24 740.2529999999999 Td +51.24 702.573 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -25976,26 +26323,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 756.000 m -563.760 756.000 l +269.177 718.320 m +563.760 718.320 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 732.720 m -563.760 732.720 l +269.177 695.040 m +563.760 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 756.250 m -269.177 731.970 l +269.177 718.570 m +269.177 694.290 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 756.250 m -563.760 731.970 l +563.760 718.570 m +563.760 694.290 l S [ ] 0 d 1 w @@ -26003,7 +26350,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 740.2529999999999 Td +272.17692192000004 702.573 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -26011,26 +26358,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 732.720 m -269.177 732.720 l +48.240 695.040 m +269.177 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 695.160 m -269.177 695.160 l +48.240 657.480 m +269.177 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 732.970 m -48.240 694.910 l +48.240 695.290 m +48.240 657.230 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 732.970 m -269.177 694.910 l +269.177 695.290 m +269.177 657.230 l S [ ] 0 d 1 w @@ -26038,19 +26385,19 @@ S 0.200 0.200 0.200 scn BT -51.24 716.473 Td +51.24 678.7930000000001 Td /F2.0 10.5 Tf -[<706f6c69637954> 29.78515625 <6f736361>] TJ +<626c75657072696e74> Tj ET BT -51.24 702.193 Td +51.24 664.513 Td ET BT -51.24 702.193 Td +51.24 664.513 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -26058,26 +26405,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 732.720 m -563.760 732.720 l +269.177 695.040 m +563.760 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 695.160 m -563.760 695.160 l +269.177 657.480 m +563.760 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 732.970 m -269.177 694.910 l +269.177 695.290 m +269.177 657.230 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 732.970 m -563.760 694.910 l +563.760 695.290 m +563.760 657.230 l S [ ] 0 d 1 w @@ -26085,7 +26432,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 709.333 Td +272.17692192000004 671.653 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -26093,26 +26440,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 695.160 m -269.177 695.160 l +48.240 657.480 m +269.177 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 657.600 m -269.177 657.600 l +48.240 619.920 m +269.177 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 695.410 m -48.240 657.350 l +48.240 657.730 m +48.240 619.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 695.410 m -269.177 657.350 l +269.177 657.730 m +269.177 619.670 l S [ ] 0 d 1 w @@ -26120,19 +26467,19 @@ S 0.200 0.200 0.200 scn BT -51.24 678.913 Td +51.24 641.233 Td /F2.0 10.5 Tf -<70726f70657274696573> Tj +[<6372656174656442> 20.01953125 <79>] TJ ET BT -51.24 664.633 Td +51.24 626.953 Td ET BT -51.24 664.633 Td +51.24 626.953 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -26140,69 +26487,61 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 695.160 m -563.760 695.160 l +269.177 657.480 m +563.760 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 657.600 m -563.760 657.600 l +269.177 619.920 m +563.760 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 695.410 m -269.177 657.350 l +269.177 657.730 m +269.177 619.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 695.410 m -563.760 657.350 l +563.760 657.730 m +563.760 619.670 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 671.773 Td +272.17692192000004 634.093 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 657.600 m -269.177 657.600 l +48.240 619.920 m +269.177 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 620.040 m -269.177 620.040 l +48.240 582.360 m +269.177 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 657.850 m -48.240 619.790 l +48.240 620.170 m +48.240 582.110 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 657.850 m -269.177 619.790 l +269.177 620.170 m +269.177 582.110 l S [ ] 0 d 1 w @@ -26210,19 +26549,19 @@ S 0.200 0.200 0.200 scn BT -51.24 641.3530000000001 Td +51.24 603.673 Td /F2.0 10.5 Tf -<736861726564> Tj +<6372656174656444617465> Tj ET BT -51.24 627.073 Td +51.24 589.393 Td ET BT -51.24 627.073 Td +51.24 589.393 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -26230,26 +26569,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 657.600 m -563.760 657.600 l +269.177 619.920 m +563.760 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 620.040 m -563.760 620.040 l +269.177 582.360 m +563.760 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 657.850 m -269.177 619.790 l +269.177 620.170 m +269.177 582.110 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 657.850 m -563.760 619.790 l +563.760 620.170 m +563.760 582.110 l S [ ] 0 d 1 w @@ -26257,34 +26596,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 634.213 Td +272.17692192000004 596.533 Td /F1.0 10.5 Tf -<626f6f6c65616e> Tj +<696e74656765722028696e74363429> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 620.040 m -269.177 620.040 l +48.240 582.360 m +269.177 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 582.480 m -269.177 582.480 l +48.240 544.800 m +269.177 544.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 620.290 m -48.240 582.230 l +48.240 582.610 m +48.240 544.550 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 620.290 m -269.177 582.230 l +269.177 582.610 m +269.177 544.550 l S [ ] 0 d 1 w @@ -26292,19 +26631,19 @@ S 0.200 0.200 0.200 scn BT -51.24 603.7930000000001 Td +51.24 566.113 Td /F2.0 10.5 Tf -[<7573656442> 20.01953125 <794c6f6f7073>] TJ +<6d6178696d756d496e7374616e636573416c6c6f776564> Tj ET BT -51.24 589.513 Td +51.24 551.833 Td ET BT -51.24 589.513 Td +51.24 551.833 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -26312,26 +26651,108 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 620.040 m -563.760 620.040 l +269.177 582.360 m +563.760 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 582.480 m -563.760 582.480 l +269.177 544.800 m +563.760 544.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 620.290 m -269.177 582.230 l +269.177 582.610 m +269.177 544.550 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 620.290 m -563.760 582.230 l +563.760 582.610 m +563.760 544.550 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 558.973 Td +/F1.0 10.5 Tf +<696e74656765722028696e74333229> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 544.800 m +269.177 544.800 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 507.240 m +269.177 507.240 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 545.050 m +48.240 506.990 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 545.050 m +269.177 506.990 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 528.5530000000001 Td +/F2.0 10.5 Tf +<6d6963726f536572766963654d6f64656c55736564> Tj +ET + + +BT +51.24 514.273 Td +ET + + +BT +51.24 514.273 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 544.800 m +563.760 544.800 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 507.240 m +563.760 507.240 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 545.050 m +269.177 506.990 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 545.050 m +563.760 506.990 l S [ ] 0 d 1 w @@ -26343,7 +26764,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 596.653 Td +272.17692192000004 521.413 Td /F1.0 10.5 Tf <3c20> Tj ET @@ -26352,127 +26773,5200 @@ ET 0.259 0.545 0.792 SCN BT -280.76592192000004 596.653 Td +280.76592192000004 521.413 Td /F1.0 10.5 Tf -<4c6f6f70> Tj +[<54> 29.78515625 <656d706c6174654d6963726f536572766963654d6f64656c>] TJ ET 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn BT -305.86092192000007 596.653 Td +424.355677779375 521.413 Td /F1.0 10.5 Tf [<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET 0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 507.240 m +269.177 507.240 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 469.680 m +269.177 469.680 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 507.490 m +48.240 469.430 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 507.490 m +269.177 469.430 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -48.24 547.056 Td -/F2.0 18 Tf -<332e31322e204e756d626572> Tj +51.24 490.993 Td +/F2.0 10.5 Tf +<6d6f64656c53657276696365> Tj +ET + + +BT +51.24 476.71299999999997 Td +ET + + +BT +51.24 476.71299999999997 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 507.240 m +563.760 507.240 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.680 m +563.760 469.680 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 507.490 m +269.177 469.430 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 507.490 m +563.760 469.430 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 483.853 Td +/F1.0 10.5 Tf +<53657276696365> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 469.680 m +269.177 469.680 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.120 m +269.177 432.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 469.930 m +48.240 431.870 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.930 m +269.177 431.870 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 453.43300000000005 Td +/F2.0 10.5 Tf +<6e616d65> Tj +ET + + +BT +51.24 439.153 Td +ET + + +BT +51.24 439.153 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 469.680 m +563.760 469.680 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.120 m +563.760 432.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.930 m +269.177 431.870 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 469.930 m +563.760 431.870 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 446.29300000000006 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 432.120 m +269.177 432.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 394.560 m +269.177 394.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.370 m +48.240 394.310 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.370 m +269.177 394.310 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 415.873 Td +/F2.0 10.5 Tf +<737667526570726573656e746174696f6e> Tj +ET + + +BT +51.24 401.59299999999996 Td +ET + + +BT +51.24 401.59299999999996 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 432.120 m +563.760 432.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.560 m +563.760 394.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.370 m +269.177 394.310 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 432.370 m +563.760 394.310 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 408.733 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 394.560 m +269.177 394.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 357.000 m +269.177 357.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 394.810 m +48.240 356.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.810 m +269.177 356.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 378.313 Td +/F2.0 10.5 Tf +[<7570646174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 364.033 Td +ET + + +BT +51.24 364.033 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 394.560 m +563.760 394.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 357.000 m +563.760 357.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.810 m +269.177 356.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 394.810 m +563.760 356.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 371.173 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 357.000 m +269.177 357.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 319.440 m +269.177 319.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 357.250 m +48.240 319.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 357.250 m +269.177 319.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 340.753 Td +/F2.0 10.5 Tf +<7570646174656444617465> Tj +ET + + +BT +51.24 326.47299999999996 Td +ET + + +BT +51.24 326.47299999999996 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 357.000 m +563.760 357.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 319.440 m +563.760 319.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 357.250 m +269.177 319.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 357.250 m +563.760 319.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 333.613 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 284.016 Td +/F2.0 18 Tf +<332e31322e204d6963726f536572766963654d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 244.080 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 244.080 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 206.520 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 206.520 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 168.960 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 168.960 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 131.400 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 131.400 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 93.840 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 93.840 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 56.280 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 56.280 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 267.360 m +269.177 267.360 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 244.080 m +269.177 244.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 267.610 m +48.240 243.330 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 267.610 m +269.177 243.330 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 251.61299999999994 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 267.360 m +563.760 267.360 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 244.080 m +563.760 244.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 267.610 m +269.177 243.330 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 267.610 m +563.760 243.330 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 251.61299999999994 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 244.080 m +269.177 244.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 206.520 m +269.177 206.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 244.330 m +48.240 206.270 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 244.330 m +269.177 206.270 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 227.83299999999997 Td +/F2.0 10.5 Tf +<626c75657072696e74> Tj +ET + + +BT +51.24 213.55299999999997 Td +ET + + +BT +51.24 213.55299999999997 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 244.080 m +563.760 244.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 206.520 m +563.760 206.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 244.330 m +269.177 206.270 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 244.330 m +563.760 206.270 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 220.69299999999996 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 206.520 m +269.177 206.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 168.960 m +269.177 168.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 206.770 m +48.240 168.710 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 206.770 m +269.177 168.710 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 190.27299999999997 Td +/F2.0 10.5 Tf +[<6372656174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 175.99299999999997 Td +ET + + +BT +51.24 175.99299999999997 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 206.520 m +563.760 206.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 168.960 m +563.760 168.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 206.770 m +269.177 168.710 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 206.770 m +563.760 168.710 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 183.13299999999995 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 168.960 m +269.177 168.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 131.400 m +269.177 131.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 169.210 m +48.240 131.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 169.210 m +269.177 131.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 152.71299999999997 Td +/F2.0 10.5 Tf +<6372656174656444617465> Tj +ET + + +BT +51.24 138.43299999999996 Td +ET + + +BT +51.24 138.43299999999996 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 168.960 m +563.760 168.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.400 m +563.760 131.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 169.210 m +269.177 131.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 169.210 m +563.760 131.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 145.57299999999995 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 131.400 m +269.177 131.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 93.840 m +269.177 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 131.650 m +48.240 93.590 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.650 m +269.177 93.590 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 115.15299999999995 Td +/F2.0 10.5 Tf +<6e616d65> Tj +ET + + +BT +51.24 100.87299999999995 Td +ET + + +BT +51.24 100.87299999999995 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 131.400 m +563.760 131.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 93.840 m +563.760 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.650 m +269.177 93.590 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 131.650 m +563.760 93.590 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 108.01299999999995 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 93.840 m +269.177 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 56.280 m +269.177 56.280 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 94.090 m +48.240 56.030 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.090 m +269.177 56.030 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 77.59299999999995 Td +/F2.0 10.5 Tf +<706f6c6963794d6f64656c> Tj +ET + + +BT +51.24 63.312999999999946 Td +ET + + +BT +51.24 63.312999999999946 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 93.840 m +563.760 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 56.280 m +563.760 56.280 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.090 m +269.177 56.030 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 94.090 m +563.760 56.030 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 70.45299999999995 Td +/F1.0 10.5 Tf +<506f6c6963794d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.698 14.388 Td +/F1.0 9 Tf +<3137> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +180 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 179 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 20 0 R +/F3.0 22 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 382 0 R +>> +>> +/Annots [182 0 R 183 0 R 185 0 R] +>> +endobj +181 0 obj +[180 0 R /XYZ 0 792.0 null] +endobj +182 0 obj +<< /Border [0 0 0] +/Dest (_templatemicroservicemodel) +/Subtype /Link +/Rect [280.76592192000004 518.3470000000001 424.355677779375 532.6270000000001] +/Type /Annot +>> +endobj +183 0 obj +<< /Border [0 0 0] +/Dest (_service) +/Subtype /Link +/Rect [272.17692192000004 480.787 308.65392192 495.067] +/Type /Annot +>> +endobj +184 0 obj +[180 0 R /XYZ 0 307.44 null] +endobj +185 0 obj +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [272.17692192000004 67.38699999999994 333.47592192 81.66699999999994] +/Type /Annot +>> +endobj +186 0 obj +<< /Length 21812 +>> +stream +q +/DeviceRGB cs +1.000 1.000 1.000 scn +48.240 732.720 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 732.720 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 695.160 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 695.160 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 657.600 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 657.600 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 620.040 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 620.040 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 582.480 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 582.480 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +/DeviceRGB CS +0.867 0.867 0.867 SCN +48.240 756.000 m +269.177 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 756.250 m +48.240 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 740.2529999999999 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 756.000 m +563.760 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 756.250 m +563.760 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 740.2529999999999 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +269.177 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 732.970 m +48.240 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 716.473 Td +/F2.0 10.5 Tf +<706f6c69637954797065> Tj +ET + + +BT +51.24 702.193 Td +ET + + +BT +51.24 702.193 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 732.970 m +563.760 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 709.333 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +269.177 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 657.600 m +269.177 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.410 m +48.240 657.350 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.410 m +269.177 657.350 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 678.913 Td +/F2.0 10.5 Tf +[<7570646174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 664.633 Td +ET + + +BT +51.24 664.633 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 657.600 m +563.760 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.410 m +269.177 657.350 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 695.410 m +563.760 657.350 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 671.773 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 657.600 m +269.177 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 620.040 m +269.177 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 657.850 m +48.240 619.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 657.850 m +269.177 619.790 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 641.3530000000001 Td +/F2.0 10.5 Tf +<7570646174656444617465> Tj +ET + + +BT +51.24 627.073 Td +ET + + +BT +51.24 627.073 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 657.600 m +563.760 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 620.040 m +563.760 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 657.850 m +269.177 619.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 657.850 m +563.760 619.790 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 634.213 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 620.040 m +269.177 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 582.480 m +269.177 582.480 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 620.290 m +48.240 582.230 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 620.290 m +269.177 582.230 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 603.7929999999999 Td +/F2.0 10.5 Tf +[<7573656442> 20.01953125 <794c6f6f7054> 29.78515625 <656d706c61746573>] TJ +ET + + +BT +51.24 589.5129999999999 Td +ET + + +BT +51.24 589.5129999999999 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 620.040 m +563.760 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 582.480 m +563.760 582.480 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 620.290 m +269.177 582.230 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 620.290 m +563.760 582.230 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 596.6529999999999 Td +/F1.0 10.5 Tf +<3c20> Tj +ET + +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +280.76592192000004 596.6529999999999 Td +/F1.0 10.5 Tf +[<54> 29.78515625 <656d706c6174654d6963726f536572766963654d6f64656c>] TJ +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +424.355677779375 596.6529999999999 Td +/F1.0 10.5 Tf +[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 547.056 Td +/F2.0 18 Tf +<332e31332e204d6963726f53657276696365506f6c696379> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 507.120 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 507.120 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 469.560 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 469.560 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 432.000 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 432.000 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 394.440 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 394.440 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 356.880 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 356.880 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 319.320 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 319.320 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 281.760 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 281.760 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 244.200 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 244.200 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 206.640 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 206.640 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 169.080 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 169.080 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 131.520 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 131.520 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 93.960 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 93.960 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 56.400 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 56.400 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 530.400 m +269.177 530.400 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 507.120 m +269.177 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 530.650 m +48.240 506.370 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 530.650 m +269.177 506.370 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 514.653 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 530.400 m +563.760 530.400 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 507.120 m +563.760 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 530.650 m +269.177 506.370 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 530.650 m +563.760 506.370 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 514.653 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 507.120 m +269.177 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 469.560 m +269.177 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 507.370 m +48.240 469.310 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 507.370 m +269.177 469.310 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 490.8730000000001 Td +/F2.0 10.5 Tf +<636f6e74657874> Tj +ET + + +BT +51.24 476.5930000000001 Td +ET + + +BT +51.24 476.5930000000001 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 507.120 m +563.760 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.560 m +563.760 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 507.370 m +269.177 469.310 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 507.370 m +563.760 469.310 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 483.7330000000001 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 469.560 m +269.177 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.000 m +269.177 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 469.810 m +48.240 431.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.810 m +269.177 431.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 453.31300000000005 Td +/F2.0 10.5 Tf +[<6372656174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 439.033 Td +ET + + +BT +51.24 439.033 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 469.560 m +563.760 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.000 m +563.760 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.810 m +269.177 431.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 469.810 m +563.760 431.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 446.17300000000006 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 432.000 m +269.177 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 394.440 m +269.177 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.250 m +48.240 394.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.250 m +269.177 394.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 415.7530000000001 Td +/F2.0 10.5 Tf +<6372656174656444617465> Tj +ET + + +BT +51.24 401.47300000000007 Td +ET + + +BT +51.24 401.47300000000007 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 432.000 m +563.760 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.440 m +563.760 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.250 m +269.177 394.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 432.250 m +563.760 394.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 408.6130000000001 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 394.440 m +269.177 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 356.880 m +269.177 356.880 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 394.690 m +48.240 356.630 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.690 m +269.177 356.630 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 378.19300000000004 Td +/F2.0 10.5 Tf +<6465766963655479706553636f7065> Tj +ET + + +BT +51.24 363.913 Td +ET + + +BT +51.24 363.913 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 394.440 m +563.760 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 356.880 m +563.760 356.880 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.690 m +269.177 356.630 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 394.690 m +563.760 356.630 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 371.05300000000005 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 356.880 m +269.177 356.880 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 319.320 m +269.177 319.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 357.130 m +48.240 319.070 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 357.130 m +269.177 319.070 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 340.6330000000001 Td +/F2.0 10.5 Tf +<6a736f6e526570726573656e746174696f6e> Tj +ET + + +BT +51.24 326.35300000000007 Td +ET + + +BT +51.24 326.35300000000007 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 356.880 m +563.760 356.880 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 319.320 m +563.760 319.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 357.130 m +269.177 319.070 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 357.130 m +563.760 319.070 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 333.4930000000001 Td +/F1.0 10.5 Tf +<4a736f6e4f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 319.320 m +269.177 319.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 281.760 m +269.177 281.760 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 319.570 m +48.240 281.510 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 319.570 m +269.177 281.510 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 303.07300000000004 Td +/F2.0 10.5 Tf +<6d6963726f536572766963654d6f64656c> Tj +ET + + +BT +51.24 288.793 Td +ET + + +BT +51.24 288.793 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 319.320 m +563.760 319.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 281.760 m +563.760 281.760 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 319.570 m +269.177 281.510 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 319.570 m +563.760 281.510 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 295.93300000000005 Td +/F1.0 10.5 Tf +<4d6963726f536572766963654d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 281.760 m +269.177 281.760 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 244.200 m +269.177 244.200 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 282.010 m +48.240 243.950 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 282.010 m +269.177 243.950 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 265.5130000000001 Td +/F2.0 10.5 Tf +<6d6f64656c54797065> Tj +ET + + +BT +51.24 251.2330000000001 Td +ET + + +BT +51.24 251.2330000000001 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 281.760 m +563.760 281.760 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 244.200 m +563.760 244.200 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 282.010 m +269.177 243.950 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 282.010 m +563.760 243.950 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 258.3730000000001 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 244.200 m +269.177 244.200 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 206.640 m +269.177 206.640 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 244.450 m +48.240 206.390 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 244.450 m +269.177 206.390 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 227.95300000000006 Td +/F2.0 10.5 Tf +<6e616d65> Tj +ET + + +BT +51.24 213.67300000000006 Td +ET + + +BT +51.24 213.67300000000006 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 244.200 m +563.760 244.200 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 206.640 m +563.760 206.640 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 244.450 m +269.177 206.390 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 244.450 m +563.760 206.390 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 220.81300000000005 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 206.640 m +269.177 206.640 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 169.080 m +269.177 169.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 206.890 m +48.240 168.830 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 206.890 m +269.177 168.830 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 190.39300000000006 Td +/F2.0 10.5 Tf +[<706f6c69637954> 29.78515625 <6f736361>] TJ +ET + + +BT +51.24 176.11300000000006 Td +ET + + +BT +51.24 176.11300000000006 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 206.640 m +563.760 206.640 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 169.080 m +563.760 169.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 206.890 m +269.177 168.830 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 206.890 m +563.760 168.830 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 183.25300000000004 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 169.080 m +269.177 169.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 131.520 m +269.177 131.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 169.330 m +48.240 131.270 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 169.330 m +269.177 131.270 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 152.83300000000006 Td +/F2.0 10.5 Tf +<70726f70657274696573> Tj +ET + + +BT +51.24 138.55300000000005 Td +ET + + +BT +51.24 138.55300000000005 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 169.080 m +563.760 169.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.520 m +563.760 131.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 169.330 m +269.177 131.270 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 169.330 m +563.760 131.270 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 145.69300000000004 Td +/F1.0 10.5 Tf +<4a736f6e4f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 131.520 m +269.177 131.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 93.960 m +269.177 93.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 131.770 m +48.240 93.710 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.770 m +269.177 93.710 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 115.27300000000004 Td +/F2.0 10.5 Tf +<736861726564> Tj +ET + + +BT +51.24 100.99300000000004 Td +ET + + +BT +51.24 100.99300000000004 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 131.520 m +563.760 131.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 93.960 m +563.760 93.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.770 m +269.177 93.710 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 131.770 m +563.760 93.710 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 108.13300000000004 Td +/F1.0 10.5 Tf +<626f6f6c65616e> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 93.960 m +269.177 93.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 56.400 m +269.177 56.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 94.210 m +48.240 56.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.210 m +269.177 56.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 77.71300000000004 Td +/F2.0 10.5 Tf +[<7570646174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 63.433000000000035 Td +ET + + +BT +51.24 63.433000000000035 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 93.960 m +563.760 93.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 56.400 m +563.760 56.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.210 m +269.177 56.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 94.210 m +563.760 56.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 70.57300000000004 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3138> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +187 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 186 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 20 0 R +/F3.0 22 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 382 0 R +>> +>> +/Annots [188 0 R 191 0 R 192 0 R 193 0 R] +>> +endobj +188 0 obj +<< /Border [0 0 0] +/Dest (_templatemicroservicemodel) +/Subtype /Link +/Rect [280.76592192000004 593.587 424.355677779375 607.867] +/Type /Annot +>> +endobj +189 0 obj +[187 0 R /XYZ 0 570.48 null] +endobj +190 0 obj +<< /Limits [(_jsonobject) (_parameters_11)] +/Names [(_jsonobject) 149 0 R (_jsonprimitive) 159 0 R (_loop) 167 0 R (_looplog) 177 0 R (_looptemplate) 181 0 R (_microservicemodel) 184 0 R (_microservicepolicy) 189 0 R (_number) 197 0 R (_operationalpolicy) 198 0 R (_overview) 17 0 R (_parameters) 42 0 R (_parameters_10) 101 0 R (_parameters_11) 110 0 R] +>> +endobj +191 0 obj +<< /Border [0 0 0] +/Dest (_jsonobject) +/Subtype /Link +/Rect [272.17692192000004 330.4270000000001 325.32792192000005 344.7070000000001] +/Type /Annot +>> +endobj +192 0 obj +<< /Border [0 0 0] +/Dest (_microservicemodel) +/Subtype /Link +/Rect [272.17692192000004 292.867 369.21792192000004 307.14700000000005] +/Type /Annot +>> +endobj +193 0 obj +<< /Border [0 0 0] +/Dest (_jsonobject) +/Subtype /Link +/Rect [272.17692192000004 142.62700000000007 325.32792192000005 156.90700000000004] +/Type /Annot +>> +endobj +194 0 obj +<< /Length 19132 +>> +stream +q +/DeviceRGB cs +1.000 1.000 1.000 scn +48.240 732.720 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 732.720 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 695.160 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 695.160 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 657.600 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 657.600 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +/DeviceRGB CS +0.867 0.867 0.867 SCN +48.240 756.000 m +269.177 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 756.250 m +48.240 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 740.2529999999999 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 756.000 m +563.760 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 756.250 m +563.760 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 740.2529999999999 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +269.177 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 732.970 m +48.240 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 716.473 Td +/F2.0 10.5 Tf +<7570646174656444617465> Tj +ET + + +BT +51.24 702.193 Td +ET + + +BT +51.24 702.193 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 732.970 m +563.760 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 709.333 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +269.177 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 657.600 m +269.177 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.410 m +48.240 657.350 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.410 m +269.177 657.350 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 678.913 Td +/F2.0 10.5 Tf +[<7573656442> 20.01953125 <794c6f6f7073>] TJ +ET + + +BT +51.24 664.6329999999999 Td +ET + + +BT +51.24 664.6329999999999 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 657.600 m +563.760 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.410 m +269.177 657.350 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 695.410 m +563.760 657.350 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 671.7729999999999 Td +/F1.0 10.5 Tf +<3c20> Tj +ET + +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +280.76592192000004 671.7729999999999 Td +/F1.0 10.5 Tf +<4c6f6f70> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +305.86092192000007 671.7729999999999 Td +/F1.0 10.5 Tf +[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 622.1759999999999 Td +/F2.0 18 Tf +<332e31342e204e756d626572> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 593.5559999999999 Td +/F3.0 10.5 Tf +<54797065> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +71.4345 593.5559999999999 Td +/F1.0 10.5 Tf +<203a206f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 554.316 Td +/F2.0 18 Tf +[<332e31352e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 514.380 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 514.380 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 476.820 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 476.820 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 439.260 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 439.260 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 401.700 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 401.700 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 364.140 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 364.140 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 326.580 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 326.580 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 537.660 m +269.177 537.660 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 514.380 m +269.177 514.380 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 537.910 m +48.240 513.630 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 537.910 m +269.177 513.630 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 521.913 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 537.660 m +563.760 537.660 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 514.380 m +563.760 514.380 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 537.910 m +269.177 513.630 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 537.910 m +563.760 513.630 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 521.913 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 514.380 m +269.177 514.380 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 476.820 m +269.177 476.820 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 514.630 m +48.240 476.570 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 514.630 m +269.177 476.570 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 498.1330000000001 Td +/F2.0 10.5 Tf +[<636f6e6669677572> 20.01953125 <6174696f6e734a736f6e>] TJ +ET + + +BT +51.24 483.85300000000007 Td +ET + + +BT +51.24 483.85300000000007 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 514.380 m +563.760 514.380 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 476.820 m +563.760 476.820 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 514.630 m +269.177 476.570 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 514.630 m +563.760 476.570 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 490.9930000000001 Td +/F1.0 10.5 Tf +<4a736f6e4f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 476.820 m +269.177 476.820 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 439.260 m +269.177 439.260 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 477.070 m +48.240 439.010 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 477.070 m +269.177 439.010 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 460.57300000000004 Td +/F2.0 10.5 Tf +<6a736f6e526570726573656e746174696f6e> Tj +ET + + +BT +51.24 446.293 Td +ET + + +BT +51.24 446.293 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 476.820 m +563.760 476.820 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 439.260 m +563.760 439.260 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 477.070 m +269.177 439.010 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 477.070 m +563.760 439.010 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 453.43300000000005 Td +/F1.0 10.5 Tf +<4a736f6e4f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 439.260 m +269.177 439.260 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 401.700 m +269.177 401.700 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 439.510 m +48.240 401.450 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 439.510 m +269.177 401.450 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 423.0130000000001 Td +/F2.0 10.5 Tf +<6c6f6f70> Tj +ET + + +BT +51.24 408.73300000000006 Td +ET + + +BT +51.24 408.73300000000006 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 439.260 m +563.760 439.260 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 401.700 m +563.760 401.700 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 439.510 m +269.177 401.450 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 439.510 m +563.760 401.450 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 415.8730000000001 Td +/F1.0 10.5 Tf +<4c6f6f70> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 401.700 m +269.177 401.700 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 364.140 m +269.177 364.140 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 401.950 m +48.240 363.890 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 401.950 m +269.177 363.890 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 385.45300000000003 Td +/F2.0 10.5 Tf +<6e616d65> Tj +ET + + +BT +51.24 371.173 Td +ET + + +BT +51.24 371.173 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 401.700 m +563.760 401.700 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 364.140 m +563.760 364.140 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 401.950 m +269.177 363.890 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 401.950 m +563.760 363.890 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 378.31300000000005 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 364.140 m +269.177 364.140 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 326.580 m +269.177 326.580 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 364.390 m +48.240 326.330 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 364.390 m +269.177 326.330 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 347.8930000000001 Td +/F2.0 10.5 Tf +<706f6c6963794d6f64656c> Tj +ET + + +BT +51.24 333.61300000000006 Td +ET + + +BT +51.24 333.61300000000006 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 364.140 m +563.760 364.140 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 326.580 m +563.760 326.580 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 364.390 m +269.177 326.330 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 364.390 m +563.760 326.330 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 340.7530000000001 Td +/F1.0 10.5 Tf +<506f6c6963794d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 291.1560000000001 Td +/F2.0 18 Tf +<332e31362e20506f6c6963794d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 251.220 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 251.220 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 213.660 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 213.660 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 176.100 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 176.100 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 138.540 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 138.540 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 100.980 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 100.980 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 63.420 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 63.420 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 274.500 m +269.177 274.500 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 251.220 m +269.177 251.220 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 274.750 m +48.240 250.470 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 274.750 m +269.177 250.470 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 258.75300000000004 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 274.500 m +563.760 274.500 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 251.220 m +563.760 251.220 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 274.750 m +269.177 250.470 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 274.750 m +563.760 250.470 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 258.75300000000004 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 251.220 m +269.177 251.220 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 213.660 m +269.177 213.660 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 251.470 m +48.240 213.410 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 251.470 m +269.177 213.410 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 234.97300000000007 Td +/F2.0 10.5 Tf +[<6372656174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 220.69300000000007 Td +ET + + +BT +51.24 220.69300000000007 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 251.220 m +563.760 251.220 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 213.660 m +563.760 213.660 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 251.470 m +269.177 213.410 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 251.470 m +563.760 213.410 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 227.83300000000006 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 213.660 m +269.177 213.660 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 176.100 m +269.177 176.100 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 213.910 m +48.240 175.850 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 213.910 m +269.177 175.850 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 197.41300000000007 Td +/F2.0 10.5 Tf +<6372656174656444617465> Tj +ET + + +BT +51.24 183.13300000000007 Td +ET + + +BT +51.24 183.13300000000007 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 213.660 m +563.760 213.660 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 176.100 m +563.760 176.100 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 213.910 m +269.177 175.850 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 213.910 m +563.760 175.850 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 190.27300000000005 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 176.100 m +269.177 176.100 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 138.540 m +269.177 138.540 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 176.350 m +48.240 138.290 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 176.350 m +269.177 138.290 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 159.85300000000007 Td +/F2.0 10.5 Tf +[<706f6c69637941> 20.01953125 <63726f6e> 20.01953125 <796d>] TJ +ET + + +BT +51.24 145.57300000000006 Td +ET + + +BT +51.24 145.57300000000006 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 176.100 m +563.760 176.100 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 138.540 m +563.760 138.540 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 176.350 m +269.177 138.290 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 176.350 m +563.760 138.290 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 152.71300000000005 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 138.540 m +269.177 138.540 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 100.980 m +269.177 100.980 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 138.790 m +48.240 100.730 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 138.790 m +269.177 100.730 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 122.29300000000006 Td +/F2.0 10.5 Tf +[<706f6c6963794d6f64656c54> 29.78515625 <6f736361>] TJ +ET + + +BT +51.24 108.01300000000006 Td +ET + + +BT +51.24 108.01300000000006 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 138.540 m +563.760 138.540 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 100.980 m +563.760 100.980 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 138.790 m +269.177 100.730 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 138.790 m +563.760 100.730 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 115.15300000000006 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 100.980 m +269.177 100.980 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 63.420 m +269.177 63.420 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 101.230 m +48.240 63.170 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 101.230 m +269.177 63.170 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 84.73300000000005 Td +/F2.0 10.5 Tf +<706f6c6963794d6f64656c54797065> Tj +ET + + +BT +51.24 70.45300000000005 Td +ET + + +BT +51.24 70.45300000000005 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 100.980 m +563.760 100.980 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 63.420 m +563.760 63.420 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 101.230 m +269.177 63.170 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 101.230 m +563.760 63.170 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 77.59300000000005 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.698 14.388 Td +/F1.0 9 Tf +<3139> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +195 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 194 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 20 0 R +/F3.0 22 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 382 0 R +>> +>> +/Annots [196 0 R 199 0 R 200 0 R 201 0 R 202 0 R] +>> +endobj +196 0 obj +<< /Border [0 0 0] +/Dest (_loop) +/Subtype /Link +/Rect [280.76592192000004 668.707 305.86092192000007 682.987] +/Type /Annot +>> +endobj +197 0 obj +[195 0 R /XYZ 0 645.5999999999999 null] +endobj +198 0 obj +[195 0 R /XYZ 0 577.74 null] +endobj +199 0 obj +<< /Border [0 0 0] +/Dest (_jsonobject) +/Subtype /Link +/Rect [272.17692192000004 487.9270000000001 325.32792192000005 502.2070000000001] +/Type /Annot +>> +endobj +200 0 obj +<< /Border [0 0 0] +/Dest (_jsonobject) +/Subtype /Link +/Rect [272.17692192000004 450.367 325.32792192000005 464.64700000000005] +/Type /Annot +>> +endobj +201 0 obj +<< /Border [0 0 0] +/Dest (_loop) +/Subtype /Link +/Rect [272.17692192000004 412.8070000000001 297.27192192000007 427.0870000000001] +/Type /Annot +>> +endobj +202 0 obj +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [272.17692192000004 337.68700000000007 333.47592192 351.9670000000001] +/Type /Annot +>> +endobj +203 0 obj +[195 0 R /XYZ 0 314.5800000000001 null] +endobj +204 0 obj +<< /Length 15919 +>> +stream +q +/DeviceRGB cs +1.000 1.000 1.000 scn +48.240 732.720 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 732.720 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 695.160 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 695.160 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 657.600 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 657.600 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 620.040 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 620.040 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 582.480 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 582.480 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +/DeviceRGB CS +0.867 0.867 0.867 SCN +48.240 756.000 m +269.177 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 756.250 m +48.240 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 740.2529999999999 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 756.000 m +563.760 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 756.250 m +563.760 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 740.2529999999999 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +269.177 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 732.970 m +48.240 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 716.473 Td +/F2.0 10.5 Tf +[<706f6c69637956> 60.05859375 <617269616e74>] TJ +ET + + +BT +51.24 702.193 Td +ET + + +BT +51.24 702.193 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 732.970 m +563.760 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 709.333 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +269.177 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 657.600 m +269.177 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.410 m +48.240 657.350 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.410 m +269.177 657.350 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 678.913 Td +/F2.0 10.5 Tf +[<7570646174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 664.633 Td +ET + + +BT +51.24 664.633 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 657.600 m +563.760 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.410 m +269.177 657.350 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 695.410 m +563.760 657.350 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 671.773 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 657.600 m +269.177 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 620.040 m +269.177 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 657.850 m +48.240 619.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 657.850 m +269.177 619.790 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 641.3530000000001 Td +/F2.0 10.5 Tf +<7570646174656444617465> Tj +ET + + +BT +51.24 627.073 Td +ET + + +BT +51.24 627.073 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 657.600 m +563.760 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 620.040 m +563.760 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 657.850 m +269.177 619.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 657.850 m +563.760 619.790 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 634.213 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 620.040 m +269.177 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 582.480 m +269.177 582.480 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 620.290 m +48.240 582.230 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 620.290 m +269.177 582.230 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 603.7929999999999 Td +/F2.0 10.5 Tf +<76657273696f6e> Tj +ET + + +BT +51.24 589.5129999999999 Td +ET + + +BT +51.24 589.5129999999999 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 620.040 m +563.760 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 582.480 m +563.760 582.480 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 620.290 m +269.177 582.230 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 620.290 m +563.760 582.230 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 596.6529999999999 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 547.056 Td +/F2.0 18 Tf +<332e31372e2053657276696365> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 507.120 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 507.120 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 469.560 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 469.560 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 432.000 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 432.000 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 394.440 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 394.440 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 530.400 m +269.177 530.400 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 507.120 m +269.177 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 530.650 m +48.240 506.370 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 530.650 m +269.177 506.370 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 514.653 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 530.400 m +563.760 530.400 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 507.120 m +563.760 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 530.650 m +269.177 506.370 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 530.650 m +563.760 506.370 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 514.653 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 507.120 m +269.177 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 469.560 m +269.177 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 507.370 m +48.240 469.310 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 507.370 m +269.177 469.310 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 490.8730000000001 Td +/F2.0 10.5 Tf +<7265736f7572636544657461696c73> Tj +ET + + +BT +51.24 476.5930000000001 Td +ET + + +BT +51.24 476.5930000000001 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 507.120 m +563.760 507.120 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.560 m +563.760 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 507.370 m +269.177 469.310 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 507.370 m +563.760 469.310 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 483.7330000000001 Td +/F1.0 10.5 Tf +<4a736f6e4f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 469.560 m +269.177 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.000 m +269.177 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 469.810 m +48.240 431.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.810 m +269.177 431.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 453.31300000000005 Td +/F2.0 10.5 Tf +<7365727669636544657461696c73> Tj +ET + + +BT +51.24 439.033 Td +ET + + +BT +51.24 439.033 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 469.560 m +563.760 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.000 m +563.760 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.810 m +269.177 431.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 469.810 m +563.760 431.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 446.17300000000006 Td +/F1.0 10.5 Tf +<4a736f6e4f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 432.000 m +269.177 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 394.440 m +269.177 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.250 m +48.240 394.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.250 m +269.177 394.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 415.7530000000001 Td +/F2.0 10.5 Tf +<7365727669636555756964> Tj +ET + + +BT +51.24 401.47300000000007 Td ET -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -48.24 518.4360000000001 Td +51.24 401.47300000000007 Td /F3.0 10.5 Tf -<54797065> Tj +<6f7074696f6e616c> Tj ET -0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 432.000 m +563.760 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.440 m +563.760 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.250 m +269.177 394.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 432.250 m +563.760 394.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -71.4345 518.4360000000001 Td +272.17692192000004 408.6130000000001 Td /F1.0 10.5 Tf -<203a206f626a656374> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24 479.19600000000014 Td +48.24 359.01600000000013 Td /F2.0 18 Tf -[<332e31332e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +[<332e31382e2054> 29.78515625 <656d706c6174654d6963726f536572766963654d6f64656c>] TJ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 439.260 220.937 23.280 re +48.240 319.080 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 439.260 294.583 23.280 re +269.177 319.080 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 401.700 220.937 37.560 re +48.240 281.520 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 401.700 294.583 37.560 re +269.177 281.520 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 364.140 220.937 37.560 re +48.240 243.960 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 364.140 294.583 37.560 re +269.177 243.960 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 326.580 220.937 37.560 re +48.240 206.400 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 326.580 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 289.020 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 289.020 294.583 37.560 re +269.177 206.400 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 462.540 m -269.177 462.540 l +48.240 342.360 m +269.177 342.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 439.260 m -269.177 439.260 l +48.240 319.080 m +269.177 319.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 462.790 m -48.240 438.510 l +48.240 342.610 m +48.240 318.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 462.790 m -269.177 438.510 l +269.177 342.610 m +269.177 318.330 l S [ ] 0 d 1 w @@ -26480,7 +31974,7 @@ S 0.200 0.200 0.200 scn BT -51.24 446.79300000000006 Td +51.24 326.61300000000006 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -26488,26 +31982,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 462.540 m -563.760 462.540 l +269.177 342.360 m +563.760 342.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 439.260 m -563.760 439.260 l +269.177 319.080 m +563.760 319.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 462.790 m -269.177 438.510 l +269.177 342.610 m +269.177 318.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 462.790 m -563.760 438.510 l +563.760 342.610 m +563.760 318.330 l S [ ] 0 d 1 w @@ -26515,7 +32009,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 446.79300000000006 Td +272.17692192000004 326.61300000000006 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -26523,26 +32017,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 439.260 m -269.177 439.260 l +48.240 319.080 m +269.177 319.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 401.700 m -269.177 401.700 l +48.240 281.520 m +269.177 281.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 439.510 m -48.240 401.450 l +48.240 319.330 m +48.240 281.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 439.510 m -269.177 401.450 l +269.177 319.330 m +269.177 281.270 l S [ ] 0 d 1 w @@ -26550,19 +32044,19 @@ S 0.200 0.200 0.200 scn BT -51.24 423.0130000000001 Td +51.24 302.833 Td /F2.0 10.5 Tf -[<636f6e6669677572> 20.01953125 <6174696f6e734a736f6e>] TJ +<666c6f774f72646572> Tj ET BT -51.24 408.73300000000006 Td +51.24 288.553 Td ET BT -51.24 408.73300000000006 Td +51.24 288.553 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -26570,69 +32064,61 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 439.260 m -563.760 439.260 l +269.177 319.080 m +563.760 319.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 401.700 m -563.760 401.700 l +269.177 281.520 m +563.760 281.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 439.510 m -269.177 401.450 l +269.177 319.330 m +269.177 281.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 439.510 m -563.760 401.450 l +563.760 319.330 m +563.760 281.270 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 415.8730000000001 Td +272.17692192000004 295.69300000000004 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<696e74656765722028696e74333229> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 401.700 m -269.177 401.700 l +48.240 281.520 m +269.177 281.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 364.140 m -269.177 364.140 l +48.240 243.960 m +269.177 243.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 401.950 m -48.240 363.890 l +48.240 281.770 m +48.240 243.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 401.950 m -269.177 363.890 l +269.177 281.770 m +269.177 243.710 l S [ ] 0 d 1 w @@ -26640,19 +32126,19 @@ S 0.200 0.200 0.200 scn BT -51.24 385.45300000000003 Td +51.24 265.2730000000001 Td /F2.0 10.5 Tf -<6a736f6e526570726573656e746174696f6e> Tj +[<6c6f6f7054> 29.78515625 <656d706c617465>] TJ ET BT -51.24 371.173 Td +51.24 250.99300000000008 Td ET BT -51.24 371.173 Td +51.24 250.99300000000008 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -26660,26 +32146,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 401.700 m -563.760 401.700 l +269.177 281.520 m +563.760 281.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 364.140 m -563.760 364.140 l +269.177 243.960 m +563.760 243.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 401.950 m -269.177 363.890 l +269.177 281.770 m +269.177 243.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 401.950 m -563.760 363.890 l +563.760 281.770 m +563.760 243.710 l S [ ] 0 d 1 w @@ -26693,9 +32179,9 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 378.31300000000005 Td +272.17692192000004 258.1330000000001 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +[<4c6f6f7054> 29.78515625 <656d706c617465>] TJ ET 0.000 0.000 0.000 SCN @@ -26703,26 +32189,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 364.140 m -269.177 364.140 l +48.240 243.960 m +269.177 243.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 326.580 m -269.177 326.580 l +48.240 206.400 m +269.177 206.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 364.390 m -48.240 326.330 l +48.240 244.210 m +48.240 206.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 364.390 m -269.177 326.330 l +269.177 244.210 m +269.177 206.150 l S [ ] 0 d 1 w @@ -26730,19 +32216,19 @@ S 0.200 0.200 0.200 scn BT -51.24 347.8930000000001 Td +51.24 227.71300000000008 Td /F2.0 10.5 Tf -<6c6f6f70> Tj +<6d6963726f536572766963654d6f64656c> Tj ET BT -51.24 333.61300000000006 Td +51.24 213.43300000000008 Td ET BT -51.24 333.61300000000006 Td +51.24 213.43300000000008 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -26750,26 +32236,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 364.140 m -563.760 364.140 l +269.177 243.960 m +563.760 243.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 326.580 m -563.760 326.580 l +269.177 206.400 m +563.760 206.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 364.390 m -269.177 326.330 l +269.177 244.210 m +269.177 206.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 364.390 m -563.760 326.330 l +563.760 244.210 m +563.760 206.150 l S [ ] 0 d 1 w @@ -26783,95 +32269,13 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 340.7530000000001 Td +272.17692192000004 220.57300000000006 Td /F1.0 10.5 Tf -<4c6f6f70> Tj -ET - -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 326.580 m -269.177 326.580 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 289.020 m -269.177 289.020 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 326.830 m -48.240 288.770 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 326.830 m -269.177 288.770 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 310.333 Td -/F2.0 10.5 Tf -<6e616d65> Tj -ET - - -BT -51.24 296.053 Td -ET - - -BT -51.24 296.053 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj +<4d6963726f536572766963654d6f64656c> Tj ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 326.580 m -563.760 326.580 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 289.020 m -563.760 289.020 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 326.830 m -269.177 288.770 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 326.830 m -563.760 288.770 l -S -[ ] 0 d -1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn - -BT -272.17692192000004 303.19300000000004 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - 0.000 0.000 0.000 scn q 0.000 0.000 0.000 scn @@ -26885,9 +32289,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3137> Tj +<3230> Tj ET 0.000 0.000 0.000 SCN @@ -26897,74 +32301,61 @@ Q endstream endobj -181 0 obj +205 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 180 0 R +/Contents 204 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 20 0 R /F3.0 22 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 350 0 R +/XObject << /Stamp1 382 0 R >> >> -/Annots [182 0 R 183 0 R 187 0 R 188 0 R 189 0 R] +/Annots [207 0 R 208 0 R 210 0 R 211 0 R] >> endobj -182 0 obj -<< /Border [0 0 0] -/Dest (_jsonobject) -/Subtype /Link -/Rect [272.17692192000004 668.7070000000001 325.32792192000005 682.9870000000001] -/Type /Annot ->> +206 0 obj +[205 0 R /XYZ 0 570.48 null] endobj -183 0 obj +207 0 obj << /Border [0 0 0] -/Dest (_loop) +/Dest (_jsonobject) /Subtype /Link -/Rect [280.76592192000004 593.5870000000001 305.86092192000007 607.8670000000001] +/Rect [272.17692192000004 480.6670000000001 325.32792192000005 494.9470000000001] /Type /Annot >> endobj -184 0 obj -[181 0 R /XYZ 0 570.48 null] -endobj -185 0 obj -[181 0 R /XYZ 0 502.6200000000001 null] -endobj -186 0 obj -<< /Limits [(_jsonobject) (_parameters_11)] -/Names [(_jsonobject) 149 0 R (_jsonprimitive) 159 0 R (_loop) 167 0 R (_looplog) 176 0 R (_microservicepolicy) 178 0 R (_number) 184 0 R (_operationalpolicy) 185 0 R (_overview) 17 0 R (_parameters) 42 0 R (_parameters_10) 101 0 R (_parameters_11) 110 0 R] ->> -endobj -187 0 obj +208 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 412.8070000000001 325.32792192000005 427.0870000000001] +/Rect [272.17692192000004 443.107 325.32792192000005 457.38700000000006] /Type /Annot >> endobj -188 0 obj +209 0 obj +[205 0 R /XYZ 0 382.4400000000001 null] +endobj +210 0 obj << /Border [0 0 0] -/Dest (_jsonobject) +/Dest (_looptemplate) /Subtype /Link -/Rect [272.17692192000004 375.247 325.32792192000005 389.52700000000004] +/Rect [272.17692192000004 255.0670000000001 343.82067777937505 269.3470000000001] /Type /Annot >> endobj -189 0 obj +211 0 obj << /Border [0 0 0] -/Dest (_loop) +/Dest (_microservicemodel) /Subtype /Link -/Rect [272.17692192000004 337.68700000000007 297.27192192000007 351.9670000000001] +/Rect [272.17692192000004 217.5070000000001 369.21792192000004 231.7870000000001] /Type /Annot >> endobj -190 0 obj +212 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -26972,7 +32363,7 @@ endobj /Type /Annot >> endobj -191 0 obj +213 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -26980,7 +32371,7 @@ endobj /Type /Annot >> endobj -192 0 obj +214 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -26988,7 +32379,7 @@ endobj /Type /Annot >> endobj -193 0 obj +215 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -26996,7 +32387,7 @@ endobj /Type /Annot >> endobj -194 0 obj +216 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -27004,7 +32395,7 @@ endobj /Type /Annot >> endobj -195 0 obj +217 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -27012,7 +32403,7 @@ endobj /Type /Annot >> endobj -196 0 obj +218 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -27020,7 +32411,7 @@ endobj /Type /Annot >> endobj -197 0 obj +219 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -27028,23 +32419,23 @@ endobj /Type /Annot >> endobj -198 0 obj +220 0 obj << /Border [0 0 0] -/Dest (_route15) +/Dest (_route32) /Subtype /Link /Rect [60.24000000000001 621.7799999999997 183.88800000000003 636.0599999999998] /Type /Annot >> endobj -199 0 obj +221 0 obj << /Border [0 0 0] -/Dest (_route15) +/Dest (_route32) /Subtype /Link /Rect [557.8905 621.7799999999997 563.76 636.0599999999998] /Type /Annot >> endobj -200 0 obj +222 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -27052,7 +32443,7 @@ endobj /Type /Annot >> endobj -201 0 obj +223 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -27060,7 +32451,7 @@ endobj /Type /Annot >> endobj -202 0 obj +224 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -27068,7 +32459,7 @@ endobj /Type /Annot >> endobj -203 0 obj +225 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -27076,23 +32467,23 @@ endobj /Type /Annot >> endobj -204 0 obj +226 0 obj << /Border [0 0 0] -/Dest (_route16) +/Dest (_route33) /Subtype /Link /Rect [60.24000000000001 566.3399999999997 181.64100000000002 580.6199999999998] /Type /Annot >> endobj -205 0 obj +227 0 obj << /Border [0 0 0] -/Dest (_route16) +/Dest (_route33) /Subtype /Link /Rect [557.8905 566.3399999999997 563.76 580.6199999999998] /Type /Annot >> endobj -206 0 obj +228 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -27100,7 +32491,7 @@ endobj /Type /Annot >> endobj -207 0 obj +229 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -27108,7 +32499,7 @@ endobj /Type /Annot >> endobj -208 0 obj +230 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -27116,7 +32507,7 @@ endobj /Type /Annot >> endobj -209 0 obj +231 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -27124,23 +32515,23 @@ endobj /Type /Annot >> endobj -210 0 obj +232 0 obj << /Border [0 0 0] -/Dest (_route17) +/Dest (_route34) /Subtype /Link /Rect [60.24000000000001 510.89999999999975 183.8775 525.1799999999997] /Type /Annot >> endobj -211 0 obj +233 0 obj << /Border [0 0 0] -/Dest (_route17) +/Dest (_route34) /Subtype /Link /Rect [557.8905 510.89999999999975 563.76 525.1799999999997] /Type /Annot >> endobj -212 0 obj +234 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -27148,7 +32539,7 @@ endobj /Type /Annot >> endobj -213 0 obj +235 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -27156,7 +32547,7 @@ endobj /Type /Annot >> endobj -214 0 obj +236 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -27164,7 +32555,7 @@ endobj /Type /Annot >> endobj -215 0 obj +237 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -27172,23 +32563,23 @@ endobj /Type /Annot >> endobj -216 0 obj +238 0 obj << /Border [0 0 0] -/Dest (_route13) +/Dest (_route30) /Subtype /Link /Rect [60.24000000000001 455.4599999999997 239.28600000000003 469.73999999999967] /Type /Annot >> endobj -217 0 obj +239 0 obj << /Border [0 0 0] -/Dest (_route13) +/Dest (_route30) /Subtype /Link /Rect [557.8905 455.4599999999997 563.76 469.73999999999967] /Type /Annot >> endobj -218 0 obj +240 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -27196,7 +32587,7 @@ endobj /Type /Annot >> endobj -219 0 obj +241 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -27204,7 +32595,7 @@ endobj /Type /Annot >> endobj -220 0 obj +242 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -27212,7 +32603,7 @@ endobj /Type /Annot >> endobj -221 0 obj +243 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -27220,23 +32611,23 @@ endobj /Type /Annot >> endobj -222 0 obj +244 0 obj << /Border [0 0 0] -/Dest (_route8) +/Dest (_route25) /Subtype /Link /Rect [60.24000000000001 400.01999999999964 242.56179492187502 414.2999999999996] /Type /Annot >> endobj -223 0 obj +245 0 obj << /Border [0 0 0] -/Dest (_route8) +/Dest (_route25) /Subtype /Link /Rect [557.8905 400.01999999999964 563.76 414.2999999999996] /Type /Annot >> endobj -224 0 obj +246 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -27244,7 +32635,7 @@ endobj /Type /Annot >> endobj -225 0 obj +247 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -27252,7 +32643,7 @@ endobj /Type /Annot >> endobj -226 0 obj +248 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -27260,7 +32651,7 @@ endobj /Type /Annot >> endobj -227 0 obj +249 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -27268,7 +32659,7 @@ endobj /Type /Annot >> endobj -228 0 obj +250 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -27276,7 +32667,7 @@ endobj /Type /Annot >> endobj -229 0 obj +251 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -27284,23 +32675,23 @@ endobj /Type /Annot >> endobj -230 0 obj +252 0 obj << /Border [0 0 0] -/Dest (_route2) +/Dest (_route19) /Subtype /Link /Rect [60.24000000000001 326.09999999999957 209.00400000000002 340.37999999999954] /Type /Annot >> endobj -231 0 obj +253 0 obj << /Border [0 0 0] -/Dest (_route2) +/Dest (_route19) /Subtype /Link /Rect [557.8905 326.09999999999957 563.76 340.37999999999954] /Type /Annot >> endobj -232 0 obj +254 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -27308,7 +32699,7 @@ endobj /Type /Annot >> endobj -233 0 obj +255 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -27316,7 +32707,7 @@ endobj /Type /Annot >> endobj -234 0 obj +256 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -27324,7 +32715,7 @@ endobj /Type /Annot >> endobj -235 0 obj +257 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -27332,23 +32723,23 @@ endobj /Type /Annot >> endobj -236 0 obj +258 0 obj << /Border [0 0 0] -/Dest (_route14) +/Dest (_route31) /Subtype /Link /Rect [60.24000000000001 270.6599999999995 253.59750000000003 284.9399999999995] /Type /Annot >> endobj -237 0 obj +259 0 obj << /Border [0 0 0] -/Dest (_route14) +/Dest (_route31) /Subtype /Link /Rect [557.8905 270.6599999999995 563.76 284.9399999999995] /Type /Annot >> endobj -238 0 obj +260 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -27356,7 +32747,7 @@ endobj /Type /Annot >> endobj -239 0 obj +261 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -27364,7 +32755,7 @@ endobj /Type /Annot >> endobj -240 0 obj +262 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -27372,7 +32763,7 @@ endobj /Type /Annot >> endobj -241 0 obj +263 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -27380,7 +32771,7 @@ endobj /Type /Annot >> endobj -242 0 obj +264 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -27388,7 +32779,7 @@ endobj /Type /Annot >> endobj -243 0 obj +265 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -27396,23 +32787,23 @@ endobj /Type /Annot >> endobj -244 0 obj +266 0 obj << /Border [0 0 0] -/Dest (_route11) +/Dest (_route28) /Subtype /Link /Rect [60.24000000000001 196.7399999999995 242.58300000000003 211.0199999999995] /Type /Annot >> endobj -245 0 obj +267 0 obj << /Border [0 0 0] -/Dest (_route11) +/Dest (_route28) /Subtype /Link /Rect [557.8905 196.7399999999995 563.76 211.0199999999995] /Type /Annot >> endobj -246 0 obj +268 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -27420,7 +32811,7 @@ endobj /Type /Annot >> endobj -247 0 obj +269 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -27428,7 +32819,7 @@ endobj /Type /Annot >> endobj -248 0 obj +270 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -27436,7 +32827,7 @@ endobj /Type /Annot >> endobj -249 0 obj +271 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -27444,7 +32835,7 @@ endobj /Type /Annot >> endobj -250 0 obj +272 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -27452,7 +32843,7 @@ endobj /Type /Annot >> endobj -251 0 obj +273 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -27460,23 +32851,23 @@ endobj /Type /Annot >> endobj -252 0 obj +274 0 obj << /Border [0 0 0] -/Dest (_route10) +/Dest (_route27) /Subtype /Link /Rect [60.24000000000001 122.81999999999954 229.97250000000003 137.09999999999954] /Type /Annot >> endobj -253 0 obj +275 0 obj << /Border [0 0 0] -/Dest (_route10) +/Dest (_route27) /Subtype /Link /Rect [557.8905 122.81999999999954 563.76 137.09999999999954] /Type /Annot >> endobj -254 0 obj +276 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -27484,7 +32875,7 @@ endobj /Type /Annot >> endobj -255 0 obj +277 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -27492,7 +32883,7 @@ endobj /Type /Annot >> endobj -256 0 obj +278 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -27500,7 +32891,7 @@ endobj /Type /Annot >> endobj -257 0 obj +279 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -27508,7 +32899,7 @@ endobj /Type /Annot >> endobj -258 0 obj +280 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -27516,7 +32907,7 @@ endobj /Type /Annot >> endobj -259 0 obj +281 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -27524,23 +32915,23 @@ endobj /Type /Annot >> endobj -260 0 obj +282 0 obj << /Border [0 0 0] -/Dest (_route12) +/Dest (_route29) /Subtype /Link /Rect [60.24000000000001 48.89999999999957 249.70200000000003 63.17999999999957] /Type /Annot >> endobj -261 0 obj +283 0 obj << /Border [0 0 0] -/Dest (_route12) +/Dest (_route29) /Subtype /Link /Rect [557.8905 48.89999999999957 563.76 63.17999999999957] /Type /Annot >> endobj -262 0 obj +284 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -27548,7 +32939,7 @@ endobj /Type /Annot >> endobj -263 0 obj +285 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -27556,7 +32947,7 @@ endobj /Type /Annot >> endobj -264 0 obj +286 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -27564,7 +32955,7 @@ endobj /Type /Annot >> endobj -265 0 obj +287 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -27572,7 +32963,7 @@ endobj /Type /Annot >> endobj -266 0 obj +288 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -27580,7 +32971,7 @@ endobj /Type /Annot >> endobj -267 0 obj +289 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -27588,23 +32979,23 @@ endobj /Type /Annot >> endobj -268 0 obj +290 0 obj << /Border [0 0 0] -/Dest (_route4) +/Dest (_route21) /Subtype /Link /Rect [60.24000000000001 686.2799999999999 307.641 700.56] /Type /Annot >> endobj -269 0 obj +291 0 obj << /Border [0 0 0] -/Dest (_route4) +/Dest (_route21) /Subtype /Link /Rect [557.8905 686.2799999999999 563.76 700.56] /Type /Annot >> endobj -270 0 obj +292 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -27612,7 +33003,7 @@ endobj /Type /Annot >> endobj -271 0 obj +293 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -27620,7 +33011,7 @@ endobj /Type /Annot >> endobj -272 0 obj +294 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -27628,7 +33019,7 @@ endobj /Type /Annot >> endobj -273 0 obj +295 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -27636,7 +33027,7 @@ endobj /Type /Annot >> endobj -274 0 obj +296 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -27644,7 +33035,7 @@ endobj /Type /Annot >> endobj -275 0 obj +297 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -27652,23 +33043,23 @@ endobj /Type /Annot >> endobj -276 0 obj +298 0 obj << /Border [0 0 0] -/Dest (_route9) +/Dest (_route26) /Subtype /Link /Rect [60.24000000000001 612.3599999999998 261.860794921875 626.6399999999999] /Type /Annot >> endobj -277 0 obj +299 0 obj << /Border [0 0 0] -/Dest (_route9) +/Dest (_route26) /Subtype /Link /Rect [557.8905 612.3599999999998 563.76 626.6399999999999] /Type /Annot >> endobj -278 0 obj +300 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -27676,7 +33067,7 @@ endobj /Type /Annot >> endobj -279 0 obj +301 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -27684,7 +33075,7 @@ endobj /Type /Annot >> endobj -280 0 obj +302 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -27692,7 +33083,7 @@ endobj /Type /Annot >> endobj -281 0 obj +303 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -27700,7 +33091,7 @@ endobj /Type /Annot >> endobj -282 0 obj +304 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -27708,7 +33099,7 @@ endobj /Type /Annot >> endobj -283 0 obj +305 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -27716,23 +33107,23 @@ endobj /Type /Annot >> endobj -284 0 obj +306 0 obj << /Border [0 0 0] -/Dest (_route5) +/Dest (_route22) /Subtype /Link /Rect [60.24000000000001 538.4399999999998 339.560794921875 552.7199999999998] /Type /Annot >> endobj -285 0 obj +307 0 obj << /Border [0 0 0] -/Dest (_route5) +/Dest (_route22) /Subtype /Link /Rect [557.8905 538.4399999999998 563.76 552.7199999999998] /Type /Annot >> endobj -286 0 obj +308 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -27740,7 +33131,7 @@ endobj /Type /Annot >> endobj -287 0 obj +309 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -27748,7 +33139,7 @@ endobj /Type /Annot >> endobj -288 0 obj +310 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -27756,7 +33147,7 @@ endobj /Type /Annot >> endobj -289 0 obj +311 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -27764,7 +33155,7 @@ endobj /Type /Annot >> endobj -290 0 obj +312 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -27772,7 +33163,7 @@ endobj /Type /Annot >> endobj -291 0 obj +313 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -27780,7 +33171,7 @@ endobj /Type /Annot >> endobj -292 0 obj +314 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -27788,7 +33179,7 @@ endobj /Type /Annot >> endobj -293 0 obj +315 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -27796,23 +33187,23 @@ endobj /Type /Annot >> endobj -294 0 obj +316 0 obj << /Border [0 0 0] -/Dest (_route7) +/Dest (_route24) /Subtype /Link /Rect [60.24000000000001 446.03999999999974 350.38629492187505 460.3199999999997] /Type /Annot >> endobj -295 0 obj +317 0 obj << /Border [0 0 0] -/Dest (_route7) +/Dest (_route24) /Subtype /Link /Rect [557.8905 446.03999999999974 563.76 460.3199999999997] /Type /Annot >> endobj -296 0 obj +318 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -27820,7 +33211,7 @@ endobj /Type /Annot >> endobj -297 0 obj +319 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -27828,7 +33219,7 @@ endobj /Type /Annot >> endobj -298 0 obj +320 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -27836,7 +33227,7 @@ endobj /Type /Annot >> endobj -299 0 obj +321 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -27844,7 +33235,7 @@ endobj /Type /Annot >> endobj -300 0 obj +322 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -27852,7 +33243,7 @@ endobj /Type /Annot >> endobj -301 0 obj +323 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -27860,7 +33251,7 @@ endobj /Type /Annot >> endobj -302 0 obj +324 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -27868,7 +33259,7 @@ endobj /Type /Annot >> endobj -303 0 obj +325 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -27876,23 +33267,23 @@ endobj /Type /Annot >> endobj -304 0 obj +326 0 obj << /Border [0 0 0] -/Dest (_route6) +/Dest (_route23) /Subtype /Link /Rect [60.24000000000001 353.63999999999965 352.81158984375 367.9199999999996] /Type /Annot >> endobj -305 0 obj +327 0 obj << /Border [0 0 0] -/Dest (_route6) +/Dest (_route23) /Subtype /Link /Rect [557.8905 353.63999999999965 563.76 367.9199999999996] /Type /Annot >> endobj -306 0 obj +328 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -27900,7 +33291,7 @@ endobj /Type /Annot >> endobj -307 0 obj +329 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -27908,7 +33299,7 @@ endobj /Type /Annot >> endobj -308 0 obj +330 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -27916,7 +33307,7 @@ endobj /Type /Annot >> endobj -309 0 obj +331 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -27924,7 +33315,7 @@ endobj /Type /Annot >> endobj -310 0 obj +332 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -27932,7 +33323,7 @@ endobj /Type /Annot >> endobj -311 0 obj +333 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -27940,7 +33331,7 @@ endobj /Type /Annot >> endobj -312 0 obj +334 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -27948,7 +33339,7 @@ endobj /Type /Annot >> endobj -313 0 obj +335 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -27956,23 +33347,23 @@ endobj /Type /Annot >> endobj -314 0 obj +336 0 obj << /Border [0 0 0] -/Dest (_route3) +/Dest (_route20) /Subtype /Link /Rect [60.24000000000001 261.23999999999955 212.0595 275.5199999999995] /Type /Annot >> endobj -315 0 obj +337 0 obj << /Border [0 0 0] -/Dest (_route3) +/Dest (_route20) /Subtype /Link /Rect [557.8905 261.23999999999955 563.76 275.5199999999995] /Type /Annot >> endobj -316 0 obj +338 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -27980,7 +33371,7 @@ endobj /Type /Annot >> endobj -317 0 obj +339 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -27988,7 +33379,7 @@ endobj /Type /Annot >> endobj -318 0 obj +340 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -27996,7 +33387,7 @@ endobj /Type /Annot >> endobj -319 0 obj +341 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -28004,7 +33395,7 @@ endobj /Type /Annot >> endobj -320 0 obj +342 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -28012,7 +33403,7 @@ endobj /Type /Annot >> endobj -321 0 obj +343 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -28020,7 +33411,7 @@ endobj /Type /Annot >> endobj -322 0 obj +344 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link @@ -28028,7 +33419,7 @@ endobj /Type /Annot >> endobj -323 0 obj +345 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link @@ -28036,7 +33427,7 @@ endobj /Type /Annot >> endobj -324 0 obj +346 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link @@ -28044,7 +33435,7 @@ endobj /Type /Annot >> endobj -325 0 obj +347 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link @@ -28052,7 +33443,7 @@ endobj /Type /Annot >> endobj -326 0 obj +348 0 obj << /Border [0 0 0] /Dest (_cldsinfo) /Subtype /Link @@ -28060,7 +33451,7 @@ endobj /Type /Annot >> endobj -327 0 obj +349 0 obj << /Border [0 0 0] /Dest (_cldsinfo) /Subtype /Link @@ -28068,7 +33459,7 @@ endobj /Type /Annot >> endobj -328 0 obj +350 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -28076,7 +33467,7 @@ endobj /Type /Annot >> endobj -329 0 obj +351 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -28084,7 +33475,7 @@ endobj /Type /Annot >> endobj -330 0 obj +352 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -28092,7 +33483,7 @@ endobj /Type /Annot >> endobj -331 0 obj +353 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -28100,7 +33491,7 @@ endobj /Type /Annot >> endobj -332 0 obj +354 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -28108,7 +33499,7 @@ endobj /Type /Annot >> endobj -333 0 obj +355 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -28116,7 +33507,7 @@ endobj /Type /Annot >> endobj -334 0 obj +356 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -28124,7 +33515,7 @@ endobj /Type /Annot >> endobj -335 0 obj +357 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -28132,7 +33523,7 @@ endobj /Type /Annot >> endobj -336 0 obj +358 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -28140,7 +33531,7 @@ endobj /Type /Annot >> endobj -337 0 obj +359 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -28148,7 +33539,7 @@ endobj /Type /Annot >> endobj -338 0 obj +360 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -28156,7 +33547,7 @@ endobj /Type /Annot >> endobj -339 0 obj +361 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -28164,7 +33555,7 @@ endobj /Type /Annot >> endobj -340 0 obj +362 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -28172,7 +33563,7 @@ endobj /Type /Annot >> endobj -341 0 obj +363 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -28180,7 +33571,7 @@ endobj /Type /Annot >> endobj -342 0 obj +364 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -28188,7 +33579,7 @@ endobj /Type /Annot >> endobj -343 0 obj +365 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -28196,55 +33587,135 @@ endobj /Type /Annot >> endobj -344 0 obj +366 0 obj +<< /Border [0 0 0] +/Dest (_looptemplate) +/Subtype /Link +/Rect [60.24000000000001 686.2799999999999 157.46175585937502 700.56] +/Type /Annot +>> +endobj +367 0 obj +<< /Border [0 0 0] +/Dest (_looptemplate) +/Subtype /Link +/Rect [552.021 686.2799999999999 563.76 700.56] +/Type /Annot +>> +endobj +368 0 obj +<< /Border [0 0 0] +/Dest (_microservicemodel) +/Subtype /Link +/Rect [60.24000000000001 667.7999999999998 182.85900000000004 682.0799999999999] +/Type /Annot +>> +endobj +369 0 obj +<< /Border [0 0 0] +/Dest (_microservicemodel) +/Subtype /Link +/Rect [552.021 667.7999999999998 563.76 682.0799999999999] +/Type /Annot +>> +endobj +370 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link -/Rect [60.24000000000001 686.2799999999999 181.74600000000004 700.56] +/Rect [60.24000000000001 649.3199999999998 181.74600000000004 663.5999999999999] /Type /Annot >> endobj -345 0 obj +371 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link -/Rect [552.021 686.2799999999999 563.76 700.56] +/Rect [552.021 649.3199999999998 563.76 663.5999999999999] /Type /Annot >> endobj -346 0 obj +372 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link -/Rect [60.24000000000001 667.7999999999998 127.39800000000001 682.0799999999999] +/Rect [60.24000000000001 630.8399999999998 127.39800000000001 645.1199999999999] /Type /Annot >> endobj -347 0 obj +373 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link -/Rect [552.021 667.7999999999998 563.76 682.0799999999999] +/Rect [552.021 630.8399999999998 563.76 645.1199999999999] /Type /Annot >> endobj -348 0 obj +374 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link -/Rect [60.24000000000001 649.3199999999998 175.42479492187502 663.5999999999999] +/Rect [60.24000000000001 612.3599999999998 175.42479492187502 626.6399999999999] /Type /Annot >> endobj -349 0 obj +375 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link -/Rect [552.021 649.3199999999998 563.76 663.5999999999999] +/Rect [552.021 612.3599999999998 563.76 626.6399999999999] /Type /Annot >> endobj -350 0 obj +376 0 obj +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [60.24000000000001 593.8799999999998 147.11700000000002 608.1599999999999] +/Type /Annot +>> +endobj +377 0 obj +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [552.021 593.8799999999998 563.76 608.1599999999999] +/Type /Annot +>> +endobj +378 0 obj +<< /Border [0 0 0] +/Dest (_service) +/Subtype /Link +/Rect [60.24000000000001 575.3999999999997 122.29500000000002 589.6799999999998] +/Type /Annot +>> +endobj +379 0 obj +<< /Border [0 0 0] +/Dest (_service) +/Subtype /Link +/Rect [552.021 575.3999999999997 563.76 589.6799999999998] +/Type /Annot +>> +endobj +380 0 obj +<< /Border [0 0 0] +/Dest (_templatemicroservicemodel) +/Subtype /Link +/Rect [60.24000000000001 556.9199999999998 229.40775585937502 571.1999999999998] +/Type /Annot +>> +endobj +381 0 obj +<< /Border [0 0 0] +/Dest (_templatemicroservicemodel) +/Subtype /Link +/Rect [552.021 556.9199999999998 563.76 571.1999999999998] +/Type /Annot +>> +endobj +382 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 612.0 792.0] @@ -28272,750 +33743,795 @@ Q endstream endobj -351 0 obj +383 0 obj << /Type /Outlines -/Count 82 -/First 352 0 R -/Last 420 0 R +/Count 87 +/First 384 0 R +/Last 452 0 R >> endobj -352 0 obj +384 0 obj << /Title -/Parent 351 0 R +/Parent 383 0 R /Count 0 -/Next 353 0 R +/Next 385 0 R /Dest [7 0 R /XYZ 0 792.0 null] >> endobj -353 0 obj +385 0 obj << /Title -/Parent 351 0 R +/Parent 383 0 R /Count 0 -/Next 354 0 R -/Prev 352 0 R +/Next 386 0 R +/Prev 384 0 R /Dest [10 0 R /XYZ 0 792.0 null] >> endobj -354 0 obj +386 0 obj << /Title -/Parent 351 0 R +/Parent 383 0 R /Count 2 -/First 355 0 R -/Last 356 0 R -/Next 357 0 R -/Prev 353 0 R +/First 387 0 R +/Last 388 0 R +/Next 389 0 R +/Prev 385 0 R /Dest [16 0 R /XYZ 0 792.0 null] >> endobj -355 0 obj +387 0 obj << /Title -/Parent 354 0 R +/Parent 386 0 R /Count 0 -/Next 356 0 R +/Next 388 0 R /Dest [16 0 R /XYZ 0 712.0799999999999 null] >> endobj -356 0 obj +388 0 obj << /Title -/Parent 354 0 R +/Parent 386 0 R /Count 0 -/Prev 355 0 R +/Prev 387 0 R /Dest [16 0 R /XYZ 0 644.22 null] >> endobj -357 0 obj +389 0 obj << /Title -/Parent 351 0 R +/Parent 383 0 R /Count 62 -/First 358 0 R -/Last 416 0 R -/Next 420 0 R -/Prev 354 0 R +/First 390 0 R +/Last 448 0 R +/Next 452 0 R +/Prev 386 0 R /Dest [25 0 R /XYZ 0 792.0 null] >> endobj -358 0 obj +390 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 2 -/First 359 0 R -/Last 360 0 R -/Next 361 0 R +/First 391 0 R +/Last 392 0 R +/Next 393 0 R /Dest [25 0 R /XYZ 0 712.0799999999999 null] >> endobj -359 0 obj +391 0 obj << /Title -/Parent 358 0 R +/Parent 390 0 R /Count 0 -/Next 360 0 R +/Next 392 0 R /Dest [25 0 R /XYZ 0 672.0 null] >> endobj -360 0 obj +392 0 obj << /Title -/Parent 358 0 R +/Parent 390 0 R /Count 0 -/Prev 359 0 R +/Prev 391 0 R /Dest [25 0 R /XYZ 0 566.8800000000001 null] >> endobj -361 0 obj +393 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 2 -/First 362 0 R -/Last 363 0 R -/Next 364 0 R -/Prev 358 0 R +/First 394 0 R +/Last 395 0 R +/Next 396 0 R +/Prev 390 0 R /Dest [25 0 R /XYZ 0 510.60000000000025 null] >> endobj -362 0 obj +394 0 obj << /Title -/Parent 361 0 R +/Parent 393 0 R /Count 0 -/Next 363 0 R +/Next 395 0 R /Dest [25 0 R /XYZ 0 470.5200000000002 null] >> endobj -363 0 obj +395 0 obj << /Title -/Parent 361 0 R +/Parent 393 0 R /Count 0 -/Prev 362 0 R +/Prev 394 0 R /Dest [25 0 R /XYZ 0 365.4000000000002 null] >> endobj -364 0 obj +396 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 2 -/First 365 0 R -/Last 366 0 R -/Next 367 0 R -/Prev 361 0 R +/First 397 0 R +/Last 398 0 R +/Next 399 0 R +/Prev 393 0 R /Dest [25 0 R /XYZ 0 309.1200000000002 null] >> endobj -365 0 obj +397 0 obj << /Title -/Parent 364 0 R +/Parent 396 0 R /Count 0 -/Next 366 0 R +/Next 398 0 R /Dest [25 0 R /XYZ 0 269.04000000000013 null] >> endobj -366 0 obj +398 0 obj << /Title -/Parent 364 0 R +/Parent 396 0 R /Count 0 -/Prev 365 0 R +/Prev 397 0 R /Dest [25 0 R /XYZ 0 178.20000000000013 null] >> endobj -367 0 obj +399 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 2 -/First 368 0 R -/Last 369 0 R -/Next 370 0 R -/Prev 364 0 R +/First 400 0 R +/Last 401 0 R +/Next 402 0 R +/Prev 396 0 R /Dest [25 0 R /XYZ 0 121.9200000000001 null] >> endobj -368 0 obj +400 0 obj << /Title -/Parent 367 0 R +/Parent 399 0 R /Count 0 -/Next 369 0 R +/Next 401 0 R /Dest [41 0 R /XYZ 0 792.0 null] >> endobj -369 0 obj +401 0 obj << /Title -/Parent 367 0 R +/Parent 399 0 R /Count 0 -/Prev 368 0 R +/Prev 400 0 R /Dest [41 0 R /XYZ 0 653.2800000000002 null] >> endobj -370 0 obj +402 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 371 0 R -/Last 373 0 R -/Next 374 0 R -/Prev 367 0 R +/First 403 0 R +/Last 405 0 R +/Next 406 0 R +/Prev 399 0 R /Dest [41 0 R /XYZ 0 562.4400000000004 null] >> endobj -371 0 obj +403 0 obj << /Title -/Parent 370 0 R +/Parent 402 0 R /Count 0 -/Next 372 0 R +/Next 404 0 R /Dest [41 0 R /XYZ 0 522.3600000000005 null] >> endobj -372 0 obj +404 0 obj << /Title -/Parent 370 0 R +/Parent 402 0 R /Count 0 -/Next 373 0 R -/Prev 371 0 R +/Next 405 0 R +/Prev 403 0 R /Dest [41 0 R /XYZ 0 417.2400000000005 null] >> endobj -373 0 obj +405 0 obj << /Title -/Parent 370 0 R +/Parent 402 0 R /Count 0 -/Prev 372 0 R +/Prev 404 0 R /Dest [41 0 R /XYZ 0 312.12000000000046 null] >> endobj -374 0 obj +406 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 2 -/First 375 0 R -/Last 376 0 R -/Next 377 0 R -/Prev 370 0 R +/First 407 0 R +/Last 408 0 R +/Next 409 0 R +/Prev 402 0 R /Dest [41 0 R /XYZ 0 255.84000000000043 null] >> endobj -375 0 obj +407 0 obj << /Title -/Parent 374 0 R +/Parent 406 0 R /Count 0 -/Next 376 0 R +/Next 408 0 R /Dest [41 0 R /XYZ 0 215.76000000000042 null] >> endobj -376 0 obj +408 0 obj << /Title -/Parent 374 0 R +/Parent 406 0 R /Count 0 -/Prev 375 0 R +/Prev 407 0 R /Dest [41 0 R /XYZ 0 110.64000000000038 null] >> endobj -377 0 obj +409 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 378 0 R -/Last 380 0 R -/Next 381 0 R -/Prev 374 0 R +/First 410 0 R +/Last 412 0 R +/Next 413 0 R +/Prev 406 0 R /Dest [55 0 R /XYZ 0 792.0 null] >> endobj -378 0 obj +410 0 obj << /Title -/Parent 377 0 R +/Parent 409 0 R /Count 0 -/Next 379 0 R +/Next 411 0 R /Dest [55 0 R /XYZ 0 718.32 null] >> endobj -379 0 obj +411 0 obj << /Title -/Parent 377 0 R +/Parent 409 0 R /Count 0 -/Next 380 0 R -/Prev 378 0 R +/Next 412 0 R +/Prev 410 0 R /Dest [55 0 R /XYZ 0 613.2000000000003 null] >> endobj -380 0 obj +412 0 obj << /Title -/Parent 377 0 R +/Parent 409 0 R /Count 0 -/Prev 379 0 R +/Prev 411 0 R /Dest [55 0 R /XYZ 0 508.0800000000004 null] >> endobj -381 0 obj +413 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 382 0 R -/Last 384 0 R -/Next 385 0 R -/Prev 377 0 R +/First 414 0 R +/Last 416 0 R +/Next 417 0 R +/Prev 409 0 R /Dest [55 0 R /XYZ 0 451.80000000000035 null] >> endobj -382 0 obj +414 0 obj << /Title -/Parent 381 0 R +/Parent 413 0 R /Count 0 -/Next 383 0 R +/Next 415 0 R /Dest [55 0 R /XYZ 0 411.7200000000003 null] >> endobj -383 0 obj +415 0 obj << /Title -/Parent 381 0 R +/Parent 413 0 R /Count 0 -/Next 384 0 R -/Prev 382 0 R +/Next 416 0 R +/Prev 414 0 R /Dest [55 0 R /XYZ 0 306.6000000000003 null] >> endobj -384 0 obj +416 0 obj << /Title -/Parent 381 0 R +/Parent 413 0 R /Count 0 -/Prev 383 0 R +/Prev 415 0 R /Dest [55 0 R /XYZ 0 201.48000000000027 null] >> endobj -385 0 obj +417 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 386 0 R -/Last 388 0 R -/Next 389 0 R -/Prev 381 0 R +/First 418 0 R +/Last 420 0 R +/Next 421 0 R +/Prev 413 0 R /Dest [55 0 R /XYZ 0 145.20000000000024 null] >> endobj -386 0 obj +418 0 obj << /Title -/Parent 385 0 R +/Parent 417 0 R /Count 0 -/Next 387 0 R +/Next 419 0 R /Dest [55 0 R /XYZ 0 105.12000000000023 null] >> endobj -387 0 obj +419 0 obj << /Title -/Parent 385 0 R +/Parent 417 0 R /Count 0 -/Next 388 0 R -/Prev 386 0 R +/Next 420 0 R +/Prev 418 0 R /Dest [69 0 R /XYZ 0 683.1600000000001 null] >> endobj -388 0 obj +420 0 obj << /Title -/Parent 385 0 R +/Parent 417 0 R /Count 0 -/Prev 387 0 R +/Prev 419 0 R /Dest [69 0 R /XYZ 0 578.0400000000002 null] >> endobj -389 0 obj +421 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 390 0 R -/Last 392 0 R -/Next 393 0 R -/Prev 385 0 R +/First 422 0 R +/Last 424 0 R +/Next 425 0 R +/Prev 417 0 R /Dest [69 0 R /XYZ 0 521.7600000000003 null] >> endobj -390 0 obj +422 0 obj << /Title -/Parent 389 0 R +/Parent 421 0 R /Count 0 -/Next 391 0 R +/Next 423 0 R /Dest [69 0 R /XYZ 0 481.68000000000035 null] >> endobj -391 0 obj +423 0 obj << /Title -/Parent 389 0 R +/Parent 421 0 R /Count 0 -/Next 392 0 R -/Prev 390 0 R +/Next 424 0 R +/Prev 422 0 R /Dest [69 0 R /XYZ 0 376.56000000000034 null] >> endobj -392 0 obj +424 0 obj << /Title -/Parent 389 0 R +/Parent 421 0 R /Count 0 -/Prev 391 0 R +/Prev 423 0 R /Dest [69 0 R /XYZ 0 271.4400000000003 null] >> endobj -393 0 obj +425 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 394 0 R -/Last 396 0 R -/Next 397 0 R -/Prev 389 0 R +/First 426 0 R +/Last 428 0 R +/Next 429 0 R +/Prev 421 0 R /Dest [69 0 R /XYZ 0 215.16000000000028 null] >> endobj -394 0 obj +426 0 obj << /Title -/Parent 393 0 R +/Parent 425 0 R /Count 0 -/Next 395 0 R +/Next 427 0 R /Dest [69 0 R /XYZ 0 175.08000000000027 null] >> endobj -395 0 obj +427 0 obj << /Title -/Parent 393 0 R +/Parent 425 0 R /Count 0 -/Next 396 0 R -/Prev 394 0 R +/Next 428 0 R +/Prev 426 0 R /Dest [82 0 R /XYZ 0 792.0 null] >> endobj -396 0 obj +428 0 obj << /Title -/Parent 393 0 R +/Parent 425 0 R /Count 0 -/Prev 395 0 R +/Prev 427 0 R /Dest [82 0 R /XYZ 0 653.2800000000002 null] >> endobj -397 0 obj +429 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 398 0 R -/Last 400 0 R -/Next 401 0 R -/Prev 393 0 R +/First 430 0 R +/Last 432 0 R +/Next 433 0 R +/Prev 425 0 R /Dest [82 0 R /XYZ 0 597.0000000000003 null] >> endobj -398 0 obj +430 0 obj << /Title -/Parent 397 0 R +/Parent 429 0 R /Count 0 -/Next 399 0 R +/Next 431 0 R /Dest [82 0 R /XYZ 0 556.9200000000004 null] >> endobj -399 0 obj +431 0 obj << /Title -/Parent 397 0 R +/Parent 429 0 R /Count 0 -/Next 400 0 R -/Prev 398 0 R +/Next 432 0 R +/Prev 430 0 R /Dest [82 0 R /XYZ 0 451.8000000000006 null] >> endobj -400 0 obj +432 0 obj << /Title -/Parent 397 0 R +/Parent 429 0 R /Count 0 -/Prev 399 0 R +/Prev 431 0 R /Dest [82 0 R /XYZ 0 346.6800000000005 null] >> endobj -401 0 obj +433 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 4 -/First 402 0 R -/Last 405 0 R -/Next 406 0 R -/Prev 397 0 R +/First 434 0 R +/Last 437 0 R +/Next 438 0 R +/Prev 429 0 R /Dest [82 0 R /XYZ 0 290.4000000000005 null] >> endobj -402 0 obj +434 0 obj << /Title -/Parent 401 0 R +/Parent 433 0 R /Count 0 -/Next 403 0 R +/Next 435 0 R /Dest [82 0 R /XYZ 0 250.32000000000048 null] >> endobj -403 0 obj +435 0 obj << /Title -/Parent 401 0 R +/Parent 433 0 R /Count 0 -/Next 404 0 R -/Prev 402 0 R +/Next 436 0 R +/Prev 434 0 R /Dest [82 0 R /XYZ 0 107.64000000000044 null] >> endobj -404 0 obj +436 0 obj << /Title -/Parent 401 0 R +/Parent 433 0 R /Count 0 -/Next 405 0 R -/Prev 403 0 R +/Next 437 0 R +/Prev 435 0 R /Dest [96 0 R /XYZ 0 683.1600000000001 null] >> endobj -405 0 obj +437 0 obj << /Title -/Parent 401 0 R +/Parent 433 0 R /Count 0 -/Prev 404 0 R +/Prev 436 0 R /Dest [96 0 R /XYZ 0 626.8800000000002 null] >> endobj -406 0 obj +438 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 4 -/First 407 0 R -/Last 410 0 R -/Next 411 0 R -/Prev 401 0 R +/First 439 0 R +/Last 442 0 R +/Next 443 0 R +/Prev 433 0 R /Dest [96 0 R /XYZ 0 570.6000000000004 null] >> endobj -407 0 obj +439 0 obj << /Title -/Parent 406 0 R +/Parent 438 0 R /Count 0 -/Next 408 0 R +/Next 440 0 R /Dest [96 0 R /XYZ 0 502.4400000000004 null] >> endobj -408 0 obj +440 0 obj << /Title -/Parent 406 0 R +/Parent 438 0 R /Count 0 -/Next 409 0 R -/Prev 407 0 R +/Next 441 0 R +/Prev 439 0 R /Dest [96 0 R /XYZ 0 359.7600000000004 null] >> endobj -409 0 obj +441 0 obj << /Title -/Parent 406 0 R +/Parent 438 0 R /Count 0 -/Next 410 0 R -/Prev 408 0 R +/Next 442 0 R +/Prev 440 0 R /Dest [96 0 R /XYZ 0 254.64000000000033 null] >> endobj -410 0 obj +442 0 obj << /Title -/Parent 406 0 R +/Parent 438 0 R /Count 0 -/Prev 409 0 R +/Prev 441 0 R /Dest [96 0 R /XYZ 0 198.3600000000003 null] >> endobj -411 0 obj +443 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 4 -/First 412 0 R -/Last 415 0 R -/Next 416 0 R -/Prev 406 0 R +/First 444 0 R +/Last 447 0 R +/Next 448 0 R +/Prev 438 0 R /Dest [96 0 R /XYZ 0 142.08000000000027 null] >> endobj -412 0 obj +444 0 obj << /Title -/Parent 411 0 R +/Parent 443 0 R /Count 0 -/Next 413 0 R +/Next 445 0 R /Dest [109 0 R /XYZ 0 792.0 null] >> endobj -413 0 obj +445 0 obj << /Title -/Parent 411 0 R +/Parent 443 0 R /Count 0 -/Next 414 0 R -/Prev 412 0 R +/Next 446 0 R +/Prev 444 0 R /Dest [109 0 R /XYZ 0 615.72 null] >> endobj -414 0 obj +446 0 obj << /Title -/Parent 411 0 R +/Parent 443 0 R /Count 0 -/Next 415 0 R -/Prev 413 0 R +/Next 447 0 R +/Prev 445 0 R /Dest [109 0 R /XYZ 0 510.60000000000014 null] >> endobj -415 0 obj +447 0 obj << /Title -/Parent 411 0 R +/Parent 443 0 R /Count 0 -/Prev 414 0 R +/Prev 446 0 R /Dest [109 0 R /XYZ 0 454.3200000000001 null] >> endobj -416 0 obj +448 0 obj << /Title -/Parent 357 0 R +/Parent 389 0 R /Count 3 -/First 417 0 R -/Last 419 0 R -/Prev 411 0 R +/First 449 0 R +/Last 451 0 R +/Prev 443 0 R /Dest [109 0 R /XYZ 0 398.0400000000001 null] >> endobj -417 0 obj +449 0 obj << /Title -/Parent 416 0 R +/Parent 448 0 R /Count 0 -/Next 418 0 R +/Next 450 0 R /Dest [109 0 R /XYZ 0 357.96000000000004 null] >> endobj -418 0 obj +450 0 obj << /Title -/Parent 416 0 R +/Parent 448 0 R /Count 0 -/Next 419 0 R -/Prev 417 0 R +/Next 451 0 R +/Prev 449 0 R /Dest [109 0 R /XYZ 0 252.83999999999997 null] >> endobj -419 0 obj +451 0 obj << /Title -/Parent 416 0 R +/Parent 448 0 R /Count 0 -/Prev 418 0 R +/Prev 450 0 R /Dest [109 0 R /XYZ 0 147.71999999999994 null] >> endobj -420 0 obj +452 0 obj << /Title -/Parent 351 0 R -/Count 13 -/First 421 0 R -/Last 433 0 R -/Prev 357 0 R +/Parent 383 0 R +/Count 18 +/First 453 0 R +/Last 470 0 R +/Prev 389 0 R /Dest [123 0 R /XYZ 0 792.0 null] >> endobj -421 0 obj +453 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 422 0 R +/Next 454 0 R /Dest [123 0 R /XYZ 0 712.0799999999999 null] >> endobj -422 0 obj +454 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 423 0 R -/Prev 421 0 R +/Next 455 0 R +/Prev 453 0 R /Dest [123 0 R /XYZ 0 524.04 null] >> endobj -423 0 obj +455 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 424 0 R -/Prev 422 0 R +/Next 456 0 R +/Prev 454 0 R /Dest [123 0 R /XYZ 0 148.19999999999993 null] >> endobj -424 0 obj +456 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 425 0 R -/Prev 423 0 R +/Next 457 0 R +/Prev 455 0 R /Dest [130 0 R /XYZ 0 645.5999999999999 null] >> endobj -425 0 obj +457 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 426 0 R -/Prev 424 0 R +/Next 458 0 R +/Prev 456 0 R /Dest [130 0 R /XYZ 0 457.56 null] >> endobj -426 0 obj +458 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 427 0 R -/Prev 425 0 R +/Next 459 0 R +/Prev 457 0 R /Dest [136 0 R /XYZ 0 307.56000000000034 null] >> endobj -427 0 obj +459 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 428 0 R -/Prev 426 0 R +/Next 460 0 R +/Prev 458 0 R /Dest [143 0 R /XYZ 0 157.32000000000022 null] >> endobj -428 0 obj +460 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 429 0 R -/Prev 427 0 R +/Next 461 0 R +/Prev 459 0 R /Dest [158 0 R /XYZ 0 683.1600000000001 null] >> endobj -429 0 obj +461 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 430 0 R -/Prev 428 0 R +/Next 462 0 R +/Prev 460 0 R /Dest [166 0 R /XYZ 0 420.2400000000004 null] >> endobj -430 0 obj +462 0 obj << /Title -/Parent 420 0 R +/Parent 452 0 R /Count 0 -/Next 431 0 R -/Prev 429 0 R -/Dest [172 0 R /XYZ 0 532.9200000000001 null] +/Next 463 0 R +/Prev 461 0 R +/Dest [171 0 R /XYZ 0 345.12000000000006 null] >> endobj -431 0 obj -<< /Title -/Parent 420 0 R +463 0 obj +<< /Title +/Parent 452 0 R /Count 0 -/Next 432 0 R -/Prev 430 0 R -/Dest [172 0 R /XYZ 0 232.2000000000001 null] +/Next 464 0 R +/Prev 462 0 R +/Dest [180 0 R /XYZ 0 792.0 null] >> endobj -432 0 obj -<< /Title -/Parent 420 0 R +464 0 obj +<< /Title +/Parent 452 0 R /Count 0 -/Next 433 0 R -/Prev 431 0 R -/Dest [181 0 R /XYZ 0 570.48 null] +/Next 465 0 R +/Prev 463 0 R +/Dest [180 0 R /XYZ 0 307.44 null] >> endobj -433 0 obj -<< /Title -/Parent 420 0 R +465 0 obj +<< /Title +/Parent 452 0 R /Count 0 -/Prev 432 0 R -/Dest [181 0 R /XYZ 0 502.6200000000001 null] +/Next 466 0 R +/Prev 464 0 R +/Dest [187 0 R /XYZ 0 570.48 null] >> endobj -434 0 obj +466 0 obj +<< /Title +/Parent 452 0 R +/Count 0 +/Next 467 0 R +/Prev 465 0 R +/Dest [195 0 R /XYZ 0 645.5999999999999 null] +>> +endobj +467 0 obj +<< /Title +/Parent 452 0 R +/Count 0 +/Next 468 0 R +/Prev 466 0 R +/Dest [195 0 R /XYZ 0 577.74 null] +>> +endobj +468 0 obj +<< /Title +/Parent 452 0 R +/Count 0 +/Next 469 0 R +/Prev 467 0 R +/Dest [195 0 R /XYZ 0 314.5800000000001 null] +>> +endobj +469 0 obj +<< /Title +/Parent 452 0 R +/Count 0 +/Next 470 0 R +/Prev 468 0 R +/Dest [205 0 R /XYZ 0 570.48 null] +>> +endobj +470 0 obj +<< /Title +/Parent 452 0 R +/Count 0 +/Prev 469 0 R +/Dest [205 0 R /XYZ 0 382.4400000000001 null] +>> +endobj +471 0 obj << /Nums [0 << /P (i) >> 1 << /P (ii) >> 2 << /P (iii) @@ -29036,10 +34552,13 @@ endobj >> 18 << /P (15) >> 19 << /P (16) >> 20 << /P (17) +>> 21 << /P (18) +>> 22 << /P (19) +>> 23 << /P (20) >>] >> endobj -435 0 obj +472 0 obj << /Length1 12112 /Length 7776 /Filter [/FlateDecode] @@ -29072,10 +34591,10 @@ G)Dz adç4ft#ːe=<'cìpN/(i$V(.>t`jxp\5=ۥXwګ rWΪV-/Ms6C,CTī6ӿ|?`dUl'of]q \LcM&>'sNXpZ,a:;?p)̀tᾁ)xjzh@%x'CY& Da2|b$!V;n;>p,r<@1eTRVTfdPl<_oTpAҧRW٢Y,JVz "wn_is[ a\!ox(P/ endstream endobj -436 0 obj +473 0 obj << /Type /FontDescriptor /FontName /AAAAAA+NotoSerif -/FontFile2 435 0 R +/FontFile2 472 0 R /FontBBox [-212 -250 1246 1047] /Flags 6 /StemV 0 @@ -29086,7 +34605,7 @@ endobj /XHeight 1098 >> endobj -437 0 obj +474 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -29096,10 +34615,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -438 0 obj +475 0 obj [259 1000 1000 1000 1000 1000 1000 1000 346 346 1000 1000 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 1000 559 1000 559 1000 1000 705 653 613 727 623 589 713 792 367 356 1000 623 937 763 742 604 1000 655 543 612 716 674 1046 1000 625 1000 1000 1000 1000 1000 458 1000 562 613 492 613 535 369 538 634 319 299 584 310 944 645 577 613 1000 471 451 352 634 579 861 578 564 1000 428 1000 428 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -439 0 obj +476 0 obj << /Length1 11108 /Length 7380 /Filter [/FlateDecode] @@ -29131,10 +34650,10 @@ Q t!ꤶWLN-̌i\frr8:kʢQM;siV>8;8cp*$B ha4\ sk7hFu`!h IDO^~j yrnR183:1 wM]h|2:$ph[щaM򰆽 `,8@ ȁ,͑ M̏;3M  hz<)c>Fgōj4s3}qjB0ʪ9d7Ɓ6"9:7kk㕃MdmX{8b}s}щ9 VCs e.*D04 573p30#ssSEG}U2rIs|L|b+:\c"aGΝ;ĴXֳs8de-޳@HȠlWe7tٝcG Mh똌FX픁>/>Z(893ÎhŬƠ|VIЩZ,P* w4Ú%Jgzkx[ZAdۅˏɖ!",T!.K endstream endobj -440 0 obj +477 0 obj << /Type /FontDescriptor /FontName /AAAAAB+NotoSerif-Bold -/FontFile2 439 0 R +/FontFile2 476 0 R /FontBBox [-212 -250 1306 1058] /Flags 6 /StemV 0 @@ -29145,7 +34664,7 @@ endobj /XHeight 1098 >> endobj -441 0 obj +478 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -29155,10 +34674,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -442 0 obj +479 0 obj [259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 293 288 559 559 559 559 559 559 559 559 559 559 1000 1000 1000 1000 1000 1000 1000 752 671 667 767 652 621 769 818 400 368 1000 653 952 788 787 638 1000 707 585 652 747 698 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 345 636 352 985 666 612 645 1000 522 487 404 666 605 855 645 579 1000 441 1000 441 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -443 0 obj +480 0 obj << /Length1 5116 /Length 3170 /Filter [/FlateDecode] @@ -29178,10 +34697,10 @@ a :2]^5w,º*Ӌ58mgnk7cB4aD[NaU> endobj -445 0 obj +482 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -29202,10 +34721,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -446 0 obj +483 0 obj [1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 653 1000 1000 1000 1000 1000 792 1000 1000 1000 1000 1000 1000 1000 620 1000 1000 543 612 1000 674 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 579 1000 486 579 493 1000 1000 599 304 1000 1000 304 895 599 574 577 560 467 463 368 599 1000 1000 1000 527 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -447 0 obj +484 0 obj << /Length1 3280 /Length 2112 /Filter [/FlateDecode] @@ -29220,10 +34739,10 @@ x $W"k8 Vi<!N..Ͷ&W+uX:j Z;cO-/UFN6][)%r*ffRT6e|Q!gɝE/iR~L z!RSzd3T2hʱ$5EeM"FJh@|f #DA΄-VQˎAOqXG٧΄Y(YSBF-!c^vua[0CaaE—c]GZD>&Vk}[DR]hߑz?+w_ endstream endobj -448 0 obj +485 0 obj << /Type /FontDescriptor /FontName /AAAAAD+mplus1mn-regular -/FontFile2 447 0 R +/FontFile2 484 0 R /FontBBox [0 -230 1000 860] /Flags 4 /StemV 0 @@ -29234,7 +34753,7 @@ endobj /XHeight 0 >> endobj -449 0 obj +486 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -29244,467 +34763,504 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -450 0 obj +487 0 obj [1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 1000 1000 1000 500 500 1000 500 500 500 500 500 1000 1000 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj xref -0 451 +0 488 0000000000 65535 f 0000000015 00000 n 0000000264 00000 n 0000000467 00000 n -0000000675 00000 n -0000000726 00000 n -0000000880 00000 n -0000001124 00000 n -0000001302 00000 n -0000001469 00000 n -0000032687 00000 n -0000033465 00000 n -0000066050 00000 n -0000066848 00000 n -0000072025 00000 n -0000072311 00000 n -0000074743 00000 n -0000074980 00000 n -0000075023 00000 n -0000075072 00000 n -0000075154 00000 n -0000075327 00000 n -0000075382 00000 n -0000075557 00000 n -0000075601 00000 n -0000087803 00000 n -0000088064 00000 n -0000088107 00000 n -0000088162 00000 n -0000088205 00000 n -0000088370 00000 n -0000088425 00000 n -0000088600 00000 n -0000088656 00000 n -0000088711 00000 n -0000088884 00000 n -0000088939 00000 n -0000088994 00000 n -0000089050 00000 n -0000089106 00000 n -0000089161 00000 n -0000106910 00000 n -0000107177 00000 n -0000107220 00000 n -0000107275 00000 n -0000107330 00000 n -0000107385 00000 n -0000107440 00000 n -0000107601 00000 n -0000107657 00000 n -0000107713 00000 n -0000108022 00000 n -0000108297 00000 n -0000108353 00000 n -0000108409 00000 n -0000124554 00000 n -0000124828 00000 n -0000124871 00000 n -0000124915 00000 n -0000124970 00000 n -0000125131 00000 n -0000125186 00000 n -0000125242 00000 n -0000125297 00000 n -0000125352 00000 n -0000125513 00000 n -0000125569 00000 n -0000125625 00000 n -0000125681 00000 n -0000144665 00000 n -0000144939 00000 n -0000144994 00000 n -0000145155 00000 n -0000145210 00000 n -0000145265 00000 n -0000145321 00000 n -0000145377 00000 n -0000145538 00000 n -0000145593 00000 n -0000145649 00000 n -0000145705 00000 n -0000146015 00000 n -0000163757 00000 n -0000164031 00000 n -0000164074 00000 n -0000164129 00000 n -0000164184 00000 n -0000164539 00000 n -0000164594 00000 n -0000164649 00000 n -0000164812 00000 n -0000164867 00000 n -0000164922 00000 n -0000164978 00000 n -0000165134 00000 n -0000165190 00000 n -0000180790 00000 n -0000181073 00000 n -0000181224 00000 n -0000181279 00000 n -0000181334 00000 n -0000181390 00000 n -0000181446 00000 n -0000181610 00000 n -0000181666 00000 n -0000181844 00000 n -0000181901 00000 n -0000181957 00000 n -0000182014 00000 n -0000199793 00000 n -0000200079 00000 n -0000200124 00000 n -0000200282 00000 n -0000200328 00000 n -0000200490 00000 n -0000200548 00000 n -0000200605 00000 n -0000200945 00000 n -0000201002 00000 n -0000201060 00000 n -0000201118 00000 n -0000201282 00000 n -0000201340 00000 n -0000217180 00000 n -0000217419 00000 n -0000217464 00000 n -0000217521 00000 n -0000217567 00000 n -0000217882 00000 n -0000217940 00000 n -0000238206 00000 n -0000238471 00000 n -0000238632 00000 n -0000238689 00000 n -0000238735 00000 n -0000238903 00000 n -0000260570 00000 n -0000260851 00000 n -0000261018 00000 n -0000261187 00000 n -0000261358 00000 n -0000261517 00000 n -0000261575 00000 n -0000283238 00000 n -0000283527 00000 n -0000283675 00000 n -0000283822 00000 n -0000283991 00000 n -0000284142 00000 n -0000284281 00000 n -0000284339 00000 n -0000306997 00000 n -0000307286 00000 n -0000307434 00000 n -0000307581 00000 n -0000307730 00000 n -0000307881 00000 n -0000308020 00000 n -0000329990 00000 n -0000330279 00000 n -0000330336 00000 n -0000330504 00000 n -0000330671 00000 n -0000330841 00000 n -0000331013 00000 n -0000331173 00000 n -0000353310 00000 n -0000353583 00000 n -0000353640 00000 n -0000353811 00000 n -0000353982 00000 n -0000354148 00000 n -0000375264 00000 n -0000375553 00000 n -0000375710 00000 n -0000375859 00000 n -0000376015 00000 n -0000376072 00000 n -0000376226 00000 n -0000376283 00000 n -0000376452 00000 n -0000389611 00000 n -0000389900 00000 n -0000390069 00000 n -0000390232 00000 n -0000390278 00000 n -0000390335 00000 n -0000390657 00000 n -0000390826 00000 n -0000390986 00000 n -0000391150 00000 n -0000391294 00000 n -0000391439 00000 n -0000391604 00000 n -0000391760 00000 n -0000391918 00000 n -0000392065 00000 n -0000392227 00000 n -0000392369 00000 n -0000392534 00000 n -0000392678 00000 n -0000392835 00000 n -0000392981 00000 n -0000393137 00000 n -0000393282 00000 n -0000393447 00000 n -0000393591 00000 n -0000393750 00000 n -0000393898 00000 n -0000394056 00000 n -0000394203 00000 n -0000394359 00000 n -0000394504 00000 n -0000394664 00000 n -0000394813 00000 n -0000394971 00000 n -0000395118 00000 n -0000395284 00000 n -0000395429 00000 n -0000395598 00000 n -0000395746 00000 n -0000395907 00000 n -0000396057 00000 n -0000396222 00000 n -0000396366 00000 n -0000396536 00000 n -0000396685 00000 n -0000396844 00000 n -0000396992 00000 n -0000397151 00000 n -0000397299 00000 n -0000397465 00000 n -0000397610 00000 n -0000397770 00000 n -0000397919 00000 n -0000398078 00000 n -0000398226 00000 n -0000398391 00000 n -0000398535 00000 n -0000398707 00000 n -0000398858 00000 n -0000399019 00000 n -0000399169 00000 n -0000399327 00000 n -0000399474 00000 n -0000399639 00000 n -0000399783 00000 n -0000399953 00000 n -0000400102 00000 n -0000400263 00000 n -0000400413 00000 n -0000400573 00000 n -0000400722 00000 n -0000400889 00000 n -0000401035 00000 n -0000401207 00000 n -0000401358 00000 n -0000401518 00000 n -0000401667 00000 n -0000401825 00000 n -0000401972 00000 n -0000402137 00000 n -0000402281 00000 n -0000402439 00000 n -0000402576 00000 n -0000402724 00000 n -0000402862 00000 n -0000403019 00000 n -0000403155 00000 n -0000403297 00000 n -0000403429 00000 n -0000403599 00000 n -0000403748 00000 n -0000403907 00000 n -0000404056 00000 n -0000404225 00000 n -0000404373 00000 n -0000404535 00000 n -0000404678 00000 n -0000404848 00000 n -0000404997 00000 n -0000405156 00000 n -0000405305 00000 n -0000405474 00000 n -0000405622 00000 n -0000405784 00000 n -0000405927 00000 n -0000406097 00000 n -0000406246 00000 n -0000406405 00000 n -0000406554 00000 n -0000406711 00000 n -0000406857 00000 n -0000407027 00000 n -0000407176 00000 n -0000407341 00000 n -0000407485 00000 n -0000407656 00000 n -0000407806 00000 n -0000407965 00000 n -0000408114 00000 n -0000408273 00000 n -0000408421 00000 n -0000408592 00000 n -0000408742 00000 n -0000408904 00000 n -0000409048 00000 n -0000409219 00000 n -0000409369 00000 n -0000409528 00000 n -0000409677 00000 n -0000409836 00000 n -0000409984 00000 n -0000410154 00000 n -0000410303 00000 n -0000410458 00000 n -0000410602 00000 n -0000410773 00000 n -0000410923 00000 n -0000411084 00000 n -0000411235 00000 n -0000411406 00000 n -0000411556 00000 n -0000411727 00000 n -0000411877 00000 n -0000412052 00000 n -0000412206 00000 n -0000412374 00000 n -0000412521 00000 n -0000412687 00000 n -0000412843 00000 n -0000413025 00000 n -0000413185 00000 n -0000413353 00000 n -0000413499 00000 n -0000413663 00000 n -0000413805 00000 n -0000413973 00000 n -0000414119 00000 n -0000414255 00000 n -0000414392 00000 n -0000414543 00000 n -0000414672 00000 n -0000414826 00000 n -0000414958 00000 n -0000415123 00000 n -0000415266 00000 n -0000415430 00000 n -0000415572 00000 n -0000415747 00000 n -0000415900 00000 n -0000416185 00000 n -0000416263 00000 n -0000416427 00000 n -0000416618 00000 n -0000416846 00000 n -0000417063 00000 n -0000417233 00000 n -0000417450 00000 n -0000417704 00000 n -0000417877 00000 n -0000418058 00000 n -0000418319 00000 n -0000418504 00000 n -0000418685 00000 n -0000418949 00000 n -0000419135 00000 n -0000419317 00000 n -0000419621 00000 n -0000419798 00000 n -0000419983 00000 n -0000420287 00000 n -0000420476 00000 n -0000420675 00000 n -0000420857 00000 n -0000421138 00000 n -0000421324 00000 n -0000421506 00000 n -0000421810 00000 n -0000421988 00000 n -0000422187 00000 n -0000422368 00000 n -0000422677 00000 n -0000422866 00000 n -0000423065 00000 n -0000423247 00000 n -0000423544 00000 n -0000423734 00000 n -0000423933 00000 n -0000424114 00000 n -0000424422 00000 n -0000424616 00000 n -0000424820 00000 n -0000425005 00000 n -0000425358 00000 n -0000425552 00000 n -0000425743 00000 n -0000425928 00000 n -0000426244 00000 n -0000426437 00000 n -0000426640 00000 n -0000426825 00000 n -0000427201 00000 n -0000427395 00000 n -0000427599 00000 n -0000427798 00000 n -0000427983 00000 n -0000428367 00000 n -0000428560 00000 n -0000428763 00000 n -0000428963 00000 n -0000429148 00000 n -0000429537 00000 n -0000429719 00000 n -0000429912 00000 n -0000430113 00000 n -0000430299 00000 n -0000430566 00000 n -0000430761 00000 n -0000430966 00000 n -0000431153 00000 n -0000431381 00000 n -0000431583 00000 n -0000431760 00000 n -0000431985 00000 n -0000432229 00000 n -0000432410 00000 n -0000432599 00000 n -0000432796 00000 n -0000433004 00000 n -0000433176 00000 n -0000433364 00000 n -0000433596 00000 n -0000433769 00000 n -0000433983 00000 n -0000434335 00000 n -0000442203 00000 n -0000442419 00000 n -0000443782 00000 n -0000444851 00000 n -0000452323 00000 n -0000452544 00000 n -0000453907 00000 n -0000454987 00000 n -0000458248 00000 n -0000458474 00000 n -0000459837 00000 n -0000460953 00000 n -0000463156 00000 n -0000463370 00000 n -0000464733 00000 n +0000000699 00000 n +0000000750 00000 n +0000000904 00000 n +0000001148 00000 n +0000001326 00000 n +0000001493 00000 n +0000032711 00000 n +0000033489 00000 n +0000066074 00000 n +0000066872 00000 n +0000076303 00000 n +0000076669 00000 n +0000079101 00000 n +0000079338 00000 n +0000079381 00000 n +0000079430 00000 n +0000079512 00000 n +0000079685 00000 n +0000079740 00000 n +0000079915 00000 n +0000079959 00000 n +0000092161 00000 n +0000092422 00000 n +0000092465 00000 n +0000092520 00000 n +0000092563 00000 n +0000092728 00000 n +0000092783 00000 n +0000092958 00000 n +0000093014 00000 n +0000093069 00000 n +0000093242 00000 n +0000093297 00000 n +0000093352 00000 n +0000093408 00000 n +0000093464 00000 n +0000093519 00000 n +0000111268 00000 n +0000111535 00000 n +0000111578 00000 n +0000111633 00000 n +0000111688 00000 n +0000111743 00000 n +0000111798 00000 n +0000111959 00000 n +0000112015 00000 n +0000112071 00000 n +0000112380 00000 n +0000112730 00000 n +0000112786 00000 n +0000112842 00000 n +0000128987 00000 n +0000129261 00000 n +0000129304 00000 n +0000129348 00000 n +0000129403 00000 n +0000129564 00000 n +0000129619 00000 n +0000129675 00000 n +0000129730 00000 n +0000129785 00000 n +0000129946 00000 n +0000130002 00000 n +0000130058 00000 n +0000130114 00000 n +0000149098 00000 n +0000149372 00000 n +0000149427 00000 n +0000149588 00000 n +0000149643 00000 n +0000149698 00000 n +0000149754 00000 n +0000149810 00000 n +0000149971 00000 n +0000150026 00000 n +0000150082 00000 n +0000150138 00000 n +0000150448 00000 n +0000168190 00000 n +0000168464 00000 n +0000168507 00000 n +0000168562 00000 n +0000168617 00000 n +0000168961 00000 n +0000169016 00000 n +0000169071 00000 n +0000169234 00000 n +0000169289 00000 n +0000169344 00000 n +0000169400 00000 n +0000169556 00000 n +0000169612 00000 n +0000185212 00000 n +0000185495 00000 n +0000185646 00000 n +0000185701 00000 n +0000185756 00000 n +0000185812 00000 n +0000185868 00000 n +0000186032 00000 n +0000186088 00000 n +0000186266 00000 n +0000186323 00000 n +0000186379 00000 n +0000186436 00000 n +0000204215 00000 n +0000204501 00000 n +0000204546 00000 n +0000204704 00000 n +0000204750 00000 n +0000204912 00000 n +0000204970 00000 n +0000205027 00000 n +0000205367 00000 n +0000205424 00000 n +0000205482 00000 n +0000205540 00000 n +0000205704 00000 n +0000205762 00000 n +0000221602 00000 n +0000221841 00000 n +0000221886 00000 n +0000221943 00000 n +0000221989 00000 n +0000222327 00000 n +0000222385 00000 n +0000242651 00000 n +0000242916 00000 n +0000243077 00000 n +0000243134 00000 n +0000243180 00000 n +0000243348 00000 n +0000265015 00000 n +0000265296 00000 n +0000265463 00000 n +0000265632 00000 n +0000265803 00000 n +0000265962 00000 n +0000266020 00000 n +0000287683 00000 n +0000287972 00000 n +0000288120 00000 n +0000288267 00000 n +0000288436 00000 n +0000288587 00000 n +0000288726 00000 n +0000288784 00000 n +0000311442 00000 n +0000311731 00000 n +0000311879 00000 n +0000312026 00000 n +0000312175 00000 n +0000312326 00000 n +0000312465 00000 n +0000334435 00000 n +0000334724 00000 n +0000334781 00000 n +0000334949 00000 n +0000335116 00000 n +0000335286 00000 n +0000335458 00000 n +0000335618 00000 n +0000357126 00000 n +0000357391 00000 n +0000357448 00000 n +0000357619 00000 n +0000357788 00000 n +0000380679 00000 n +0000380976 00000 n +0000381122 00000 n +0000381293 00000 n +0000381450 00000 n +0000381590 00000 n +0000381767 00000 n +0000381825 00000 n +0000381990 00000 n +0000402536 00000 n +0000402809 00000 n +0000402854 00000 n +0000403036 00000 n +0000403176 00000 n +0000403222 00000 n +0000403386 00000 n +0000425253 00000 n +0000425534 00000 n +0000425696 00000 n +0000425742 00000 n +0000426117 00000 n +0000426286 00000 n +0000426453 00000 n +0000426624 00000 n +0000445811 00000 n +0000446100 00000 n +0000446243 00000 n +0000446300 00000 n +0000446346 00000 n +0000446515 00000 n +0000446675 00000 n +0000446838 00000 n +0000447003 00000 n +0000447060 00000 n +0000463034 00000 n +0000463315 00000 n +0000463361 00000 n +0000463530 00000 n +0000463690 00000 n +0000463747 00000 n +0000463918 00000 n +0000464094 00000 n +0000464238 00000 n +0000464383 00000 n +0000464548 00000 n +0000464704 00000 n +0000464862 00000 n +0000465009 00000 n +0000465171 00000 n +0000465313 00000 n +0000465478 00000 n +0000465622 00000 n +0000465779 00000 n +0000465925 00000 n +0000466081 00000 n +0000466226 00000 n +0000466391 00000 n +0000466535 00000 n +0000466694 00000 n +0000466842 00000 n +0000467000 00000 n +0000467147 00000 n +0000467303 00000 n +0000467448 00000 n +0000467608 00000 n +0000467757 00000 n +0000467915 00000 n +0000468062 00000 n +0000468228 00000 n +0000468373 00000 n +0000468542 00000 n +0000468690 00000 n +0000468851 00000 n +0000469001 00000 n +0000469167 00000 n +0000469312 00000 n +0000469482 00000 n +0000469631 00000 n +0000469790 00000 n +0000469938 00000 n +0000470097 00000 n +0000470245 00000 n +0000470412 00000 n +0000470558 00000 n +0000470718 00000 n +0000470867 00000 n +0000471026 00000 n +0000471174 00000 n +0000471339 00000 n +0000471483 00000 n +0000471655 00000 n +0000471806 00000 n +0000471967 00000 n +0000472117 00000 n +0000472275 00000 n +0000472422 00000 n +0000472587 00000 n +0000472731 00000 n +0000472901 00000 n +0000473050 00000 n +0000473211 00000 n +0000473361 00000 n +0000473521 00000 n +0000473670 00000 n +0000473837 00000 n +0000473983 00000 n +0000474155 00000 n +0000474306 00000 n +0000474466 00000 n +0000474615 00000 n +0000474773 00000 n +0000474920 00000 n +0000475085 00000 n +0000475229 00000 n +0000475387 00000 n +0000475524 00000 n +0000475672 00000 n +0000475810 00000 n +0000475967 00000 n +0000476103 00000 n +0000476246 00000 n +0000476379 00000 n +0000476549 00000 n +0000476698 00000 n +0000476857 00000 n +0000477006 00000 n +0000477175 00000 n +0000477323 00000 n +0000477486 00000 n +0000477630 00000 n +0000477800 00000 n +0000477949 00000 n +0000478108 00000 n +0000478257 00000 n +0000478426 00000 n +0000478574 00000 n +0000478737 00000 n +0000478881 00000 n +0000479051 00000 n +0000479200 00000 n +0000479359 00000 n +0000479508 00000 n +0000479665 00000 n +0000479811 00000 n +0000479981 00000 n +0000480130 00000 n +0000480296 00000 n +0000480441 00000 n +0000480612 00000 n +0000480762 00000 n +0000480921 00000 n +0000481070 00000 n +0000481229 00000 n +0000481377 00000 n +0000481548 00000 n +0000481698 00000 n +0000481861 00000 n +0000482006 00000 n +0000482177 00000 n +0000482327 00000 n +0000482486 00000 n +0000482635 00000 n +0000482794 00000 n +0000482942 00000 n +0000483112 00000 n +0000483261 00000 n +0000483417 00000 n +0000483562 00000 n +0000483733 00000 n +0000483883 00000 n +0000484044 00000 n +0000484195 00000 n +0000484366 00000 n +0000484516 00000 n +0000484687 00000 n +0000484837 00000 n +0000485012 00000 n +0000485166 00000 n +0000485334 00000 n +0000485481 00000 n +0000485647 00000 n +0000485803 00000 n +0000485985 00000 n +0000486145 00000 n +0000486313 00000 n +0000486459 00000 n +0000486623 00000 n +0000486765 00000 n +0000486933 00000 n +0000487079 00000 n +0000487215 00000 n +0000487352 00000 n +0000487503 00000 n +0000487632 00000 n +0000487786 00000 n +0000487918 00000 n +0000488077 00000 n +0000488214 00000 n +0000488389 00000 n +0000488542 00000 n +0000488718 00000 n +0000488872 00000 n +0000489036 00000 n +0000489178 00000 n +0000489353 00000 n +0000489506 00000 n +0000489675 00000 n +0000489822 00000 n +0000489987 00000 n +0000490130 00000 n +0000490313 00000 n +0000490474 00000 n +0000490759 00000 n +0000490837 00000 n +0000491001 00000 n +0000491192 00000 n +0000491420 00000 n +0000491637 00000 n +0000491807 00000 n +0000492024 00000 n +0000492278 00000 n +0000492451 00000 n +0000492632 00000 n +0000492893 00000 n +0000493078 00000 n +0000493259 00000 n +0000493523 00000 n +0000493709 00000 n +0000493891 00000 n +0000494195 00000 n +0000494372 00000 n +0000494557 00000 n +0000494861 00000 n +0000495050 00000 n +0000495249 00000 n +0000495431 00000 n +0000495712 00000 n +0000495898 00000 n +0000496080 00000 n +0000496384 00000 n +0000496562 00000 n +0000496761 00000 n +0000496942 00000 n +0000497251 00000 n +0000497440 00000 n +0000497639 00000 n +0000497821 00000 n +0000498118 00000 n +0000498308 00000 n +0000498507 00000 n +0000498688 00000 n +0000498996 00000 n +0000499190 00000 n +0000499394 00000 n +0000499579 00000 n +0000499932 00000 n +0000500126 00000 n +0000500317 00000 n +0000500502 00000 n +0000500818 00000 n +0000501011 00000 n +0000501214 00000 n +0000501399 00000 n +0000501775 00000 n +0000501969 00000 n +0000502173 00000 n +0000502372 00000 n +0000502557 00000 n +0000502941 00000 n +0000503134 00000 n +0000503337 00000 n +0000503537 00000 n +0000503722 00000 n +0000504111 00000 n +0000504293 00000 n +0000504486 00000 n +0000504687 00000 n +0000504873 00000 n +0000505140 00000 n +0000505335 00000 n +0000505540 00000 n +0000505727 00000 n +0000505955 00000 n +0000506157 00000 n +0000506334 00000 n +0000506559 00000 n +0000506803 00000 n +0000506984 00000 n +0000507173 00000 n +0000507370 00000 n +0000507578 00000 n +0000507750 00000 n +0000507939 00000 n +0000508135 00000 n +0000508352 00000 n +0000508573 00000 n +0000508757 00000 n +0000508974 00000 n +0000509178 00000 n +0000509355 00000 n +0000509601 00000 n +0000510004 00000 n +0000517872 00000 n +0000518088 00000 n +0000519451 00000 n +0000520520 00000 n +0000527992 00000 n +0000528213 00000 n +0000529576 00000 n +0000530656 00000 n +0000533917 00000 n +0000534143 00000 n +0000535506 00000 n +0000536622 00000 n +0000538825 00000 n +0000539039 00000 n +0000540402 00000 n trailer -<< /Size 451 +<< /Size 488 /Root 2 0 R /Info 1 0 R >> startxref -465858 +541527 %%EOF diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 6e9ff7c86..c5b52d717 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -1,4 +1,29 @@ + create table dictionary ( + name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, + dictionary_second_level integer, + dictionary_type varchar(255), + primary key (name) + ) engine=InnoDB; + + create table dictionary_elements ( + name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, + description varchar(255), + short_name varchar(255) not null, + subdictionary_id varchar(255) not null, + type varchar(255) not null, + dictionary_id varchar(255), + primary key (name) + ) engine=InnoDB; + create table hibernate_sequence ( next_val bigint ) engine=InnoDB; @@ -15,8 +40,25 @@ primary key (id) ) engine=InnoDB; + create table loop_templates ( + name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, + blueprint_yaml MEDIUMTEXT not null, + maximum_instances_allowed integer, + svg_representation MEDIUMTEXT, + service_uuid varchar(255), + primary key (name) + ) engine=InnoDB; + create table loops ( name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, blueprint_yaml MEDIUMTEXT not null, dcae_blueprint_id varchar(255), dcae_deployment_id varchar(255), @@ -24,6 +66,7 @@ global_properties_json json, last_computed_state varchar(255) not null, svg_representation MEDIUMTEXT, + loop_template_name varchar(255), service_uuid varchar(255), primary key (name) ) engine=InnoDB; @@ -34,13 +77,33 @@ primary key (loop_id, microservicepolicy_id) ) engine=InnoDB; + create table micro_service_models ( + name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, + blueprint_yaml varchar(255) not null, + policy_type varchar(255) not null, + policy_model_type varchar(255), + policy_model_version varchar(255), + primary key (name) + ) engine=InnoDB; + create table micro_service_policies ( name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, + context varchar(255), + device_type_scope varchar(255), json_representation json not null, - model_type varchar(255) not null, + policy_model_type varchar(255) not null, policy_tosca MEDIUMTEXT not null, properties json, shared bit not null, + micro_service_model_id varchar(255), primary key (name) ) engine=InnoDB; @@ -49,9 +112,24 @@ configurations_json json, json_representation json not null, loop_id varchar(255) not null, + policy_model_type varchar(255), + policy_model_version varchar(255), primary key (name) ) engine=InnoDB; + create table policy_models ( + policy_model_type varchar(255) not null, + version varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, + policy_acronym varchar(255), + policy_tosca MEDIUMTEXT, + policy_variant varchar(255), + primary key (policy_model_type, version) + ) engine=InnoDB; + create table services ( service_uuid varchar(255) not null, name varchar(255) not null, @@ -61,11 +139,36 @@ primary key (service_uuid) ) engine=InnoDB; + create table templates_microservicemodels ( + loop_template_name varchar(255) not null, + micro_service_model_name varchar(255) not null, + flow_order integer not null, + primary key (loop_template_name, micro_service_model_name) + ) engine=InnoDB; + + alter table dictionary_elements + add constraint UK_qxkrvsrhp26m60apfvxphpl3d unique (short_name); + + alter table dictionary_elements + add constraint FKn87bpgpm9i56w7uko585rbkgn + foreign key (dictionary_id) + references dictionary (name); + alter table loop_logs add constraint FK1j0cda46aickcaoxqoo34khg2 foreign key (loop_id) references loops (name); + alter table loop_templates + add constraint FKn692dk6281wvp1o95074uacn6 + foreign key (service_uuid) + references services (service_uuid); + + alter table loops + add constraint FK844uwy82wt0l66jljkjqembpj + foreign key (loop_template_name) + references loop_templates (name); + alter table loops add constraint FK4b9wnqopxogwek014i1shqw7w foreign key (service_uuid) @@ -81,7 +184,32 @@ foreign key (loop_id) references loops (name); + alter table micro_service_models + add constraint FKlkcffpnuavcg65u5o4tr66902 + foreign key (policy_model_type, policy_model_version) + references policy_models (policy_model_type, version); + + alter table micro_service_policies + add constraint FK5p7lipy9m2v7d4n3fvlclwse + foreign key (micro_service_model_id) + references micro_service_models (name); + alter table operational_policies add constraint FK1ddoggk9ni2bnqighv6ecmuwu foreign key (loop_id) references loops (name); + + alter table operational_policies + add constraint FKlsyhfkoqvkwj78ofepxhoctip + foreign key (policy_model_type, policy_model_version) + references policy_models (policy_model_type, version); + + alter table templates_microservicemodels + add constraint FKq2gqg5q9jrkx8voosn7x5plqo + foreign key (loop_template_name) + references loop_templates (name); + + alter table templates_microservicemodels + add constraint FKphn3m81suxavmj9c4u06cchju + foreign key (micro_service_model_name) + references micro_service_models (name); diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index a68914f22..e3f507272 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -20,13 +20,31 @@ USE `cldsdb4`; +-- +-- Dumping data for table `dictionary` +-- + +LOCK TABLES `dictionary` WRITE; +/*!40000 ALTER TABLE `dictionary` DISABLE KEYS */; +/*!40000 ALTER TABLE `dictionary` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `dictionary_elements` +-- + +LOCK TABLES `dictionary_elements` WRITE; +/*!40000 ALTER TABLE `dictionary_elements` DISABLE KEYS */; +/*!40000 ALTER TABLE `dictionary_elements` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `hibernate_sequence` -- LOCK TABLES `hibernate_sequence` WRITE; /*!40000 ALTER TABLE `hibernate_sequence` DISABLE KEYS */; -INSERT INTO `hibernate_sequence` VALUES (3); +INSERT INTO `hibernate_sequence` VALUES (4); /*!40000 ALTER TABLE `hibernate_sequence` ENABLE KEYS */; UNLOCK TABLES; @@ -39,15 +57,24 @@ LOCK TABLES `loop_logs` WRITE; /*!40000 ALTER TABLE `loop_logs` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Dumping data for table `loop_templates` +-- + +LOCK TABLES `loop_templates` WRITE; +/*!40000 ALTER TABLE `loop_templates` DISABLE KEYS */; +/*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `loops` -- LOCK TABLES `loops` WRITE; /*!40000 ALTER TABLE `loops` DISABLE KEYS */; -INSERT INTO `loops` VALUES ('LOOP_yHsgu_v1_0_ResourceInstanceName1_tca','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-cea8ab39-c2a6-467c-8392-f5940cb06903',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"location_id\": \"\",\n \"service_id\": \"\",\n \"policy_id\": \"TCA_yHsgu_v1_0_ResourceInstanceName1_tca\"\n }\n}','DESIGN','{\n \"serviceDetails\": {\n \"serviceType\": \"\",\n \"namingPolicy\": \"\",\n \"environmentContext\": \"General_Revenue-Bearing\",\n \"serviceEcompNaming\": \"true\",\n \"serviceRole\": \"\",\n \"name\": \"vLoadBalancerMS\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n \"ecompGeneratedNaming\": \"true\",\n \"category\": \"Network L4+\",\n \"type\": \"Service\",\n \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n \"instantiationType\": \"A-la-carte\"\n },\n \"resourceDetails\": {\n \"CP\": {},\n \"VL\": {},\n \"VF\": {\n \"vLoadBalancerMS 0\": {\n \"resourceVendor\": \"Test\",\n \"resourceVendorModelNumber\": \"\",\n \"name\": \"vLoadBalancerMS\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n \"subcategory\": \"Load Balancer\",\n \"category\": \"Application L4+\",\n \"type\": \"VF\",\n \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n \"version\": \"1.0\",\n \"resourceVendorRelease\": \"1.0\",\n \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\"\n }\n },\n \"CR\": {},\n \"VFC\": {},\n \"PNF\": {},\n \"Service\": {},\n \"CVFC\": {},\n \"Service Proxy\": {},\n \"Configuration\": {},\n \"AllottedResource\": {},\n \"VFModule\": {\n \"Vloadbalancerms..vpkg..module-1\": {\n \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vpkg\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vdns..module-3\": {\n \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vdns\",\n \"max_vf_module_instances\": 50,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..base_template..module-0\": {\n \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"min_vf_module_instances\": 1,\n \"vf_module_label\": \"base_template\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Base\",\n \"isBase\": true,\n \"initial_count\": 1,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vlb..module-2\": {\n \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vlb\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n }\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VESTCAOperationalPolicy'); -INSERT INTO `loops` VALUES ('LOOP_yHsgu_v1_0_ResourceInstanceName1_tca_3','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-4ebc7a81-b235-4d45-84ad-5e9497f761bb',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_yHsgu_v1_0_ResourceInstanceName1_tca_3\"\n }\n}','DESIGN','{\n \"serviceDetails\": {\n \"serviceType\": \"\",\n \"namingPolicy\": \"\",\n \"environmentContext\": \"General_Revenue-Bearing\",\n \"serviceEcompNaming\": \"true\",\n \"serviceRole\": \"\",\n \"name\": \"vLoadBalancerMS\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n \"ecompGeneratedNaming\": \"true\",\n \"category\": \"Network L4+\",\n \"type\": \"Service\",\n \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n \"instantiationType\": \"A-la-carte\"\n },\n \"resourceDetails\": {\n \"CP\": {},\n \"VL\": {},\n \"VF\": {\n \"vLoadBalancerMS 0\": {\n \"resourceVendor\": \"Test\",\n \"resourceVendorModelNumber\": \"\",\n \"name\": \"vLoadBalancerMS\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n \"subcategory\": \"Load Balancer\",\n \"category\": \"Application L4+\",\n \"type\": \"VF\",\n \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n \"version\": \"1.0\",\n \"resourceVendorRelease\": \"1.0\",\n \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\"\n }\n },\n \"CR\": {},\n \"VFC\": {},\n \"PNF\": {},\n \"Service\": {},\n \"CVFC\": {},\n \"Service Proxy\": {},\n \"Configuration\": {},\n \"AllottedResource\": {},\n \"VFModule\": {\n \"Vloadbalancerms..vpkg..module-1\": {\n \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vpkg\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vdns..module-3\": {\n \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vdns\",\n \"max_vf_module_instances\": 50,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..base_template..module-0\": {\n \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"min_vf_module_instances\": 1,\n \"vf_module_label\": \"base_template\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Base\",\n \"isBase\": true,\n \"initial_count\": 1,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vlb..module-2\": {\n \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vlb\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n }\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VEStca_k8sOperationalPolicy'); -INSERT INTO `loops` VALUES ('LOOP_yHsgu_v1_0_ResourceInstanceName2_tca_2','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-f3f5a314-25aa-46c8-87c2-65686b510940',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n \"consul_host\": \"consul-server.onap\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-servicel\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_yHsgu_v1_0_ResourceInstanceName2_tca_2\"\n }\n}','DESIGN','{\n \"serviceDetails\": {\n \"serviceType\": \"\",\n \"namingPolicy\": \"\",\n \"environmentContext\": \"General_Revenue-Bearing\",\n \"serviceEcompNaming\": \"true\",\n \"serviceRole\": \"\",\n \"name\": \"vLoadBalancerMS\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n \"ecompGeneratedNaming\": \"true\",\n \"category\": \"Network L4+\",\n \"type\": \"Service\",\n \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n \"instantiationType\": \"A-la-carte\"\n },\n \"resourceDetails\": {\n \"CP\": {},\n \"VL\": {},\n \"VF\": {\n \"vLoadBalancerMS 0\": {\n \"resourceVendor\": \"Test\",\n \"resourceVendorModelNumber\": \"\",\n \"name\": \"vLoadBalancerMS\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n \"subcategory\": \"Load Balancer\",\n \"category\": \"Application L4+\",\n \"type\": \"VF\",\n \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n \"version\": \"1.0\",\n \"resourceVendorRelease\": \"1.0\",\n \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\"\n }\n },\n \"CR\": {},\n \"VFC\": {},\n \"PNF\": {},\n \"Service\": {},\n \"CVFC\": {},\n \"Service Proxy\": {},\n \"Configuration\": {},\n \"AllottedResource\": {},\n \"VFModule\": {\n \"Vloadbalancerms..vpkg..module-1\": {\n \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vpkg\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vdns..module-3\": {\n \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vdns\",\n \"max_vf_module_instances\": 50,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..base_template..module-0\": {\n \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"min_vf_module_instances\": 1,\n \"vf_module_label\": \"base_template\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Base\",\n \"isBase\": true,\n \"initial_count\": 1,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vlb..module-2\": {\n \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vlb\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n }\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VEStca_k8sOperationalPolicy'); +INSERT INTO `loops` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca','','2020-01-16 11:40:15.417599','','2020-01-16 11:40:15.417599','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-18ab8a65-b4c0-4380-9f50-fb790fcb96e0',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"location_id\": \"\",\n \"service_id\": \"\",\n \"policy_id\": \"TCA_jkJJ0_v1_0_ResourceInstanceName1_tca\"\n }\n}','DESIGN','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VESTCAOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3','','2020-01-16 11:40:15.298873','','2020-01-16 11:40:15.298873','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-1a03e700-8c46-4c98-97cf-ca3212537216',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_jkJJ0_v1_0_ResourceInstanceName1_tca_3\"\n }\n}','DESIGN','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2','','2020-01-16 11:40:15.117933','','2020-01-16 11:40:15.117933','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-537599ec-0cce-4303-ab83-dbfb6145723a',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n \"consul_host\": \"consul-server.onap\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-servicel\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_jkJJ0_v1_0_ResourceInstanceName2_tca_2\"\n }\n}','DESIGN','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loops` ENABLE KEYS */; UNLOCK TABLES; @@ -57,21 +84,30 @@ UNLOCK TABLES; LOCK TABLES `loops_microservicepolicies` WRITE; /*!40000 ALTER TABLE `loops_microservicepolicies` DISABLE KEYS */; -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_yHsgu_v1_0_ResourceInstanceName1_tca','TCA_yHsgu_v1_0_ResourceInstanceName1_tca'); -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_yHsgu_v1_0_ResourceInstanceName1_tca_3','tca_k8s_yHsgu_v1_0_ResourceInstanceName1_tca_3'); -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_yHsgu_v1_0_ResourceInstanceName2_tca_2','tca_k8s_yHsgu_v1_0_ResourceInstanceName2_tca_2'); +INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca','TCA_jkJJ0_v1_0_ResourceInstanceName1_tca'); +INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3','tca_k8s_jkJJ0_v1_0_ResourceInstanceName1_tca_3'); +INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2','tca_k8s_jkJJ0_v1_0_ResourceInstanceName2_tca_2'); /*!40000 ALTER TABLE `loops_microservicepolicies` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Dumping data for table `micro_service_models` +-- + +LOCK TABLES `micro_service_models` WRITE; +/*!40000 ALTER TABLE `micro_service_models` DISABLE KEYS */; +/*!40000 ALTER TABLE `micro_service_models` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `micro_service_policies` -- LOCK TABLES `micro_service_policies` WRITE; /*!40000 ALTER TABLE `micro_service_policies` DISABLE KEYS */; -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_yHsgu_v1_0_ResourceInstanceName1_tca_3','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0'); -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_yHsgu_v1_0_ResourceInstanceName2_tca_2','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0'); -INSERT INTO `micro_service_policies` VALUES ('TCA_yHsgu_v1_0_ResourceInstanceName1_tca','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0'); +INSERT INTO `micro_service_policies` VALUES ('TCA_jkJJ0_v1_0_ResourceInstanceName1_tca','','2020-01-16 11:40:15.420567','','2020-01-16 11:40:15.420567',NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('tca_k8s_jkJJ0_v1_0_ResourceInstanceName1_tca_3','','2020-01-16 11:40:15.302285','','2020-01-16 11:40:15.302285',NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('tca_k8s_jkJJ0_v1_0_ResourceInstanceName2_tca_2','','2020-01-16 11:40:15.135898','','2020-01-16 11:40:15.135898',NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); /*!40000 ALTER TABLE `micro_service_policies` ENABLE KEYS */; UNLOCK TABLES; @@ -81,11 +117,39 @@ UNLOCK TABLES; LOCK TABLES `operational_policies` WRITE; /*!40000 ALTER TABLE `operational_policies` DISABLE KEYS */; -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_yHsgu_v1_0_ResourceInstanceName1_tca','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_yHsgu_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','LOOP_yHsgu_v1_0_ResourceInstanceName1_tca'); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_yHsgu_v1_0_ResourceInstanceName1_tca_3','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_yHsgu_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','LOOP_yHsgu_v1_0_ResourceInstanceName1_tca_3'); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_yHsgu_v1_0_ResourceInstanceName2_tca_2','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_yHsgu_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','LOOP_yHsgu_v1_0_ResourceInstanceName2_tca_2'); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_jkJJ0_v1_0_ResourceInstanceName1_tca','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_jkJJ0_v1_0_ResourceInstanceName1_tca_3','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_jkJJ0_v1_0_ResourceInstanceName2_tca_2','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2',NULL,NULL); /*!40000 ALTER TABLE `operational_policies` ENABLE KEYS */; UNLOCK TABLES; + +-- +-- Dumping data for table `policy_models` +-- + +LOCK TABLES `policy_models` WRITE; +/*!40000 ALTER TABLE `policy_models` DISABLE KEYS */; +/*!40000 ALTER TABLE `policy_models` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `services` +-- + +LOCK TABLES `services` WRITE; +/*!40000 ALTER TABLE `services` DISABLE KEYS */; +INSERT INTO `services` VALUES ('63cac700-ab9a-4115-a74f-7eac85e3fce0','vLoadBalancerMS','{\n \"CP\": {},\n \"VL\": {},\n \"VF\": {\n \"vLoadBalancerMS 0\": {\n \"resourceVendor\": \"Test\",\n \"name\": \"vLoadBalancerMS\",\n \"resourceVendorModelNumber\": \"\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n \"type\": \"VF\",\n \"category\": \"Application L4+\",\n \"subcategory\": \"Load Balancer\",\n \"version\": \"1.0\",\n \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\",\n \"resourceVendorRelease\": \"1.0\"\n }\n },\n \"CR\": {},\n \"VFC\": {},\n \"PNF\": {},\n \"Service\": {},\n \"CVFC\": {},\n \"Service Proxy\": {},\n \"Configuration\": {},\n \"AllottedResource\": {},\n \"VFModule\": {\n \"Vloadbalancerms..vpkg..module-1\": {\n \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vpkg\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vdns..module-3\": {\n \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vdns\",\n \"max_vf_module_instances\": 50,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..base_template..module-0\": {\n \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"min_vf_module_instances\": 1,\n \"vf_module_label\": \"base_template\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Base\",\n \"isBase\": true,\n \"initial_count\": 1,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vlb..module-2\": {\n \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vlb\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n }\n }\n}','{\n \"serviceType\": \"\",\n \"serviceRole\": \"\",\n \"description\": \"vLBMS\",\n \"type\": \"Service\",\n \"instantiationType\": \"A-la-carte\",\n \"namingPolicy\": \"\",\n \"serviceEcompNaming\": \"true\",\n \"environmentContext\": \"General_Revenue-Bearing\",\n \"name\": \"vLoadBalancerMS\",\n \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n \"ecompGeneratedNaming\": \"true\",\n \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n \"category\": \"Network L4+\"\n}'); +/*!40000 ALTER TABLE `services` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `templates_microservicemodels` +-- + +LOCK TABLES `templates_microservicemodels` WRITE; +/*!40000 ALTER TABLE `templates_microservicemodels` DISABLE KEYS */; +/*!40000 ALTER TABLE `templates_microservicemodels` ENABLE KEYS */; +UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; @@ -95,4 +159,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2019-09-11 16:01:22 +-- Dump completed on 2020-01-16 10:41:46 diff --git a/pom.xml b/pom.xml index 83bc1d06e..ba27daaed 100644 --- a/pom.xml +++ b/pom.xml @@ -259,6 +259,12 @@ org.apache.xmlgraphics batik-svggen 1.11 + + + xml-apis + xml-apis + + org.apache.xmlgraphics @@ -601,9 +607,9 @@ - de.jpdigital - hibernate52-ddl-maven-plugin - 2.2.0 + de.jpdigital + hibernate52-ddl-maven-plugin + 2.2.0 javax.xml.bind @@ -619,7 +625,7 @@ - org.onap.clamp.dao.model + org.onap.clamp MARIADB53 diff --git a/src/main/java/org/onap/clamp/clds/Application.java b/src/main/java/org/onap/clamp/clds/Application.java index e41140f5c..63320d2fe 100644 --- a/src/main/java/org/onap/clamp/clds/Application.java +++ b/src/main/java/org/onap/clamp/clds/Application.java @@ -58,6 +58,7 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.core.env.Environment; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @@ -65,13 +66,14 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @ComponentScan(basePackages = { "org.onap.clamp" }) @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class, - UserDetailsServiceAutoConfiguration.class }) + UserDetailsServiceAutoConfiguration.class }) @EnableJpaRepositories(basePackages = { "org.onap.clamp" }) @EntityScan(basePackages = { "org.onap.clamp" }) @EnableTransactionManagement @EnableConfigurationProperties @EnableAsync @EnableScheduling +@EnableJpaAuditing public class Application extends SpringBootServletInitializer { protected static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(Application.class); @@ -137,8 +139,6 @@ public class Application extends SpringBootServletInitializer { return tomcat; } - - private Connector createRedirectConnector(int redirectSecuredPort) { if (redirectSecuredPort <= 0) { eelfLogger.warn("HTTP port redirection to HTTPS is disabled because the HTTPS port is 0 (random port) or -1" @@ -159,7 +159,7 @@ public class Application extends SpringBootServletInitializer { if (env.getProperty("server.ssl.key-store") != null) { KeyStore keystore = KeyStore.getInstance(env.getProperty("server.ssl.key-store-type")); - String password = PassDecoder.decode(env.getProperty("server.ssl.key-store-password"), + String password = PassDecoder.decode(env.getProperty("server.ssl.key-store-password"), env.getProperty("clamp.config.keyFile")); String keyStore = env.getProperty("server.ssl.key-store"); InputStream is = ResourceFileUtil.getResourceAsStream(keyStore.replaceAll("classpath:", "")); diff --git a/src/main/java/org/onap/clamp/clds/ClampInUserAuditorAware.java b/src/main/java/org/onap/clamp/clds/ClampInUserAuditorAware.java new file mode 100644 index 000000000..d18e7ebf3 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/ClampInUserAuditorAware.java @@ -0,0 +1,46 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds; + +import java.util.Optional; + +import org.springframework.data.domain.AuditorAware; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +@Component +public class ClampInUserAuditorAware implements AuditorAware { + + @Override + public Optional getCurrentAuditor() { + if (SecurityContextHolder.getContext().getAuthentication() != null + && SecurityContextHolder.getContext().getAuthentication().getPrincipal() != null) { + return Optional.of(((UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()) + .getUsername()); + } + return Optional.of(""); + } + +} diff --git a/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java b/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java index 9e04bd084..3bbb8a0bc 100644 --- a/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java +++ b/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java @@ -153,7 +153,7 @@ public class ClampCadiFilter extends CadiFilter { URLDecoder.decode(certHeader, StandardCharsets.UTF_8.toString()).getBytes())); X509Certificate caCert = (X509Certificate) certificateFactory .generateCertificate(new ByteArrayInputStream( - ResourceFileUtil.getResourceAsString("clds/aaf/ssl/ca-certs.pem").getBytes())); + ResourceFileUtil.getResourceAsString("clds/aaf/ssl/ca-certs.pem").getBytes())); X509Certificate[] certifArray = ((X509Certificate[]) request .getAttribute("javax.servlet.request.X509Certificate")); diff --git a/src/main/java/org/onap/clamp/clds/model/CldsDictionary.java b/src/main/java/org/onap/clamp/clds/model/CldsDictionary.java deleted file mode 100644 index 35fbcec46..000000000 --- a/src/main/java/org/onap/clamp/clds/model/CldsDictionary.java +++ /dev/null @@ -1,159 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.clds.model; - -import com.google.gson.annotations.Expose; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents a CLDS Dictionary. - */ - -public class CldsDictionary { - - @Expose - private String dictionaryId; - @Expose - private String dictionaryName; - - @Expose - private String createdBy; - @Expose - private String updatedBy; - @Expose - private String lastUpdatedDate; - @Expose - private List cldsDictionaryItems = new ArrayList<>(); - - /** - * Get the dictionary ID. - * - * @return the dictionaryId - */ - public String getDictionaryId() { - return dictionaryId; - } - - /** - * Set the dictionary Id. - * - * @param dictionaryId the dictionaryId to set - */ - public void setDictionaryId(String dictionaryId) { - this.dictionaryId = dictionaryId; - } - - /** - * Get the dictionary name. - * - * @return the dictionaryName - */ - public String getDictionaryName() { - return dictionaryName; - } - - /** - * Set the dictionary name. - * - * @param dictionaryName the dictionaryName to set - */ - public void setDictionaryName(String dictionaryName) { - this.dictionaryName = dictionaryName; - } - - /** - * Get the createdBy info. - * - * @return the createdBy - */ - public String getCreatedBy() { - return createdBy; - } - - /** - * Set the createdBy info. - * - * @param createdBy the createdBy to set - */ - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - /** - * Get the updatedBy info. - * - * @return the updatedBy - */ - public String getUpdatedBy() { - return updatedBy; - } - - /** - * Set the updatedBy info. - * - * @param updatedby the updatedBy to set - */ - public void setUpdatedBy(String updatedby) { - updatedBy = updatedby; - } - - /** - * Get the last updated date. - * - * @return the lastUpdatedDate - */ - public String getLastUpdatedDate() { - return lastUpdatedDate; - } - - /** - * Set the last updated date. - * - * @param lastUpdatedDate the lastUpdatedDate to set - */ - public void setLastUpdatedDate(String lastUpdatedDate) { - this.lastUpdatedDate = lastUpdatedDate; - } - - /** - * Get all the dictionary items. - * - * @return the cldsDictionaryItems - */ - public List getCldsDictionaryItems() { - return cldsDictionaryItems; - } - - /** - * Set the whole dictionary items. - * - * @param cldsDictionaryItems the cldsDictionaryItems to set - */ - public void setCldsDictionaryItems(List cldsDictionaryItems) { - this.cldsDictionaryItems = cldsDictionaryItems; - } - -} diff --git a/src/main/java/org/onap/clamp/clds/model/CldsDictionaryItem.java b/src/main/java/org/onap/clamp/clds/model/CldsDictionaryItem.java deleted file mode 100644 index 1b79bdfa9..000000000 --- a/src/main/java/org/onap/clamp/clds/model/CldsDictionaryItem.java +++ /dev/null @@ -1,214 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.clds.model; - -import com.google.gson.annotations.Expose; - -/** - * Represents a CLDS Dictionary Item. - */ -public class CldsDictionaryItem { - - @Expose - private String dictElementId; - @Expose - private String dictionaryId; - @Expose - private String dictElementName; - @Expose - private String dictElementShortName; - @Expose - private String dictElementDesc; - @Expose - private String dictElementType; - @Expose - private String createdBy; - @Expose - private String updatedBy; - @Expose - private String lastUpdatedDate; - - /** - * Get the dictionary element id. - * - * @return the dictElementId - */ - public String getDictElementId() { - return dictElementId; - } - - /** - * Set the dictionary element id. - * - * @param dictElementId the dictElementId to set - */ - public void setDictElementId(String dictElementId) { - this.dictElementId = dictElementId; - } - - /** - * Get the dictionary id. - * - * @return the dictionaryId - */ - public String getDictionaryId() { - return dictionaryId; - } - - /** - * Set the dictionary id. - * - * @param dictionaryId the dictionaryId to set - */ - public void setDictionaryId(String dictionaryId) { - this.dictionaryId = dictionaryId; - } - - /** - * Get the dictionary name. - * - * @return the dictElementName - */ - public String getDictElementName() { - return dictElementName; - } - - /** - * Set the dictionary name. - * - * @param dictElementName the dictElementName to set - */ - public void setDictElementName(String dictElementName) { - this.dictElementName = dictElementName; - } - - /** - * Get the dictionary element short name. - * - * @return the dictElementShortName - */ - public String getDictElementShortName() { - return dictElementShortName; - } - - /** - * Set the dictionary element short name. - * - * @param dictElementShortName the dictElementShortName to set - */ - public void setDictElementShortName(String dictElementShortName) { - this.dictElementShortName = dictElementShortName; - } - - /** - * Get the dictionary element description. - * - * @return the dictElementDesc - */ - public String getDictElementDesc() { - return dictElementDesc; - } - - /** - * Set the dictionary element description. - * - * @param dictElementDesc the dictElementDesc to set - */ - public void setDictElementDesc(String dictElementDesc) { - this.dictElementDesc = dictElementDesc; - } - - /** - * Get the dictionary element type. - * - * @return the dictElementType - */ - public String getDictElementType() { - return dictElementType; - } - - /** - * Set the dictionary element type. - * - * @param dictElementType the dictElementType to set - */ - public void setDictElementType(String dictElementType) { - this.dictElementType = dictElementType; - } - - /** - * Get the createdBy info. - * - * @return the createdBy - */ - public String getCreatedBy() { - return createdBy; - } - - /** - * Set the createdBy info. - * - * @param createdBy the createdBy to set - */ - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - /** - * Get the updatedBy info. - * - * @return the updatedBy - */ - public String getUpdatedBy() { - return updatedBy; - } - - /** - * Set the updatedBy info. - * - * @param updatedby the updatedBy to set - */ - public void setUpdatedBy(String updatedby) { - updatedBy = updatedby; - } - - /** - * Get the last updated date. - * - * @return the lastUpdatedDate - */ - public String getLastUpdatedDate() { - return lastUpdatedDate; - } - - /** - * Set the last updated date. - * - * @param lastUpdatedDate the lastUpdatedDate to set - */ - public void setLastUpdatedDate(String lastUpdatedDate) { - this.lastUpdatedDate = lastUpdatedDate; - } - -} diff --git a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java index 43dd5f451..2e025ba7d 100644 --- a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java +++ b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java @@ -481,63 +481,6 @@ public class ToscaYamlToJsonConvertor { private void processDictionaryElements(JSONObject childObject, String dictionaryReference) { - /* - * if (dictionaryReference.contains("#")) { String[] dictionaryKeyArray = - * dictionaryReference - * .substring(dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11, - * dictionaryReference.length()) .split("#"); // We support only one # as of - * now. List cldsDictionaryElements = null; - * List subDictionaryElements = null; if (dictionaryKeyArray - * != null && dictionaryKeyArray.length == 2) { cldsDictionaryElements = - * getCldsDao().getDictionaryElements(dictionaryKeyArray[0], null, null); - * subDictionaryElements = - * getCldsDao().getDictionaryElements(dictionaryKeyArray[1], null, null); - * - * if (cldsDictionaryElements != null) { List subCldsDictionaryNames = - * subDictionaryElements.stream() - * .map(CldsDictionaryItem::getDictElementShortName).collect(Collectors.toList() - * ); JSONArray jsonArray = new JSONArray(); - * - * Optional.ofNullable(cldsDictionaryElements).get().stream().forEach(c -> { - * JSONObject jsonObject = new JSONObject(); - * jsonObject.put(JsonEditorSchemaConstants.TYPE, - * getJsonType(c.getDictElementType())); if (c.getDictElementType() != null && - * c.getDictElementType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { - * jsonObject.put(JsonEditorSchemaConstants.MIN_LENGTH, 1); } - * jsonObject.put(JsonEditorSchemaConstants.ID, c.getDictElementName()); - * jsonObject.put(JsonEditorSchemaConstants.LABEL, c.getDictElementShortName()); - * jsonObject.put(JsonEditorSchemaConstants.OPERATORS, subCldsDictionaryNames); - * jsonArray.put(jsonObject); }); ; JSONObject filterObject = new JSONObject(); - * filterObject.put(JsonEditorSchemaConstants.FILTERS, jsonArray); - * - * childObject.put(JsonEditorSchemaConstants.TYPE, - * JsonEditorSchemaConstants.TYPE_QBLDR); // TO invoke validation on such - * parameters childObject.put(JsonEditorSchemaConstants.MIN_LENGTH, 1); - * childObject.put(JsonEditorSchemaConstants.QSSCHEMA, filterObject); - * - * } } } else { String dictionaryKey = dictionaryReference.substring( - * dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11, - * dictionaryReference.length()); if (dictionaryKey != null) { - * List cldsDictionaryElements = - * getCldsDao().getDictionaryElements(dictionaryKey, null, null); if - * (cldsDictionaryElements != null) { List cldsDictionaryNames = new - * ArrayList<>(); List cldsDictionaryFullNames = new ArrayList<>(); - * cldsDictionaryElements.stream().forEach(c -> { // Json type will be - * translated before Policy creation if (c.getDictElementType() != null && - * !c.getDictElementType().equalsIgnoreCase("json")) { - * cldsDictionaryFullNames.add(c.getDictElementName()); } - * cldsDictionaryNames.add(c.getDictElementShortName()); }); - * - * if (cldsDictionaryFullNames.size() > 0) { - * childObject.put(JsonEditorSchemaConstants.ENUM, cldsDictionaryFullNames); // - * Add Enum titles for generated translated values during JSON instance // - * generation JSONObject enumTitles = new JSONObject(); - * enumTitles.put(JsonEditorSchemaConstants.ENUM_TITLES, cldsDictionaryNames); - * childObject.put(JsonEditorSchemaConstants.OPTIONS, enumTitles); } else { - * childObject.put(JsonEditorSchemaConstants.ENUM, cldsDictionaryNames); } - * - * } } } - */ } private String getJsonType(String toscaType) { diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 531587a75..66046f02b 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -56,18 +56,20 @@ import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; +import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.components.external.DcaeComponent; import org.onap.clamp.loop.components.external.ExternalComponent; import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.service.Service; +import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; @Entity @Table(name = "loops") @TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) -public class Loop implements Serializable { +public class Loop extends AuditEntity implements Serializable { /** * The serial version id. @@ -103,7 +105,7 @@ public class Loop implements Serializable { private JsonObject globalPropertiesJson; @Expose - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) @JoinColumn(name = "service_uuid") private Service modelService; @@ -120,19 +122,24 @@ public class Loop implements Serializable { private final Map components = new HashMap<>(); @Expose - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop") + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop", orphanRemoval = true) private Set operationalPolicies = new HashSet<>(); @Expose - @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER) @JoinTable(name = "loops_microservicepolicies", joinColumns = @JoinColumn(name = "loop_id"), inverseJoinColumns = @JoinColumn(name = "microservicepolicy_id")) private Set microServicePolicies = new HashSet<>(); @Expose - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop") + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop", orphanRemoval = true) @SortNatural private SortedSet loopLogs = new TreeSet<>(); + @Expose + @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER) + @JoinColumn(name = "loop_template_name") + private LoopTemplate loopTemplate; + private void initializeExternalComponents() { this.addComponent(new PolicyComponent()); this.addComponent(new DcaeComponent()); @@ -280,6 +287,14 @@ public class Loop implements Serializable { this.components.put(component.getComponentName(), component); } + public LoopTemplate getLoopTemplate() { + return loopTemplate; + } + + public void setLoopTemplate(LoopTemplate loopTemplate) { + this.loopTemplate = loopTemplate; + } + /** * Generate the loop name. * diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java index d1ab0e396..85e24cd00 100644 --- a/src/main/java/org/onap/clamp/loop/LoopService.java +++ b/src/main/java/org/onap/clamp/loop/LoopService.java @@ -31,29 +31,23 @@ import java.util.Set; import javax.persistence.EntityNotFoundException; import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.policy.microservice.MicroservicePolicyService; +import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; import org.onap.clamp.policy.operational.OperationalPolicyService; -import org.springframework.stereotype.Component; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service -@Component public class LoopService { - private final LoopsRepository loopsRepository; - private final MicroservicePolicyService microservicePolicyService; - private final OperationalPolicyService operationalPolicyService; - - /** - * Constructor. - */ - public LoopService(LoopsRepository loopsRepository, MicroservicePolicyService microservicePolicyService, - OperationalPolicyService operationalPolicyService) { - this.loopsRepository = loopsRepository; - this.microservicePolicyService = microservicePolicyService; - this.operationalPolicyService = operationalPolicyService; - } + @Autowired + private LoopsRepository loopsRepository; + + @Autowired + private MicroServicePolicyService microservicePolicyService; + + @Autowired + private OperationalPolicyService operationalPolicyService; Loop saveOrUpdateLoop(Loop loop) { return loopsRepository.save(loop); @@ -109,6 +103,6 @@ public class LoopService { private Loop findClosedLoopByName(String loopName) { return loopsRepository.findById(loopName) - .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName)); + .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName)); } } diff --git a/src/main/java/org/onap/clamp/loop/LoopsRepository.java b/src/main/java/org/onap/clamp/loop/LoopsRepository.java index 37c47622f..aaa49116f 100644 --- a/src/main/java/org/onap/clamp/loop/LoopsRepository.java +++ b/src/main/java/org/onap/clamp/loop/LoopsRepository.java @@ -24,12 +24,13 @@ package org.onap.clamp.loop; import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository -public interface LoopsRepository extends CrudRepository { +public interface LoopsRepository extends JpaRepository { @Query("SELECT loop.name FROM Loop as loop") List getAllLoopNames(); diff --git a/src/main/java/org/onap/clamp/loop/common/AuditEntity.java b/src/main/java/org/onap/clamp/loop/common/AuditEntity.java new file mode 100644 index 000000000..445f5b9e8 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/common/AuditEntity.java @@ -0,0 +1,108 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.common; + +import com.google.gson.annotations.Expose; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; + +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; + +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class AuditEntity { + + @Expose + @CreatedDate + @Column(name = "created_timestamp", nullable = false, updatable = false) + private Instant createdDate; + + @Expose + @LastModifiedDate + @Column(name = "updated_timestamp", nullable = false) + private Instant updatedDate; + + @Expose + @LastModifiedBy + @Column(name = "updated_by") + private String updatedBy; + + @Expose + @CreatedBy + @Column(name = "created_by") + private String createdBy; + + public Instant getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Instant createdDate) { + if (createdDate != null) { + this.createdDate = createdDate.truncatedTo(ChronoUnit.SECONDS); + } else { + this.createdDate = null; + } + } + + public Instant getUpdatedDate() { + return updatedDate; + } + + public void setUpdatedDate(Instant updatedDate) { + if (updatedDate != null) { + this.updatedDate = updatedDate.truncatedTo(ChronoUnit.SECONDS); + } else { + this.updatedDate = null; + } + } + + public String getUpdatedBy() { + return updatedBy; + } + + public void setUpdatedBy(String updatedBy) { + this.updatedBy = updatedBy; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public AuditEntity() { + } + +} diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLog.java b/src/main/java/org/onap/clamp/loop/log/LoopLog.java index 0e1153a32..e49598879 100644 --- a/src/main/java/org/onap/clamp/loop/log/LoopLog.java +++ b/src/main/java/org/onap/clamp/loop/log/LoopLog.java @@ -190,9 +190,7 @@ public class LoopLog implements Serializable, Comparable { if (arg0.getId() == null) { return -1; } - return arg0.getId().compareTo(this.getId()); - } } diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLogRepository.java b/src/main/java/org/onap/clamp/loop/log/LoopLogRepository.java index 103341fa5..0b3c34ec0 100644 --- a/src/main/java/org/onap/clamp/loop/log/LoopLogRepository.java +++ b/src/main/java/org/onap/clamp/loop/log/LoopLogRepository.java @@ -23,10 +23,10 @@ package org.onap.clamp.loop.log; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface LoopLogRepository extends CrudRepository { +public interface LoopLogRepository extends JpaRepository { } diff --git a/src/main/java/org/onap/clamp/loop/service/Service.java b/src/main/java/org/onap/clamp/loop/service/Service.java index 115f9f768..b74ee0b0d 100644 --- a/src/main/java/org/onap/clamp/loop/service/Service.java +++ b/src/main/java/org/onap/clamp/loop/service/Service.java @@ -39,9 +39,9 @@ import javax.persistence.Transient; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; - @Entity @Table(name = "services") @TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) @@ -76,13 +76,25 @@ public class Service implements Serializable { private JsonObject resourceDetails; /** - * Public constructor. + * Default constructor for serialization. */ public Service() { } /** - * Constructor. + * Constructor with string. + */ + public Service(String serviceDetails, String resourceDetails) { + JsonObject serviceDetailsJson = JsonUtils.GSON.fromJson(serviceDetails, JsonObject.class); + JsonObject resourceDetailsJson = JsonUtils.GSON.fromJson(resourceDetails, JsonObject.class); + this.name = serviceDetailsJson.get("name").getAsString(); + this.serviceUuid = serviceDetailsJson.get("UUID").getAsString(); + this.serviceDetails = serviceDetailsJson; + this.resourceDetails = resourceDetailsJson; + } + + /** + * Constructor with Json Object. */ public Service(JsonObject serviceDetails, JsonObject resourceDetails, String version) { this.name = serviceDetails.get("name").getAsString(); diff --git a/src/main/java/org/onap/clamp/loop/service/ServicesRepository.java b/src/main/java/org/onap/clamp/loop/service/ServicesRepository.java new file mode 100644 index 000000000..fe5ba8ed0 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/service/ServicesRepository.java @@ -0,0 +1,31 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.service; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ServicesRepository extends JpaRepository { +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java new file mode 100644 index 000000000..10367e77d --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java @@ -0,0 +1,268 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; +import java.util.SortedSet; +import java.util.TreeSet; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.hibernate.annotations.SortNatural; +import org.onap.clamp.loop.common.AuditEntity; +import org.onap.clamp.loop.service.Service; + +@Entity +@Table(name = "loop_templates") +public class LoopTemplate extends AuditEntity implements Serializable { + + /** + * The serial version id. + */ + private static final long serialVersionUID = -286522707701388642L; + + @Id + @Expose + @Column(nullable = false, name = "name", unique = true) + private String name; + + /** + * This field is used when we have a blueprint defining all microservices. The + * other option would be to have independent blueprint for each microservices. + * In that case they are stored in each MicroServiceModel + */ + @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") + private String blueprint; + + @Expose + @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation") + private String svgRepresentation; + + @Expose + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loopTemplate", orphanRemoval = true) + @SortNatural + private SortedSet microServiceModelUsed = new TreeSet<>(); + + @Expose + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) + @JoinColumn(name = "service_uuid") + private Service modelService; + + @Expose + @Column(name = "maximum_instances_allowed") + private Integer maximumInstancesAllowed; + + /** + * name getter. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * blueprint getter. + * + * @return the blueprint + */ + public String getBlueprint() { + return blueprint; + } + + /** + * blueprint setter. + * + * @param blueprint the blueprint to set + */ + public void setBlueprint(String blueprint) { + this.blueprint = blueprint; + } + + /** + * svgRepresentation getter. + * + * @return the svgRepresentation + */ + public String getSvgRepresentation() { + return svgRepresentation; + } + + /** + * svgRepresentation setter. + * + * @param svgRepresentation the svgRepresentation to set + */ + public void setSvgRepresentation(String svgRepresentation) { + this.svgRepresentation = svgRepresentation; + } + + /** + * microServiceModelUsed getter. + * + * @return the microServiceModelUsed + */ + public SortedSet getMicroServiceModelUsed() { + return microServiceModelUsed; + } + + /** + * maximumInstancesAllowed getter. + * + * @return the maximumInstancesAllowed + */ + public Integer getMaximumInstancesAllowed() { + return maximumInstancesAllowed; + } + + /** + * maximumInstancesAllowed setter. + * + * @param maximumInstancesAllowed the maximumInstancesAllowed to set + */ + public void setMaximumInstancesAllowed(Integer maximumInstancesAllowed) { + this.maximumInstancesAllowed = maximumInstancesAllowed; + } + + /** + * Add a microService model to the current template, the microservice is added + * at the end of the list so the flowOrder is computed automatically. + * + * @param microServiceModel The microserviceModel to add + */ + public void addMicroServiceModel(MicroServiceModel microServiceModel) { + TemplateMicroServiceModel jointEntry = new TemplateMicroServiceModel(this, microServiceModel, + this.microServiceModelUsed.size()); + this.microServiceModelUsed.add(jointEntry); + microServiceModel.getUsedByLoopTemplates().add(jointEntry); + } + + /** + * Add a microService model to the current template, the flow order must be + * specified manually. + * + * @param microServiceModel The microserviceModel to add + * @param listPosition The position in the flow + */ + public void addMicroServiceModel(MicroServiceModel microServiceModel, Integer listPosition) { + TemplateMicroServiceModel jointEntry = new TemplateMicroServiceModel(this, microServiceModel, listPosition); + this.microServiceModelUsed.add(jointEntry); + microServiceModel.getUsedByLoopTemplates().add(jointEntry); + } + + /** + * modelService getter. + * + * @return the modelService + */ + public Service getModelService() { + return modelService; + } + + /** + * modelService setter. + * + * @param modelService the modelService to set + */ + public void setModelService(Service modelService) { + this.modelService = modelService; + } + + /** + * Default constructor for serialization. + */ + public LoopTemplate() { + + } + + /** + * Constructor. + * + * @param name The loop template name id + * @param blueprint The blueprint containing all microservices (legacy + * case) + * @param svgRepresentation The svg representation of that loop template + * @param maxInstancesAllowed The maximum number of instances that can be + * created from that template + * @param service The service associated to that loop template + */ + public LoopTemplate(String name, String blueprint, String svgRepresentation, Integer maxInstancesAllowed, + Service service) { + this.name = name; + this.blueprint = blueprint; + this.svgRepresentation = svgRepresentation; + + this.maximumInstancesAllowed = maxInstancesAllowed; + this.modelService = service; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + LoopTemplate other = (LoopTemplate) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplatesRepository.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplatesRepository.java new file mode 100644 index 000000000..07f304de7 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplatesRepository.java @@ -0,0 +1,37 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface LoopTemplatesRepository extends JpaRepository { + + @Query("SELECT looptemplate.name FROM LoopTemplate as looptemplate") + List getAllLoopTemplateNames(); +} diff --git a/src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java b/src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java new file mode 100644 index 000000000..1e2b140e7 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java @@ -0,0 +1,217 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.onap.clamp.loop.common.AuditEntity; + +/** + * This class represents a micro service model for a loop template. + */ + +@Entity +@Table(name = "micro_service_models") +public class MicroServiceModel extends AuditEntity implements Serializable { + + /** + * The serial version id. + */ + private static final long serialVersionUID = -286522707701376645L; + + @Id + @Expose + @Column(nullable = false, name = "name", unique = true) + private String name; + + /** + * This variable is used to store the type mentioned in the micro-service + * blueprint. + */ + @Expose + @Column(nullable = false, name = "policy_type") + private String policyType; + + @Column(nullable = false, name = "blueprint_yaml") + private String blueprint; + + @Expose + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) + @JoinColumns({ @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version") }) + private PolicyModel policyModel; + + @OneToMany(fetch = FetchType.LAZY, mappedBy = "microServiceModel", orphanRemoval = true) + private Set usedByLoopTemplates = new HashSet<>(); + + /** + * policyModel getter. + * + * @return the policyModel + */ + public PolicyModel getPolicyModel() { + return policyModel; + } + + /** + * policyModel setter. + * + * @param policyModel the policyModel to set + */ + public void setPolicyModel(PolicyModel policyModel) { + this.policyModel = policyModel; + } + + /** + * name getter. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * policyType getter. + * + * @return the policyType + */ + public String getPolicyType() { + return policyType; + } + + /** + * policyType setter. + * + * @param policyType the policyType to set + */ + public void setPolicyType(String policyType) { + this.policyType = policyType; + } + + /** + * blueprint getter. + * + * @return the blueprint + */ + public String getBlueprint() { + return blueprint; + } + + /** + * blueprint setter. + * + * @param blueprint the blueprint to set + */ + public void setBlueprint(String blueprint) { + this.blueprint = blueprint; + } + + /** + * usedByLoopTemplates getter. + * + * @return the usedByLoopTemplates + */ + public Set getUsedByLoopTemplates() { + return usedByLoopTemplates; + } + + /** + * Default constructor for serialization. + */ + public MicroServiceModel() { + } + + /** + * Constructor. + * + * @param name The name id + * @param policyType The policy model type like + * onap.policies.controlloop.operational.common.Apex + * @param blueprint The blueprint defined for dcae that contains the policy + * type to use + * @param policyModel The policy model for the policy type mentioned here + */ + public MicroServiceModel(String name, String policyType, String blueprint, PolicyModel policyModel) { + this.name = name; + this.policyType = policyType; + this.blueprint = blueprint; + this.policyModel = policyModel; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + MicroServiceModel other = (MicroServiceModel) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java b/src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java new file mode 100644 index 000000000..2b1870485 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java @@ -0,0 +1,31 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MicroServiceModelsRepository extends JpaRepository { +} diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java new file mode 100644 index 000000000..e6580beed --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java @@ -0,0 +1,239 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.Table; + +import org.onap.clamp.loop.common.AuditEntity; +import org.onap.clamp.util.SemanticVersioning; + +/** + * This class represents the policy model tosca revision that we can have to a + * specific microservice. + */ +@Entity +@Table(name = "policy_models") +@IdClass(PolicyModelId.class) +public class PolicyModel extends AuditEntity implements Serializable, Comparable { + + /** + * The serial version id. + */ + private static final long serialVersionUID = -286522705701376645L; + + /** + * This variable is used to store the type mentioned in the micro-service + * blueprint. + */ + @Id + @Expose + @Column(nullable = false, name = "policy_model_type") + private String policyModelType; + + /** + * Semantic versioning on policy side. + */ + @Id + @Expose + @Column(name = "version") + private String version; + + @Column(columnDefinition = "MEDIUMTEXT", name = "policy_tosca") + private String policyModelTosca; + + @Expose + @Column(name = "policy_acronym") + private String policyAcronym; + + @Expose + @Column(name = "policy_variant") + private String policyVariant; + + /** + * policyModelTosca getter. + * + * @return the policyModelTosca + */ + public String getPolicyModelTosca() { + return policyModelTosca; + } + + /** + * policyModelTosca setter. + * + * @param policyModelTosca the policyModelTosca to set + */ + public void setPolicyModelTosca(String policyModelTosca) { + this.policyModelTosca = policyModelTosca; + } + + /** + * policyModelType getter. + * + * @return the modelType + */ + public String getPolicyModelType() { + return policyModelType; + } + + /** + * policyModelType setter. + * + * @param modelType the modelType to set + */ + public void setPolicyModelType(String modelType) { + this.policyModelType = modelType; + } + + /** + * version getter. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * version setter. + * + * @param version the version to set + */ + public void setVersion(String version) { + // Try to convert it before + this.version = version; + } + + /** + * policyAcronym getter. + * + * @return the policyAcronym value + */ + public String getPolicyAcronym() { + return policyAcronym; + } + + /** + * policyAcronym setter. + * + * @param policyAcronym The policyAcronym to set + */ + public void setPolicyAcronym(String policyAcronym) { + this.policyAcronym = policyAcronym; + } + + /** + * policyVariant getter. + * + * @return the policyVariant value + */ + public String getPolicyVariant() { + return policyVariant; + } + + /** + * policyVariant setter. + * + * @param policyVariant The policyVariant to set + */ + public void setPolicyVariant(String policyVariant) { + this.policyVariant = policyVariant; + } + + /** + * Default constructor for serialization. + */ + public PolicyModel() { + } + + /** + * Constructor. + * + * @param policyType The policyType (referenced in the blueprint) + * @param policyModelTosca The policy tosca model in yaml + * @param version the version like 1.0.0 + * @param policyAcronym Short policy name if it exists + * @param policyVariant Subtype for policy if it exists (could be used by UI) + */ + public PolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, + String policyVariant) { + this.policyModelType = policyType; + this.policyModelTosca = policyModelTosca; + this.version = version; + this.policyAcronym = policyAcronym; + this.policyVariant = policyVariant; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((policyModelType == null) ? 0 : policyModelType.hashCode()); + result = prime * result + ((version == null) ? 0 : version.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + PolicyModel other = (PolicyModel) obj; + if (policyModelType == null) { + if (other.policyModelType != null) { + return false; + } + } else if (!policyModelType.equals(other.policyModelType)) { + return false; + } + if (version == null) { + if (other.version != null) { + return false; + } + } else if (!version.equals(other.version)) { + return false; + } + return true; + } + + @Override + public int compareTo(PolicyModel arg0) { + // Reverse it, so that by default we have the latest + return SemanticVersioning.compare(arg0.getVersion(), this.version); + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModelId.java b/src/main/java/org/onap/clamp/loop/template/PolicyModelId.java new file mode 100644 index 000000000..c4dd1933b --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModelId.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +public class PolicyModelId implements Serializable { + + /** + * Serial Id. + */ + private static final long serialVersionUID = -2846526482064334745L; + + @Expose + private String policyModelType; + + @Expose + private String version; + + /** + * Default constructor for serialization. + */ + public PolicyModelId() { + + } + + /** + * Constructor. + */ + public PolicyModelId(String policyModelType, String version) { + this.policyModelType = policyModelType; + this.version = version; + } + + /** + * policyModelType getter. + * + * @return the policyModelType + */ + public String getPolicyModelType() { + return policyModelType; + } + + /** + * policyModelType setter. + * + * @param policyModelType the policyModelType to set + */ + public void setPolicyModelType(String policyModelType) { + this.policyModelType = policyModelType; + } + + /** + * version getter. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * version setter. + * + * @param version the version to set + */ + public void setVersion(String version) { + this.version = version; + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModelsRepository.java b/src/main/java/org/onap/clamp/loop/template/PolicyModelsRepository.java new file mode 100644 index 000000000..a76e386b5 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModelsRepository.java @@ -0,0 +1,38 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface PolicyModelsRepository extends JpaRepository { + @Query("SELECT policymodel.policyModelType FROM PolicyModel as policymodel") + List getAllPolicyModelType(); + + List findByPolicyModelType(String policyModelType); +} diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java new file mode 100644 index 000000000..8e22852a9 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class PolicyModelsService { + private final PolicyModelsRepository policyModelsRepository; + + @Autowired + public PolicyModelsService(PolicyModelsRepository policyModelrepo) { + policyModelsRepository = policyModelrepo; + } + + public PolicyModel saveOrUpdatePolicyModel(PolicyModel policyModel) { + return policyModelsRepository.save(policyModel); + } + + public List getAllPolicyModelTypes() { + return policyModelsRepository.getAllPolicyModelType(); + } + + public Iterable getAllPolicyModels() { + return policyModelsRepository.findAll(); + } + + public PolicyModel getPolicyModel(String type, String version) { + return policyModelsRepository.findById(new PolicyModelId(type, version)).orElse(null); + } + + public Iterable getAllPolicyModelsByType(String type) { + return policyModelsRepository.findByPolicyModelType(type); + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java b/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java new file mode 100644 index 000000000..7547c1f70 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java @@ -0,0 +1,194 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MapsId; +import javax.persistence.Table; + +@Entity +@Table(name = "templates_microservicemodels") +public class TemplateMicroServiceModel implements Serializable, Comparable { + + /** + * Serial ID. + */ + private static final long serialVersionUID = 5924989899078094245L; + + @EmbeddedId + private TemplateMicroServiceModelId templateMicroServiceModelId; + + @ManyToOne(fetch = FetchType.LAZY) + @MapsId("loopTemplateName") + @JoinColumn(name = "loop_template_name") + private LoopTemplate loopTemplate; + + @Expose + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) + @MapsId("microServiceModelName") + @JoinColumn(name = "micro_service_model_name") + private MicroServiceModel microServiceModel; + + @Expose + @Column(nullable = false, name = "flow_order") + private Integer flowOrder; + + /** + * Default constructor for serialization. + */ + public TemplateMicroServiceModel() { + + } + + /** + * Constructor. + * + * @param loopTemplate The loop template object + * @param microServiceModel The microServiceModel object + * @param flowOrder The position of the micro service in the flow + */ + public TemplateMicroServiceModel(LoopTemplate loopTemplate, MicroServiceModel microServiceModel, + Integer flowOrder) { + this.loopTemplate = loopTemplate; + this.microServiceModel = microServiceModel; + this.flowOrder = flowOrder; + this.templateMicroServiceModelId = new TemplateMicroServiceModelId(loopTemplate.getName(), + microServiceModel.getName()); + } + + /** + * loopTemplate getter. + * + * @return the loopTemplate + */ + public LoopTemplate getLoopTemplate() { + return loopTemplate; + } + + /** + * loopTemplate setter. + * + * @param loopTemplate the loopTemplate to set + */ + public void setLoopTemplate(LoopTemplate loopTemplate) { + this.loopTemplate = loopTemplate; + } + + /** + * microServiceModel getter. + * + * @return the microServiceModel + */ + public MicroServiceModel getMicroServiceModel() { + return microServiceModel; + } + + /** + * microServiceModel setter. + * + * @param microServiceModel the microServiceModel to set + */ + public void setMicroServiceModel(MicroServiceModel microServiceModel) { + this.microServiceModel = microServiceModel; + } + + /** + * flowOrder getter. + * + * @return the flowOrder + */ + public Integer getFlowOrder() { + return flowOrder; + } + + /** + * flowOrder setter. + * + * @param flowOrder the flowOrder to set + */ + public void setFlowOrder(Integer flowOrder) { + this.flowOrder = flowOrder; + } + + @Override + public int compareTo(TemplateMicroServiceModel arg0) { + // Reverse it, so that by default we have the latest + if (getFlowOrder() == null) { + return 1; + } + if (arg0.getFlowOrder() == null) { + return -1; + } + return arg0.getFlowOrder().compareTo(this.getFlowOrder()); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((loopTemplate == null) ? 0 : loopTemplate.hashCode()); + result = prime * result + ((microServiceModel == null) ? 0 : microServiceModel.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TemplateMicroServiceModel other = (TemplateMicroServiceModel) obj; + if (loopTemplate == null) { + if (other.loopTemplate != null) { + return false; + } + } else if (!loopTemplate.equals(other.loopTemplate)) { + return false; + } + if (microServiceModel == null) { + if (other.microServiceModel != null) { + return false; + } + } else if (!microServiceModel.equals(other.microServiceModel)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java b/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java new file mode 100644 index 000000000..74c768974 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java @@ -0,0 +1,102 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Embeddable; + +@Embeddable +public class TemplateMicroServiceModelId implements Serializable { + + /** + * Serial ID. + */ + private static final long serialVersionUID = 4089888115504914773L; + + @Expose + @Column(name = "loop_template_name") + private String loopTemplateName; + + @Expose + @Column(name = "micro_service_model_name") + private String microServiceModelName; + + /** + * Default constructor for serialization. + */ + public TemplateMicroServiceModelId() { + + } + + /** + * Constructor. + * + * @param loopTemplateName The loop template name id + * @param microServiceModelName THe micro Service name id + */ + public TemplateMicroServiceModelId(String loopTemplateName, String microServiceModelName) { + this.loopTemplateName = loopTemplateName; + this.microServiceModelName = microServiceModelName; + } + + /** + * loopTemplateName getter. + * + * @return the loopTemplateName + */ + public String getLoopTemplateName() { + return loopTemplateName; + } + + /** + * loopTemplateName setter. + * + * @param loopTemplateName the loopTemplateName to set + */ + public void setLoopTemplateName(String loopTemplateName) { + this.loopTemplateName = loopTemplateName; + } + + /** + * microServiceModelName getter. + * + * @return the microServiceModelName + */ + public String getMicroServiceModelName() { + return microServiceModelName; + } + + /** + * microServiceModelName setter. + * + * @param microServiceModelName the microServiceModelName to set + */ + public void setMicroServiceModelName(String microServiceModelName) { + this.microServiceModelName = microServiceModelName; + } +} diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 2943c39a2..98742d22b 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -40,7 +40,9 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; +import javax.persistence.JoinColumn; import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; @@ -52,13 +54,15 @@ import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; +import org.onap.clamp.loop.common.AuditEntity; +import org.onap.clamp.loop.template.MicroServiceModel; import org.onap.clamp.policy.Policy; import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "micro_service_policies") @TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) -public class MicroServicePolicy implements Serializable, Policy { +public class MicroServicePolicy extends AuditEntity implements Serializable, Policy { /** * The serial version ID. */ @@ -73,9 +77,17 @@ public class MicroServicePolicy implements Serializable, Policy { private String name; @Expose - @Column(nullable = false, name = "model_type") + @Column(nullable = false, name = "policy_model_type") private String modelType; + @Expose + @Column(name = "context") + private String context; + + @Expose + @Column(name = "device_type_scope") + private String deviceTypeScope; + @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "properties") @@ -96,6 +108,11 @@ public class MicroServicePolicy implements Serializable, Policy { @ManyToMany(mappedBy = "microServicePolicies", fetch = FetchType.EAGER) private Set usedByLoops = new HashSet<>(); + @Expose + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "micro_service_model_id") + private MicroServiceModel microServiceModel; + public MicroServicePolicy() { // serialization } @@ -203,6 +220,49 @@ public class MicroServicePolicy implements Serializable, Policy { this.usedByLoops = usedBy; } + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public String getDeviceTypeScope() { + return deviceTypeScope; + } + + public void setDeviceTypeScope(String deviceTypeScope) { + this.deviceTypeScope = deviceTypeScope; + } + + /** + * microServiceModel getter. + * + * @return the microServiceModel + */ + public MicroServiceModel getMicroServiceModel() { + return microServiceModel; + } + + /** + * microServiceModel setter. + * + * @param microServiceModel the microServiceModel to set + */ + public void setMicroServiceModel(MicroServiceModel microServiceModel) { + this.microServiceModel = microServiceModel; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + @Override public int hashCode() { final int prime = 31; diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyRepository.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyRepository.java index f658aacc3..38b310ce8 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyRepository.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyRepository.java @@ -23,10 +23,10 @@ package org.onap.clamp.policy.microservice; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -interface MicroServicePolicyRepository extends CrudRepository { +public interface MicroServicePolicyRepository extends JpaRepository { } diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java new file mode 100644 index 000000000..346cdf624 --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java @@ -0,0 +1,82 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Nokia Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.microservice; + +import com.google.common.collect.Sets; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.onap.clamp.loop.Loop; +import org.onap.clamp.policy.PolicyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class MicroServicePolicyService implements PolicyService { + + private final MicroServicePolicyRepository repository; + + @Autowired + public MicroServicePolicyService(MicroServicePolicyRepository repository) { + this.repository = repository; + } + + @Override + public Set updatePolicies(Loop loop, List newMicroservicePolicies) { + return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy)) + .collect(Collectors.toSet()); + } + + @Override + public boolean isExisting(String policyName) { + return repository.existsById(policyName); + } + + /** + * Get and update the MicroService policy properties. + * + * @param loop + * The loop + * @param policy + * The new MicroService policy + * @return The updated MicroService policy + */ + public MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) { + return repository + .save(repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop)) + .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), + policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop)))); + } + + private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy, + MicroServicePolicy newPolicy, Loop loop) { + oldPolicy.setProperties(newPolicy.getProperties()); + if (!oldPolicy.getUsedByLoops().contains(loop)) { + oldPolicy.getUsedByLoops().add(loop); + } + return oldPolicy; + } +} diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java deleted file mode 100644 index 59ddaa009..000000000 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java +++ /dev/null @@ -1,82 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Nokia Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.policy.microservice; - -import com.google.common.collect.Sets; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import org.onap.clamp.loop.Loop; -import org.onap.clamp.policy.PolicyService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class MicroservicePolicyService implements PolicyService { - - private final MicroServicePolicyRepository repository; - - @Autowired - public MicroservicePolicyService(MicroServicePolicyRepository repository) { - this.repository = repository; - } - - @Override - public Set updatePolicies(Loop loop, List newMicroservicePolicies) { - return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy)) - .collect(Collectors.toSet()); - } - - @Override - public boolean isExisting(String policyName) { - return repository.existsById(policyName); - } - - /** - * Get and update the MicroService policy properties. - * - * @param loop - * The loop - * @param policy - * The new MicroService policy - * @return The updated MicroService policy - */ - public MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) { - return repository - .save(repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop)) - .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), - policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop)))); - } - - private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy, - MicroServicePolicy newPolicy, Loop loop) { - oldPolicy.setProperties(newPolicy.getProperties()); - if (!oldPolicy.getUsedByLoops().contains(loop)) { - oldPolicy.getUsedByLoops().add(loop); - } - return oldPolicy; - } -} diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index 14112694e..e8bf4a655 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -46,6 +46,7 @@ import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; @@ -55,6 +56,7 @@ import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; +import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.Policy; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; @@ -90,6 +92,12 @@ public class OperationalPolicy implements Serializable, Policy { @JoinColumn(name = "loop_id", nullable = false) private Loop loop; + @Expose + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumns({ @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version") }) + private PolicyModel policyModel; + public OperationalPolicy() { // Serialization } @@ -137,6 +145,33 @@ public class OperationalPolicy implements Serializable, Policy { this.configurationsJson = configurationsJson; } + /** + * policyModel getter. + * + * @return the policyModel + */ + public PolicyModel getPolicyModel() { + return policyModel; + } + + /** + * policyModel setter. + * + * @param policyModel the policyModel to set + */ + public void setPolicyModel(PolicyModel policyModel) { + this.policyModel = policyModel; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + @Override public JsonObject getJsonRepresentation() { return jsonRepresentation; diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepository.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepository.java index 97b183f72..c0a6e12cd 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepository.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepository.java @@ -23,10 +23,10 @@ package org.onap.clamp.policy.operational; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -interface OperationalPolicyRepository extends CrudRepository { +public interface OperationalPolicyRepository extends JpaRepository { void deleteByName(String policyName); } diff --git a/src/main/java/org/onap/clamp/tosca/Dictionary.java b/src/main/java/org/onap/clamp/tosca/Dictionary.java new file mode 100644 index 000000000..7b4e513a2 --- /dev/null +++ b/src/main/java/org/onap/clamp/tosca/Dictionary.java @@ -0,0 +1,174 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.tosca; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.onap.clamp.loop.common.AuditEntity; + +/** + * Represents Dictionary. + */ + +@Entity +@Table(name = "dictionary") +public class Dictionary extends AuditEntity implements Serializable { + + /** + * The serial version id. + */ + private static final long serialVersionUID = -286522707701388645L; + + @Id + @Expose + @Column(nullable = false, name = "name", unique = true) + private String name; + + @Expose + @Column(name = "dictionary_second_level") + private int secondLevelDictionary; + + @Expose + @Column(name = "dictionary_type") + private String subDictionaryType; + + @Expose + @OneToMany(mappedBy = "dictionary", cascade = CascadeType.ALL, fetch = FetchType.EAGER) + private List dictionaryElements = new ArrayList<>(); + + /** + * name getter. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * secondLevelDictionary getter. + * + * @return the secondLevelDictionary + */ + public int getSecondLevelDictionary() { + return secondLevelDictionary; + } + + /** + * secondLevelDictionary setter. + * + * @param secondLevelDictionary the secondLevelDictionary to set + */ + public void setSecondLevelDictionary(int secondLevelDictionary) { + this.secondLevelDictionary = secondLevelDictionary; + } + + /** + * subDictionaryType getter. + * + * @return the subDictionaryType + */ + public String getSubDictionaryType() { + return subDictionaryType; + } + + /** + * subDictionaryType setter. + * + * @param subDictionaryType the subDictionaryType to set + */ + public void setSubDictionaryType(String subDictionaryType) { + this.subDictionaryType = subDictionaryType; + } + + /** + * dictionaryElements getter. + * + * @return the dictionaryElements + */ + public List getDictionaryElements() { + return dictionaryElements; + } + + /** + * dictionaryElements setter. + * + * @param dictionaryElements the dictionaryElements to set + */ + public void setDictionaryElements(List dictionaryElements) { + this.dictionaryElements = dictionaryElements; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Dictionary other = (Dictionary) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/org/onap/clamp/tosca/DictionaryElement.java b/src/main/java/org/onap/clamp/tosca/DictionaryElement.java new file mode 100644 index 000000000..e81885f3e --- /dev/null +++ b/src/main/java/org/onap/clamp/tosca/DictionaryElement.java @@ -0,0 +1,249 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.tosca; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.onap.clamp.loop.common.AuditEntity; + +/** + * Represents a Dictionary Item. + */ +@Entity +@Table(name = "dictionary_elements") +public class DictionaryElement extends AuditEntity implements Serializable { + + /** + * The serial version id. + */ + private static final long serialVersionUID = -286522707701388644L; + + @Id + @Expose + @Column(nullable = false, name = "name", unique = true) + private String name; + + @Expose + @Column(nullable = false, name = "short_name", unique = true) + private String shortName; + + @Expose + @Column(name = "description") + private String description; + + @Expose + @Column(nullable = false, name = "type") + private String type; + + @Column(name = "subdictionary_id", nullable = false) + @Expose + private String subDictionary; + + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "dictionary_id") + private Dictionary dictionary; + + /** + * name getter. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * shortName getter. + * + * @return the shortName + */ + public String getShortName() { + return shortName; + } + + /** + * shortName setter. + * + * @param shortName the shortName to set + */ + public void setShortName(String shortName) { + this.shortName = shortName; + } + + /** + * description getter. + * + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * description setter. + * + * @param description the description to set + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * type getter. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * type setter. + * + * @param type the type to set + */ + public void setType(String type) { + this.type = type; + } + + /** + * subDictionary getter. + * + * @return the subDictionary + */ + public String getSubDictionary() { + return subDictionary; + } + + /** + * subDictionary setter. + * + * @param subDictionary the subDictionary to set + */ + public void setSubDictionary(String subDictionary) { + this.subDictionary = subDictionary; + } + + /** + * dictionary getter. + * + * @return the dictionary + */ + public Dictionary getDictionary() { + return dictionary; + } + + /** + * dictionary setter. + * + * @param dictionary the dictionary to set + */ + public void setDictionary(Dictionary dictionary) { + this.dictionary = dictionary; + } + + /** + * Default Constructor. + */ + public DictionaryElement() { + } + + /** + * Constructor. + * + * @param name The Dictionary element name + * @param shortName The short name + * @param description The description + * @param type The type of element + * @param subDictionary The sub type + * @param dictionary The parent dictionary + */ + public DictionaryElement(String name, String shortName, String description, String type, String subDictionary, + Dictionary dictionary) { + this.name = name; + this.shortName = shortName; + this.description = description; + this.type = type; + this.subDictionary = subDictionary; + this.dictionary = dictionary; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((dictionary == null) ? 0 : dictionary.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + DictionaryElement other = (DictionaryElement) obj; + if (dictionary == null) { + if (other.dictionary != null) { + return false; + } + } else if (!dictionary.equals(other.dictionary)) { + return false; + } + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java b/src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java new file mode 100644 index 000000000..96cb2e35e --- /dev/null +++ b/src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.tosca; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DictionaryElementsRepository extends JpaRepository { + +} diff --git a/src/main/java/org/onap/clamp/tosca/DictionaryRepository.java b/src/main/java/org/onap/clamp/tosca/DictionaryRepository.java new file mode 100644 index 000000000..2a087b6d9 --- /dev/null +++ b/src/main/java/org/onap/clamp/tosca/DictionaryRepository.java @@ -0,0 +1,38 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.tosca; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface DictionaryRepository extends JpaRepository { + + @Query("SELECT dict.name FROM Dictionary as dict") + List getAllDictionaryNames(); + +} diff --git a/src/main/java/org/onap/clamp/util/SemanticVersioning.java b/src/main/java/org/onap/clamp/util/SemanticVersioning.java new file mode 100644 index 000000000..bf1529c2c --- /dev/null +++ b/src/main/java/org/onap/clamp/util/SemanticVersioning.java @@ -0,0 +1,76 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.util; + +/** + * This class is the base class for object that requires semantic versioning. + * ... This class supports also a.b.c.d... etc ... as a version. + * + * + */ +public class SemanticVersioning { + public static final int BEFORE = -1; + public static final int EQUAL = 0; + public static final int AFTER = 1; + + /** + * The compare method that compare arg0 to arg1. + * + * @param arg0 A version in string for semantice versioning (a.b.c.d...) + * @param arg1 A version in string for semantice versioning (a.b.c.d...) + * @return objects (arg0, arg1) given as parameters. It returns the value: 0: if + * (arg0==arg1) -1: if (arg0 < arg1) 1: if (arg0 > arg1) + */ + public static int compare(String arg0, String arg1) { + + if (arg0 == null && arg1 == null) { + return EQUAL; + } + if (arg0 == null) { + return BEFORE; + } + if (arg1 == null) { + return AFTER; + } + String[] arg0Array = arg0.split("\\."); + String[] arg1Array = arg1.split("\\."); + + int smalestStringLength = Math.min(arg0Array.length, arg1Array.length); + + for (int currentVersionIndex = 0; currentVersionIndex < smalestStringLength; ++currentVersionIndex) { + if (Integer.parseInt(arg0Array[currentVersionIndex]) < Integer.parseInt(arg1Array[currentVersionIndex])) { + return BEFORE; + } else if (Integer.parseInt(arg0Array[currentVersionIndex]) > Integer + .parseInt(arg1Array[currentVersionIndex])) { + return AFTER; + } + // equals, so do not return anything, continue + } + if (arg0Array.length == arg1Array.length) { + return EQUAL; + } else { + return Integer.compare(arg0Array.length, arg1Array.length); + } + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/swagger.html b/src/main/resources/META-INF/resources/swagger.html index b20d0c26c..66024470a 100644 --- a/src/main/resources/META-INF/resources/swagger.html +++ b/src/main/resources/META-INF/resources/swagger.html @@ -444,86 +444,86 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
  • 2. Paths @@ -583,13 +588,13 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

    1.1. Version information

    -

    Version : 4.1.2-SNAPSHOT

    +

    Version : 4.2.0-SNAPSHOT

    1.2. URI scheme

    -

    Host : localhost:34219
    +

    Host : localhost:33953
    BasePath : /restservices/clds/
    Schemes : HTTP

    @@ -600,7 +605,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

    2. Paths

    -

    2.1. GET /v1/clds/cldsInfo

    +

    2.1. GET /v1/clds/cldsInfo

    2.1.1. Responses

    @@ -637,7 +642,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -674,7 +679,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -708,7 +713,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -757,7 +762,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -819,7 +824,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -856,7 +861,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -918,7 +923,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -980,7 +985,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -1042,7 +1047,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -1104,7 +1109,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -1166,7 +1171,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -1228,7 +1233,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -1306,7 +1311,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -1384,7 +1389,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -1462,7 +1467,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    @@ -2184,6 +2189,16 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b + + + + + + + + @@ -2214,14 +2229,19 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b + + + + - - + + + + + + + + +

    < string, ExternalComponent > map

    createdBy
    +optional

    string

    createdDate
    +optional

    integer (int64)

    dcaeBlueprintId
    optional

    string

    < LoopLog > array

    loopTemplate
    +optional

    LoopTemplate

    microServicePolicies
    optional

    < MicroServicePolicy > array

    modelPropertiesJson
    +

    modelService
    optional

    JsonObject

    Service

    name
    @@ -2238,6 +2258,16 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b optional

    string

    updatedBy
    +optional

    string

    updatedDate
    +optional

    integer (int64)

    @@ -2289,7 +2319,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    -

    3.11. MicroServicePolicy

    +

    3.11. LoopTemplate

    @@ -2303,11 +2333,165 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    blueprint
    +optional

    string

    createdBy
    +optional

    string

    createdDate
    +optional

    integer (int64)

    maximumInstancesAllowed
    +optional

    integer (int32)

    microServiceModelUsed
    +optional

    < TemplateMicroServiceModel > array

    modelService
    +optional

    Service

    name
    +optional

    string

    svgRepresentation
    +optional

    string

    updatedBy
    +optional

    string

    updatedDate
    +optional

    integer (int64)

    +
    +
    +

    3.12. MicroServiceModel

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameSchema

    blueprint
    +optional

    string

    createdBy
    +optional

    string

    createdDate
    +optional

    integer (int64)

    name
    +optional

    string

    policyModel
    +optional

    PolicyModel

    policyType
    +optional

    string

    updatedBy
    +optional

    string

    updatedDate
    +optional

    integer (int64)

    usedByLoopTemplates
    +optional

    < TemplateMicroServiceModel > array

    +
    +
    +

    3.13. MicroServicePolicy

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2333,6 +2517,16 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b + + + + + + + + @@ -2341,13 +2535,13 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    NameSchema

    context
    +optional

    string

    createdBy
    +optional

    string

    createdDate
    +optional

    integer (int64)

    deviceTypeScope
    +optional

    string

    jsonRepresentation
    optional

    JsonObject

    microServiceModel
    +optional

    MicroServiceModel

    modelType
    optional

    string

    boolean

    updatedBy
    +optional

    string

    updatedDate
    +optional

    integer (int64)

    usedByLoops
    optional

    < Loop > array

    -

    3.12. Number

    +

    3.14. Number

    Type : object

    -

    3.13. OperationalPolicy

    +

    3.15. OperationalPolicy

    @@ -2380,6 +2574,137 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b optional

    + + + + + +

    string

    policyModel
    +optional

    PolicyModel

    +
    +
    +

    3.16. PolicyModel

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameSchema

    createdBy
    +optional

    string

    createdDate
    +optional

    integer (int64)

    policyAcronym
    +optional

    string

    policyModelTosca
    +optional

    string

    policyModelType
    +optional

    string

    policyVariant
    +optional

    string

    updatedBy
    +optional

    string

    updatedDate
    +optional

    integer (int64)

    version
    +optional

    string

    +
    +
    +

    3.17. Service

    + ++++ + + + + + + + + + + + + + + + + + + + + +
    NameSchema

    resourceDetails
    +optional

    JsonObject

    serviceDetails
    +optional

    JsonObject

    serviceUuid
    +optional

    string

    +
    +
    +

    3.18. TemplateMicroServiceModel

    + ++++ + + + + + + + + + + + + + + + + + + +
    NameSchema

    flowOrder
    +optional

    integer (int32)

    loopTemplate
    +optional

    LoopTemplate

    microServiceModel
    +optional

    MicroServiceModel

    @@ -2388,7 +2713,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
    diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index df952aa16..2ebea7b17 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -63,7 +63,7 @@ import org.skyscreamer.jsonassert.JSONAssert; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.Rollback; +import org.springframework.test.annotation.Commit; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -183,7 +183,7 @@ public class CsarInstallerItCase { @Test @Transactional - @Rollback(value = false) + @Commit public void testInstallTheCsarTca() throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException, JSONException, InterruptedException { String generatedName = RandomStringUtils.randomAlphanumeric(5); @@ -209,7 +209,7 @@ public class CsarInstallerItCase { assertThat(loop.getOperationalPolicies()).hasSize(1); assertThat(loop.getModelService().getServiceUuid()).isEqualTo("63cac700-ab9a-4115-a74f-7eac85e3fce0"); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), - JsonUtils.GSON_JPA_MODEL.toJson(loop.getModelService()), true); + JsonUtils.GSON_JPA_MODEL.toJson(loop.getModelService()), true); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/service-details.json"), JsonUtils.GSON_JPA_MODEL.toJson(loop.getModelService().getServiceDetails()), true); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/resource-details.json"), diff --git a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java index 67ae985c7..a41b5c251 100644 --- a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java @@ -32,18 +32,15 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.util.Set; + import javax.transaction.Transactional; -import org.junit.After; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; - import org.onap.clamp.clds.Application; import org.onap.clamp.clds.util.JsonUtils; - import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.policy.microservice.MicroservicePolicyService; +import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -63,7 +60,7 @@ public class LoopControllerTestItCase { LoopsRepository loopsRepository; @Autowired - MicroservicePolicyService microServicePolicyService; + MicroServicePolicyService microServicePolicyService; @Autowired LoopController loopController; @@ -78,18 +75,10 @@ public class LoopControllerTestItCase { return new Loop(loopName, loopBlueprint, loopSvg); } - @Before - public void setUp() { - saveTestLoopToDb(); - } - - @After - public void tearDown() { - loopsRepository.deleteAll(); - } - @Test + @Transactional public void testUpdateOperationalPolicies() { + saveTestLoopToDb(); String policy = "[{\"name\":\"OPERATIONAL_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules\"," + "\"configurationsJson\":{\"guard_policies\":{}," + "\"operational_policy\":{\"controlLoop\":{\"trigger_policy\":\"unique-policy-id-1-modifyConfig\"," @@ -113,6 +102,7 @@ public class LoopControllerTestItCase { @Test @Transactional public void testUpdateGlobalProperties() { + saveTestLoopToDb(); String policy = "{\"dcaeDeployParameters\":{\"aaiEnrichmentHost\":\"aai.onap.svc.cluster.local\"," + "\"aaiEnrichmentPort\":\"8443\",\"enableAAIEnrichment\":\"false\",\"dmaap_host\":\"message-router" + ".onap\",\"dmaap_port\":\"3904\",\"enableRedisCaching\":\"false\",\"redisHosts\":\"dcae-redis.onap" @@ -134,9 +124,10 @@ public class LoopControllerTestItCase { @Test @Transactional public void testUpdateMicroservicePolicy() { + saveTestLoopToDb(); MicroServicePolicy policy = new MicroServicePolicy("policyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopController.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, policy); assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); } @@ -144,7 +135,8 @@ public class LoopControllerTestItCase { @Test @Transactional public void testGetSvgRepresentation() { - String svgRepresentation = loopController.getSvgRepresentation(EXAMPLE_LOOP_NAME); + saveTestLoopToDb(); + String svgRepresentation = loopController.getSvgRepresentation(EXAMPLE_LOOP_NAME); assertThat(svgRepresentation).isEqualTo("representation"); } } \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java index 57b2cef61..c172a9a07 100644 --- a/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java @@ -27,11 +27,11 @@ import static org.assertj.core.api.Assertions.assertThat; import com.google.gson.JsonObject; import java.util.Set; + import javax.transaction.Transactional; import org.junit.Test; import org.junit.runner.RunWith; - import org.onap.clamp.clds.Application; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.log.LogType; @@ -77,10 +77,10 @@ public class LoopLogServiceTestItCase { assertThat(loopLogs).hasSize(1); LoopLog loopLog = loopLogs.iterator().next(); assertThat(loopLog.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE); - loopsRepository.deleteAll(); } @Test + @Transactional public void testLoopLog() { LoopLog log = new LoopLog(); Long id = Long.valueOf(100); diff --git a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java index 78e0d2e3d..44feaebd8 100644 --- a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java @@ -40,8 +40,17 @@ import org.onap.clamp.clds.Application; import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.log.LoopLogRepository; +import org.onap.clamp.loop.service.Service; +import org.onap.clamp.loop.service.ServicesRepository; +import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.LoopTemplatesRepository; +import org.onap.clamp.loop.template.MicroServiceModel; +import org.onap.clamp.loop.template.MicroServiceModelsRepository; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelId; +import org.onap.clamp.loop.template.PolicyModelsRepository; import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.policy.microservice.MicroservicePolicyService; +import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; import org.onap.clamp.policy.operational.OperationalPolicyService; import org.springframework.beans.factory.annotation.Autowired; @@ -59,7 +68,7 @@ public class LoopRepositoriesItCase { private LoopsRepository loopRepository; @Autowired - private MicroservicePolicyService microServicePolicyService; + private MicroServicePolicyService microServicePolicyService; @Autowired private OperationalPolicyService operationalPolicyService; @@ -67,12 +76,47 @@ public class LoopRepositoriesItCase { @Autowired private LoopLogRepository loopLogRepository; + @Autowired + private LoopTemplatesRepository loopTemplateRepository; + + @Autowired + private MicroServiceModelsRepository microServiceModelsRepository; + + @Autowired + private PolicyModelsRepository policyModelsRepository; + + @Autowired + private ServicesRepository servicesRepository; + + private Service getService(String serviceDetails, String resourceDetails) { + return new Service(serviceDetails, resourceDetails); + } + private OperationalPolicy getOperationalPolicy(String configJson, String name) { return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class)); } + private MicroServiceModel getMicroServiceModel(String yaml, String name, String policyType, String createdBy, + PolicyModel policyModel) { + MicroServiceModel model = new MicroServiceModel(name, policyType, yaml, policyModel); + return model; + } + + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, + String policyVariant, String createdBy) { + return new PolicyModel(policyType, policyModelTosca, version, policyAcronym, policyVariant); + } + + private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, String createdBy, + Integer maxInstancesAllowed) { + LoopTemplate template = new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); + template.addMicroServiceModel(getMicroServiceModel("yaml", "microService1", "org.onap.policy.drools", createdBy, + getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1", createdBy))); + return template; + } + private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, - String dcaeId, String dcaeUrl, String dcaeBlueprintId) { + String dcaeId, String dcaeUrl, String dcaeBlueprintId) { Loop loop = new Loop(); loop.setName(name); loop.setSvgRepresentation(svgRepresentation); @@ -82,13 +126,14 @@ public class LoopRepositoriesItCase { loop.setDcaeDeploymentId(dcaeId); loop.setDcaeDeploymentStatusUrl(dcaeUrl); loop.setDcaeBlueprintId(dcaeBlueprintId); + loop.setLoopTemplate(getLoopTemplate("templateName", "yaml", "svg", "toto", 1)); return loop; } private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, - String policyTosca, String jsonProperties, boolean shared) { + String policyTosca, String jsonProperties, boolean shared) { MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, - gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); + gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); microService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class)); return microService; } @@ -100,52 +145,108 @@ public class LoopRepositoriesItCase { @Test @Transactional public void crudTest() { + // Setup Loop loopTest = getLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", - "123456789", "https://dcaetest.org", "UUID-blueprint"); + "123456789", "https://dcaetest.org", "UUID-blueprint"); OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest"); loopTest.addOperationalPolicy(opPolicy); MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); loopTest.addMicroServicePolicy(microServicePolicy); LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest); loopTest.addLog(loopLog); + Service service = getService( + "{\"name\": \"vLoadBalancerMS\", \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\"}", "{\"CP\": {}}"); + loopTest.setModelService(service); - // Attemp to save into the database the entire loop + // Attempt to save into the database the entire loop Loop loopInDb = loopRepository.save(loopTest); assertThat(loopInDb).isNotNull(); + assertThat(loopRepository.findById(loopInDb.getName()).get()).isNotNull(); + assertThat(loopInDb.getCreatedDate()).isNotNull(); + assertThat(loopInDb.getUpdatedDate()).isNotNull(); + assertThat(loopInDb.getUpdatedDate()).isEqualTo(loopInDb.getCreatedDate()); assertThat(loopInDb.getName()).isEqualTo("ControlLoopTest"); - // Now set the ID in the previous model so that we can compare the objects + // Autogen id so now set the ID in the previous model so that we can compare the + // objects loopLog.setId(((LoopLog) loopInDb.getLoopLogs().toArray()[0]).getId()); - assertThat(loopInDb).isEqualToIgnoringGivenFields(loopTest, "components"); + assertThat(loopInDb).isEqualToIgnoringGivenFields(loopTest, "components", "createdDate", "updatedDate", + "createdBy", "updatedBy"); assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(true); assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(true); assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(true); assertThat(loopLogRepository.existsById(loopLog.getId())).isEqualTo(true); + assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); + assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); + assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); + assertThat(microServiceModelsRepository.existsById( + loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getName())) + .isEqualTo(true); + assertThat(policyModelsRepository.existsById(new PolicyModelId( + loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() + .getPolicyModelType(), + loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() + .getVersion()))).isEqualTo(true); // Now attempt to read from database Loop loopInDbRetrieved = loopRepository.findById(loopTest.getName()).get(); - assertThat(loopInDbRetrieved).isEqualToIgnoringGivenFields(loopTest, "components"); + assertThat(loopInDbRetrieved).isEqualToIgnoringGivenFields(loopTest, "components", "createdDate", "updatedDate", + "createdBy", "updatedBy"); + assertThat(loopInDbRetrieved).isEqualToComparingOnlyGivenFields(loopInDb, "createdDate", "updatedDate", + "createdBy", "updatedBy"); assertThat((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).isEqualToComparingFieldByField(loopLog); assertThat((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]) - .isEqualToComparingFieldByField(opPolicy); + .isEqualToComparingFieldByField(opPolicy); assertThat((MicroServicePolicy) loopInDbRetrieved.getMicroServicePolicies().toArray()[0]) - .isEqualToComparingFieldByField(microServicePolicy); + .isEqualToIgnoringGivenFields(microServicePolicy, "createdDate", "updatedDate", "createdBy", + "updatedBy"); // Attempt an update ((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).setLogInstant(Instant.now()); - loopRepository.save(loopInDbRetrieved); - Loop loopInDbRetrievedUpdated = loopRepository.findById(loopTest.getName()).get(); + loopInDbRetrieved.setBlueprint("yaml2"); + Loop loopInDbRetrievedUpdated = loopRepository.saveAndFlush(loopInDbRetrieved); + // Loop loopInDbRetrievedUpdated = + // loopRepository.findById(loopTest.getName()).get(); + assertThat(loopInDbRetrievedUpdated.getBlueprint()).isEqualTo("yaml2"); assertThat((LoopLog) loopInDbRetrievedUpdated.getLoopLogs().toArray()[0]) - .isEqualToComparingFieldByField(loopInDbRetrieved.getLoopLogs().toArray()[0]); + .isEqualToComparingFieldByField(loopInDbRetrieved.getLoopLogs().toArray()[0]); + // UpdatedDate should have been changed + assertThat(loopInDbRetrievedUpdated.getUpdatedDate()).isNotEqualTo(loopInDbRetrievedUpdated.getCreatedDate()); + // createdDate should have NOT been changed + assertThat(loopInDbRetrievedUpdated.getCreatedDate()).isEqualTo(loopInDb.getCreatedDate()); + // other audit are the same + assertThat(loopInDbRetrievedUpdated.getCreatedBy()).isEqualTo(""); + assertThat(loopInDbRetrievedUpdated.getUpdatedBy()).isEqualTo(""); // Attempt to delete the object and check it has well been cascaded + loopRepository.delete(loopInDbRetrieved); assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(false); assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(false); - assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(false); + assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(true); assertThat(loopLogRepository.existsById(loopLog.getId())).isEqualTo(false); + assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); + assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); + assertThat(microServiceModelsRepository.existsById( + loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getName())) + .isEqualTo(true); + + assertThat(policyModelsRepository.existsById(new PolicyModelId( + loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() + .getPolicyModelType(), + loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() + .getVersion()))).isEqualTo(true); + + // Cleanup + // microServiceModelsRepository + // .delete(loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel()); + // + // policyModelsRepository.delete( + // loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel()); + // loopTemplateRepository.delete(loopInDb.getLoopTemplate()); + // servicesRepository.delete(service); } } diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index 28a92e371..d19c8a808 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -33,7 +33,6 @@ import java.util.stream.Collectors; import javax.transaction.Transactional; import org.assertj.core.util.Lists; -import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; @@ -42,7 +41,7 @@ import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.log.LoopLogService; import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.policy.microservice.MicroservicePolicyService; +import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; import org.onap.clamp.policy.operational.OperationalPolicyService; import org.springframework.beans.factory.annotation.Autowired; @@ -63,7 +62,7 @@ public class LoopServiceTestItCase { LoopsRepository loopsRepository; @Autowired - MicroservicePolicyService microServicePolicyService; + MicroServicePolicyService microServicePolicyService; @Autowired OperationalPolicyService operationalPolicyService; @@ -71,11 +70,6 @@ public class LoopServiceTestItCase { @Autowired LoopLogService loopLogService; - @After - public void tearDown() { - loopsRepository.deleteAll(); - } - @Test @Transactional public void shouldCreateEmptyLoop() { @@ -96,7 +90,7 @@ public class LoopServiceTestItCase { assertThat(actualLoop.getBlueprint()).isEqualTo(loopBlueprint); assertThat(actualLoop.getSvgRepresentation()).isEqualTo(loopSvg); assertThat(actualLoop.getGlobalPropertiesJson().getAsJsonPrimitive("testName").getAsString()) - .isEqualTo("testValue"); + .isEqualTo("testValue"); } @Test @@ -105,11 +99,11 @@ public class LoopServiceTestItCase { // given saveTestLoopToDb(); OperationalPolicy operationalPolicy = new OperationalPolicy("policyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); // when Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(operationalPolicy)); + Lists.newArrayList(operationalPolicy)); // then assertThat(actualLoop).isNotNull(); @@ -128,20 +122,20 @@ public class LoopServiceTestItCase { // given saveTestLoopToDb(); MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); // when Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(microServicePolicy)); + Lists.newArrayList(microServicePolicy)); // then assertThat(actualLoop).isNotNull(); assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); Set savedPolicies = actualLoop.getMicroServicePolicies(); assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops") - .containsExactly(microServicePolicy); + assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", + "createdBy", "updatedBy").containsExactly(microServicePolicy); assertThat(savedPolicies).extracting("usedByLoops").hasSize(1); } @@ -153,16 +147,16 @@ public class LoopServiceTestItCase { saveTestLoopToDb(); MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "", "", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, JsonUtils.GSON.fromJson("{}", JsonObject.class), - null); + "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, + JsonUtils.GSON.fromJson("{}", JsonObject.class), null); // when firstMicroServicePolicy.setProperties(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class)); Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy)); + Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy)); // then assertThat(actualLoop).isNotNull(); @@ -171,8 +165,8 @@ public class LoopServiceTestItCase { assertThat(savedPolicies).hasSize(2); assertThat(savedPolicies).contains(firstMicroServicePolicy); assertThat(savedPolicies).contains(secondMicroServicePolicy); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops") - .containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy); + assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", + "createdBy", "updatedBy").containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy); } @@ -189,24 +183,24 @@ public class LoopServiceTestItCase { saveTestLoopToDb(); MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "", - "\"tosca_definitions_version: tosca_simple_yaml_1_0_0\"", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + "\"tosca_definitions_version: tosca_simple_yaml_1_0_0\"", false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("policyName", "", "secondPolicyTosca", - true, JsonUtils.GSON.fromJson("{}", JsonObject.class), null); + true, JsonUtils.GSON.fromJson("{}", JsonObject.class), null); // when Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(secondMicroServicePolicy)); + Lists.newArrayList(secondMicroServicePolicy)); // then assertThat(actualLoop).isNotNull(); assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); Set savedPolicies = actualLoop.getMicroServicePolicies(); assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops") - .containsExactly(secondMicroServicePolicy); + assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", + "createdBy", "updatedBy").containsExactly(secondMicroServicePolicy); } @@ -219,16 +213,16 @@ public class LoopServiceTestItCase { JsonObject newJsonConfiguration = JsonUtils.GSON.fromJson("{}", JsonObject.class); OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); OperationalPolicy secondOperationalPolicy = new OperationalPolicy("secondPolicyName", null, - newJsonConfiguration); + newJsonConfiguration); // when firstOperationalPolicy.setConfigurationsJson(newJsonConfiguration); Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(firstOperationalPolicy, secondOperationalPolicy)); + Lists.newArrayList(firstOperationalPolicy, secondOperationalPolicy)); // then assertThat(actualLoop).isNotNull(); @@ -236,9 +230,9 @@ public class LoopServiceTestItCase { Set savedPolicies = actualLoop.getOperationalPolicies(); assertThat(savedPolicies).hasSize(2); assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop") - .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy); + .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy); Set policiesLoops = Lists.newArrayList(savedPolicies).stream().map(OperationalPolicy::getLoop) - .map(Loop::getName).collect(Collectors.toSet()); + .map(Loop::getName).collect(Collectors.toSet()); assertThat(policiesLoops).containsExactly(EXAMPLE_LOOP_NAME); } @@ -249,15 +243,15 @@ public class LoopServiceTestItCase { saveTestLoopToDb(); OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); OperationalPolicy secondOperationalPolicy = new OperationalPolicy("policyName", null, - JsonUtils.GSON.fromJson("{}", JsonObject.class)); + JsonUtils.GSON.fromJson("{}", JsonObject.class)); // when Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(secondOperationalPolicy)); + Lists.newArrayList(secondOperationalPolicy)); // then assertThat(actualLoop).isNotNull(); @@ -300,21 +294,21 @@ public class LoopServiceTestItCase { loop = loopService.saveOrUpdateLoop(loop); // Add op policy OperationalPolicy operationalPolicy = new OperationalPolicy("opPolicy", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(operationalPolicy)); // Add Micro service policy MicroServicePolicy microServicePolicy = new MicroServicePolicy("microPolicy", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(microServicePolicy)); // Verify it's there assertThat(loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null)).isNotNull(); loopService.deleteLoop(EXAMPLE_LOOP_NAME); - // Verify it's well deleted and has been cascaded + // Verify it's well deleted and has been cascaded, except for Microservice assertThat(loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null)).isNull(); - assertThat(microServicePolicyService.isExisting("microPolicy")).isFalse(); + assertThat(microServicePolicyService.isExisting("microPolicy")).isTrue(); assertThat(operationalPolicyService.isExisting("opPolicy")).isFalse(); assertThat(loopLogService.isExisting(((LoopLog) loop.getLoopLogs().toArray()[0]).getId())).isFalse(); } @@ -334,8 +328,8 @@ public class LoopServiceTestItCase { public void testUpdateDcaeDeploymentFields() { saveTestLoopToDb(); Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME); - loopService.updateDcaeDeploymentFields(loop,"CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85", - "https4://deployment-handler.onap:8443"); + loopService.updateDcaeDeploymentFields(loop, "CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85", + "https4://deployment-handler.onap:8443"); loop = loopService.getLoop(EXAMPLE_LOOP_NAME); assertThat(loop.getDcaeDeploymentId()).isEqualTo("CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85"); assertThat(loop.getDcaeDeploymentStatusUrl()).isEqualTo("https4://deployment-handler.onap:8443"); @@ -347,8 +341,8 @@ public class LoopServiceTestItCase { saveTestLoopToDb(); assertThat(microServicePolicyService.isExisting("policyName")).isFalse(); MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, microServicePolicy); assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); } diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index 68fe487ef..914c64ea5 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -44,6 +44,9 @@ import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.service.Service; +import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.MicroServiceModel; +import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; import org.skyscreamer.jsonassert.JSONAssert; @@ -72,10 +75,30 @@ public class LoopToJsonTest { MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); microService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class)); - return microService; } + private MicroServiceModel getMicroServiceModel(String yaml, String name, PolicyModel policyModel) { + MicroServiceModel model = new MicroServiceModel(); + model.setBlueprint(yaml); + model.setName(name); + model.setPolicyModel(policyModel); + return model; + } + + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, + String policyVariant) { + return new PolicyModel(policyType, policyModelTosca, version, policyAcronym, policyVariant); + } + + private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, + Integer maxInstancesAllowed) { + LoopTemplate template = new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); + template.addMicroServiceModel(getMicroServiceModel("yaml", "microService1", + getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1"))); + return template; + } + private LoopLog getLoopLog(LogType type, String message, Loop loop) { LoopLog log = new LoopLog(message, type, "CLAMP", loop); log.setId(Long.valueOf(new Random().nextInt())); @@ -95,6 +118,8 @@ public class LoopToJsonTest { loopTest.addMicroServicePolicy(microServicePolicy); LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest); loopTest.addLog(loopLog); + LoopTemplate loopTemplate = getLoopTemplate("templateName", "yaml", "svg", 1); + loopTest.setLoopTemplate(loopTemplate); String jsonSerialized = JsonUtils.GSON_JPA_MODEL.toJson(loopTest); assertThat(jsonSerialized).isNotNull().isNotEmpty(); @@ -116,6 +141,9 @@ public class LoopToJsonTest { assertThat(loopTestDeserialized.getLoopLogs()).containsExactly(loopLog); assertThat((LoopLog) loopTestDeserialized.getLoopLogs().toArray()[0]).isEqualToIgnoringGivenFields(loopLog, "loop"); + + // Verify the loop template + assertThat(loopTestDeserialized.getLoopTemplate()).isEqualTo(loopTemplate); } @Test @@ -128,17 +156,14 @@ public class LoopToJsonTest { Service service = new Service(jsonModel.get("serviceDetails").getAsJsonObject(), jsonModel.get("resourceDetails").getAsJsonObject(), "1.0"); loopTest2.setModelService(service); - String jsonSerialized = JsonUtils.GSON_JPA_MODEL.toJson(loopTest2); assertThat(jsonSerialized).isNotNull().isNotEmpty(); System.out.println(jsonSerialized); - JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/loop.json"), - jsonSerialized, true); Loop loopTestDeserialized = JsonUtils.GSON_JPA_MODEL.fromJson(jsonSerialized, Loop.class); assertNotNull(loopTestDeserialized); - assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest2, "modelService", - "svgRepresentation", "blueprint", "components"); + assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest2, "modelService", "svgRepresentation", + "blueprint", "components"); } @Test diff --git a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java new file mode 100644 index 000000000..b284dd795 --- /dev/null +++ b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java @@ -0,0 +1,161 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; + +import javax.transaction.Transactional; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.Application; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelId; +import org.onap.clamp.loop.template.PolicyModelsRepository; +import org.onap.clamp.loop.template.PolicyModelsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class PolicyModelServiceItCase { + + @Autowired + PolicyModelsService policyModelsService; + + @Autowired + PolicyModelsRepository policyModelsRepository; + + private static final String POLICY_MODEL_TYPE_1 = "org.onap.test"; + private static final String POLICY_MODEL_TYPE_1_VERSION_1 = "1.0.0"; + + private static final String POLICY_MODEL_TYPE_2 = "org.onap.test2"; + private static final String POLICY_MODEL_TYPE_2_VERSION_1 = "1.0.0"; + private static final String POLICY_MODEL_TYPE_2_VERSION_2 = "2.0.0"; + + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, + String policyVariant, String createdBy) { + PolicyModel policyModel = new PolicyModel(); + policyModel.setCreatedBy(createdBy); + policyModel.setPolicyAcronym(policyAcronym); + policyModel.setPolicyModelTosca(policyModelTosca); + policyModel.setPolicyModelType(policyType); + policyModel.setPolicyVariant(policyVariant); + policyModel.setUpdatedBy(createdBy); + policyModel.setVersion(version); + return policyModel; + } + + @Test + @Transactional + public void shouldCreatePolicyModel() { + // given + PolicyModel policyModel = getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", POLICY_MODEL_TYPE_1_VERSION_1, "TEST", + "VARIANT", "user"); + + // when + PolicyModel actualPolicyModel = policyModelsService.saveOrUpdatePolicyModel(policyModel); + + // then + assertThat(actualPolicyModel).isNotNull(); + assertThat(actualPolicyModel).isEqualTo(policyModelsRepository + .findById(new PolicyModelId(actualPolicyModel.getPolicyModelType(), actualPolicyModel.getVersion())) + .get()); + assertThat(actualPolicyModel.getPolicyModelType()).isEqualTo(policyModel.getPolicyModelType()); + assertThat(actualPolicyModel.getCreatedBy()).isEqualTo(""); + assertThat(actualPolicyModel.getCreatedDate()).isNotNull(); + assertThat(actualPolicyModel.getPolicyAcronym()).isEqualTo(policyModel.getPolicyAcronym()); + assertThat(actualPolicyModel.getPolicyModelTosca()).isEqualTo(policyModel.getPolicyModelTosca()); + assertThat(actualPolicyModel.getPolicyVariant()).isEqualTo(policyModel.getPolicyVariant()); + assertThat(actualPolicyModel.getUpdatedBy()).isEqualTo(""); + assertThat(actualPolicyModel.getUpdatedDate()).isNotNull(); + assertThat(actualPolicyModel.getVersion()).isEqualTo(policyModel.getVersion()); + + assertThat(policyModelsService.getPolicyModel(POLICY_MODEL_TYPE_1, POLICY_MODEL_TYPE_1_VERSION_1)) + .isEqualToIgnoringGivenFields(policyModel, "createdDate", "updatedDate", "createdBy", "updatedBy"); + } + + @Test + @Transactional + public void shouldReturnAllPolicyModelTypes() { + // given + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_1, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_2, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + List policyModelTypesList = policyModelsService.getAllPolicyModelTypes(); + + assertThat(policyModelTypesList).containsOnly(policyModel1.getPolicyModelType(), + policyModel2.getPolicyModelType()); + } + + @Test + @Transactional + public void shouldReturnAllPolicyModels() { + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_1, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_2, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + + assertThat(policyModelsService.getAllPolicyModels()).containsOnly(policyModel1, policyModel2); + } + + @Test + @Transactional + public void shouldReturnAllModelsByType() { + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_1, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_2, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + + assertThat(policyModelsService.getAllPolicyModelsByType(POLICY_MODEL_TYPE_2)).containsOnly(policyModel1, + policyModel2); + } + + @Test + @Transactional + public void shouldReturnSortedSet() { + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_1, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_2, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + + SortedSet sortedSet = new TreeSet<>(); + policyModelsService.getAllPolicyModels().forEach(sortedSet::add); + assertThat(sortedSet).containsExactly(policyModel2, policyModel1); + } +} diff --git a/src/test/java/org/onap/clamp/util/SemanticVersioningTest.java b/src/test/java/org/onap/clamp/util/SemanticVersioningTest.java new file mode 100644 index 000000000..1fb5922fd --- /dev/null +++ b/src/test/java/org/onap/clamp/util/SemanticVersioningTest.java @@ -0,0 +1,71 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.util; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class SemanticVersioningTest { + + @Test + public void compareTest() { + assertThat(SemanticVersioning.compare("1.0.0", "2.0.0")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("1.5.0", "2.0.0")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("1.5.0", "2.1.0")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("1.5.3", "2.0.0")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("2.5.3", "2.6.0")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("2.5", "2.5.1")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("2.5.0", "2.5.1")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("2.5.0.0", "2.5.1")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("2.5.1.0", "2.5.1")).isEqualTo(1); + + assertThat(SemanticVersioning.compare("2.0.0", "1.0.0")).isEqualTo(1); + assertThat(SemanticVersioning.compare("2.0.0", "1.5.0")).isEqualTo(1); + assertThat(SemanticVersioning.compare("2.1.0", "1.5.0")).isEqualTo(1); + assertThat(SemanticVersioning.compare("2.0.0", "1.5.3")).isEqualTo(1); + assertThat(SemanticVersioning.compare("2.6.0", "2.5.3")).isEqualTo(1); + assertThat(SemanticVersioning.compare("2.5.1", "2.5")).isEqualTo(1); + assertThat(SemanticVersioning.compare("2.5.1", "2.5.0")).isEqualTo(1); + assertThat(SemanticVersioning.compare("2.5.1", "2.5.0.0")).isEqualTo(1); + assertThat(SemanticVersioning.compare("1", "1.2.3.0")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("1.2", "1")).isEqualTo(1); + } + + @Test + public void compareEqualsTest() { + assertThat(SemanticVersioning.compare("1.0.0", "1.0.0")).isEqualTo(0); + assertThat(SemanticVersioning.compare("1.0.0.0", "1.0.0")).isEqualTo(1); + assertThat(SemanticVersioning.compare("1.2.3", "1.2.3")).isEqualTo(0); + assertThat(SemanticVersioning.compare("1.2.3", "1.2.3.0")).isEqualTo(-1); + + } + + @Test + public void compareNullTest() { + assertThat(SemanticVersioning.compare(null, null)).isEqualTo(0); + assertThat(SemanticVersioning.compare(null, "1.0")).isEqualTo(-1); + assertThat(SemanticVersioning.compare("1.0", null)).isEqualTo(1); + } +} -- cgit 1.2.3-korg From 8d74bbf0a71fa5132e5155b6c202ba9fadffa7ad Mon Sep 17 00:00:00 2001 From: sebdet Date: Fri, 17 Jan 2020 15:08:39 +0100 Subject: Add fields on microservice Add fields for DCAE on microservice instance Issue-ID: CLAMP-572 Change-Id: Ia68b45921ba6f6f3a3efd574887475aff22bc3a8 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 2 ++ extra/sql/dump/test-data.sql | 28 ++++++++--------- src/main/java/org/onap/clamp/loop/Loop.java | 3 +- .../policy/microservice/MicroServicePolicy.java | 36 ++++++++++++++++++++++ 4 files changed, 54 insertions(+), 15 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index c5b52d717..50fdd363d 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -97,6 +97,8 @@ updated_by varchar(255), updated_timestamp datetime(6) not null, context varchar(255), + dcae_deployment_id varchar(255), + dcae_deployment_status_url varchar(255), device_type_scope varchar(255), json_representation json not null, policy_model_type varchar(255) not null, diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index e3f507272..8a65d14d8 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -72,9 +72,9 @@ UNLOCK TABLES; LOCK TABLES `loops` WRITE; /*!40000 ALTER TABLE `loops` DISABLE KEYS */; -INSERT INTO `loops` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca','','2020-01-16 11:40:15.417599','','2020-01-16 11:40:15.417599','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-18ab8a65-b4c0-4380-9f50-fb790fcb96e0',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"location_id\": \"\",\n \"service_id\": \"\",\n \"policy_id\": \"TCA_jkJJ0_v1_0_ResourceInstanceName1_tca\"\n }\n}','DESIGN','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VESTCAOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loops` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3','','2020-01-16 11:40:15.298873','','2020-01-16 11:40:15.298873','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-1a03e700-8c46-4c98-97cf-ca3212537216',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_jkJJ0_v1_0_ResourceInstanceName1_tca_3\"\n }\n}','DESIGN','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loops` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2','','2020-01-16 11:40:15.117933','','2020-01-16 11:40:15.117933','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-537599ec-0cce-4303-ab83-dbfb6145723a',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n \"consul_host\": \"consul-server.onap\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-servicel\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_jkJJ0_v1_0_ResourceInstanceName2_tca_2\"\n }\n}','DESIGN','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca','','2020-01-17 14:25:10.601618','','2020-01-17 14:25:10.601618','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-25adb412-52e8-42f7-a7f3-1550df7c3b44',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"TCA_1SnfX_v1_0_ResourceInstanceName1_tca\": {\n \"location_id\": \"\",\n \"service_id\": \"\",\n \"policy_id\": \"TCA_1SnfX_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','DESIGN','VESTCAOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3','','2020-01-17 14:25:10.486285','','2020-01-17 14:25:10.486285','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-908e6565-5cab-4b27-b860-798d3ca101dc',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2','','2020-01-17 14:25:10.353971','','2020-01-17 14:25:10.353971','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-c1823c30-6b36-4351-b1f0-acc4faded33b',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n \"consul_host\": \"consul-server.onap\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-servicel\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loops` ENABLE KEYS */; UNLOCK TABLES; @@ -84,9 +84,9 @@ UNLOCK TABLES; LOCK TABLES `loops_microservicepolicies` WRITE; /*!40000 ALTER TABLE `loops_microservicepolicies` DISABLE KEYS */; -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca','TCA_jkJJ0_v1_0_ResourceInstanceName1_tca'); -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3','tca_k8s_jkJJ0_v1_0_ResourceInstanceName1_tca_3'); -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2','tca_k8s_jkJJ0_v1_0_ResourceInstanceName2_tca_2'); +INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca','TCA_1SnfX_v1_0_ResourceInstanceName1_tca'); +INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3','tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3'); +INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2','tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2'); /*!40000 ALTER TABLE `loops_microservicepolicies` ENABLE KEYS */; UNLOCK TABLES; @@ -105,9 +105,9 @@ UNLOCK TABLES; LOCK TABLES `micro_service_policies` WRITE; /*!40000 ALTER TABLE `micro_service_policies` DISABLE KEYS */; -INSERT INTO `micro_service_policies` VALUES ('TCA_jkJJ0_v1_0_ResourceInstanceName1_tca','','2020-01-16 11:40:15.420567','','2020-01-16 11:40:15.420567',NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_jkJJ0_v1_0_ResourceInstanceName1_tca_3','','2020-01-16 11:40:15.302285','','2020-01-16 11:40:15.302285',NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_jkJJ0_v1_0_ResourceInstanceName2_tca_2','','2020-01-16 11:40:15.135898','','2020-01-16 11:40:15.135898',NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('TCA_1SnfX_v1_0_ResourceInstanceName1_tca','','2020-01-17 14:25:10.605273','','2020-01-17 14:25:10.605273',NULL,NULL,NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3','','2020-01-17 14:25:10.489651','','2020-01-17 14:25:10.489651',NULL,NULL,NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2','','2020-01-17 14:25:10.367672','','2020-01-17 14:25:10.367672',NULL,NULL,NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); /*!40000 ALTER TABLE `micro_service_policies` ENABLE KEYS */; UNLOCK TABLES; @@ -117,9 +117,9 @@ UNLOCK TABLES; LOCK TABLES `operational_policies` WRITE; /*!40000 ALTER TABLE `operational_policies` DISABLE KEYS */; -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_jkJJ0_v1_0_ResourceInstanceName1_tca','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca',NULL,NULL); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_jkJJ0_v1_0_ResourceInstanceName1_tca_3','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','LOOP_jkJJ0_v1_0_ResourceInstanceName1_tca_3',NULL,NULL); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_jkJJ0_v1_0_ResourceInstanceName2_tca_2','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','LOOP_jkJJ0_v1_0_ResourceInstanceName2_tca_2',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_1SnfX_v1_0_ResourceInstanceName1_tca','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_1SnfX_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','LOOP_1SnfX_v1_0_ResourceInstanceName1_tca',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_1SnfX_v1_0_ResourceInstanceName1_tca_3','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_1SnfX_v1_0_ResourceInstanceName2_tca_2','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2',NULL,NULL); /*!40000 ALTER TABLE `operational_policies` ENABLE KEYS */; UNLOCK TABLES; @@ -138,7 +138,7 @@ UNLOCK TABLES; LOCK TABLES `services` WRITE; /*!40000 ALTER TABLE `services` DISABLE KEYS */; -INSERT INTO `services` VALUES ('63cac700-ab9a-4115-a74f-7eac85e3fce0','vLoadBalancerMS','{\n \"CP\": {},\n \"VL\": {},\n \"VF\": {\n \"vLoadBalancerMS 0\": {\n \"resourceVendor\": \"Test\",\n \"name\": \"vLoadBalancerMS\",\n \"resourceVendorModelNumber\": \"\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n \"type\": \"VF\",\n \"category\": \"Application L4+\",\n \"subcategory\": \"Load Balancer\",\n \"version\": \"1.0\",\n \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\",\n \"resourceVendorRelease\": \"1.0\"\n }\n },\n \"CR\": {},\n \"VFC\": {},\n \"PNF\": {},\n \"Service\": {},\n \"CVFC\": {},\n \"Service Proxy\": {},\n \"Configuration\": {},\n \"AllottedResource\": {},\n \"VFModule\": {\n \"Vloadbalancerms..vpkg..module-1\": {\n \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vpkg\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vdns..module-3\": {\n \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vdns\",\n \"max_vf_module_instances\": 50,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..base_template..module-0\": {\n \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"min_vf_module_instances\": 1,\n \"vf_module_label\": \"base_template\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Base\",\n \"isBase\": true,\n \"initial_count\": 1,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vlb..module-2\": {\n \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vlb\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n }\n }\n}','{\n \"serviceType\": \"\",\n \"serviceRole\": \"\",\n \"description\": \"vLBMS\",\n \"type\": \"Service\",\n \"instantiationType\": \"A-la-carte\",\n \"namingPolicy\": \"\",\n \"serviceEcompNaming\": \"true\",\n \"environmentContext\": \"General_Revenue-Bearing\",\n \"name\": \"vLoadBalancerMS\",\n \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n \"ecompGeneratedNaming\": \"true\",\n \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n \"category\": \"Network L4+\"\n}'); +INSERT INTO `services` VALUES ('63cac700-ab9a-4115-a74f-7eac85e3fce0','vLoadBalancerMS','{\n \"CP\": {},\n \"VL\": {},\n \"VF\": {\n \"vLoadBalancerMS 0\": {\n \"resourceVendor\": \"Test\",\n \"name\": \"vLoadBalancerMS\",\n \"resourceVendorModelNumber\": \"\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n \"type\": \"VF\",\n \"category\": \"Application L4+\",\n \"subcategory\": \"Load Balancer\",\n \"version\": \"1.0\",\n \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\",\n \"resourceVendorRelease\": \"1.0\"\n }\n },\n \"CR\": {},\n \"VFC\": {},\n \"PNF\": {},\n \"Service\": {},\n \"CVFC\": {},\n \"Service Proxy\": {},\n \"Configuration\": {},\n \"AllottedResource\": {},\n \"VFModule\": {\n \"Vloadbalancerms..vpkg..module-1\": {\n \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vpkg\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vdns..module-3\": {\n \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vdns\",\n \"max_vf_module_instances\": 50,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..base_template..module-0\": {\n \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"min_vf_module_instances\": 1,\n \"vf_module_label\": \"base_template\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Base\",\n \"isBase\": true,\n \"initial_count\": 1,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vlb..module-2\": {\n \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vlb\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n }\n }\n}','{\n \"serviceType\": \"\",\n \"serviceRole\": \"\",\n \"description\": \"vLBMS\",\n \"type\": \"Service\",\n \"instantiationType\": \"A-la-carte\",\n \"namingPolicy\": \"\",\n \"serviceEcompNaming\": \"true\",\n \"environmentContext\": \"General_Revenue-Bearing\",\n \"name\": \"vLoadBalancerMS\",\n \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n \"ecompGeneratedNaming\": \"true\",\n \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n \"category\": \"Network L4+\"\n}','1.0'); /*!40000 ALTER TABLE `services` ENABLE KEYS */; UNLOCK TABLES; @@ -159,4 +159,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-16 10:41:46 +-- Dump completed on 2020-01-17 13:26:38 diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 66046f02b..383783047 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -127,7 +127,8 @@ public class Loop extends AuditEntity implements Serializable { @Expose @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER) - @JoinTable(name = "loops_microservicepolicies", joinColumns = @JoinColumn(name = "loop_id"), inverseJoinColumns = @JoinColumn(name = "microservicepolicy_id")) + @JoinTable(name = "loops_microservicepolicies", joinColumns = @JoinColumn(name = "loop_id"), + inverseJoinColumns = @JoinColumn(name = "microservicepolicy_id")) private Set microServicePolicies = new HashSet<>(); @Expose diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 98742d22b..3e4dd8fd9 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -113,6 +113,14 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol @JoinColumn(name = "micro_service_model_id") private MicroServiceModel microServiceModel; + @Expose + @Column(name = "dcae_deployment_id") + private String dcaeDeploymentId; + + @Expose + @Column(name = "dcae_deployment_status_url") + private String dcaeDeploymentStatusUrl; + public MicroServicePolicy() { // serialization } @@ -254,6 +262,34 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol this.microServiceModel = microServiceModel; } + /** + * @return the dcaeDeploymentId + */ + public String getDcaeDeploymentId() { + return dcaeDeploymentId; + } + + /** + * @param dcaeDeploymentId the dcaeDeploymentId to set + */ + public void setDcaeDeploymentId(String dcaeDeploymentId) { + this.dcaeDeploymentId = dcaeDeploymentId; + } + + /** + * @return the dcaeDeploymentStatusUrl + */ + public String getDcaeDeploymentStatusUrl() { + return dcaeDeploymentStatusUrl; + } + + /** + * @param dcaeDeploymentStatusUrl the dcaeDeploymentStatusUrl to set + */ + public void setDcaeDeploymentStatusUrl(String dcaeDeploymentStatusUrl) { + this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl; + } + /** * name setter. * -- cgit 1.2.3-korg From cef5b582ed8f2f9a64203e737234e29434314b36 Mon Sep 17 00:00:00 2001 From: sebdet Date: Tue, 21 Jan 2020 12:40:59 +0100 Subject: Modify the template model Add loopElement to loopTemplate so that operational policy can be added into the template as well Issue-ID: CLAMP-555 Change-Id: I298c05f7f92536e4dab840983c41b0f7ee22daac Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 119 ++++++----- extra/sql/dump/test-data.sql | 69 ++++--- .../java/org/onap/clamp/loop/CsarInstaller.java | 3 - src/main/java/org/onap/clamp/loop/Loop.java | 4 +- .../onap/clamp/loop/template/LoopElementModel.java | 222 +++++++++++++++++++++ .../loop/template/LoopElementModelsRepository.java | 31 +++ .../org/onap/clamp/loop/template/LoopTemplate.java | 41 ++-- .../template/LoopTemplateLoopElementModel.java | 194 ++++++++++++++++++ .../template/LoopTemplateLoopElementModelId.java | 102 ++++++++++ .../clamp/loop/template/MicroServiceModel.java | 217 -------------------- .../template/MicroServiceModelsRepository.java | 31 --- .../org/onap/clamp/loop/template/PolicyModel.java | 39 ++-- .../loop/template/TemplateMicroServiceModel.java | 194 ------------------ .../loop/template/TemplateMicroServiceModelId.java | 102 ---------- src/main/java/org/onap/clamp/policy/Policy.java | 147 ++++++++++++-- .../policy/microservice/MicroServicePolicy.java | 90 ++------- .../microservice/MicroServicePolicyService.java | 2 +- .../policy/operational/OperationalPolicy.java | 82 +++----- .../tosca/DictionaryRepositoriesTestItCase.java | 3 +- .../org/onap/clamp/loop/DcaeComponentTest.java | 2 +- .../onap/clamp/loop/LoopRepositoriesItCase.java | 57 +++--- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 14 +- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 15 +- .../onap/clamp/loop/PolicyModelServiceItCase.java | 2 - .../microservice/MicroServicePayloadTest.java | 2 +- 25 files changed, 927 insertions(+), 857 deletions(-) create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopElementModel.java create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopElementModelsRepository.java create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModel.java create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java delete mode 100644 src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java delete mode 100644 src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java delete mode 100644 src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java delete mode 100644 src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 50fdd363d..2e626b6a0 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -30,6 +30,17 @@ insert into hibernate_sequence values ( 1 ); + create table loop_element_models ( + name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, + blueprint_yaml varchar(255) not null, + loop_element_type varchar(255) not null, + primary key (name) + ) engine=InnoDB; + create table loop_logs ( id bigint not null, log_component varchar(255) not null, @@ -53,6 +64,13 @@ primary key (name) ) engine=InnoDB; + create table loopelementmodels_to_policymodels ( + loop_element_name varchar(255) not null, + policy_model_type varchar(255) not null, + policy_model_version varchar(255) not null, + primary key (loop_element_name, policy_model_type, policy_model_version) + ) engine=InnoDB; + create table loops ( name varchar(255) not null, created_by varchar(255), @@ -71,23 +89,17 @@ primary key (name) ) engine=InnoDB; - create table loops_microservicepolicies ( - loop_id varchar(255) not null, - microservicepolicy_id varchar(255) not null, - primary key (loop_id, microservicepolicy_id) + create table loops_to_microservicepolicies ( + loop_name varchar(255) not null, + microservicepolicy_name varchar(255) not null, + primary key (loop_name, microservicepolicy_name) ) engine=InnoDB; - create table micro_service_models ( - name varchar(255) not null, - created_by varchar(255), - created_timestamp datetime(6) not null, - updated_by varchar(255), - updated_timestamp datetime(6) not null, - blueprint_yaml varchar(255) not null, - policy_type varchar(255) not null, - policy_model_type varchar(255), - policy_model_version varchar(255), - primary key (name) + create table looptemplates_to_loopelementmodels ( + loop_element_model_name varchar(255) not null, + loop_template_name varchar(255) not null, + flow_order integer not null, + primary key (loop_element_model_name, loop_template_name) ) engine=InnoDB; create table micro_service_policies ( @@ -96,23 +108,30 @@ created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, + configurations_json json, + json_representation json not null, + pdp_group varchar(255), context varchar(255), dcae_deployment_id varchar(255), dcae_deployment_status_url varchar(255), device_type_scope varchar(255), - json_representation json not null, policy_model_type varchar(255) not null, policy_tosca MEDIUMTEXT not null, - properties json, shared bit not null, - micro_service_model_id varchar(255), + loop_element_model_id varchar(255), primary key (name) ) engine=InnoDB; create table operational_policies ( name varchar(255) not null, + created_by varchar(255), + created_timestamp datetime(6) not null, + updated_by varchar(255), + updated_timestamp datetime(6) not null, configurations_json json, json_representation json not null, + pdp_group varchar(255), + loop_element_model_id varchar(255), loop_id varchar(255) not null, policy_model_type varchar(255), policy_model_version varchar(255), @@ -128,7 +147,6 @@ updated_timestamp datetime(6) not null, policy_acronym varchar(255), policy_tosca MEDIUMTEXT, - policy_variant varchar(255), primary key (policy_model_type, version) ) engine=InnoDB; @@ -141,13 +159,6 @@ primary key (service_uuid) ) engine=InnoDB; - create table templates_microservicemodels ( - loop_template_name varchar(255) not null, - micro_service_model_name varchar(255) not null, - flow_order integer not null, - primary key (loop_template_name, micro_service_model_name) - ) engine=InnoDB; - alter table dictionary_elements add constraint UK_qxkrvsrhp26m60apfvxphpl3d unique (short_name); @@ -166,6 +177,16 @@ foreign key (service_uuid) references services (service_uuid); + alter table loopelementmodels_to_policymodels + add constraint FK23j2q74v6kaexefy0tdabsnda + foreign key (policy_model_type, policy_model_version) + references policy_models (policy_model_type, version); + + alter table loopelementmodels_to_policymodels + add constraint FKjag1iu0olojfwryfkvb5o0rk5 + foreign key (loop_element_name) + references loop_element_models (name); + alter table loops add constraint FK844uwy82wt0l66jljkjqembpj foreign key (loop_template_name) @@ -176,25 +197,35 @@ foreign key (service_uuid) references services (service_uuid); - alter table loops_microservicepolicies - add constraint FKem7tp1cdlpwe28av7ef91j1yl - foreign key (microservicepolicy_id) + alter table loops_to_microservicepolicies + add constraint FKle255jmi7b065fwbvmwbiehtb + foreign key (microservicepolicy_name) references micro_service_policies (name); - alter table loops_microservicepolicies - add constraint FKsvx91jekgdkfh34iaxtjfgebt - foreign key (loop_id) + alter table loops_to_microservicepolicies + add constraint FK8avfqaf7xl71l7sn7a5eri68d + foreign key (loop_name) references loops (name); - alter table micro_service_models - add constraint FKlkcffpnuavcg65u5o4tr66902 - foreign key (policy_model_type, policy_model_version) - references policy_models (policy_model_type, version); + alter table looptemplates_to_loopelementmodels + add constraint FK1k7nbrbugvqa0xfxkq3cj1yn9 + foreign key (loop_element_model_name) + references loop_element_models (name); + + alter table looptemplates_to_loopelementmodels + add constraint FKj29yxyw0x7ue6mwgi6d3qg748 + foreign key (loop_template_name) + references loop_templates (name); alter table micro_service_policies - add constraint FK5p7lipy9m2v7d4n3fvlclwse - foreign key (micro_service_model_id) - references micro_service_models (name); + add constraint FKqvvdypacbww07fuv8xvlvdjgl + foreign key (loop_element_model_id) + references loop_element_models (name); + + alter table operational_policies + add constraint FKi9kh7my40737xeuaye9xwbnko + foreign key (loop_element_model_id) + references loop_element_models (name); alter table operational_policies add constraint FK1ddoggk9ni2bnqighv6ecmuwu @@ -205,13 +236,3 @@ add constraint FKlsyhfkoqvkwj78ofepxhoctip foreign key (policy_model_type, policy_model_version) references policy_models (policy_model_type, version); - - alter table templates_microservicemodels - add constraint FKq2gqg5q9jrkx8voosn7x5plqo - foreign key (loop_template_name) - references loop_templates (name); - - alter table templates_microservicemodels - add constraint FKphn3m81suxavmj9c4u06cchju - foreign key (micro_service_model_name) - references micro_service_models (name); diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index 8a65d14d8..32ec9c3b9 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -48,6 +48,15 @@ INSERT INTO `hibernate_sequence` VALUES (4); /*!40000 ALTER TABLE `hibernate_sequence` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Dumping data for table `loop_element_models` +-- + +LOCK TABLES `loop_element_models` WRITE; +/*!40000 ALTER TABLE `loop_element_models` DISABLE KEYS */; +/*!40000 ALTER TABLE `loop_element_models` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `loop_logs` -- @@ -66,37 +75,46 @@ LOCK TABLES `loop_templates` WRITE; /*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Dumping data for table `loopelementmodels_to_policymodels` +-- + +LOCK TABLES `loopelementmodels_to_policymodels` WRITE; +/*!40000 ALTER TABLE `loopelementmodels_to_policymodels` DISABLE KEYS */; +/*!40000 ALTER TABLE `loopelementmodels_to_policymodels` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `loops` -- LOCK TABLES `loops` WRITE; /*!40000 ALTER TABLE `loops` DISABLE KEYS */; -INSERT INTO `loops` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca','','2020-01-17 14:25:10.601618','','2020-01-17 14:25:10.601618','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-25adb412-52e8-42f7-a7f3-1550df7c3b44',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"TCA_1SnfX_v1_0_ResourceInstanceName1_tca\": {\n \"location_id\": \"\",\n \"service_id\": \"\",\n \"policy_id\": \"TCA_1SnfX_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','DESIGN','VESTCAOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loops` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3','','2020-01-17 14:25:10.486285','','2020-01-17 14:25:10.486285','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-908e6565-5cab-4b27-b860-798d3ca101dc',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loops` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2','','2020-01-17 14:25:10.353971','','2020-01-17 14:25:10.353971','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-c1823c30-6b36-4351-b1f0-acc4faded33b',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n \"consul_host\": \"consul-server.onap\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-servicel\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca','','2020-01-23 09:42:15.427507','','2020-01-23 09:42:15.427507','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-32e402b4-8d90-4ace-ba3b-ecef5918d71a',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"TCA_Neavs_v1_0_ResourceInstanceName1_tca\": {\n \"location_id\": \"\",\n \"service_id\": \"\",\n \"policy_id\": \"TCA_Neavs_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','DESIGN','VESTCAOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3','','2020-01-23 09:42:15.302231','','2020-01-23 09:42:15.302231','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-de0f1827-bc0b-47e6-b96c-b9045702881f',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loops` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2','','2020-01-23 09:42:15.164411','','2020-01-23 09:42:15.164411','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-cb9f23e5-4d16-42ec-b65d-f421bd118244',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n \"consul_host\": \"consul-server.onap\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-servicel\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loops` ENABLE KEYS */; UNLOCK TABLES; -- --- Dumping data for table `loops_microservicepolicies` +-- Dumping data for table `loops_to_microservicepolicies` -- -LOCK TABLES `loops_microservicepolicies` WRITE; -/*!40000 ALTER TABLE `loops_microservicepolicies` DISABLE KEYS */; -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca','TCA_1SnfX_v1_0_ResourceInstanceName1_tca'); -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3','tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3'); -INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2','tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2'); -/*!40000 ALTER TABLE `loops_microservicepolicies` ENABLE KEYS */; +LOCK TABLES `loops_to_microservicepolicies` WRITE; +/*!40000 ALTER TABLE `loops_to_microservicepolicies` DISABLE KEYS */; +INSERT INTO `loops_to_microservicepolicies` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca','TCA_Neavs_v1_0_ResourceInstanceName1_tca'); +INSERT INTO `loops_to_microservicepolicies` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3','tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3'); +INSERT INTO `loops_to_microservicepolicies` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2','tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2'); +/*!40000 ALTER TABLE `loops_to_microservicepolicies` ENABLE KEYS */; UNLOCK TABLES; -- --- Dumping data for table `micro_service_models` +-- Dumping data for table `looptemplates_to_loopelementmodels` -- -LOCK TABLES `micro_service_models` WRITE; -/*!40000 ALTER TABLE `micro_service_models` DISABLE KEYS */; -/*!40000 ALTER TABLE `micro_service_models` ENABLE KEYS */; +LOCK TABLES `looptemplates_to_loopelementmodels` WRITE; +/*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` DISABLE KEYS */; +/*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` ENABLE KEYS */; UNLOCK TABLES; -- @@ -105,9 +123,9 @@ UNLOCK TABLES; LOCK TABLES `micro_service_policies` WRITE; /*!40000 ALTER TABLE `micro_service_policies` DISABLE KEYS */; -INSERT INTO `micro_service_policies` VALUES ('TCA_1SnfX_v1_0_ResourceInstanceName1_tca','','2020-01-17 14:25:10.605273','','2020-01-17 14:25:10.605273',NULL,NULL,NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_1SnfX_v1_0_ResourceInstanceName1_tca_3','','2020-01-17 14:25:10.489651','','2020-01-17 14:25:10.489651',NULL,NULL,NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_1SnfX_v1_0_ResourceInstanceName2_tca_2','','2020-01-17 14:25:10.367672','','2020-01-17 14:25:10.367672',NULL,NULL,NULL,NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL,'\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3','','2020-01-23 09:42:15.305928','','2020-01-23 09:42:15.305928',NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,NULL,NULL,NULL,'onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2','','2020-01-23 09:42:15.177166','','2020-01-23 09:42:15.177166',NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,NULL,NULL,NULL,'onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','\0',NULL); +INSERT INTO `micro_service_policies` VALUES ('TCA_Neavs_v1_0_ResourceInstanceName1_tca','','2020-01-23 09:42:15.430589','','2020-01-23 09:42:15.430589',NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,NULL,NULL,NULL,'onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','\0',NULL); /*!40000 ALTER TABLE `micro_service_policies` ENABLE KEYS */; UNLOCK TABLES; @@ -117,9 +135,9 @@ UNLOCK TABLES; LOCK TABLES `operational_policies` WRITE; /*!40000 ALTER TABLE `operational_policies` DISABLE KEYS */; -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_1SnfX_v1_0_ResourceInstanceName1_tca','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_1SnfX_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','LOOP_1SnfX_v1_0_ResourceInstanceName1_tca',NULL,NULL); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_1SnfX_v1_0_ResourceInstanceName1_tca_3','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','LOOP_1SnfX_v1_0_ResourceInstanceName1_tca_3',NULL,NULL); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_1SnfX_v1_0_ResourceInstanceName2_tca_2','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}','LOOP_1SnfX_v1_0_ResourceInstanceName2_tca_2',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_Neavs_v1_0_ResourceInstanceName1_tca','','2020-01-23 09:42:15.434613','','2020-01-23 09:42:15.434613','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_Neavs_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,'LOOP_Neavs_v1_0_ResourceInstanceName1_tca',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_Neavs_v1_0_ResourceInstanceName1_tca_3','','2020-01-23 09:42:15.308546','','2020-01-23 09:42:15.308546','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,'LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3',NULL,NULL); +INSERT INTO `operational_policies` VALUES ('OPERATIONAL_Neavs_v1_0_ResourceInstanceName2_tca_2','','2020-01-23 09:42:15.187766','','2020-01-23 09:42:15.187766','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,'LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2',NULL,NULL); /*!40000 ALTER TABLE `operational_policies` ENABLE KEYS */; UNLOCK TABLES; @@ -141,15 +159,6 @@ LOCK TABLES `services` WRITE; INSERT INTO `services` VALUES ('63cac700-ab9a-4115-a74f-7eac85e3fce0','vLoadBalancerMS','{\n \"CP\": {},\n \"VL\": {},\n \"VF\": {\n \"vLoadBalancerMS 0\": {\n \"resourceVendor\": \"Test\",\n \"name\": \"vLoadBalancerMS\",\n \"resourceVendorModelNumber\": \"\",\n \"description\": \"vLBMS\",\n \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n \"type\": \"VF\",\n \"category\": \"Application L4+\",\n \"subcategory\": \"Load Balancer\",\n \"version\": \"1.0\",\n \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\",\n \"resourceVendorRelease\": \"1.0\"\n }\n },\n \"CR\": {},\n \"VFC\": {},\n \"PNF\": {},\n \"Service\": {},\n \"CVFC\": {},\n \"Service Proxy\": {},\n \"Configuration\": {},\n \"AllottedResource\": {},\n \"VFModule\": {\n \"Vloadbalancerms..vpkg..module-1\": {\n \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vpkg\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vdns..module-3\": {\n \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vdns\",\n \"max_vf_module_instances\": 50,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n },\n \"Vloadbalancerms..base_template..module-0\": {\n \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"min_vf_module_instances\": 1,\n \"vf_module_label\": \"base_template\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Base\",\n \"isBase\": true,\n \"initial_count\": 1,\n \"volume_group\": false\n },\n \"Vloadbalancerms..vlb..module-2\": {\n \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"vfModuleModelVersion\": \"1\",\n \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"min_vf_module_instances\": 0,\n \"vf_module_label\": \"vlb\",\n \"max_vf_module_instances\": 1,\n \"vf_module_type\": \"Expansion\",\n \"isBase\": false,\n \"initial_count\": 0,\n \"volume_group\": false\n }\n }\n}','{\n \"serviceType\": \"\",\n \"serviceRole\": \"\",\n \"description\": \"vLBMS\",\n \"type\": \"Service\",\n \"instantiationType\": \"A-la-carte\",\n \"namingPolicy\": \"\",\n \"serviceEcompNaming\": \"true\",\n \"environmentContext\": \"General_Revenue-Bearing\",\n \"name\": \"vLoadBalancerMS\",\n \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n \"ecompGeneratedNaming\": \"true\",\n \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n \"category\": \"Network L4+\"\n}','1.0'); /*!40000 ALTER TABLE `services` ENABLE KEYS */; UNLOCK TABLES; - --- --- Dumping data for table `templates_microservicemodels` --- - -LOCK TABLES `templates_microservicemodels` WRITE; -/*!40000 ALTER TABLE `templates_microservicemodels` DISABLE KEYS */; -/*!40000 ALTER TABLE `templates_microservicemodels` ENABLE KEYS */; -UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; @@ -159,4 +168,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-17 13:26:38 +-- Dump completed on 2020-01-23 8:43:45 diff --git a/src/main/java/org/onap/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/clamp/loop/CsarInstaller.java index 38a6f9317..ab8069f37 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstaller.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstaller.java @@ -52,8 +52,6 @@ import org.onap.clamp.policy.operational.OperationalPolicy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; /** * This class will be instantiated by spring config, and used by Sdc Controller. @@ -129,7 +127,6 @@ public class CsarInstaller { * @throws SdcArtifactInstallerException The SdcArtifactInstallerException * @throws InterruptedException The InterruptedException */ - @Transactional(propagation = Propagation.REQUIRES_NEW) public void installTheLoop(CsarHandler csar, Service service) throws SdcArtifactInstallerException, InterruptedException { try { diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 383783047..6b9a924bf 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -127,8 +127,8 @@ public class Loop extends AuditEntity implements Serializable { @Expose @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER) - @JoinTable(name = "loops_microservicepolicies", joinColumns = @JoinColumn(name = "loop_id"), - inverseJoinColumns = @JoinColumn(name = "microservicepolicy_id")) + @JoinTable(name = "loops_to_microservicepolicies", joinColumns = @JoinColumn(name = "loop_name"), + inverseJoinColumns = @JoinColumn(name = "microservicepolicy_name")) private Set microServicePolicies = new HashSet<>(); @Expose diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java new file mode 100644 index 000000000..c22ca1a67 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java @@ -0,0 +1,222 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.hibernate.annotations.SortNatural; +import org.onap.clamp.loop.common.AuditEntity; + +/** + * This class represents a micro service model for a loop template. + */ + +@Entity +@Table(name = "loop_element_models") +public class LoopElementModel extends AuditEntity implements Serializable { + public static final String DEFAULT_GROUP_NAME = "DEFAULT"; + /** + * The serial version id. + */ + private static final long serialVersionUID = -286522707701376645L; + + @Id + @Expose + @Column(nullable = false, name = "name", unique = true) + private String name; + + /** + * Here we store the blueprint coming from DCAE. + */ + @Column(nullable = false, name = "blueprint_yaml") + private String blueprint; + + /** + * The type of element + */ + @Column(nullable = false, name = "loop_element_type") + private String loopElementType; + + /** + * This variable is used to store the type mentioned in the micro-service + * blueprint. + */ + @Expose + @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) + @JoinTable(name = "loopelementmodels_to_policymodels", + joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"), + inverseJoinColumns = { @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version") }) + @SortNatural + private SortedSet policyModels = new TreeSet<>(); + + @OneToMany(fetch = FetchType.LAZY, mappedBy = "loopElementModel", orphanRemoval = true) + private Set usedByLoopTemplates = new HashSet<>(); + + /** + * policyModels getter. + * + * @return the policyModel + */ + public SortedSet getPolicyModels() { + return policyModels; + } + + /** + * Method to add a new policyModel to the list. + * + * @param policyModel + */ + public void addPolicyModel(PolicyModel policyModel) { + policyModels.add(policyModel); + policyModel.getUsedByElementModels().add(this); + } + + /** + * name getter. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * blueprint getter. + * + * @return the blueprint + */ + public String getBlueprint() { + return blueprint; + } + + /** + * blueprint setter. + * + * @param blueprint the blueprint to set + */ + public void setBlueprint(String blueprint) { + this.blueprint = blueprint; + } + + /** + * @return the loopElementType + */ + public String getLoopElementType() { + return loopElementType; + } + + /** + * @param loopElementType the loopElementType to set + */ + public void setLoopElementType(String loopElementType) { + this.loopElementType = loopElementType; + } + + /** + * usedByLoopTemplates getter. + * + * @return the usedByLoopTemplates + */ + public Set getUsedByLoopTemplates() { + return usedByLoopTemplates; + } + + /** + * Default constructor for serialization. + */ + public LoopElementModel() { + } + + /** + * Constructor. + * + * @param name The name id + * @param loopElementType The type of loop element + * @param blueprint The blueprint defined for dcae that contains the + * policy type to use + */ + public LoopElementModel(String name, String loopElementType, String blueprint) { + this.name = name; + this.loopElementType = loopElementType; + this.blueprint = blueprint; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + LoopElementModel other = (LoopElementModel) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModelsRepository.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModelsRepository.java new file mode 100644 index 000000000..27b82189c --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModelsRepository.java @@ -0,0 +1,31 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface LoopElementModelsRepository extends JpaRepository { +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java index 10367e77d..20574ff6c 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java @@ -72,7 +72,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { @Expose @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loopTemplate", orphanRemoval = true) @SortNatural - private SortedSet microServiceModelUsed = new TreeSet<>(); + private SortedSet loopElementModelsUsed = new TreeSet<>(); @Expose @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) @@ -138,12 +138,12 @@ public class LoopTemplate extends AuditEntity implements Serializable { } /** - * microServiceModelUsed getter. + * loopElementModelsUsed getter. * - * @return the microServiceModelUsed + * @return the loopElementModelsUsed */ - public SortedSet getMicroServiceModelUsed() { - return microServiceModelUsed; + public SortedSet getLoopElementModelsUsed() { + return loopElementModelsUsed; } /** @@ -165,29 +165,30 @@ public class LoopTemplate extends AuditEntity implements Serializable { } /** - * Add a microService model to the current template, the microservice is added - * at the end of the list so the flowOrder is computed automatically. + * Add a loopElement to the current template, the loopElementModel is added at + * the end of the list so the flowOrder is computed automatically. * - * @param microServiceModel The microserviceModel to add + * @param loopElementModel The loopElementModel to add */ - public void addMicroServiceModel(MicroServiceModel microServiceModel) { - TemplateMicroServiceModel jointEntry = new TemplateMicroServiceModel(this, microServiceModel, - this.microServiceModelUsed.size()); - this.microServiceModelUsed.add(jointEntry); - microServiceModel.getUsedByLoopTemplates().add(jointEntry); + public void addLoopElementModel(LoopElementModel loopElementModel) { + LoopTemplateLoopElementModel jointEntry = new LoopTemplateLoopElementModel(this, loopElementModel, + this.loopElementModelsUsed.size()); + this.loopElementModelsUsed.add(jointEntry); + loopElementModel.getUsedByLoopTemplates().add(jointEntry); } /** - * Add a microService model to the current template, the flow order must be + * Add a loopElement model to the current template, the flow order must be * specified manually. * - * @param microServiceModel The microserviceModel to add - * @param listPosition The position in the flow + * @param loopElementModel The loopElementModel to add + * @param listPosition The position in the flow */ - public void addMicroServiceModel(MicroServiceModel microServiceModel, Integer listPosition) { - TemplateMicroServiceModel jointEntry = new TemplateMicroServiceModel(this, microServiceModel, listPosition); - this.microServiceModelUsed.add(jointEntry); - microServiceModel.getUsedByLoopTemplates().add(jointEntry); + public void addLoopElementModel(LoopElementModel loopElementModel, Integer listPosition) { + LoopTemplateLoopElementModel jointEntry = new LoopTemplateLoopElementModel(this, loopElementModel, + listPosition); + this.loopElementModelsUsed.add(jointEntry); + loopElementModel.getUsedByLoopTemplates().add(jointEntry); } /** diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModel.java new file mode 100644 index 000000000..aca16bc04 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModel.java @@ -0,0 +1,194 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MapsId; +import javax.persistence.Table; + +@Entity +@Table(name = "looptemplates_to_loopelementmodels") +public class LoopTemplateLoopElementModel implements Serializable, Comparable { + + /** + * Serial ID. + */ + private static final long serialVersionUID = 5924989899078094245L; + + @EmbeddedId + private LoopTemplateLoopElementModelId loopTemplateLoopElementModelId; + + @ManyToOne(fetch = FetchType.LAZY) + @MapsId("loopTemplateName") + @JoinColumn(name = "loop_template_name") + private LoopTemplate loopTemplate; + + @Expose + @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) + @MapsId("loopElementModelName") + @JoinColumn(name = "loop_element_model_name") + private LoopElementModel loopElementModel; + + @Expose + @Column(nullable = false, name = "flow_order") + private Integer flowOrder; + + /** + * Default constructor for serialization. + */ + public LoopTemplateLoopElementModel() { + + } + + /** + * Constructor. + * + * @param loopTemplate The loop template object + * @param loopElementModel The loopElementModel object + * @param flowOrder The position of the micro service in the flow + */ + public LoopTemplateLoopElementModel(LoopTemplate loopTemplate, LoopElementModel loopElementModel, + Integer flowOrder) { + this.loopTemplate = loopTemplate; + this.loopElementModel = loopElementModel; + this.flowOrder = flowOrder; + this.loopTemplateLoopElementModelId = new LoopTemplateLoopElementModelId(loopTemplate.getName(), + loopElementModel.getName()); + } + + /** + * loopTemplate getter. + * + * @return the loopTemplate + */ + public LoopTemplate getLoopTemplate() { + return loopTemplate; + } + + /** + * loopTemplate setter. + * + * @param loopTemplate the loopTemplate to set + */ + public void setLoopTemplate(LoopTemplate loopTemplate) { + this.loopTemplate = loopTemplate; + } + + /** + * loopElementModel getter. + * + * @return the loopElementModel + */ + public LoopElementModel getLoopElementModel() { + return loopElementModel; + } + + /** + * loopElementModel setter. + * + * @param loopElementModel the loopElementModel to set + */ + public void setLoopElementModel(LoopElementModel loopElementModel) { + this.loopElementModel = loopElementModel; + } + + /** + * flowOrder getter. + * + * @return the flowOrder + */ + public Integer getFlowOrder() { + return flowOrder; + } + + /** + * flowOrder setter. + * + * @param flowOrder the flowOrder to set + */ + public void setFlowOrder(Integer flowOrder) { + this.flowOrder = flowOrder; + } + + @Override + public int compareTo(LoopTemplateLoopElementModel arg0) { + // Reverse it, so that by default we have the latest + if (getFlowOrder() == null) { + return 1; + } + if (arg0.getFlowOrder() == null) { + return -1; + } + return arg0.getFlowOrder().compareTo(this.getFlowOrder()); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((loopTemplate == null) ? 0 : loopTemplate.hashCode()); + result = prime * result + ((loopElementModel == null) ? 0 : loopElementModel.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + LoopTemplateLoopElementModel other = (LoopTemplateLoopElementModel) obj; + if (loopTemplate == null) { + if (other.loopTemplate != null) { + return false; + } + } else if (!loopTemplate.equals(other.loopTemplate)) { + return false; + } + if (loopElementModel == null) { + if (other.loopElementModel != null) { + return false; + } + } else if (!loopElementModel.equals(other.loopElementModel)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java new file mode 100644 index 000000000..3e2f8ad42 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java @@ -0,0 +1,102 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Embeddable; + +@Embeddable +public class LoopTemplateLoopElementModelId implements Serializable { + + /** + * Serial ID. + */ + private static final long serialVersionUID = 4089888115504914773L; + + @Expose + @Column(name = "loop_template_name") + private String loopTemplateName; + + @Expose + @Column(name = "loop_element_model_name") + private String loopElementModelName; + + /** + * Default constructor for serialization. + */ + public LoopTemplateLoopElementModelId() { + + } + + /** + * Constructor. + * + * @param loopTemplateName The loop template name id + * @param microServiceModelName THe micro Service name id + */ + public LoopTemplateLoopElementModelId(String loopTemplateName, String microServiceModelName) { + this.loopTemplateName = loopTemplateName; + this.loopElementModelName = microServiceModelName; + } + + /** + * loopTemplateName getter. + * + * @return the loopTemplateName + */ + public String getLoopTemplateName() { + return loopTemplateName; + } + + /** + * loopTemplateName setter. + * + * @param loopTemplateName the loopTemplateName to set + */ + public void setLoopTemplateName(String loopTemplateName) { + this.loopTemplateName = loopTemplateName; + } + + /** + * microServiceModelName getter. + * + * @return the microServiceModelName + */ + public String getLoopElementModelName() { + return loopElementModelName; + } + + /** + * loopElementModelName setter. + * + * @param loopElementModelName the loopElementModelName to set + */ + public void setLoopElementModelName(String loopElementModelName) { + this.loopElementModelName = loopElementModelName; + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java b/src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java deleted file mode 100644 index 1e2b140e7..000000000 --- a/src/main/java/org/onap/clamp/loop/template/MicroServiceModel.java +++ /dev/null @@ -1,217 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.loop.template; - -import com.google.gson.annotations.Expose; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinColumns; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; - -import org.onap.clamp.loop.common.AuditEntity; - -/** - * This class represents a micro service model for a loop template. - */ - -@Entity -@Table(name = "micro_service_models") -public class MicroServiceModel extends AuditEntity implements Serializable { - - /** - * The serial version id. - */ - private static final long serialVersionUID = -286522707701376645L; - - @Id - @Expose - @Column(nullable = false, name = "name", unique = true) - private String name; - - /** - * This variable is used to store the type mentioned in the micro-service - * blueprint. - */ - @Expose - @Column(nullable = false, name = "policy_type") - private String policyType; - - @Column(nullable = false, name = "blueprint_yaml") - private String blueprint; - - @Expose - @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) - @JoinColumns({ @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), - @JoinColumn(name = "policy_model_version", referencedColumnName = "version") }) - private PolicyModel policyModel; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "microServiceModel", orphanRemoval = true) - private Set usedByLoopTemplates = new HashSet<>(); - - /** - * policyModel getter. - * - * @return the policyModel - */ - public PolicyModel getPolicyModel() { - return policyModel; - } - - /** - * policyModel setter. - * - * @param policyModel the policyModel to set - */ - public void setPolicyModel(PolicyModel policyModel) { - this.policyModel = policyModel; - } - - /** - * name getter. - * - * @return the name - */ - public String getName() { - return name; - } - - /** - * name setter. - * - * @param name the name to set - */ - public void setName(String name) { - this.name = name; - } - - /** - * policyType getter. - * - * @return the policyType - */ - public String getPolicyType() { - return policyType; - } - - /** - * policyType setter. - * - * @param policyType the policyType to set - */ - public void setPolicyType(String policyType) { - this.policyType = policyType; - } - - /** - * blueprint getter. - * - * @return the blueprint - */ - public String getBlueprint() { - return blueprint; - } - - /** - * blueprint setter. - * - * @param blueprint the blueprint to set - */ - public void setBlueprint(String blueprint) { - this.blueprint = blueprint; - } - - /** - * usedByLoopTemplates getter. - * - * @return the usedByLoopTemplates - */ - public Set getUsedByLoopTemplates() { - return usedByLoopTemplates; - } - - /** - * Default constructor for serialization. - */ - public MicroServiceModel() { - } - - /** - * Constructor. - * - * @param name The name id - * @param policyType The policy model type like - * onap.policies.controlloop.operational.common.Apex - * @param blueprint The blueprint defined for dcae that contains the policy - * type to use - * @param policyModel The policy model for the policy type mentioned here - */ - public MicroServiceModel(String name, String policyType, String blueprint, PolicyModel policyModel) { - this.name = name; - this.policyType = policyType; - this.blueprint = blueprint; - this.policyModel = policyModel; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - MicroServiceModel other = (MicroServiceModel) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { - return false; - } - return true; - } - -} diff --git a/src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java b/src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java deleted file mode 100644 index 2b1870485..000000000 --- a/src/main/java/org/onap/clamp/loop/template/MicroServiceModelsRepository.java +++ /dev/null @@ -1,31 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.loop.template; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface MicroServiceModelsRepository extends JpaRepository { -} diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java index e6580beed..00d58a822 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java @@ -26,11 +26,15 @@ package org.onap.clamp.loop.template; import com.google.gson.annotations.Expose; import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.IdClass; +import javax.persistence.ManyToMany; import javax.persistence.Table; import org.onap.clamp.loop.common.AuditEntity; @@ -74,9 +78,15 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable @Column(name = "policy_acronym") private String policyAcronym; - @Expose - @Column(name = "policy_variant") - private String policyVariant; + @ManyToMany(mappedBy = "policyModels", fetch = FetchType.EAGER) + private Set usedByElementModels = new HashSet<>(); + + /** + * @return the usedByElementModels + */ + public Set getUsedByElementModels() { + return usedByElementModels; + } /** * policyModelTosca getter. @@ -151,24 +161,6 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable this.policyAcronym = policyAcronym; } - /** - * policyVariant getter. - * - * @return the policyVariant value - */ - public String getPolicyVariant() { - return policyVariant; - } - - /** - * policyVariant setter. - * - * @param policyVariant The policyVariant to set - */ - public void setPolicyVariant(String policyVariant) { - this.policyVariant = policyVariant; - } - /** * Default constructor for serialization. */ @@ -181,16 +173,13 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable * @param policyType The policyType (referenced in the blueprint) * @param policyModelTosca The policy tosca model in yaml * @param version the version like 1.0.0 - * @param policyAcronym Short policy name if it exists * @param policyVariant Subtype for policy if it exists (could be used by UI) */ - public PolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, - String policyVariant) { + public PolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym) { this.policyModelType = policyType; this.policyModelTosca = policyModelTosca; this.version = version; this.policyAcronym = policyAcronym; - this.policyVariant = policyVariant; } @Override diff --git a/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java b/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java deleted file mode 100644 index 7547c1f70..000000000 --- a/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModel.java +++ /dev/null @@ -1,194 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.loop.template; - -import com.google.gson.annotations.Expose; - -import java.io.Serializable; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MapsId; -import javax.persistence.Table; - -@Entity -@Table(name = "templates_microservicemodels") -public class TemplateMicroServiceModel implements Serializable, Comparable { - - /** - * Serial ID. - */ - private static final long serialVersionUID = 5924989899078094245L; - - @EmbeddedId - private TemplateMicroServiceModelId templateMicroServiceModelId; - - @ManyToOne(fetch = FetchType.LAZY) - @MapsId("loopTemplateName") - @JoinColumn(name = "loop_template_name") - private LoopTemplate loopTemplate; - - @Expose - @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) - @MapsId("microServiceModelName") - @JoinColumn(name = "micro_service_model_name") - private MicroServiceModel microServiceModel; - - @Expose - @Column(nullable = false, name = "flow_order") - private Integer flowOrder; - - /** - * Default constructor for serialization. - */ - public TemplateMicroServiceModel() { - - } - - /** - * Constructor. - * - * @param loopTemplate The loop template object - * @param microServiceModel The microServiceModel object - * @param flowOrder The position of the micro service in the flow - */ - public TemplateMicroServiceModel(LoopTemplate loopTemplate, MicroServiceModel microServiceModel, - Integer flowOrder) { - this.loopTemplate = loopTemplate; - this.microServiceModel = microServiceModel; - this.flowOrder = flowOrder; - this.templateMicroServiceModelId = new TemplateMicroServiceModelId(loopTemplate.getName(), - microServiceModel.getName()); - } - - /** - * loopTemplate getter. - * - * @return the loopTemplate - */ - public LoopTemplate getLoopTemplate() { - return loopTemplate; - } - - /** - * loopTemplate setter. - * - * @param loopTemplate the loopTemplate to set - */ - public void setLoopTemplate(LoopTemplate loopTemplate) { - this.loopTemplate = loopTemplate; - } - - /** - * microServiceModel getter. - * - * @return the microServiceModel - */ - public MicroServiceModel getMicroServiceModel() { - return microServiceModel; - } - - /** - * microServiceModel setter. - * - * @param microServiceModel the microServiceModel to set - */ - public void setMicroServiceModel(MicroServiceModel microServiceModel) { - this.microServiceModel = microServiceModel; - } - - /** - * flowOrder getter. - * - * @return the flowOrder - */ - public Integer getFlowOrder() { - return flowOrder; - } - - /** - * flowOrder setter. - * - * @param flowOrder the flowOrder to set - */ - public void setFlowOrder(Integer flowOrder) { - this.flowOrder = flowOrder; - } - - @Override - public int compareTo(TemplateMicroServiceModel arg0) { - // Reverse it, so that by default we have the latest - if (getFlowOrder() == null) { - return 1; - } - if (arg0.getFlowOrder() == null) { - return -1; - } - return arg0.getFlowOrder().compareTo(this.getFlowOrder()); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((loopTemplate == null) ? 0 : loopTemplate.hashCode()); - result = prime * result + ((microServiceModel == null) ? 0 : microServiceModel.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - TemplateMicroServiceModel other = (TemplateMicroServiceModel) obj; - if (loopTemplate == null) { - if (other.loopTemplate != null) { - return false; - } - } else if (!loopTemplate.equals(other.loopTemplate)) { - return false; - } - if (microServiceModel == null) { - if (other.microServiceModel != null) { - return false; - } - } else if (!microServiceModel.equals(other.microServiceModel)) { - return false; - } - return true; - } - -} diff --git a/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java b/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java deleted file mode 100644 index 74c768974..000000000 --- a/src/main/java/org/onap/clamp/loop/template/TemplateMicroServiceModelId.java +++ /dev/null @@ -1,102 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.loop.template; - -import com.google.gson.annotations.Expose; - -import java.io.Serializable; - -import javax.persistence.Column; -import javax.persistence.Embeddable; - -@Embeddable -public class TemplateMicroServiceModelId implements Serializable { - - /** - * Serial ID. - */ - private static final long serialVersionUID = 4089888115504914773L; - - @Expose - @Column(name = "loop_template_name") - private String loopTemplateName; - - @Expose - @Column(name = "micro_service_model_name") - private String microServiceModelName; - - /** - * Default constructor for serialization. - */ - public TemplateMicroServiceModelId() { - - } - - /** - * Constructor. - * - * @param loopTemplateName The loop template name id - * @param microServiceModelName THe micro Service name id - */ - public TemplateMicroServiceModelId(String loopTemplateName, String microServiceModelName) { - this.loopTemplateName = loopTemplateName; - this.microServiceModelName = microServiceModelName; - } - - /** - * loopTemplateName getter. - * - * @return the loopTemplateName - */ - public String getLoopTemplateName() { - return loopTemplateName; - } - - /** - * loopTemplateName setter. - * - * @param loopTemplateName the loopTemplateName to set - */ - public void setLoopTemplateName(String loopTemplateName) { - this.loopTemplateName = loopTemplateName; - } - - /** - * microServiceModelName getter. - * - * @return the microServiceModelName - */ - public String getMicroServiceModelName() { - return microServiceModelName; - } - - /** - * microServiceModelName setter. - * - * @param microServiceModelName the microServiceModelName to set - */ - public void setMicroServiceModelName(String microServiceModelName) { - this.microServiceModelName = microServiceModelName; - } -} diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java index fc097bd60..c65682059 100644 --- a/src/main/java/org/onap/clamp/policy/Policy.java +++ b/src/main/java/org/onap/clamp/policy/Policy.java @@ -24,37 +24,148 @@ package org.onap.clamp.policy; import com.google.gson.JsonObject; +import com.google.gson.annotations.Expose; import java.io.UnsupportedEncodingException; -public interface Policy { +import javax.persistence.Column; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MappedSuperclass; - String getName(); +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; +import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.dao.model.jsontype.StringJsonUserType; +import org.onap.clamp.loop.common.AuditEntity; +import org.onap.clamp.loop.template.LoopElementModel; - JsonObject getJsonRepresentation(); +@MappedSuperclass +@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) +public abstract class Policy extends AuditEntity { - String createPolicyPayload() throws UnsupportedEncodingException; + @Expose + @Type(type = "json") + @Column(columnDefinition = "json", name = "json_representation", nullable = false) + private JsonObject jsonRepresentation; + + @Expose + @Type(type = "json") + @Column(columnDefinition = "json", name = "configurations_json") + private JsonObject configurationsJson; + + @Expose + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "loop_element_model_id") + private LoopElementModel loopElementModel; + + @Expose + @Column(name = "pdp_group") + private String pdpGroup; + + public abstract String createPolicyPayload() throws UnsupportedEncodingException; + + /** + * Name getter. + * + * @return the name + */ + public abstract String getName(); + + /** + * Name setter. + * + */ + public abstract void setName(String name); + + /** + * jsonRepresentation getter. + * + * @return the jsonRepresentation + */ + public JsonObject getJsonRepresentation() { + return jsonRepresentation; + } + + /** + * jsonRepresentation setter. + * + * @param jsonRepresentation The jsonRepresentation to set + */ + public void setJsonRepresentation(JsonObject jsonRepresentation) { + this.jsonRepresentation = jsonRepresentation; + } + + /** + * configurationsJson getter. + * + * @return The configurationsJson + */ + public JsonObject getConfigurationsJson() { + return configurationsJson; + } + + /** + * configurationsJson setter. + * + * @param configurationsJson the configurationsJson to set + */ + public void setConfigurationsJson(JsonObject configurationsJson) { + this.configurationsJson = configurationsJson; + } + + /** + * loopElementModel getter. + * + * @return the loopElementModel + */ + public LoopElementModel getLoopElementModel() { + return loopElementModel; + } + + /** + * loopElementModel setter. + * + * @param loopElementModel the loopElementModel to set + */ + public void setLoopElementModel(LoopElementModel loopElementModel) { + this.loopElementModel = loopElementModel; + } + + /** + * pdpGroup getter. + * + * @return the pdpGroup + */ + public String getPdpGroup() { + return pdpGroup; + } + + /** + * pdpGroup setter. + * + * @param pdpGroup the pdpGroup to set + */ + public void setPdpGroup(String pdpGroup) { + this.pdpGroup = pdpGroup; + } /** * Generate the policy name. * - * @param policyType - * The policy type - * @param serviceName - * The service name - * @param serviceVersion - * The service version - * @param resourceName - * The resource name - * @param blueprintFilename - * The blueprint file name + * @param policyType The policy type + * @param serviceName The service name + * @param serviceVersion The service version + * @param resourceName The resource name + * @param blueprintFilename The blueprint file name * @return The generated policy name */ - static String generatePolicyName(String policyType, String serviceName, String serviceVersion, String resourceName, - String blueprintFilename) { + public static String generatePolicyName(String policyType, String serviceName, String serviceVersion, + String resourceName, String blueprintFilename) { StringBuilder buffer = new StringBuilder(policyType).append("_").append(serviceName).append("_v") - .append(serviceVersion).append("_").append(resourceName).append("_") - .append(blueprintFilename.replaceAll(".yaml", "")); + .append(serviceVersion).append("_").append(resourceName).append("_") + .append(blueprintFilename.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 3e4dd8fd9..445c1d5dd 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -40,13 +40,10 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; -import javax.persistence.JoinColumn; import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; -import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; import org.json.JSONObject; @@ -54,15 +51,13 @@ import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; -import org.onap.clamp.loop.common.AuditEntity; -import org.onap.clamp.loop.template.MicroServiceModel; import org.onap.clamp.policy.Policy; import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "micro_service_policies") @TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) -public class MicroServicePolicy extends AuditEntity implements Serializable, Policy { +public class MicroServicePolicy extends Policy implements Serializable { /** * The serial version ID. */ @@ -88,11 +83,6 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol @Column(name = "device_type_scope") private String deviceTypeScope; - @Expose - @Type(type = "json") - @Column(columnDefinition = "json", name = "properties") - private JsonObject properties; - @Expose @Column(name = "shared", nullable = false) private Boolean shared; @@ -100,19 +90,9 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol @Column(columnDefinition = "MEDIUMTEXT", name = "policy_tosca", nullable = false) private String policyTosca; - @Expose - @Type(type = "json") - @Column(columnDefinition = "json", name = "json_representation", nullable = false) - private JsonObject jsonRepresentation; - @ManyToMany(mappedBy = "microServicePolicies", fetch = FetchType.EAGER) private Set usedByLoops = new HashSet<>(); - @Expose - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "micro_service_model_id") - private MicroServiceModel microServiceModel; - @Expose @Column(name = "dcae_deployment_id") private String dcaeDeploymentId; @@ -141,8 +121,8 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol this.modelType = modelType; this.policyTosca = policyTosca; this.shared = shared; - this.jsonRepresentation = JsonUtils.GSON_JPA_MODEL - .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyTosca, modelType), JsonObject.class); + this.setJsonRepresentation(JsonUtils.GSON_JPA_MODEL + .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyTosca, modelType), JsonObject.class)); this.usedByLoops = usedByLoops; } @@ -171,7 +151,7 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol this.policyTosca = policyTosca; this.shared = shared; this.usedByLoops = usedByLoops; - this.jsonRepresentation = jsonRepresentation; + this.setJsonRepresentation(jsonRepresentation); } @Override @@ -179,6 +159,16 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol return name; } + /** + * name setter. + * + * @param name the name to set + */ + @Override + public void setName(String name) { + this.name = name; + } + public String getModelType() { return modelType; } @@ -187,14 +177,6 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol this.modelType = modelType; } - public JsonObject getProperties() { - return properties; - } - - public void setProperties(JsonObject properties) { - this.properties = properties; - } - public Boolean getShared() { return shared; } @@ -211,15 +193,6 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol this.policyTosca = policyTosca; } - @Override - public JsonObject getJsonRepresentation() { - return jsonRepresentation; - } - - void setJsonRepresentation(JsonObject jsonRepresentation) { - this.jsonRepresentation = jsonRepresentation; - } - public Set getUsedByLoops() { return usedByLoops; } @@ -245,24 +218,8 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol } /** - * microServiceModel getter. - * - * @return the microServiceModel - */ - public MicroServiceModel getMicroServiceModel() { - return microServiceModel; - } - - /** - * microServiceModel setter. + * dcaeDeploymentId getter. * - * @param microServiceModel the microServiceModel to set - */ - public void setMicroServiceModel(MicroServiceModel microServiceModel) { - this.microServiceModel = microServiceModel; - } - - /** * @return the dcaeDeploymentId */ public String getDcaeDeploymentId() { @@ -270,6 +227,8 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol } /** + * dcaeDeploymentId setter. + * * @param dcaeDeploymentId the dcaeDeploymentId to set */ public void setDcaeDeploymentId(String dcaeDeploymentId) { @@ -277,6 +236,8 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol } /** + * dcaeDeploymentStatusUrl getter. + * * @return the dcaeDeploymentStatusUrl */ public String getDcaeDeploymentStatusUrl() { @@ -284,21 +245,14 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol } /** + * dcaeDeploymentStatusUrl setter. + * * @param dcaeDeploymentStatusUrl the dcaeDeploymentStatusUrl to set */ public void setDcaeDeploymentStatusUrl(String dcaeDeploymentStatusUrl) { this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl; } - /** - * name setter. - * - * @param name the name to set - */ - public void setName(String name) { - this.name = name; - } - @Override public int hashCode() { final int prime = 31; @@ -362,7 +316,7 @@ public class MicroServicePolicy extends AuditEntity implements Serializable, Pol JsonObject policyProperties = new JsonObject(); policyDetails.add("properties", policyProperties); - policyProperties.add(this.getMicroServicePropertyNameFromTosca(toscaJson), this.getProperties()); + policyProperties.add(this.getMicroServicePropertyNameFromTosca(toscaJson), this.getConfigurationsJson()); String policyPayload = new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult); logger.info("Micro service policy payload: " + policyPayload); return policyPayload; diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java index 346cdf624..c431767f0 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java @@ -73,7 +73,7 @@ public class MicroServicePolicyService implements PolicyService elementList1 = new LinkedList(); elementList1.add(element1); dictionaryTest1.setDictionaryElements(elementList1); diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java index 557fdcecf..969215144 100644 --- a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java +++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java @@ -57,7 +57,7 @@ public class DcaeComponentTest { MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "", "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>()); - microServicePolicy.setProperties(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class)); + microServicePolicy.setConfigurationsJson(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class)); loopTest.addMicroServicePolicy(microServicePolicy); return loopTest; diff --git a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java index 44feaebd8..e0c112cb5 100644 --- a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java @@ -42,10 +42,10 @@ import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.log.LoopLogRepository; import org.onap.clamp.loop.service.Service; import org.onap.clamp.loop.service.ServicesRepository; +import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.loop.template.LoopElementModelsRepository; import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.loop.template.LoopTemplatesRepository; -import org.onap.clamp.loop.template.MicroServiceModel; -import org.onap.clamp.loop.template.MicroServiceModelsRepository; import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.loop.template.PolicyModelId; import org.onap.clamp.loop.template.PolicyModelsRepository; @@ -80,7 +80,7 @@ public class LoopRepositoriesItCase { private LoopTemplatesRepository loopTemplateRepository; @Autowired - private MicroServiceModelsRepository microServiceModelsRepository; + private LoopElementModelsRepository microServiceModelsRepository; @Autowired private PolicyModelsRepository policyModelsRepository; @@ -96,21 +96,22 @@ public class LoopRepositoriesItCase { return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class)); } - private MicroServiceModel getMicroServiceModel(String yaml, String name, String policyType, String createdBy, + private LoopElementModel getLoopElementModel(String yaml, String name, String policyType, String createdBy, PolicyModel policyModel) { - MicroServiceModel model = new MicroServiceModel(name, policyType, yaml, policyModel); + LoopElementModel model = new LoopElementModel(name, policyType, yaml); + model.addPolicyModel(policyModel); return model; } private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, String policyVariant, String createdBy) { - return new PolicyModel(policyType, policyModelTosca, version, policyAcronym, policyVariant); + return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); } private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, String createdBy, Integer maxInstancesAllowed) { LoopTemplate template = new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); - template.addMicroServiceModel(getMicroServiceModel("yaml", "microService1", "org.onap.policy.drools", createdBy, + template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "org.onap.policy.drools", createdBy, getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1", createdBy))); return template; } @@ -134,7 +135,7 @@ public class LoopRepositoriesItCase { String policyTosca, String jsonProperties, boolean shared) { MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); - microService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class)); + microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); return microService; } @@ -182,13 +183,13 @@ public class LoopRepositoriesItCase { assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); assertThat(microServiceModelsRepository.existsById( - loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getName())) + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) .isEqualTo(true); assertThat(policyModelsRepository.existsById(new PolicyModelId( - loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() - .getPolicyModelType(), - loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() - .getVersion()))).isEqualTo(true); + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getPolicyModelType(), + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getVersion()))).isEqualTo(true); // Now attempt to read from database Loop loopInDbRetrieved = loopRepository.findById(loopTest.getName()).get(); @@ -198,7 +199,16 @@ public class LoopRepositoriesItCase { "createdBy", "updatedBy"); assertThat((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).isEqualToComparingFieldByField(loopLog); assertThat((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]) - .isEqualToComparingFieldByField(opPolicy); + .isEqualToIgnoringGivenFields(opPolicy, "createdDate", "updatedDate", "createdBy", "updatedBy"); + assertThat(((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getCreatedDate()) + .isNotNull(); + assertThat(((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getUpdatedDate()) + .isNotNull(); + assertThat(((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getCreatedBy()) + .isNotNull(); + assertThat(((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getUpdatedBy()) + .isNotNull(); + assertThat((MicroServicePolicy) loopInDbRetrieved.getMicroServicePolicies().toArray()[0]) .isEqualToIgnoringGivenFields(microServicePolicy, "createdDate", "updatedDate", "createdBy", "updatedBy"); @@ -230,23 +240,14 @@ public class LoopRepositoriesItCase { assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); assertThat(microServiceModelsRepository.existsById( - loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getName())) + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) .isEqualTo(true); assertThat(policyModelsRepository.existsById(new PolicyModelId( - loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() - .getPolicyModelType(), - loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel() - .getVersion()))).isEqualTo(true); - - // Cleanup - // microServiceModelsRepository - // .delete(loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel()); - // - // policyModelsRepository.delete( - // loopInDb.getLoopTemplate().getMicroServiceModelUsed().first().getMicroServiceModel().getPolicyModel()); - // loopTemplateRepository.delete(loopInDb.getLoopTemplate()); - // servicesRepository.delete(service); + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getPolicyModelType(), + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getVersion()))).isEqualTo(true); } } diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index d19c8a808..338aaa3eb 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -110,7 +110,9 @@ public class LoopServiceTestItCase { assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); Set savedPolicies = actualLoop.getOperationalPolicies(); assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop").contains(operationalPolicy); + assertThat(savedPolicies) + .usingElementComparatorIgnoringFields("loop", "createdBy", "createdDate", "updatedBy", "updatedDate") + .contains(operationalPolicy); OperationalPolicy savedPolicy = savedPolicies.iterator().next(); assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME); @@ -154,7 +156,8 @@ public class LoopServiceTestItCase { JsonUtils.GSON.fromJson("{}", JsonObject.class), null); // when - firstMicroServicePolicy.setProperties(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class)); + firstMicroServicePolicy + .setConfigurationsJson(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class)); Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy)); @@ -229,7 +232,8 @@ public class LoopServiceTestItCase { assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); Set savedPolicies = actualLoop.getOperationalPolicies(); assertThat(savedPolicies).hasSize(2); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop") + assertThat(savedPolicies) + .usingElementComparatorIgnoringFields("loop", "createdDate", "updatedDate", "createdBy", "updatedBy") .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy); Set policiesLoops = Lists.newArrayList(savedPolicies).stream().map(OperationalPolicy::getLoop) .map(Loop::getName).collect(Collectors.toSet()); @@ -258,7 +262,9 @@ public class LoopServiceTestItCase { assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); Set savedPolicies = actualLoop.getOperationalPolicies(); assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop").containsExactly(secondOperationalPolicy); + assertThat(savedPolicies) + .usingElementComparatorIgnoringFields("loop", "createdDate", "updatedDate", "createdBy", "updatedBy") + .containsExactly(secondOperationalPolicy); OperationalPolicy savedPolicy = savedPolicies.iterator().next(); assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME); diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index 914c64ea5..af8f2271b 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -44,8 +44,8 @@ import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.service.Service; +import org.onap.clamp.loop.template.LoopElementModel; import org.onap.clamp.loop.template.LoopTemplate; -import org.onap.clamp.loop.template.MicroServiceModel; import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -74,27 +74,28 @@ public class LoopToJsonTest { String policyTosca, String jsonProperties, boolean shared) { MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); - microService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class)); + microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); return microService; } - private MicroServiceModel getMicroServiceModel(String yaml, String name, PolicyModel policyModel) { - MicroServiceModel model = new MicroServiceModel(); + private LoopElementModel getLoopElementModel(String yaml, String name, PolicyModel policyModel) { + LoopElementModel model = new LoopElementModel(); model.setBlueprint(yaml); model.setName(name); - model.setPolicyModel(policyModel); + model.addPolicyModel(policyModel); + model.setLoopElementType("OPERATIONAL_POLICY"); return model; } private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, String policyVariant) { - return new PolicyModel(policyType, policyModelTosca, version, policyAcronym, policyVariant); + return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); } private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, Integer maxInstancesAllowed) { LoopTemplate template = new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); - template.addMicroServiceModel(getMicroServiceModel("yaml", "microService1", + template.addLoopElementModel(getLoopElementModel("yaml", "microService1", getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1"))); return template; } diff --git a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java index b284dd795..39468a1c7 100644 --- a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java +++ b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java @@ -66,7 +66,6 @@ public class PolicyModelServiceItCase { policyModel.setPolicyAcronym(policyAcronym); policyModel.setPolicyModelTosca(policyModelTosca); policyModel.setPolicyModelType(policyType); - policyModel.setPolicyVariant(policyVariant); policyModel.setUpdatedBy(createdBy); policyModel.setVersion(version); return policyModel; @@ -92,7 +91,6 @@ public class PolicyModelServiceItCase { assertThat(actualPolicyModel.getCreatedDate()).isNotNull(); assertThat(actualPolicyModel.getPolicyAcronym()).isEqualTo(policyModel.getPolicyAcronym()); assertThat(actualPolicyModel.getPolicyModelTosca()).isEqualTo(policyModel.getPolicyModelTosca()); - assertThat(actualPolicyModel.getPolicyVariant()).isEqualTo(policyModel.getPolicyVariant()); assertThat(actualPolicyModel.getUpdatedBy()).isEqualTo(""); assertThat(actualPolicyModel.getUpdatedDate()).isNotNull(); assertThat(actualPolicyModel.getVersion()).isEqualTo(policyModel.getVersion()); diff --git a/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java b/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java index 68925a913..1556ac6d3 100644 --- a/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java +++ b/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java @@ -39,7 +39,7 @@ public class MicroServicePayloadTest { public void testPayloadConstruction() throws IOException { MicroServicePolicy policy = new MicroServicePolicy("testPolicy", "onap.policies.monitoring.cdap.tca.hi.lo.app", ResourceFileUtil.getResourceAsString("tosca/tosca_example.yaml"), false, new HashSet<>()); - policy.setProperties(JsonUtils.GSON.fromJson( + policy.setConfigurationsJson(JsonUtils.GSON.fromJson( ResourceFileUtil.getResourceAsString("tosca/micro-service-policy-properties.json"), JsonObject.class)); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/micro-service-policy-payload.json"), policy.createPolicyPayload(), false); -- cgit 1.2.3-korg From 9e01ce3b97e602fa7236bd9bc8a484807382f83b Mon Sep 17 00:00:00 2001 From: xuegao Date: Mon, 27 Jan 2020 12:10:32 +0100 Subject: Update deploy-loop route Update deploy-loop to support multiple blueprint deployments Issue-ID: CLAMP-571 Change-Id: If98e9305c36a01f86a522db002174f92f6ff5996 Signed-off-by: xuegao --- extra/sql/bulkload/create-tables.sql | 3 +- .../java/org/onap/clamp/loop/LoopController.java | 8 +- .../loop/components/external/DcaeComponent.java | 23 ++- .../onap/clamp/loop/template/LoopElementModel.java | 8 +- .../org/onap/clamp/loop/template/LoopTemplate.java | 2 +- .../org/onap/clamp/loop/template/PolicyModel.java | 6 +- .../policy/microservice/MicroServicePolicy.java | 22 +++ .../microservice/MicroServicePolicyService.java | 33 ++-- .../resources/clds/camel/routes/dcae-flows.xml | 102 +++++++++++- .../org/onap/clamp/loop/DcaeComponentTest.java | 3 +- .../org/onap/clamp/loop/DeployFlowTestItCase.java | 138 ++++++++++++++++ .../resources/clds/camel/routes/dcae-flows.xml | 184 ++++++++++++++++++++- 12 files changed, 508 insertions(+), 24 deletions(-) create mode 100644 src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 2e626b6a0..352b66175 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -57,7 +57,7 @@ created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, - blueprint_yaml MEDIUMTEXT not null, + blueprint_yaml MEDIUMTEXT, maximum_instances_allowed integer, svg_representation MEDIUMTEXT, service_uuid varchar(255), @@ -112,6 +112,7 @@ json_representation json not null, pdp_group varchar(255), context varchar(255), + dcae_blueprint_id varchar(255), dcae_deployment_id varchar(255), dcae_deployment_status_url varchar(255), device_type_scope varchar(255), diff --git a/src/main/java/org/onap/clamp/loop/LoopController.java b/src/main/java/org/onap/clamp/loop/LoopController.java index 64874a32d..c161c550e 100644 --- a/src/main/java/org/onap/clamp/loop/LoopController.java +++ b/src/main/java/org/onap/clamp/loop/LoopController.java @@ -40,10 +40,10 @@ import org.springframework.stereotype.Controller; public class LoopController { private final LoopService loopService; - private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken>() { - }.getType(); - private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken>() { - }.getType(); + private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken>() {} + .getType(); + private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken>() {} + .getType(); @Autowired public LoopController(LoopService loopService) { diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java index 9b131299b..5d62e7151 100644 --- a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java +++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java @@ -31,6 +31,7 @@ import org.apache.camel.Exchange; import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.Loop; +import org.onap.clamp.policy.microservice.MicroServicePolicy; public class DcaeComponent extends ExternalComponent { @@ -84,7 +85,6 @@ public class DcaeComponent extends ExternalComponent { return null; } } - /** * Generate the deployment id, it's random. * @@ -125,6 +125,27 @@ public class DcaeComponent extends ExternalComponent { return rootObject.toString(); } + /** + * Return the deploy payload for DCAE. + * + * @param loop The loop object + * @param microServiceName The micro service name + * @return The payload used to send deploy closed loop request + */ + public static String getDeployPayload(Loop loop, String microServiceName) { + JsonObject globalProp = loop.getGlobalPropertiesJson(); + JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(microServiceName); + + String serviceTypeId = loop.getDcaeBlueprintId(); + + JsonObject rootObject = new JsonObject(); + rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId); + if (deploymentProp != null) { + rootObject.add(DCAE_INPUTS, deploymentProp); + } + return rootObject.toString(); + } + /** * Return the uninstallation payload for DCAE. * diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java index c22ca1a67..7f00c42ea 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java @@ -70,7 +70,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { private String blueprint; /** - * The type of element + * The type of element. */ @Column(nullable = false, name = "loop_element_type") private String loopElementType; @@ -103,7 +103,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * Method to add a new policyModel to the list. * - * @param policyModel + * @param policyModel The policy model */ public void addPolicyModel(PolicyModel policyModel) { policyModels.add(policyModel); @@ -147,6 +147,8 @@ public class LoopElementModel extends AuditEntity implements Serializable { } /** + * loopElementType getter. + * * @return the loopElementType */ public String getLoopElementType() { @@ -154,6 +156,8 @@ public class LoopElementModel extends AuditEntity implements Serializable { } /** + * loopElementType setter. + * * @param loopElementType the loopElementType to set */ public void setLoopElementType(String loopElementType) { diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java index 20574ff6c..7c059e19a 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java @@ -62,7 +62,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { * other option would be to have independent blueprint for each microservices. * In that case they are stored in each MicroServiceModel */ - @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") + @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml") private String blueprint; @Expose diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java index 00d58a822..886e8c806 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java @@ -82,6 +82,8 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable private Set usedByElementModels = new HashSet<>(); /** + * usedByElementModels getter. + * * @return the usedByElementModels */ public Set getUsedByElementModels() { @@ -170,10 +172,10 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * Constructor. * - * @param policyType The policyType (referenced in the blueprint) + * @param policyType The policyType (referenced in the blueprint * @param policyModelTosca The policy tosca model in yaml * @param version the version like 1.0.0 - * @param policyVariant Subtype for policy if it exists (could be used by UI) + * @param policyAcronym Subtype for policy if it exists (could be used by UI) */ public PolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym) { this.policyModelType = policyType; diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 445c1d5dd..43c8d6e05 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -101,6 +101,10 @@ public class MicroServicePolicy extends Policy implements Serializable { @Column(name = "dcae_deployment_status_url") private String dcaeDeploymentStatusUrl; + @Expose + @Column(name = "dcae_blueprint_id") + private String dcaeBlueprintId; + public MicroServicePolicy() { // serialization } @@ -253,6 +257,24 @@ public class MicroServicePolicy extends Policy implements Serializable { this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl; } + /** + * dcaeBlueprintId getter. + * + * @return the dcaeBlueprintId + */ + public String getDcaeBlueprintId() { + return dcaeBlueprintId; + } + + /** + * dcaeBlueprintId setter. + * + * @param dcaeBlueprintId the dcaeBlueprintId to set + */ + void setDcaeBlueprintId(String dcaeBlueprintId) { + this.dcaeBlueprintId = dcaeBlueprintId; + } + @Override public int hashCode() { final int prime = 31; diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java index c431767f0..29a4e56d0 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java @@ -47,7 +47,7 @@ public class MicroServicePolicyService implements PolicyService updatePolicies(Loop loop, List newMicroservicePolicies) { return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy)) - .collect(Collectors.toSet()); + .collect(Collectors.toSet()); } @Override @@ -58,25 +58,38 @@ public class MicroServicePolicyService implements PolicyService updateMicroservicePolicyProperties(p, policy, loop)) - .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), - policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop)))); + return repository.save( + repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop)) + .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), + policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop)))); } private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy, - MicroServicePolicy newPolicy, Loop loop) { + MicroServicePolicy newPolicy, Loop loop) { oldPolicy.setConfigurationsJson(newPolicy.getConfigurationsJson()); if (!oldPolicy.getUsedByLoops().contains(loop)) { oldPolicy.getUsedByLoops().add(loop); } return oldPolicy; } + + /** + * Update the MicroService policy deployment related parameters. + * + * @param microServicePolicy The micro service policy + * @param deploymentId The deployment ID as returned by DCAE + * @param deploymentUrl The Deployment URL as returned by DCAE + * @throws MicroServicePolicy doesn't exist in DB + */ + public void updateDcaeDeploymentFields(MicroServicePolicy microServicePolicy, String deploymentId, + String deploymentUrl) { + microServicePolicy.setDcaeDeploymentId(deploymentId); + microServicePolicy.setDcaeDeploymentStatusUrl(deploymentUrl); + repository.save(microServicePolicy); + } } diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml index fb3bc90ec..acaf897ff 100644 --- a/src/main/resources/clds/camel/routes/dcae-flows.xml +++ b/src/main/resources/clds/camel/routes/dcae-flows.xml @@ -1,6 +1,105 @@ + + + ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null + + + + + ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null + + + + + + + + + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + + false + + + + + + + + + PUT + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + java.lang.Exception + + false + + + DEPLOY loop status + (Dep-id:${exchangeProperty[dcaeDeploymentId]}, + StatusUrl:${exchangeProperty[dcaeStatusUrl]}) + + + + DCAE + + + + + + + + + + + @@ -41,6 +140,8 @@ + + @@ -64,7 +165,6 @@ - ", "yamlcontent", "{\"testname\":\"testvalue\"}", + "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + template.setBlueprint("yamlcontent"); + loopTest.setLoopTemplate(template); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest.addMicroServicePolicy(microServicePolicy); + loopService.saveOrUpdateLoop(loopTest); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) + .withProperty("loopObject", loopTest).build(); + + camelContext.createProducerTemplate() + .send("direct:deploy-loop", myCamelExchange); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); + assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNotNull(); + assertThat(loopAfterTest.getDcaeDeploymentId()).isNotNull(); + } + + @Test + @Transactional + public void deployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest2 = createLoop("ControlLoopTest2", "", "yamlcontent", "{\"dcaeDeployParameters\": {" + + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}," + + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}" + + "}}", "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + loopTest2.setLoopTemplate(template); + MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest2.addMicroServicePolicy(microServicePolicy1); + loopTest2.addMicroServicePolicy(microServicePolicy2); + loopService.saveOrUpdateLoop(loopTest2); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) + .withProperty("loopObject", loopTest2).build(); + + camelContext.createProducerTemplate() + .send("direct:deploy-loop", myCamelExchange); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest2"); + Set policyList = loopAfterTest.getMicroServicePolicies(); + for (MicroServicePolicy policy : policyList) { + assertThat(policy.getDcaeDeploymentStatusUrl()).isNotNull(); + assertThat(policy.getDcaeDeploymentId()).isNotNull(); + } + assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull(); + assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); + } + + private Loop createLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, + String dcaeBlueprintId) throws JsonSyntaxException, IOException { + Loop loop = new Loop(name, blueprint, svgRepresentation); + loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); + loop.setLastComputedState(LoopState.DESIGN); + loop.setDcaeBlueprintId(dcaeBlueprintId); + return loop; + } + + private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, + String policyTosca, String jsonProperties, boolean shared) { + MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, + gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); + microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); + return microService; + } +} diff --git a/src/test/resources/clds/camel/routes/dcae-flows.xml b/src/test/resources/clds/camel/routes/dcae-flows.xml index fb3bc90ec..7a85871f1 100644 --- a/src/test/resources/clds/camel/routes/dcae-flows.xml +++ b/src/test/resources/clds/camel/routes/dcae-flows.xml @@ -1,6 +1,187 @@ + + + ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null + + + + + ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null + + + + + + + + + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + + false + + + + + + + + + PUT + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + java.lang.Exception + + false + + + DEPLOY loop status + (Dep-id:${exchangeProperty[dcaeDeploymentId]}, + StatusUrl:${exchangeProperty[dcaeStatusUrl]}) + + + + DCAE + + + + + + + + + + + + @@ -41,6 +222,8 @@ + + @@ -64,7 +247,6 @@ - Date: Tue, 28 Jan 2020 16:28:21 +0100 Subject: Change the Csar installer Change the csar installer so that it installs a loop template instead of a loop object Issue-ID: CLAMP-592 Change-Id: I757f6411ce959573fcb3a82e48359a1a44f87410 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 5 +- extra/sql/dump/test-data.sql | 23 +++--- .../java/org/onap/clamp/loop/CsarInstaller.java | 94 +++++++++------------- src/main/java/org/onap/clamp/loop/Loop.java | 16 +--- .../clamp/loop/deploy/DcaeDeployParameters.java | 25 +++--- .../java/org/onap/clamp/loop/service/Service.java | 14 ++++ .../onap/clamp/loop/template/LoopElementModel.java | 24 +++++- .../org/onap/clamp/loop/template/LoopTemplate.java | 52 ++++++++++++ .../org/onap/clamp/loop/CsarInstallerItCase.java | 75 +++++++++-------- .../org/onap/clamp/loop/DcaeComponentTest.java | 2 +- .../org/onap/clamp/loop/DeployFlowTestItCase.java | 76 ++++++++--------- .../onap/clamp/loop/LoopControllerTestItCase.java | 2 +- .../onap/clamp/loop/LoopLogServiceTestItCase.java | 4 +- .../onap/clamp/loop/LoopRepositoriesItCase.java | 4 +- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 3 +- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 3 +- .../onap/clamp/loop/PolicyModelServiceItCase.java | 9 +-- 17 files changed, 245 insertions(+), 186 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 352b66175..92e36f075 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -36,7 +36,8 @@ created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, - blueprint_yaml varchar(255) not null, + blueprint_yaml MEDIUMTEXT not null, + dcae_blueprint_id varchar(255), loop_element_type varchar(255) not null, primary key (name) ) engine=InnoDB; @@ -58,6 +59,7 @@ updated_by varchar(255), updated_timestamp datetime(6) not null, blueprint_yaml MEDIUMTEXT, + dcae_blueprint_id varchar(255), maximum_instances_allowed integer, svg_representation MEDIUMTEXT, service_uuid varchar(255), @@ -77,7 +79,6 @@ created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, - blueprint_yaml MEDIUMTEXT not null, dcae_blueprint_id varchar(255), dcae_deployment_id varchar(255), dcae_deployment_status_url varchar(255), diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index 32ec9c3b9..db96154fd 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -54,6 +54,7 @@ UNLOCK TABLES; LOCK TABLES `loop_element_models` WRITE; /*!40000 ALTER TABLE `loop_element_models` DISABLE KEYS */; +INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-01-28 15:54:29.921692','','2020-01-28 15:54:30.237701','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n',NULL,'CONFIG_POLICY'); /*!40000 ALTER TABLE `loop_element_models` ENABLE KEYS */; UNLOCK TABLES; @@ -72,6 +73,9 @@ UNLOCK TABLES; LOCK TABLES `loop_templates` WRITE; /*!40000 ALTER TABLE `loop_templates` DISABLE KEYS */; +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca','','2020-01-28 15:54:30.197906','','2020-01-28 15:54:30.197906','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-69bf32c5-ebb3-4faa-b7e4-671617efb3d3',0,'VESTCAOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca_3','','2020-01-28 15:54:30.099520','','2020-01-28 15:54:30.099520','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-d71093a2-73e4-4227-99f7-92e7069f5a10',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName2_tca_2','','2020-01-28 15:54:29.895679','','2020-01-28 15:54:29.895679','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-4bbbe73d-28b0-4204-aa8c-d4d814a6d08b',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; UNLOCK TABLES; @@ -81,6 +85,7 @@ UNLOCK TABLES; LOCK TABLES `loopelementmodels_to_policymodels` WRITE; /*!40000 ALTER TABLE `loopelementmodels_to_policymodels` DISABLE KEYS */; +INSERT INTO `loopelementmodels_to_policymodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','onap.policies.monitoring.cdap.tca.hi.lo.app','1.0'); /*!40000 ALTER TABLE `loopelementmodels_to_policymodels` ENABLE KEYS */; UNLOCK TABLES; @@ -90,9 +95,6 @@ UNLOCK TABLES; LOCK TABLES `loops` WRITE; /*!40000 ALTER TABLE `loops` DISABLE KEYS */; -INSERT INTO `loops` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca','','2020-01-23 09:42:15.427507','','2020-01-23 09:42:15.427507','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-32e402b4-8d90-4ace-ba3b-ecef5918d71a',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"TCA_Neavs_v1_0_ResourceInstanceName1_tca\": {\n \"location_id\": \"\",\n \"service_id\": \"\",\n \"policy_id\": \"TCA_Neavs_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','DESIGN','VESTCAOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loops` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3','','2020-01-23 09:42:15.302231','','2020-01-23 09:42:15.302231','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-de0f1827-bc0b-47e6-b96c-b9045702881f',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loops` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2','','2020-01-23 09:42:15.164411','','2020-01-23 09:42:15.164411','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-cb9f23e5-4d16-42ec-b65d-f421bd118244',NULL,NULL,'{\n \"dcaeDeployParameters\": {\n \"tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2\": {\n \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n \"aaiEnrichmentPort\": \"8443\",\n \"enableAAIEnrichment\": true,\n \"dmaap_host\": \"message-router.onap\",\n \"dmaap_port\": \"3904\",\n \"enableRedisCaching\": false,\n \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n \"consul_host\": \"consul-server.onap\",\n \"consul_port\": \"8500\",\n \"cbs_host\": \"config-binding-servicel\",\n \"cbs_port\": \"10000\",\n \"external_port\": \"32012\",\n \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n \"policy_id\": \"tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','DESIGN','VEStca_k8sOperationalPolicy',NULL,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loops` ENABLE KEYS */; UNLOCK TABLES; @@ -102,9 +104,6 @@ UNLOCK TABLES; LOCK TABLES `loops_to_microservicepolicies` WRITE; /*!40000 ALTER TABLE `loops_to_microservicepolicies` DISABLE KEYS */; -INSERT INTO `loops_to_microservicepolicies` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca','TCA_Neavs_v1_0_ResourceInstanceName1_tca'); -INSERT INTO `loops_to_microservicepolicies` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3','tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3'); -INSERT INTO `loops_to_microservicepolicies` VALUES ('LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2','tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2'); /*!40000 ALTER TABLE `loops_to_microservicepolicies` ENABLE KEYS */; UNLOCK TABLES; @@ -114,6 +113,9 @@ UNLOCK TABLES; LOCK TABLES `looptemplates_to_loopelementmodels` WRITE; /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` DISABLE KEYS */; +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca_3',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName2_tca_2',0); /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` ENABLE KEYS */; UNLOCK TABLES; @@ -123,9 +125,6 @@ UNLOCK TABLES; LOCK TABLES `micro_service_policies` WRITE; /*!40000 ALTER TABLE `micro_service_policies` DISABLE KEYS */; -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_Neavs_v1_0_ResourceInstanceName1_tca_3','','2020-01-23 09:42:15.305928','','2020-01-23 09:42:15.305928',NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,NULL,NULL,NULL,'onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','\0',NULL); -INSERT INTO `micro_service_policies` VALUES ('tca_k8s_Neavs_v1_0_ResourceInstanceName2_tca_2','','2020-01-23 09:42:15.177166','','2020-01-23 09:42:15.177166',NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,NULL,NULL,NULL,'onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','\0',NULL); -INSERT INTO `micro_service_policies` VALUES ('TCA_Neavs_v1_0_ResourceInstanceName1_tca','','2020-01-23 09:42:15.430589','','2020-01-23 09:42:15.430589',NULL,'{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"type\": \"array\",\n \"title\": \"TCA Policy JSON\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"TCA Policy JSON\",\n \"required\": [\n \"domain\",\n \"metricsPerEventName\"\n ],\n \"properties\": {\n \"domain\": {\n \"propertyOrder\": 1001,\n \"default\": \"measurementsForVfScaling\",\n \"title\": \"Domain name to which TCA needs to be applied\",\n \"type\": \"string\"\n },\n \"metricsPerEventName\": {\n \"propertyOrder\": 1002,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"controlLoopSchemaType\",\n \"eventName\",\n \"policyName\",\n \"policyScope\",\n \"policyVersion\",\n \"thresholds\"\n ],\n \"properties\": {\n \"policyVersion\": {\n \"propertyOrder\": 1007,\n \"title\": \"TCA Policy Scope Version\",\n \"type\": \"string\"\n },\n \"thresholds\": {\n \"propertyOrder\": 1008,\n \"uniqueItems\": \"true\",\n \"format\": \"tabs-top\",\n \"title\": \"Thresholds associated with eventName\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"closedLoopControlName\",\n \"closedLoopEventStatus\",\n \"direction\",\n \"fieldPath\",\n \"severity\",\n \"thresholdValue\",\n \"version\"\n ],\n \"properties\": {\n \"severity\": {\n \"propertyOrder\": 1013,\n \"title\": \"Threshold Event Severity\",\n \"type\": \"string\",\n \"enum\": [\n \"CRITICAL\",\n \"MAJOR\",\n \"MINOR\",\n \"WARNING\",\n \"NORMAL\"\n ]\n },\n \"fieldPath\": {\n \"propertyOrder\": 1012,\n \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n \"type\": \"string\",\n \"enum\": [\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n ]\n },\n \"thresholdValue\": {\n \"propertyOrder\": 1014,\n \"title\": \"Threshold value for the field Path inside CEF message\",\n \"type\": \"integer\"\n },\n \"closedLoopEventStatus\": {\n \"propertyOrder\": 1010,\n \"title\": \"Closed Loop Event Status of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"ONSET\",\n \"ABATED\"\n ]\n },\n \"closedLoopControlName\": {\n \"propertyOrder\": 1009,\n \"title\": \"Closed Loop Control Name associated with the threshold\",\n \"type\": \"string\"\n },\n \"version\": {\n \"propertyOrder\": 1015,\n \"title\": \"Version number associated with the threshold\",\n \"type\": \"string\"\n },\n \"direction\": {\n \"propertyOrder\": 1011,\n \"title\": \"Direction of the threshold\",\n \"type\": \"string\",\n \"enum\": [\n \"LESS\",\n \"LESS_OR_EQUAL\",\n \"GREATER\",\n \"GREATER_OR_EQUAL\",\n \"EQUAL\"\n ]\n }\n }\n }\n },\n \"policyName\": {\n \"propertyOrder\": 1005,\n \"title\": \"TCA Policy Scope Name\",\n \"type\": \"string\"\n },\n \"controlLoopSchemaType\": {\n \"propertyOrder\": 1003,\n \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n \"type\": \"string\",\n \"enum\": [\n \"VM\",\n \"VNF\"\n ]\n },\n \"policyScope\": {\n \"propertyOrder\": 1006,\n \"title\": \"TCA Policy Scope\",\n \"type\": \"string\"\n },\n \"eventName\": {\n \"propertyOrder\": 1004,\n \"title\": \"Event name to which thresholds need to be applied\",\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,NULL,NULL,NULL,'onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','\0',NULL); /*!40000 ALTER TABLE `micro_service_policies` ENABLE KEYS */; UNLOCK TABLES; @@ -135,9 +134,6 @@ UNLOCK TABLES; LOCK TABLES `operational_policies` WRITE; /*!40000 ALTER TABLE `operational_policies` DISABLE KEYS */; -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_Neavs_v1_0_ResourceInstanceName1_tca','','2020-01-23 09:42:15.434613','','2020-01-23 09:42:15.434613','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_Neavs_v1_0_ResourceInstanceName1_tca\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,'LOOP_Neavs_v1_0_ResourceInstanceName1_tca',NULL,NULL); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_Neavs_v1_0_ResourceInstanceName1_tca_3','','2020-01-23 09:42:15.308546','','2020-01-23 09:42:15.308546','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,'LOOP_Neavs_v1_0_ResourceInstanceName1_tca_3',NULL,NULL); -INSERT INTO `operational_policies` VALUES ('OPERATIONAL_Neavs_v1_0_ResourceInstanceName2_tca_2','','2020-01-23 09:42:15.187766','','2020-01-23 09:42:15.187766','{\n \"operational_policy\": {\n \"controlLoop\": {\n \"controlLoopName\": \"LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2\"\n }\n }\n}','{\n \"schema\": {\n \"uniqueItems\": \"true\",\n \"format\": \"tabs\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 1,\n \"title\": \"Operational policies\",\n \"items\": {\n \"type\": \"object\",\n \"title\": \"Operational Policy Item\",\n \"id\": \"operational_policy_item\",\n \"headerTemplate\": \"{{self.name}}\",\n \"required\": [\n \"name\",\n \"configurationsJson\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Operational policy name\",\n \"readOnly\": \"True\"\n },\n \"configurationsJson\": {\n \"type\": \"object\",\n \"title\": \"Configuration\",\n \"required\": [\n \"operational_policy\",\n \"guard_policies\"\n ],\n \"properties\": {\n \"operational_policy\": {\n \"type\": \"object\",\n \"title\": \"Related Parameters\",\n \"required\": [\n \"controlLoop\",\n \"policies\"\n ],\n \"properties\": {\n \"controlLoop\": {\n \"type\": \"object\",\n \"title\": \"Control Loop details\",\n \"required\": [\n \"timeout\",\n \"abatement\",\n \"trigger_policy\",\n \"controlLoopName\"\n ],\n \"properties\": {\n \"timeout\": {\n \"type\": \"string\",\n \"title\": \"Overall Time Limit\",\n \"default\": \"0\",\n \"format\": \"number\"\n },\n \"abatement\": {\n \"type\": \"string\",\n \"title\": \"Abatement\",\n \"enum\": [\n \"True\",\n \"False\"\n ]\n },\n \"trigger_policy\": {\n \"type\": \"string\",\n \"title\": \"Policy Decision Entry\"\n },\n \"controlLoopName\": {\n \"type\": \"string\",\n \"title\": \"Control loop name\",\n \"readOnly\": \"True\"\n }\n }\n },\n \"policies\": {\n \"uniqueItems\": \"true\",\n \"id\": \"policies_array\",\n \"type\": \"array\",\n \"title\": \"Policy Decision Tree\",\n \"format\": \"tabs-top\",\n \"items\": {\n \"title\": \"Policy Decision\",\n \"type\": \"object\",\n \"id\": \"policy_item\",\n \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n \"format\": \"categories\",\n \"basicCategoryTitle\": \"recipe\",\n \"required\": [\n \"id\",\n \"recipe\",\n \"retry\",\n \"timeout\",\n \"actor\",\n \"success\",\n \"failure\",\n \"failure_timeout\",\n \"failure_retries\",\n \"failure_exception\",\n \"failure_guard\",\n \"target\"\n ],\n \"properties\": {\n \"id\": {\n \"default\": \"Policy 1\",\n \"title\": \"Policy ID\",\n \"type\": \"string\"\n },\n \"recipe\": {\n \"title\": \"Recipe\",\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"retry\": {\n \"default\": \"0\",\n \"title\": \"Number of Retry\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"timeout\": {\n \"default\": \"0\",\n \"title\": \"Timeout\",\n \"type\": \"string\",\n \"format\": \"number\"\n },\n \"actor\": {\n \"title\": \"Actor\",\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"payload\": {\n \"title\": \"Payload (YAML)\",\n \"type\": \"string\",\n \"format\": \"textarea\"\n },\n \"success\": {\n \"default\": \"final_success\",\n \"title\": \"When Success\",\n \"type\": \"string\"\n },\n \"failure\": {\n \"default\": \"final_failure\",\n \"title\": \"When Failure\",\n \"type\": \"string\"\n },\n \"failure_timeout\": {\n \"default\": \"final_failure_timeout\",\n \"title\": \"When Failure Timeout\",\n \"type\": \"string\"\n },\n \"failure_retries\": {\n \"default\": \"final_failure_retries\",\n \"title\": \"When Failure Retries\",\n \"type\": \"string\"\n },\n \"failure_exception\": {\n \"default\": \"final_failure_exception\",\n \"title\": \"When Failure Exception\",\n \"type\": \"string\"\n },\n \"failure_guard\": {\n \"default\": \"final_failure_guard\",\n \"title\": \"When Failure Guard\",\n \"type\": \"string\"\n },\n \"target\": {\n \"type\": \"object\",\n \"required\": [\n \"type\",\n \"resourceID\"\n ],\n \"anyOf\": [\n {\n \"title\": \"User Defined\",\n \"additionalProperties\": \"True\",\n \"properties\": {\n \"type\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\",\n \"enum\": [\n \"VNF\",\n \"VFMODULE\",\n \"VM\"\n ]\n },\n \"resourceID\": {\n \"title\": \"Target type\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n }\n },\n {\n \"title\": \"VNF-vLoadBalancerMS 0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VNF\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"vLoadBalancerMS\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vpkg..module-1\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vdns..module-3\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..base_template..module-0\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n \"readOnly\": \"True\"\n }\n }\n },\n {\n \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n \"properties\": {\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"default\": \"VFMODULE\",\n \"readOnly\": \"True\"\n },\n \"resourceID\": {\n \"title\": \"Resource ID\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelInvariantId\": {\n \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n \"type\": \"string\",\n \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n \"readOnly\": \"True\"\n },\n \"modelVersionId\": {\n \"title\": \"Model Version Id (ModelUUID)\",\n \"type\": \"string\",\n \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n \"readOnly\": \"True\"\n },\n \"modelName\": {\n \"title\": \"Model Name\",\n \"type\": \"string\",\n \"default\": \"Vloadbalancerms..vlb..module-2\",\n \"readOnly\": \"True\"\n },\n \"modelVersion\": {\n \"title\": \"Model Version\",\n \"type\": \"string\",\n \"default\": \"1\",\n \"readOnly\": \"True\"\n },\n \"modelCustomizationId\": {\n \"title\": \"Customization ID\",\n \"type\": \"string\",\n \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n \"readOnly\": \"True\"\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n },\n \"guard_policies\": {\n \"type\": \"array\",\n \"format\": \"tabs-top\",\n \"title\": \"Associated Guard policies\",\n \"items\": {\n \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n \"anyOf\": [\n {\n \"title\": \"Guard MinMax\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.minmax.new\",\n \"pattern\": \"^(guard.minmax\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"min\": {\n \"type\": \"string\",\n \"default\": \"0\"\n },\n \"max\": {\n \"type\": \"string\",\n \"default\": \"1\"\n }\n }\n }\n }\n },\n {\n \"title\": \"Guard Frequency\",\n \"type\": \"object\",\n \"properties\": {\n \"policy-id\": {\n \"type\": \"string\",\n \"default\": \"guard.frequency.new\",\n \"pattern\": \"^(guard.frequency\\\\..*)$\"\n },\n \"content\": {\n \"properties\": {\n \"actor\": {\n \"type\": \"string\",\n \"enum\": [\n \"APPC\",\n \"SO\",\n \"VFC\",\n \"SDNC\",\n \"SDNR\"\n ]\n },\n \"recipe\": {\n \"type\": \"string\",\n \"enum\": [\n \"Restart\",\n \"Rebuild\",\n \"Migrate\",\n \"Health-Check\",\n \"ModifyConfig\",\n \"VF Module Create\",\n \"VF Module Delete\",\n \"Reroute\"\n ]\n },\n \"targets\": {\n \"type\": \"string\",\n \"default\": \".*\"\n },\n \"clname\": {\n \"type\": \"string\",\n \"template\": \"{{loopName}}\",\n \"watch\": {\n \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n }\n },\n \"guardActiveStart\": {\n \"type\": \"string\",\n \"default\": \"00:00:00Z\"\n },\n \"guardActiveEnd\": {\n \"type\": \"string\",\n \"default\": \"10:00:00Z\"\n },\n \"limit\": {\n \"type\": \"string\"\n },\n \"timeWindow\": {\n \"type\": \"string\"\n },\n \"timeUnits\": {\n \"type\": \"string\",\n \"enum\": [\n \"minute\",\n \"hour\",\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n }\n}',NULL,NULL,'LOOP_Neavs_v1_0_ResourceInstanceName2_tca_2',NULL,NULL); /*!40000 ALTER TABLE `operational_policies` ENABLE KEYS */; UNLOCK TABLES; @@ -147,6 +143,7 @@ UNLOCK TABLES; LOCK TABLES `policy_models` WRITE; /*!40000 ALTER TABLE `policy_models` DISABLE KEYS */; +INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0',NULL,'2020-01-28 15:54:29.936770','','2020-01-28 15:54:30.238732','app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n'); /*!40000 ALTER TABLE `policy_models` ENABLE KEYS */; UNLOCK TABLES; @@ -168,4 +165,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-23 8:43:45 +-- Dump completed on 2020-01-28 14:55:53 diff --git a/src/main/java/org/onap/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/clamp/loop/CsarInstaller.java index ab8069f37..013d3419d 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstaller.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstaller.java @@ -25,10 +25,8 @@ package org.onap.clamp.loop; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import com.google.gson.JsonObject; import java.io.IOException; -import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Map.Entry; @@ -43,12 +41,12 @@ import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; import org.onap.clamp.clds.sdc.controller.installer.MicroService; import org.onap.clamp.clds.util.drawing.SvgFacade; -import org.onap.clamp.loop.deploy.DcaeDeployParameters; import org.onap.clamp.loop.service.CsarServiceInstaller; import org.onap.clamp.loop.service.Service; -import org.onap.clamp.policy.Policy; -import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.policy.operational.OperationalPolicy; +import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.LoopTemplatesRepository; +import org.onap.clamp.loop.template.PolicyModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @@ -71,6 +69,9 @@ public class CsarInstaller { @Autowired LoopsRepository loopRepository; + @Autowired + LoopTemplatesRepository loopTemplatesRepository; + @Autowired BlueprintParser blueprintParser; @@ -98,8 +99,8 @@ public class CsarInstaller { for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { alreadyInstalled = alreadyInstalled - && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), + && loopTemplatesRepository.existsById(LoopTemplate.generateLoopTemplateName( + csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), blueprint.getValue().getResourceAttached().getResourceInstanceName(), blueprint.getValue().getBlueprintArtifactName())); } @@ -107,7 +108,7 @@ public class CsarInstaller { } /** - * Install the service and loops from the csar. + * Install the service and loop templates from the csar. * * @param csar The Csar Handler * @throws SdcArtifactInstallerException The SdcArtifactInstallerException @@ -115,25 +116,25 @@ public class CsarInstaller { */ public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException { logger.info("Installing the CSAR " + csar.getFilePath()); - installTheLoop(csar, csarServiceInstaller.installTheService(csar)); + installTheLoopTemplates(csar, csarServiceInstaller.installTheService(csar)); logger.info("Successfully installed the CSAR " + csar.getFilePath()); } /** - * Install the Loop from the csar. + * Install the loop templates from the csar. * * @param csar The Csar Handler * @param service The service object that is related to the loop * @throws SdcArtifactInstallerException The SdcArtifactInstallerException * @throws InterruptedException The InterruptedException */ - public void installTheLoop(CsarHandler csar, Service service) + public void installTheLoopTemplates(CsarHandler csar, Service service) throws SdcArtifactInstallerException, InterruptedException { try { logger.info("Installing the Loops"); for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { logger.info("Processing blueprint " + blueprint.getValue().getBlueprintArtifactName()); - loopRepository.save(createLoopFromBlueprint(csar, blueprint.getValue(), service)); + loopTemplatesRepository.save(createLoopTemplateFromBlueprint(csar, blueprint.getValue(), service)); } logger.info("Successfully installed the Loops "); } catch (IOException e) { @@ -143,63 +144,48 @@ public class CsarInstaller { } } - private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact, Service service) - throws IOException, ParseException, InterruptedException { - Loop newLoop = new Loop(); - newLoop.setBlueprint(blueprintArtifact.getDcaeBlueprint()); - newLoop.setName(Loop.generateLoopName(csar.getSdcNotification().getServiceName(), + private LoopTemplate createLoopTemplateFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact, + Service service) throws IOException, ParseException, InterruptedException { + LoopTemplate newLoopTemplate = new LoopTemplate(); + newLoopTemplate.setBlueprint(blueprintArtifact.getDcaeBlueprint()); + newLoopTemplate.setName(LoopTemplate.generateLoopTemplateName(csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), blueprintArtifact.getResourceAttached().getResourceInstanceName(), blueprintArtifact.getBlueprintArtifactName())); - newLoop.setLastComputedState(LoopState.DESIGN); - List microServicesChain = chainGenerator .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); if (microServicesChain.isEmpty()) { microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); } - newLoop.setModelService(service); - newLoop.setMicroServicePolicies( - createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop)); - newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop)); - - newLoop.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); - newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact, newLoop)); - + newLoopTemplate.setModelService(service); + newLoopTemplate.addLoopElementModels(createMicroServiceModels(microServicesChain, csar, blueprintArtifact)); + newLoopTemplate.setMaximumInstancesAllowed(0); + newLoopTemplate.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact); - newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId()); - return newLoop; + newLoopTemplate.setDcaeBlueprintId(dcaeResponse.getTypeId()); + return newLoopTemplate; } - private HashSet createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact, - Loop newLoop) { - return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", - csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject()))); - } - - private HashSet createMicroServicePolicies(List microServicesChain, - CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException { - HashSet newSet = new HashSet<>(); - + private HashSet createMicroServiceModels(List microServicesChain, CsarHandler csar, + BlueprintArtifact blueprintArtifact) throws IOException { + HashSet newSet = new HashSet<>(); for (MicroService microService : microServicesChain) { - MicroServicePolicy microServicePolicy = new MicroServicePolicy( - Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), - csar.getSdcNotification().getServiceVersion(), - blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), - microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false, - new HashSet<>(Arrays.asList(newLoop))); - - newSet.add(microServicePolicy); - microService.setMappedNameJpa(microServicePolicy.getName()); + LoopElementModel loopElementModel = new LoopElementModel(microService.getModelType(), "CONFIG_POLICY", + blueprintArtifact.getDcaeBlueprint()); + newSet.add(loopElementModel); + loopElementModel.addPolicyModel(createPolicyModel(microService, csar)); } return newSet; } - private JsonObject createGlobalPropertiesJson(BlueprintArtifact blueprintArtifact, Loop newLoop) { - return DcaeDeployParameters.getDcaeDeploymentParametersInJson(blueprintArtifact, newLoop); + private static String createPolicyAcronym(String policyType) { + String[] policyNameArray = policyType.split("\\."); + return policyNameArray[policyNameArray.length - 1]; + } + + private PolicyModel createPolicyModel(MicroService microService, CsarHandler csar) throws IOException { + return new PolicyModel(microService.getModelType(), csar.getPolicyModelYaml().orElse(""), "1.0", + createPolicyAcronym(microService.getModelType())); } /** diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 6b9a924bf..66fd56579 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -109,9 +109,6 @@ public class Loop extends AuditEntity implements Serializable { @JoinColumn(name = "service_uuid") private Service modelService; - @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") - private String blueprint; - @Expose @Column(nullable = false, name = "last_computed_state") @Enumerated(EnumType.STRING) @@ -156,10 +153,9 @@ public class Loop extends AuditEntity implements Serializable { /** * Constructor. */ - public Loop(String name, String blueprint, String svgRepresentation) { + public Loop(String name, String svgRepresentation) { this.name = name; this.svgRepresentation = svgRepresentation; - this.blueprint = blueprint; this.lastComputedState = LoopState.DESIGN; this.globalPropertiesJson = new JsonObject(); initializeExternalComponents(); @@ -197,14 +193,6 @@ public class Loop extends AuditEntity implements Serializable { this.svgRepresentation = svgRepresentation; } - public String getBlueprint() { - return blueprint; - } - - void setBlueprint(String blueprint) { - this.blueprint = blueprint; - } - public LoopState getLastComputedState() { return lastComputedState; } @@ -305,7 +293,7 @@ public class Loop extends AuditEntity implements Serializable { * @param blueprintFileName The blueprint file name * @return The generated loop name */ - static String generateLoopName(String serviceName, String serviceVersion, String resourceName, + public static String generateLoopName(String serviceName, String serviceVersion, String resourceName, String blueprintFilename) { StringBuilder buffer = new StringBuilder("LOOP_").append(serviceName).append("_v").append(serviceVersion) .append("_").append(resourceName).append("_").append(blueprintFilename.replaceAll(".yaml", "")); diff --git a/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java b/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java index 1a75f71e6..48349e791 100644 --- a/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java +++ b/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java @@ -28,6 +28,7 @@ import com.google.gson.JsonObject; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; +import java.util.Set; import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact; import org.onap.clamp.clds.util.JsonUtils; @@ -38,21 +39,21 @@ import org.yaml.snakeyaml.Yaml; /** * To decode the bluprint input parameters. */ -public class DcaeDeployParameters { +public class DcaeDeployParameters { - private static LinkedHashMap init(LinkedHashSet blueprintArtifactList, - Loop loop) { - LinkedHashMap deploymentParamMap = new LinkedHashMap(); + private static LinkedHashMap init(Set blueprintArtifactList, Loop loop) { + LinkedHashMap deploymentParamMap = new LinkedHashMap<>(); String microServiceName = ((MicroServicePolicy) loop.getMicroServicePolicies().toArray()[0]).getName(); // Add index to the microservice name from the 2nd blueprint artifact for now. - // Update the microservice names, when able to link the microserivce <-> blueprint in the future + // Update the microservice names, when able to link the microserivce <-> + // blueprint in the future int index = 0; - for (BlueprintArtifact blueprintArtifact: blueprintArtifactList) { + for (BlueprintArtifact blueprintArtifact : blueprintArtifactList) { if (index > 0) { - deploymentParamMap.put(microServiceName + index, + deploymentParamMap.put(microServiceName + index, generateDcaeDeployParameter(blueprintArtifact, microServiceName)); } else { - deploymentParamMap.put(microServiceName, + deploymentParamMap.put(microServiceName, generateDcaeDeployParameter(blueprintArtifact, microServiceName)); } index++; @@ -65,7 +66,7 @@ public class DcaeDeployParameters { JsonObject deployJsonBody = new JsonObject(); Yaml yaml = new Yaml(); Map inputsNodes = ((Map) ((Map) yaml - .load(blueprintArtifact.getDcaeBlueprint())).get("inputs")); + .load(blueprintArtifact.getDcaeBlueprint())).get("inputs")); inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> { Object defaultValue = ((Map) elem.getValue()).get("default"); if (defaultValue != null) { @@ -98,13 +99,13 @@ public class DcaeDeployParameters { * * @return The deploymentParameters in Json */ - public static JsonObject getDcaeDeploymentParametersInJson(LinkedHashSet blueprintArtifactList, + public static JsonObject getDcaeDeploymentParametersInJson(Set blueprintArtifactList, Loop loop) { LinkedHashMap deploymentParamMap = init(blueprintArtifactList, loop); JsonObject globalProperties = new JsonObject(); JsonObject deployParamJson = new JsonObject(); - for (Map.Entry mapElement: deploymentParamMap.entrySet()) { + for (Map.Entry mapElement : deploymentParamMap.entrySet()) { deployParamJson.add(mapElement.getKey(), mapElement.getValue()); } globalProperties.add("dcaeDeployParameters", deployParamJson); @@ -117,7 +118,7 @@ public class DcaeDeployParameters { * @return The deploymentParameters in Json */ public static JsonObject getDcaeDeploymentParametersInJson(BlueprintArtifact blueprintArtifact, Loop loop) { - LinkedHashSet blueprintArtifactList = new LinkedHashSet(); + LinkedHashSet blueprintArtifactList = new LinkedHashSet<>(); blueprintArtifactList.add(blueprintArtifact); return getDcaeDeploymentParametersInJson(blueprintArtifactList, loop); } diff --git a/src/main/java/org/onap/clamp/loop/service/Service.java b/src/main/java/org/onap/clamp/loop/service/Service.java index 33b8e02da..89c0b2d42 100644 --- a/src/main/java/org/onap/clamp/loop/service/Service.java +++ b/src/main/java/org/onap/clamp/loop/service/Service.java @@ -119,6 +119,20 @@ public class Service implements Serializable { return (JsonObject) resourceDetails.get(type); } + /** + * @return the name + */ + public String getName() { + return name; + } + + /** + * @return the version + */ + public String getVersion() { + return version; + } + @Override public int hashCode() { final int prime = 31; diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java index 7f00c42ea..e3f05a01d 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java @@ -63,10 +63,14 @@ public class LoopElementModel extends AuditEntity implements Serializable { @Column(nullable = false, name = "name", unique = true) private String name; + @Expose + @Column(name = "dcae_blueprint_id") + private String dcaeBlueprintId; + /** * Here we store the blueprint coming from DCAE. */ - @Column(nullable = false, name = "blueprint_yaml") + @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") private String blueprint; /** @@ -149,6 +153,24 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * loopElementType getter. * + * dcaeBlueprintId getter. + * + * @return the dcaeBlueprintId + */ + public String getDcaeBlueprintId() { + return dcaeBlueprintId; + } + + /** + * dcaeBlueprintId setter. + * + * @param dcaeBlueprintId the dcaeBlueprintId to set + */ + public void setDcaeBlueprintId(String dcaeBlueprintId) { + this.dcaeBlueprintId = dcaeBlueprintId; + } + + /** * @return the loopElementType */ public String getLoopElementType() { diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java index 7c059e19a..b8adebae9 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java @@ -26,6 +26,7 @@ package org.onap.clamp.loop.template; import com.google.gson.annotations.Expose; import java.io.Serializable; +import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -57,6 +58,10 @@ public class LoopTemplate extends AuditEntity implements Serializable { @Column(nullable = false, name = "name", unique = true) private String name; + @Expose + @Column(name = "dcae_blueprint_id") + private String dcaeBlueprintId; + /** * This field is used when we have a blueprint defining all microservices. The * other option would be to have independent blueprint for each microservices. @@ -110,6 +115,24 @@ public class LoopTemplate extends AuditEntity implements Serializable { return blueprint; } + /** + * dcaeBlueprintId getter. + * + * @return the dcaeBlueprintId + */ + public String getDcaeBlueprintId() { + return dcaeBlueprintId; + } + + /** + * dcaeBlueprintId setter. + * + * @param dcaeBlueprintId the dcaeBlueprintId to set + */ + public void setDcaeBlueprintId(String dcaeBlueprintId) { + this.dcaeBlueprintId = dcaeBlueprintId; + } + /** * blueprint setter. * @@ -164,6 +187,18 @@ public class LoopTemplate extends AuditEntity implements Serializable { this.maximumInstancesAllowed = maximumInstancesAllowed; } + /** + * Add list of loopElements to the current template, each loopElementModel is + * added at the end of the list so the flowOrder is computed automatically. + * + * @param loopElementModels The loopElementModel set to add + */ + public void addLoopElementModels(Set loopElementModels) { + for (LoopElementModel loopElementModel : loopElementModels) { + addLoopElementModel(loopElementModel); + } + } + /** * Add a loopElement to the current template, the loopElementModel is added at * the end of the list so the flowOrder is computed automatically. @@ -266,4 +301,21 @@ public class LoopTemplate extends AuditEntity implements Serializable { } return true; } + + /** + * Generate the loop template name. + * + * @param serviceName The service name + * @param serviceVersion The service version + * @param resourceName The resource name + * @param blueprintFileName The blueprint file name + * @return The generated loop template name + */ + public static String generateLoopTemplateName(String serviceName, String serviceVersion, String resourceName, + String blueprintFilename) { + StringBuilder buffer = new StringBuilder("LOOP_TEMPLATE_").append(serviceName).append("_v") + .append(serviceVersion).append("_").append(resourceName).append("_") + .append(blueprintFilename.replaceAll(".yaml", "")); + return buffer.toString().replace('.', '_').replaceAll(" ", ""); + } } diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index 2ebea7b17..70adf3eef 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -51,7 +51,11 @@ import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.ResourceFileUtil; import org.onap.clamp.loop.service.ServiceRepository; -import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.LoopTemplateLoopElementModel; +import org.onap.clamp.loop.template.LoopTemplatesRepository; +import org.onap.clamp.loop.template.PolicyModelId; +import org.onap.clamp.loop.template.PolicyModelsRepository; import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.INotificationData; import org.onap.sdc.api.notification.IResourceInstance; @@ -80,11 +84,14 @@ public class CsarInstallerItCase { private static final String RESOURCE_INSTANCE_NAME_RESOURCE2 = "ResourceInstanceName2"; @Autowired - private LoopsRepository loopsRepo; + private LoopTemplatesRepository loopTemplatesRepo; @Autowired ServiceRepository serviceRepository; + @Autowired + PolicyModelsRepository policyModelsRepository; + @Autowired @Qualifier("csarInstaller") private CsarInstaller csarInstaller; @@ -189,42 +196,44 @@ public class CsarInstallerItCase { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csar = buildFakeCsarHandler(generatedName); csarInstaller.installTheCsar(csar); - assertThat(serviceRepository - .existsById("63cac700-ab9a-4115-a74f-7eac85e3fce0")).isTrue(); - assertThat(loopsRepo - .existsById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml"))) - .isTrue(); - assertThat(loopsRepo.existsById( - Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml"))).isTrue(); - assertThat(loopsRepo.existsById( - Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml"))).isTrue(); + assertThat(serviceRepository.existsById("63cac700-ab9a-4115-a74f-7eac85e3fce0")).isTrue(); + assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml"))).isTrue(); + assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml"))).isTrue(); + assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml"))).isTrue(); // Verify now that policy and json representation, global properties are well // set - Loop loop = loopsRepo - .findById(Loop.generateLoopName(generatedName, "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml")) - .get(); - assertThat(loop.getSvgRepresentation()).startsWith(""); + Loop loopTest = new Loop("ControlLoopTest", ""); loopTest.setGlobalPropertiesJson( new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class)); loopTest.setLastComputedState(LoopState.DESIGN); diff --git a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java index d7c2edadc..e23dcf186 100644 --- a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java @@ -47,7 +47,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; - @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class DeployFlowTestItCase { @@ -63,7 +62,7 @@ public class DeployFlowTestItCase { @Transactional public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { Loop loopTest = createLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", - "UUID-blueprint"); + "UUID-blueprint"); LoopTemplate template = new LoopTemplate(); template.setName("templateName"); template.setBlueprint("yamlcontent"); @@ -73,11 +72,10 @@ public class DeployFlowTestItCase { "{\"param1\":\"value1\"}", true); loopTest.addMicroServicePolicy(microServicePolicy); loopService.saveOrUpdateLoop(loopTest); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) - .withProperty("loopObject", loopTest).build(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); - camelContext.createProducerTemplate() - .send("direct:deploy-loop", myCamelExchange); + camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange); Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNotNull(); @@ -88,26 +86,23 @@ public class DeployFlowTestItCase { @Transactional public void deployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { Loop loopTest2 = createLoop("ControlLoopTest2", "", "yamlcontent", "{\"dcaeDeployParameters\": {" - + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}," - + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}" - + "}}", "UUID-blueprint"); + + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}," + + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}" + + "}}", "UUID-blueprint"); LoopTemplate template = new LoopTemplate(); template.setName("templateName"); loopTest2.setLoopTemplate(template); - MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); - MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); + MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true); + MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true); loopTest2.addMicroServicePolicy(microServicePolicy1); loopTest2.addMicroServicePolicy(microServicePolicy2); loopService.saveOrUpdateLoop(loopTest2); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) - .withProperty("loopObject", loopTest2).build(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) + .build(); - camelContext.createProducerTemplate() - .send("direct:deploy-loop", myCamelExchange); + camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange); Loop loopAfterTest = loopService.getLoop("ControlLoopTest2"); Set policyList = loopAfterTest.getMicroServicePolicies(); @@ -123,7 +118,7 @@ public class DeployFlowTestItCase { @Transactional public void undeployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { Loop loopTest = createLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", - "UUID-blueprint"); + "UUID-blueprint"); LoopTemplate template = new LoopTemplate(); template.setName("templateName"); template.setBlueprint("yamlcontent"); @@ -135,11 +130,10 @@ public class DeployFlowTestItCase { "{\"param1\":\"value1\"}", true); loopTest.addMicroServicePolicy(microServicePolicy); loopService.saveOrUpdateLoop(loopTest); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) - .withProperty("loopObject", loopTest).build(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); - camelContext.createProducerTemplate() - .send("direct:undeploy-loop", myCamelExchange); + camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange); Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); assertThat(loopAfterTest.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue(); @@ -149,26 +143,25 @@ public class DeployFlowTestItCase { @Transactional public void undeployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { Loop loopTest2 = createLoop("ControlLoopTest2", "", "yamlcontent", "{\"dcaeDeployParameters\": {" - + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}," - + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}" - + "}}", "UUID-blueprint"); + + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}," + + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}" + + "}}", "UUID-blueprint"); LoopTemplate template = new LoopTemplate(); template.setName("templateName"); loopTest2.setLoopTemplate(template); - MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true, "testDeploymentId1", "testDeploymentStatusUrl1"); - MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true, "testDeploymentId2", "testDeploymentStatusUrl2"); + MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true, + "testDeploymentId1", "testDeploymentStatusUrl1"); + MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true, + "testDeploymentId2", "testDeploymentStatusUrl2"); loopTest2.addMicroServicePolicy(microServicePolicy1); loopTest2.addMicroServicePolicy(microServicePolicy2); loopService.saveOrUpdateLoop(loopTest2); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) - .withProperty("loopObject", loopTest2).build(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) + .build(); - camelContext.createProducerTemplate() - .send("direct:undeploy-loop", myCamelExchange); + camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange); Loop loopAfterTest = loopService.getLoop("ControlLoopTest2"); Set policyList = loopAfterTest.getMicroServicePolicies(); @@ -181,7 +174,7 @@ public class DeployFlowTestItCase { private Loop createLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, String dcaeBlueprintId) throws JsonSyntaxException, IOException { - Loop loop = new Loop(name, blueprint, svgRepresentation); + Loop loop = new Loop(name, svgRepresentation); loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); loop.setLastComputedState(LoopState.DESIGN); loop.setDcaeBlueprintId(dcaeBlueprintId); @@ -197,9 +190,10 @@ public class DeployFlowTestItCase { } private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, - String policyTosca, String jsonProperties, boolean shared, String deploymengId, String deploymentStatusUrl) { - MicroServicePolicy microService = getMicroServicePolicy(name, modelType, jsonRepresentation, - policyTosca, jsonProperties, shared); + String policyTosca, String jsonProperties, boolean shared, String deploymengId, + String deploymentStatusUrl) { + MicroServicePolicy microService = getMicroServicePolicy(name, modelType, jsonRepresentation, policyTosca, + jsonProperties, shared); microService.setDcaeDeploymentId(deploymengId); microService.setDcaeDeploymentStatusUrl(deploymentStatusUrl); diff --git a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java index a41b5c251..ad37bcc88 100644 --- a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java @@ -72,7 +72,7 @@ public class LoopControllerTestItCase { } private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) { - return new Loop(loopName, loopBlueprint, loopSvg); + return new Loop(loopName, loopSvg); } @Test diff --git a/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java index c172a9a07..15b9cb43a 100644 --- a/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java @@ -62,7 +62,7 @@ public class LoopLogServiceTestItCase { LoopLogService loopLogService; private void saveTestLoopToDb() { - Loop testLoop = new Loop(EXAMPLE_LOOP_NAME, BLUEPRINT, SVG_REPRESENTATION); + Loop testLoop = new Loop(EXAMPLE_LOOP_NAME, SVG_REPRESENTATION); testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); loopService.saveOrUpdateLoop(testLoop); } @@ -88,7 +88,7 @@ public class LoopLogServiceTestItCase { log.setLogComponent(CLAMP_COMPONENT); log.setLogType(LogType.INFO); log.setMessage(SAMPLE_LOG_MESSAGE); - Loop testLoop = new Loop(EXAMPLE_LOOP_NAME, BLUEPRINT, SVG_REPRESENTATION); + Loop testLoop = new Loop(EXAMPLE_LOOP_NAME, SVG_REPRESENTATION); log.setLoop(testLoop); assertThat(log.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE); assertThat(log.getLogType()).isEqualTo(LogType.INFO); diff --git a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java index e0c112cb5..891d23b46 100644 --- a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java @@ -121,7 +121,6 @@ public class LoopRepositoriesItCase { Loop loop = new Loop(); loop.setName(name); loop.setSvgRepresentation(svgRepresentation); - loop.setBlueprint(blueprint); loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); loop.setLastComputedState(LoopState.DESIGN); loop.setDcaeDeploymentId(dcaeId); @@ -215,11 +214,10 @@ public class LoopRepositoriesItCase { // Attempt an update ((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).setLogInstant(Instant.now()); - loopInDbRetrieved.setBlueprint("yaml2"); + loopInDbRetrieved.setSvgRepresentation(""); Loop loopInDbRetrievedUpdated = loopRepository.saveAndFlush(loopInDbRetrieved); // Loop loopInDbRetrievedUpdated = // loopRepository.findById(loopTest.getName()).get(); - assertThat(loopInDbRetrievedUpdated.getBlueprint()).isEqualTo("yaml2"); assertThat((LoopLog) loopInDbRetrievedUpdated.getLoopLogs().toArray()[0]) .isEqualToComparingFieldByField(loopInDbRetrieved.getLoopLogs().toArray()[0]); // UpdatedDate should have been changed diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index 338aaa3eb..615826eda 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -87,7 +87,6 @@ public class LoopServiceTestItCase { assertThat(actualLoop).isNotNull(); assertThat(actualLoop).isEqualTo(loopsRepository.findById(actualLoop.getName()).get()); assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - assertThat(actualLoop.getBlueprint()).isEqualTo(loopBlueprint); assertThat(actualLoop.getSvgRepresentation()).isEqualTo(loopSvg); assertThat(actualLoop.getGlobalPropertiesJson().getAsJsonPrimitive("testName").getAsString()) .isEqualTo("testValue"); @@ -354,6 +353,6 @@ public class LoopServiceTestItCase { } private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) { - return new Loop(loopName, loopBlueprint, loopSvg); + return new Loop(loopName, loopSvg); } } \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index af8f2271b..052b97124 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -61,7 +61,7 @@ public class LoopToJsonTest { private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, String dcaeId, String dcaeUrl, String dcaeBlueprintId) throws JsonSyntaxException, IOException { - Loop loop = new Loop(name, blueprint, svgRepresentation); + Loop loop = new Loop(name, svgRepresentation); loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); loop.setLastComputedState(LoopState.DESIGN); loop.setDcaeDeploymentId(dcaeId); @@ -134,7 +134,6 @@ public class LoopToJsonTest { assertThat(loopTestDeserialized.getComponent("POLICY").getState()).isEqualToComparingOnlyGivenFields( loopTest.getComponent("POLICY").getState(), "stateName", "description"); // svg and blueprint not exposed so wont be deserialized - assertThat(loopTestDeserialized.getBlueprint()).isEqualTo(null); assertThat(loopTestDeserialized.getSvgRepresentation()).isEqualTo(null); assertThat(loopTestDeserialized.getOperationalPolicies()).containsExactly(opPolicy); diff --git a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java index 39468a1c7..f8c1d8662 100644 --- a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java +++ b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java @@ -111,8 +111,7 @@ public class PolicyModelServiceItCase { policyModelsService.saveOrUpdatePolicyModel(policyModel2); List policyModelTypesList = policyModelsService.getAllPolicyModelTypes(); - assertThat(policyModelTypesList).containsOnly(policyModel1.getPolicyModelType(), - policyModel2.getPolicyModelType()); + assertThat(policyModelTypesList).contains(policyModel1.getPolicyModelType(), policyModel2.getPolicyModelType()); } @Test @@ -125,7 +124,7 @@ public class PolicyModelServiceItCase { "VARIANT", "user"); policyModelsService.saveOrUpdatePolicyModel(policyModel2); - assertThat(policyModelsService.getAllPolicyModels()).containsOnly(policyModel1, policyModel2); + assertThat(policyModelsService.getAllPolicyModels()).contains(policyModel1, policyModel2); } @Test @@ -138,7 +137,7 @@ public class PolicyModelServiceItCase { "VARIANT", "user"); policyModelsService.saveOrUpdatePolicyModel(policyModel2); - assertThat(policyModelsService.getAllPolicyModelsByType(POLICY_MODEL_TYPE_2)).containsOnly(policyModel1, + assertThat(policyModelsService.getAllPolicyModelsByType(POLICY_MODEL_TYPE_2)).contains(policyModel1, policyModel2); } @@ -154,6 +153,6 @@ public class PolicyModelServiceItCase { SortedSet sortedSet = new TreeSet<>(); policyModelsService.getAllPolicyModels().forEach(sortedSet::add); - assertThat(sortedSet).containsExactly(policyModel2, policyModel1); + assertThat(sortedSet).contains(policyModel2, policyModel1); } } -- cgit 1.2.3-korg From f2d71ebde9dcd13d3181ba343ad82e728b30bf73 Mon Sep 17 00:00:00 2001 From: sebdet Date: Thu, 30 Jan 2020 16:37:27 +0100 Subject: Remove blueprintId in loop Remove the blueprint Id for DCAE in loop object as now the one in loop template will be used. Issue-ID: CLAMP-592 Change-Id: Ie86f362451d58de07f7a715ae0bfc92566893e13 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 1 - extra/sql/dump/test-data.sql | 20 ++-- pom.xml | 12 +-- src/main/java/org/onap/clamp/loop/Loop.java | 12 --- .../loop/components/external/DcaeComponent.java | 12 ++- .../org/onap/clamp/loop/DcaeComponentTest.java | 118 +++++++-------------- .../org/onap/clamp/loop/DeployFlowTestItCase.java | 1 - .../onap/clamp/loop/LoopRepositoriesItCase.java | 1 - .../java/org/onap/clamp/loop/LoopToJsonTest.java | 1 - 9 files changed, 57 insertions(+), 121 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 92e36f075..103276501 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -79,7 +79,6 @@ created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, - dcae_blueprint_id varchar(255), dcae_deployment_id varchar(255), dcae_deployment_status_url varchar(255), global_properties_json json, diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index db96154fd..08d3ca507 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -44,7 +44,7 @@ UNLOCK TABLES; LOCK TABLES `hibernate_sequence` WRITE; /*!40000 ALTER TABLE `hibernate_sequence` DISABLE KEYS */; -INSERT INTO `hibernate_sequence` VALUES (4); +INSERT INTO `hibernate_sequence` VALUES (6); /*!40000 ALTER TABLE `hibernate_sequence` ENABLE KEYS */; UNLOCK TABLES; @@ -54,7 +54,7 @@ UNLOCK TABLES; LOCK TABLES `loop_element_models` WRITE; /*!40000 ALTER TABLE `loop_element_models` DISABLE KEYS */; -INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-01-28 15:54:29.921692','','2020-01-28 15:54:30.237701','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n',NULL,'CONFIG_POLICY'); +INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-01-30 15:21:59.168542','','2020-01-30 15:21:59.460129','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n',NULL,'CONFIG_POLICY'); /*!40000 ALTER TABLE `loop_element_models` ENABLE KEYS */; UNLOCK TABLES; @@ -73,9 +73,9 @@ UNLOCK TABLES; LOCK TABLES `loop_templates` WRITE; /*!40000 ALTER TABLE `loop_templates` DISABLE KEYS */; -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca','','2020-01-28 15:54:30.197906','','2020-01-28 15:54:30.197906','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-69bf32c5-ebb3-4faa-b7e4-671617efb3d3',0,'VESTCAOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca_3','','2020-01-28 15:54:30.099520','','2020-01-28 15:54:30.099520','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-d71093a2-73e4-4227-99f7-92e7069f5a10',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName2_tca_2','','2020-01-28 15:54:29.895679','','2020-01-28 15:54:29.895679','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-4bbbe73d-28b0-4204-aa8c-d4d814a6d08b',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca','','2020-01-30 15:21:59.434409','','2020-01-30 15:21:59.434409','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-3369cc54-4ce8-4539-9493-d983c7823d66',0,'VESTCAOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca_3','','2020-01-30 15:21:59.294006','','2020-01-30 15:21:59.294006','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-5b5d899d-819d-4813-bfd7-c5c1cdb9b2fc',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName2_tca_2','','2020-01-30 15:21:59.154059','','2020-01-30 15:21:59.154059','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-c12c1f86-295b-44a6-bbcf-2bbe40d70f2f',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; UNLOCK TABLES; @@ -113,9 +113,9 @@ UNLOCK TABLES; LOCK TABLES `looptemplates_to_loopelementmodels` WRITE; /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` DISABLE KEYS */; -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName1_tca_3',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_fDDwI_v1_0_ResourceInstanceName2_tca_2',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca_3',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName2_tca_2',0); /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` ENABLE KEYS */; UNLOCK TABLES; @@ -143,7 +143,7 @@ UNLOCK TABLES; LOCK TABLES `policy_models` WRITE; /*!40000 ALTER TABLE `policy_models` DISABLE KEYS */; -INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0',NULL,'2020-01-28 15:54:29.936770','','2020-01-28 15:54:30.238732','app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n'); +INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0',NULL,'2020-01-30 15:21:59.176333','','2020-01-30 15:21:59.461713','app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n'); /*!40000 ALTER TABLE `policy_models` ENABLE KEYS */; UNLOCK TABLES; @@ -165,4 +165,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-28 14:55:53 +-- Dump completed on 2020-01-30 14:23:27 diff --git a/pom.xml b/pom.xml index 4d8357500..94598acfc 100644 --- a/pom.xml +++ b/pom.xml @@ -84,18 +84,12 @@ jacoco ${project.build.directory}/surefire-reports - ${project.build.directory}/jacoco-html-xml-reports/jacoco.xml - true ${project.version} - - - DEBUG - ${project.build.directory}/${ui.react.src}/node/node - true + ${project.build.directory}/${ui.react.src}/node/node + true src/main,${project.build.directory}/${ui.react.src}/src src/main/resources/** true @@ -114,6 +108,7 @@ + without-test @@ -153,6 +148,7 @@ true + docker diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 66fd56579..339812672 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -92,10 +92,6 @@ public class Loop extends AuditEntity implements Serializable { @Column(name = "dcae_deployment_status_url") private String dcaeDeploymentStatusUrl; - @Expose - @Column(name = "dcae_blueprint_id") - private String dcaeBlueprintId; - @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation") private String svgRepresentation; @@ -248,14 +244,6 @@ public class Loop extends AuditEntity implements Serializable { this.loopLogs.add(log); } - public String getDcaeBlueprintId() { - return dcaeBlueprintId; - } - - void setDcaeBlueprintId(String dcaeBlueprintId) { - this.dcaeBlueprintId = dcaeBlueprintId; - } - public Service getModelService() { return modelService; } diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java index acb7190f7..21960e387 100644 --- a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java +++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java @@ -24,16 +24,17 @@ package org.onap.clamp.loop.components.external; import com.google.gson.JsonObject; + import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.UUID; + import org.apache.camel.Exchange; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; - import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; import org.onap.clamp.clds.util.JsonUtils; @@ -92,6 +93,7 @@ public class DcaeComponent extends ExternalComponent { return null; } } + /** * Generate the deployment id, it's random. * @@ -122,7 +124,7 @@ public class DcaeComponent extends ExternalComponent { JsonObject globalProp = loop.getGlobalPropertiesJson(); JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER); - String serviceTypeId = loop.getDcaeBlueprintId(); + String serviceTypeId = loop.getLoopTemplate().getDcaeBlueprintId(); JsonObject rootObject = new JsonObject(); rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId); @@ -135,7 +137,7 @@ public class DcaeComponent extends ExternalComponent { /** * Return the deploy payload for DCAE. * - * @param loop The loop object + * @param loop The loop object * @param microServiceName The micro service name * @return The payload used to send deploy closed loop request */ @@ -143,7 +145,7 @@ public class DcaeComponent extends ExternalComponent { JsonObject globalProp = loop.getGlobalPropertiesJson(); JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(microServiceName); - String serviceTypeId = loop.getDcaeBlueprintId(); + String serviceTypeId = loop.getLoopTemplate().getDcaeBlueprintId(); JsonObject rootObject = new JsonObject(); rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId); @@ -161,7 +163,7 @@ public class DcaeComponent extends ExternalComponent { */ public static String getUndeployPayload(Loop loop) { JsonObject rootObject = new JsonObject(); - rootObject.addProperty(DCAE_SERVICETYPE_ID, loop.getDcaeBlueprintId()); + rootObject.addProperty(DCAE_SERVICETYPE_ID, loop.getLoopTemplate().getDcaeBlueprintId()); return rootObject.toString(); } diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java index c7035efa0..03b35f1b4 100644 --- a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java +++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java @@ -35,42 +35,42 @@ import java.util.List; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.json.simple.parser.ParseException; -import org.junit.Ignore; import org.junit.Test; import org.mockito.Mockito; import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; import org.onap.clamp.loop.components.external.DcaeComponent; import org.onap.clamp.loop.components.external.ExternalComponentState; +import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.policy.microservice.MicroServicePolicy; public class DcaeComponentTest { private Loop createTestLoop() { - String yaml = "imports:\n" + " - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n" - + "node_templates:\n" + " docker_service_host:\n" + " type: dcae.nodes.SelectedDockerHost"; - Loop loopTest = new Loop("ControlLoopTest", ""); loopTest.setGlobalPropertiesJson( - new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class)); + new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class)); loopTest.setLastComputedState(LoopState.DESIGN); loopTest.setDcaeDeploymentId("123456789"); loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085"); - loopTest.setDcaeBlueprintId("UUID-blueprint"); MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, - new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>()); + "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, + new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>()); microServicePolicy.setConfigurationsJson(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class)); loopTest.addMicroServicePolicy(microServicePolicy); + LoopTemplate loopTemplate = new LoopTemplate("test", "yaml", "svg", 1, null); + loopTemplate.setDcaeBlueprintId("UUID-blueprint"); + loopTest.setLoopTemplate(loopTemplate); + return loopTest; } @Test public void convertDcaeResponseTest() throws IOException { String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state','error':'errorMessage', " - + "'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}"; + + "'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}"; DcaeOperationStatusResponse responseObject = DcaeComponent.convertDcaeResponse(dcaeFakeResponse); assertThat(responseObject.getRequestId()).isEqualTo("testId"); assertThat(responseObject.getOperationType()).isEqualTo("install"); @@ -115,7 +115,7 @@ public class DcaeComponentTest { assertThat(state.getStateName()).isEqualTo("BLUEPRINT_DEPLOYED"); // OperationalType = install - DcaeOperationStatusResponse dcaeResponse = Mockito.mock(DcaeOperationStatusResponse.class); + DcaeOperationStatusResponse dcaeResponse = Mockito.mock(DcaeOperationStatusResponse.class); Mockito.when(dcaeResponse.getOperationType()).thenReturn("install"); Mockito.when(dcaeResponse.getStatus()).thenReturn("succeeded"); @@ -159,81 +159,35 @@ public class DcaeComponentTest { @Test public void convertToDcaeInventoryResponseTest() throws IOException, ParseException { - String dcaeFakeResponse = "{\n" - + " \"links\": {\n" - + " \"previousLink\": {\n" - + " \"title\": \"string\",\n" - + " \"rel\": \"string\",\n" - + " \"uri\": \"string\",\n" - + " \"uriBuilder\": {},\n" - + " \"rels\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"params\": {\n" - + " \"additionalProp1\": \"string\",\n" - + " \"additionalProp2\": \"string\",\n" - + " \"additionalProp3\": \"string\"\n" - + " },\n" - + " \"type\": \"string\"\n" - + " },\n" - + " \"nextLink\": {\n" - + " \"title\": \"string\",\n" - + " \"rel\": \"string\",\n" - + " \"uri\": \"string\",\n" - + " \"uriBuilder\": {},\n" - + " \"rels\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"params\": {\n" - + " \"additionalProp1\": \"string\",\n" - + " \"additionalProp2\": \"string\",\n" - + " \"additionalProp3\": \"string\"\n" - + " },\n" - + " \"type\": \"string\"\n" - + " }\n" - + " },\n" - + " \"totalCount\": 0,\n" - + " \"items\": [\n" - + " {\n" - + " \"owner\": \"testOwner\",\n" - + " \"application\": \"testApplication\",\n" - + " \"component\": \"testComponent\",\n" - + " \"typeName\": \"testTypeName\",\n" - + " \"typeVersion\": 0,\n" - + " \"blueprintTemplate\": \"testBlueprintTemplate\",\n" - + " \"serviceIds\": [\n" - + " \"serviceId1\", \"serviceId2\"\n" - + " ],\n" - + " \"vnfTypes\": [\n" - + " \"vnfType1\", \"vnfType2\"\n" - + " ],\n" - + " \"serviceLocations\": [\n" - + " \"serviceLocation1\", \"serviceLocation2\"\n" - + " ],\n" + String dcaeFakeResponse = "{\n" + " \"links\": {\n" + " \"previousLink\": {\n" + + " \"title\": \"string\",\n" + " \"rel\": \"string\",\n" + " \"uri\": \"string\",\n" + + " \"uriBuilder\": {},\n" + " \"rels\": [\n" + " \"string\"\n" + " ],\n" + + " \"params\": {\n" + " \"additionalProp1\": \"string\",\n" + + " \"additionalProp2\": \"string\",\n" + " \"additionalProp3\": \"string\"\n" + + " },\n" + " \"type\": \"string\"\n" + " },\n" + " \"nextLink\": {\n" + + " \"title\": \"string\",\n" + " \"rel\": \"string\",\n" + " \"uri\": \"string\",\n" + + " \"uriBuilder\": {},\n" + " \"rels\": [\n" + " \"string\"\n" + " ],\n" + + " \"params\": {\n" + " \"additionalProp1\": \"string\",\n" + + " \"additionalProp2\": \"string\",\n" + " \"additionalProp3\": \"string\"\n" + + " },\n" + " \"type\": \"string\"\n" + " }\n" + " },\n" + " \"totalCount\": 0,\n" + + " \"items\": [\n" + " {\n" + " \"owner\": \"testOwner\",\n" + + " \"application\": \"testApplication\",\n" + " \"component\": \"testComponent\",\n" + + " \"typeName\": \"testTypeName\",\n" + " \"typeVersion\": 0,\n" + + " \"blueprintTemplate\": \"testBlueprintTemplate\",\n" + " \"serviceIds\": [\n" + + " \"serviceId1\", \"serviceId2\"\n" + " ],\n" + " \"vnfTypes\": [\n" + + " \"vnfType1\", \"vnfType2\"\n" + " ],\n" + " \"serviceLocations\": [\n" + + " \"serviceLocation1\", \"serviceLocation2\"\n" + " ],\n" + " \"asdcServiceId\": \"testAsdcServiceId\",\n" + " \"asdcResourceId\": \"testAsdcResourceId\",\n" - + " \"asdcServiceURL\": \"testAsdcServiceURL\",\n" - + " \"typeId\": \"testTypeId\",\n" - + " \"selfLink\": {\n" - + " \"title\": \"selfLinkTitle\",\n" - + " \"rel\": \"selfLinkRel\",\n" - + " \"uri\": \"selfLinkUri\",\n" - + " \"uriBuilder\": {},\n" - + " \"rels\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"params\": {\n" - + " \"additionalProp1\": \"string\",\n" - + " \"additionalProp2\": \"string\",\n" - + " \"additionalProp3\": \"string\"\n" - + " },\n" - + " \"type\": \"string\"\n" - + " },\n" + + " \"asdcServiceURL\": \"testAsdcServiceURL\",\n" + " \"typeId\": \"testTypeId\",\n" + + " \"selfLink\": {\n" + " \"title\": \"selfLinkTitle\",\n" + + " \"rel\": \"selfLinkRel\",\n" + " \"uri\": \"selfLinkUri\",\n" + + " \"uriBuilder\": {},\n" + " \"rels\": [\n" + " \"string\"\n" + " ],\n" + + " \"params\": {\n" + " \"additionalProp1\": \"string\",\n" + + " \"additionalProp2\": \"string\",\n" + " \"additionalProp3\": \"string\"\n" + + " },\n" + " \"type\": \"string\"\n" + " },\n" + " \"created\": \"2020-01-22T09:38:15.436Z\",\n" - + " \"deactivated\": \"2020-01-22T09:38:15.437Z\"\n" - + " }\n" - + " ]\n" - + "}"; + + " \"deactivated\": \"2020-01-22T09:38:15.437Z\"\n" + " }\n" + " ]\n" + "}"; List responseObject = DcaeComponent.convertToDcaeInventoryResponse(dcaeFakeResponse); assertThat(responseObject.get(0).getAsdcResourceId()).isEqualTo("testAsdcResourceId"); assertThat(responseObject.get(0).getAsdcServiceId()).isEqualTo("testAsdcServiceId"); diff --git a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java index e23dcf186..e1cee341b 100644 --- a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java @@ -177,7 +177,6 @@ public class DeployFlowTestItCase { Loop loop = new Loop(name, svgRepresentation); loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); loop.setLastComputedState(LoopState.DESIGN); - loop.setDcaeBlueprintId(dcaeBlueprintId); return loop; } diff --git a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java index 891d23b46..62b25605e 100644 --- a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java @@ -125,7 +125,6 @@ public class LoopRepositoriesItCase { loop.setLastComputedState(LoopState.DESIGN); loop.setDcaeDeploymentId(dcaeId); loop.setDcaeDeploymentStatusUrl(dcaeUrl); - loop.setDcaeBlueprintId(dcaeBlueprintId); loop.setLoopTemplate(getLoopTemplate("templateName", "yaml", "svg", "toto", 1)); return loop; } diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index 052b97124..ae4b2564e 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -66,7 +66,6 @@ public class LoopToJsonTest { loop.setLastComputedState(LoopState.DESIGN); loop.setDcaeDeploymentId(dcaeId); loop.setDcaeDeploymentStatusUrl(dcaeUrl); - loop.setDcaeBlueprintId(dcaeBlueprintId); return loop; } -- cgit 1.2.3-korg From 81c1344c018e995e4f6f906435d0faab3480e13b Mon Sep 17 00:00:00 2001 From: xuegao Date: Tue, 4 Feb 2020 15:22:00 +0100 Subject: Update get Dcae Status flow Update the flow to get Dcae Status, supporting multiple blue print. Issue-ID: CLAMP-590 Change-Id: I6a05a40d4879082413d3ed83159467ea616c5d37 Signed-off-by: xuegao --- extra/sql/bulkload/create-tables.sql | 3 +- src/main/java/org/onap/clamp/loop/Loop.java | 19 +++- .../loop/components/external/DcaeComponent.java | 13 ++- .../org/onap/clamp/loop/template/LoopTemplate.java | 25 ++++- .../resources/clds/camel/routes/dcae-flows.xml | 47 ++++------ .../resources/clds/camel/routes/loop-flows.xml | 103 ++++++++++++++------ .../org/onap/clamp/loop/DcaeComponentTest.java | 4 +- .../org/onap/clamp/loop/DeployFlowTestItCase.java | 86 +++++++++++++++-- .../onap/clamp/loop/LoopControllerTestItCase.java | 4 + .../org/onap/clamp/loop/LoopServiceTestItCase.java | 7 ++ .../resources/clds/camel/routes/dcae-flows.xml | 26 +++--- .../resources/clds/camel/routes/loop-flows.xml | 104 +++++++++++++++------ 12 files changed, 328 insertions(+), 113 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 103276501..819d92591 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -62,6 +62,7 @@ dcae_blueprint_id varchar(255), maximum_instances_allowed integer, svg_representation MEDIUMTEXT, + unique_blueprint boolean default false, service_uuid varchar(255), primary key (name) ) engine=InnoDB; @@ -84,7 +85,7 @@ global_properties_json json, last_computed_state varchar(255) not null, svg_representation MEDIUMTEXT, - loop_template_name varchar(255), + loop_template_name varchar(255) not null, service_uuid varchar(255), primary key (name) ) engine=InnoDB; diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 339812672..0ac8030d3 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -131,7 +131,7 @@ public class Loop extends AuditEntity implements Serializable { @Expose @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER) - @JoinColumn(name = "loop_template_name") + @JoinColumn(name = "loop_template_name", nullable=false) private LoopTemplate loopTemplate; private void initializeExternalComponents() { @@ -253,10 +253,12 @@ public class Loop extends AuditEntity implements Serializable { } public Map getComponents() { + refreshDcaeComponents(); return components; } public ExternalComponent getComponent(String componentName) { + refreshDcaeComponents(); return this.components.get(componentName); } @@ -272,6 +274,17 @@ public class Loop extends AuditEntity implements Serializable { this.loopTemplate = loopTemplate; } + private void refreshDcaeComponents() { + if (!this.loopTemplate.getUniqueBlueprint()) { + this.components.remove("DCAE"); + for (MicroServicePolicy policy : this.microServicePolicies) { + if (!this.components.containsKey("DCAE_" + policy.getName())) { + this.addComponent(new DcaeComponent(policy.getName())); + } + } + } + } + /** * Generate the loop name. * @@ -282,9 +295,9 @@ public class Loop extends AuditEntity implements Serializable { * @return The generated loop name */ public static String generateLoopName(String serviceName, String serviceVersion, String resourceName, - String blueprintFilename) { + String blueprintFileName) { StringBuilder buffer = new StringBuilder("LOOP_").append(serviceName).append("_v").append(serviceVersion) - .append("_").append(resourceName).append("_").append(blueprintFilename.replaceAll(".yaml", "")); + .append("_").append(resourceName).append("_").append(blueprintFileName.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java index 21960e387..7c0e3ccbb 100644 --- a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java +++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java @@ -48,6 +48,8 @@ public class DcaeComponent extends ExternalComponent { private static final String DCAE_SERVICETYPE_ID = "serviceTypeId"; private static final String DCAE_INPUTS = "inputs"; + private String name; + public static final ExternalComponentState BLUEPRINT_DEPLOYED = new ExternalComponentState("BLUEPRINT_DEPLOYED", "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop"); public static final ExternalComponentState PROCESSING_MICROSERVICE_INSTALLATION = new ExternalComponentState( @@ -73,13 +75,20 @@ public class DcaeComponent extends ExternalComponent { public DcaeComponent() { super(BLUEPRINT_DEPLOYED); + this.name = "DCAE"; + } + + public DcaeComponent(String name) { + super(BLUEPRINT_DEPLOYED); + this.name = "DCAE_" + name; } @Override public String getComponentName() { - return "DCAE"; + return name; } + /** * Convert the json response to a DcaeOperationStatusResponse. * @@ -170,7 +179,7 @@ public class DcaeComponent extends ExternalComponent { /** * Return the uninstallation payload for DCAE. * - * @param microServicePolicy The microServicePolicy object + * @param policy The microServicePolicy object * @return The payload in string (json) */ public static String getUndeployPayload(MicroServicePolicy policy) { diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java index b8adebae9..3e90c1e5b 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java @@ -70,7 +70,6 @@ public class LoopTemplate extends AuditEntity implements Serializable { @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml") private String blueprint; - @Expose @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation") private String svgRepresentation; @@ -88,6 +87,10 @@ public class LoopTemplate extends AuditEntity implements Serializable { @Column(name = "maximum_instances_allowed") private Integer maximumInstancesAllowed; + @Expose + @Column(name = "unique_blueprint", columnDefinition = "boolean default false") + private boolean uniqueBlueprint; + /** * name getter. * @@ -140,6 +143,11 @@ public class LoopTemplate extends AuditEntity implements Serializable { */ public void setBlueprint(String blueprint) { this.blueprint = blueprint; + if (blueprint == null) { + this.uniqueBlueprint = false; + } else { + this.uniqueBlueprint = true; + } } /** @@ -244,6 +252,15 @@ public class LoopTemplate extends AuditEntity implements Serializable { this.modelService = modelService; } + /** + * uniqueBlueprint getter. + * + * @return the uniqueBlueprint + */ + public boolean getUniqueBlueprint() { + return uniqueBlueprint; + } + /** * Default constructor for serialization. */ @@ -265,7 +282,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { public LoopTemplate(String name, String blueprint, String svgRepresentation, Integer maxInstancesAllowed, Service service) { this.name = name; - this.blueprint = blueprint; + this.setBlueprint(blueprint); this.svgRepresentation = svgRepresentation; this.maximumInstancesAllowed = maxInstancesAllowed; @@ -312,10 +329,10 @@ public class LoopTemplate extends AuditEntity implements Serializable { * @return The generated loop template name */ public static String generateLoopTemplateName(String serviceName, String serviceVersion, String resourceName, - String blueprintFilename) { + String blueprintFileName) { StringBuilder buffer = new StringBuilder("LOOP_TEMPLATE_").append(serviceName).append("_v") .append(serviceVersion).append("_").append(resourceName).append("_") - .append(blueprintFilename.replaceAll(".yaml", "")); + .append(blueprintFileName.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } } diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml index 7137bab92..8088c2a40 100644 --- a/src/main/resources/clds/camel/routes/dcae-flows.xml +++ b/src/main/resources/clds/camel/routes/dcae-flows.xml @@ -3,12 +3,12 @@ - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false @@ -74,18 +74,14 @@ - - DEPLOY loop status - (Dep-id:${exchangeProperty[dcaeDeploymentId]}, - StatusUrl:${exchangeProperty[dcaeStatusUrl]}) - - - - DCAE - - + + java.lang.Exception + + false + DEPLOY micro service failed (MicroService name:${exchangeProperty[microServicePolicy].getName()}), @@ -176,12 +172,12 @@ - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false @@ -244,25 +240,22 @@ - - UNDEPLOY micro service successful - (MicroService name:${exchangeProperty[microServicePolicy].getName()}) - - - - DCAE - - + + uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !','WARNING','DCAE',${exchangeProperty[loopObject]})" /> + java.lang.Exception + + false + UNDEPLOY micro service failed (MicroService name:${exchangeProperty[microServicePolicy].getName()}) @@ -355,7 +348,7 @@ + message="Getting DCAE deployment status for loop: ${exchangeProperty[loopObject].getName()} - ${exchangeProperty[dcaeComponent].getComponentName()}" /> @@ -375,9 +368,9 @@ + message="Endpoint to query Closed Loop status: ${exchangeProperty[getStatusUrl]}"> + uri="${exchangeProperty[getStatusUrl]}?bridgeEndpoint=true&useSystemProperties=true&throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&authMethod=Basic&authUsername={{clamp.config.dcae.deployment.userName}}&authPassword={{clamp.config.dcae.deployment.password}}&connectionTimeToLive=5000&httpClient.connectTimeout=10000&httpClient.socketTimeout=30000&authenticationPreemptive=true&connectionClose=true" /> - - ${exchangeProperty[loopObject].getComponent('DCAE')} - - - ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} - != null - - - false - - + - ${header.CamelHttpResponseCode} == 200 - - - + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true + + + ${exchangeProperty[loopObject].getComponent('DCAE')} + + + ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} != null + + + ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} + + + false + + + + ${header.CamelHttpResponseCode} == 200 + + + + + + + + ${exchangeProperty[dcaeComponent].computeState(*)} + + + - - - - ${exchangeProperty[dcaeComponent].computeState(*)} - - - - - - + + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + ${exchangeProperty[loopObject].getComponent('DCAE_' + ${exchangeProperty[microServicePolicy].getName())} + + + ${exchangeProperty[microServicePolicy].getDcaeDeploymentStatusUrl()} != null + + + ${exchangeProperty[microServicePolicy].getDcaeDeploymentStatusUrl()} + + + false + + + + ${header.CamelHttpResponseCode} == 200 + + + + + + + + ${exchangeProperty[dcaeComponent].computeState(*)} + + + + + > + + + ", "yamlcontent", "{\"dcaeDeployParameters\": {" - + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}," - + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}" + + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"}," + + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}" + "}}", "UUID-blueprint"); LoopTemplate template = new LoopTemplate(); template.setName("templateName"); @@ -98,7 +101,7 @@ public class DeployFlowTestItCase { "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true); loopTest2.addMicroServicePolicy(microServicePolicy1); loopTest2.addMicroServicePolicy(microServicePolicy2); - loopService.saveOrUpdateLoop(loopTest2); + loopsRepository.saveAndFlush(loopTest2); Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) .build(); @@ -143,8 +146,8 @@ public class DeployFlowTestItCase { @Transactional public void undeployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { Loop loopTest2 = createLoop("ControlLoopTest2", "", "yamlcontent", "{\"dcaeDeployParameters\": {" - + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}," - + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName2_tca\"}" + + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"}," + + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}" + "}}", "UUID-blueprint"); LoopTemplate template = new LoopTemplate(); template.setName("templateName"); @@ -157,7 +160,7 @@ public class DeployFlowTestItCase { "testDeploymentId2", "testDeploymentStatusUrl2"); loopTest2.addMicroServicePolicy(microServicePolicy1); loopTest2.addMicroServicePolicy(microServicePolicy2); - loopService.saveOrUpdateLoop(loopTest2); + loopsRepository.saveAndFlush(loopTest2); Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) .build(); @@ -172,6 +175,77 @@ public class DeployFlowTestItCase { assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); } + + @Test + @Transactional + public void getStatusWithSingleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest = createLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", + "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + template.setBlueprint("yamlcontent"); + loopTest.setLoopTemplate(template); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest.addMicroServicePolicy(microServicePolicy); + loopService.saveOrUpdateLoop(loopTest); + assertThat(loopTest.getComponents().size()).isEqualTo(2); + assertThat(loopTest.getComponent("DCAE")).isNotNull(); + assertThat(loopTest.getComponent("POLICY")).isNotNull(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); + + camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange); + + assertThat(loopTest.getComponent("DCAE").getState().getStateName()).isEqualTo("BLUEPRINT_DEPLOYED"); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); + assertThat(loopAfterTest.getComponents().size()).isEqualTo(2); + assertThat(loopAfterTest.getComponent("DCAE")).isNotNull(); + assertThat(loopAfterTest.getComponent("POLICY")).isNotNull(); + } + + @Test + @Transactional + public void getStatusWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest = createLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", + "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + loopTest.setLoopTemplate(template); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("configPolicyTest2", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest.addMicroServicePolicy(microServicePolicy); + loopTest.addMicroServicePolicy(microServicePolicy2); + loopService.saveOrUpdateLoop(loopTest); + assertThat(loopTest.getComponents().size()).isEqualTo(3); + assertThat(loopTest.getComponent("DCAE")).isNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull(); + assertThat(loopTest.getComponent("POLICY")).isNotNull(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); + + camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange); + + assertThat(loopTest.getComponent("DCAE_configPolicyTest").getState().getStateName()) + .isEqualTo("BLUEPRINT_DEPLOYED"); + assertThat(loopTest.getComponent("DCAE_configPolicyTest2").getState().getStateName()) + .isEqualTo("BLUEPRINT_DEPLOYED"); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); + assertThat(loopAfterTest.getComponents().size()).isEqualTo(3); + assertThat(loopAfterTest.getComponent("DCAE")).isNull(); + assertThat(loopAfterTest.getComponent("POLICY")).isNotNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull(); + } + private Loop createLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, String dcaeBlueprintId) throws JsonSyntaxException, IOException { Loop loop = new Loop(name, svgRepresentation); diff --git a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java index ad37bcc88..f1e5c0927 100644 --- a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java @@ -39,6 +39,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; import org.onap.clamp.clds.util.JsonUtils; +import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -68,6 +69,9 @@ public class LoopControllerTestItCase { private void saveTestLoopToDb() { Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation"); testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + LoopTemplate template = new LoopTemplate(); + template.setName("testTemplate"); + testLoop.setLoopTemplate(template); loopService.saveOrUpdateLoop(testLoop); } diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index 615826eda..8089bf1a8 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -40,6 +40,7 @@ import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.log.LoopLogService; +import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -175,6 +176,9 @@ public class LoopServiceTestItCase { private void saveTestLoopToDb() { Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation"); testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + LoopTemplate template = new LoopTemplate(); + template.setName("testTemplate"); + testLoop.setLoopTemplate(template); loopService.saveOrUpdateLoop(testLoop); } @@ -296,6 +300,9 @@ public class LoopServiceTestItCase { // Add log Loop loop = loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null); loop.addLog(new LoopLog("test", LogType.INFO, "CLAMP", loop)); + LoopTemplate template = new LoopTemplate(); + template.setName("testTemplate"); + loop.setLoopTemplate(template); loop = loopService.saveOrUpdateLoop(loop); // Add op policy OperationalPolicy operationalPolicy = new OperationalPolicy("opPolicy", null, diff --git a/src/test/resources/clds/camel/routes/dcae-flows.xml b/src/test/resources/clds/camel/routes/dcae-flows.xml index 48cda7a05..8088c2a40 100644 --- a/src/test/resources/clds/camel/routes/dcae-flows.xml +++ b/src/test/resources/clds/camel/routes/dcae-flows.xml @@ -3,12 +3,12 @@ - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false @@ -74,6 +74,8 @@ + java.lang.Exception @@ -170,12 +172,12 @@ - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} != null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true - ${exchangeProperty['loopObject'].getLoopTemplate().getBlueprint()} == null + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false @@ -238,12 +240,14 @@ + + uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !','WARNING','DCAE',${exchangeProperty[loopObject]})" /> @@ -344,7 +348,7 @@ + message="Getting DCAE deployment status for loop: ${exchangeProperty[loopObject].getName()} - ${exchangeProperty[dcaeComponent].getComponentName()}" /> @@ -364,9 +368,9 @@ + message="Endpoint to query Closed Loop status: ${exchangeProperty[getStatusUrl]}"> + uri="${exchangeProperty[getStatusUrl]}?bridgeEndpoint=true&useSystemProperties=true&throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&authMethod=Basic&authUsername={{clamp.config.dcae.deployment.userName}}&authPassword={{clamp.config.dcae.deployment.password}}&connectionTimeToLive=5000&httpClient.connectTimeout=10000&httpClient.socketTimeout=30000&authenticationPreemptive=true&connectionClose=true" /> ${exchangeProperty[dcaeResponseList]} - - ${body} - + + ${body} + diff --git a/src/test/resources/clds/camel/routes/loop-flows.xml b/src/test/resources/clds/camel/routes/loop-flows.xml index 036e8efc8..c4e9fee6d 100644 --- a/src/test/resources/clds/camel/routes/loop-flows.xml +++ b/src/test/resources/clds/camel/routes/loop-flows.xml @@ -17,7 +17,6 @@ - @@ -109,37 +108,84 @@ - - ${exchangeProperty[loopObject].getComponent('DCAE')} - - - ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} - != null - - - false - - + - ${header.CamelHttpResponseCode} == 200 - - - + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true + + + ${exchangeProperty[loopObject].getComponent('DCAE')} + + + ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} != null + + + ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} + + + false + + + + ${header.CamelHttpResponseCode} == 200 + + + + + + + + ${exchangeProperty[dcaeComponent].computeState(*)} + + + - - - - ${exchangeProperty[dcaeComponent].computeState(*)} - - - - - - + + ${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + ${exchangeProperty[loopObject].getComponent('DCAE_' + ${exchangeProperty[microServicePolicy].getName())} + + + ${exchangeProperty[microServicePolicy].getDcaeDeploymentStatusUrl()} != null + + + ${exchangeProperty[microServicePolicy].getDcaeDeploymentStatusUrl()} + + + false + + + + ${header.CamelHttpResponseCode} == 200 + + + + + + + + ${exchangeProperty[dcaeComponent].computeState(*)} + + + + + > + + + Date: Mon, 3 Feb 2020 20:27:59 +0100 Subject: Get policy in CsarInstaller Get the policies on the PEF engine when installing the CSAR (if needed) Issue-ID: CLAMP-518 Change-Id: I2cca157821c22ef63dc748984140287667cc4663 Signed-off-by: sebdet --- extra/docker/clamp/clamp.env | 2 +- extra/docker/heat/clamp.env | 2 +- extra/sql/bulkload/create-tables.sql | 2 +- extra/sql/dump/test-data.sql | 22 +- .../clamp/clds/client/PolicyEngineServices.java | 110 ++ .../onap/clamp/clds/config/ClampProperties.java | 65 +- .../clamp/clds/config/PolicyConfiguration.java | 133 --- .../config/spring/SdcControllerConfiguration.java | 4 +- .../sdc/controller/BlueprintParserException.java | 54 + .../clamp/clds/model/dcae/DcaeInventoryCache.java | 2 +- .../clds/sdc/controller/SdcSingleController.java | 5 + .../installer/BlueprintMicroService.java | 93 ++ .../sdc/controller/installer/BlueprintParser.java | 161 +-- .../sdc/controller/installer/ChainGenerator.java | 24 +- .../sdc/controller/installer/MicroService.java | 93 -- .../clamp/clds/util/drawing/ClampGraphBuilder.java | 8 +- .../org/onap/clamp/clds/util/drawing/Painter.java | 10 +- .../onap/clamp/clds/util/drawing/SvgFacade.java | 4 +- .../java/org/onap/clamp/loop/CsarInstaller.java | 69 +- .../onap/clamp/loop/template/LoopElementModel.java | 2 +- .../org/onap/clamp/loop/template/PolicyModel.java | 10 +- .../clamp/policy/downloader/PolicyDownloader.java | 61 ++ src/main/resources/application-noaaf.properties | 22 +- src/main/resources/application.properties | 30 +- .../resources/clds/camel/routes/policy-flows.xml | 1075 +++++++++++--------- .../clamp/clds/it/PolicyConfigurationItCase.java | 71 -- .../it/config/CldsReferencePropertiesItCase.java | 33 +- .../config/SdcControllersConfigurationItCase.java | 2 +- .../controller/installer/BlueprintParserTest.java | 94 +- .../controller/installer/ChainGeneratorTest.java | 39 +- .../org/onap/clamp/clds/util/CryptoUtilsTest.java | 2 +- .../clds/util/drawing/ClampGraphBuilderTest.java | 16 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 22 +- .../onap/clamp/loop/PolicyModelServiceItCase.java | 17 +- src/test/resources/application.properties | 29 +- ...OperationalPolicyRepresentationBuilderTest.java | 52 - .../resources/clds/blueprint-parser-mapping.json | 18 - .../clds/blueprint-with-microservice-chain.yaml | 238 +++-- .../resources/clds/camel/rest/clamp-api-v2.xml | 42 + .../resources/clds/camel/routes/policy-flows.xml | 1075 +++++++++++--------- src/test/resources/clds/holmes-old-style-ms.yaml | 117 --- .../clds/single-microservice-fragment-invalid.yaml | 25 + ...e-microservice-fragment-valid-with-version.yaml | 21 + .../clds/single-microservice-fragment-valid.yaml | 25 - src/test/resources/clds/tca-old-style-ms.yaml | 169 --- .../example/sdc/blueprint-dcae/holmes.yaml | 174 ---- .../example/sdc/blueprint-dcae/not-recognized.yaml | 130 --- .../sdc/blueprint-dcae/prop-text-for-tca-2.json | 48 - .../sdc/blueprint-dcae/prop-text-for-tca-3.json | 48 - .../sdc/blueprint-dcae/prop-text-for-tca.json | 36 - src/test/resources/logback.xml | 91 +- src/test/resources/tosca/dcea_blueprint.yml | 170 ---- 52 files changed, 2122 insertions(+), 2745 deletions(-) create mode 100644 src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java delete mode 100644 src/main/java/org/onap/clamp/clds/config/PolicyConfiguration.java create mode 100644 src/main/java/org/onap/clamp/clds/exception/sdc/controller/BlueprintParserException.java create mode 100644 src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintMicroService.java delete mode 100644 src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java create mode 100644 src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java delete mode 100644 src/test/java/org/onap/clamp/clds/it/PolicyConfigurationItCase.java delete mode 100644 src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java delete mode 100644 src/test/resources/clds/blueprint-parser-mapping.json delete mode 100644 src/test/resources/clds/holmes-old-style-ms.yaml create mode 100644 src/test/resources/clds/single-microservice-fragment-invalid.yaml create mode 100644 src/test/resources/clds/single-microservice-fragment-valid-with-version.yaml delete mode 100644 src/test/resources/clds/single-microservice-fragment-valid.yaml delete mode 100644 src/test/resources/clds/tca-old-style-ms.yaml delete mode 100644 src/test/resources/example/sdc/blueprint-dcae/holmes.yaml delete mode 100644 src/test/resources/example/sdc/blueprint-dcae/not-recognized.yaml delete mode 100644 src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-2.json delete mode 100644 src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-3.json delete mode 100644 src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca.json delete mode 100644 src/test/resources/tosca/dcea_blueprint.yml (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/docker/clamp/clamp.env b/extra/docker/clamp/clamp.env index 06381f941..3270db2c7 100644 --- a/extra/docker/clamp/clamp.env +++ b/extra/docker/clamp/clamp.env @@ -1,2 +1,2 @@ ### Be careful, this must be in one line only ### -SPRING_APPLICATION_JSON={"spring.datasource.cldsdb.url":"jdbc:mariadb:sequential://db:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3","spring.profiles.active":"clamp-default,clamp-default-user,clamp-sdc-controller-new,clamp-ssl-config","clamp.config.policy.api.url":"http4://third-party-proxy:8085","clamp.config.policy.pap.url":"http4://third-party-proxy:8085","clamp.config.dcae.inventory.url":"http://third-party-proxy:8085","clamp.config.dcae.deployment.url":"http4://third-party-proxy:8085"} +SPRING_APPLICATION_JSON={"spring.datasource.cldsdb.url":"jdbc:mariadb:sequential://db:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3","spring.profiles.active":"clamp-default,clamp-default-user,clamp-sdc-controller,clamp-ssl-config","clamp.config.policy.api.url":"http4://third-party-proxy:8085","clamp.config.policy.pap.url":"http4://third-party-proxy:8085","clamp.config.dcae.inventory.url":"http://third-party-proxy:8085","clamp.config.dcae.deployment.url":"http4://third-party-proxy:8085"} diff --git a/extra/docker/heat/clamp.env b/extra/docker/heat/clamp.env index abca2676d..a06e45b29 100644 --- a/extra/docker/heat/clamp.env +++ b/extra/docker/heat/clamp.env @@ -1,2 +1,2 @@ ### Be careful, this must be in one line only ### -SPRING_APPLICATION_JSON={"spring.datasource.cldsdb.url":"jdbc:mariadb:sequential://db:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3","clamp.config.policy.pdpUrl1":"https://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123","clamp.config.policy.pdpUrl2":"https://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123","clamp.config.policy.papUrl":"https://policy.api.simpledemo.onap.org:9091/pap/ , testpap, alpha123"} +SPRING_APPLICATION_JSON={"spring.datasource.cldsdb.url":"jdbc:mariadb:sequential://db:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3"} diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 819d92591..4edb46916 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -36,7 +36,7 @@ created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, - blueprint_yaml MEDIUMTEXT not null, + blueprint_yaml MEDIUMTEXT, dcae_blueprint_id varchar(255), loop_element_type varchar(255) not null, primary key (name) diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index 08d3ca507..629ce6527 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -44,7 +44,7 @@ UNLOCK TABLES; LOCK TABLES `hibernate_sequence` WRITE; /*!40000 ALTER TABLE `hibernate_sequence` DISABLE KEYS */; -INSERT INTO `hibernate_sequence` VALUES (6); +INSERT INTO `hibernate_sequence` VALUES (10); /*!40000 ALTER TABLE `hibernate_sequence` ENABLE KEYS */; UNLOCK TABLES; @@ -54,7 +54,7 @@ UNLOCK TABLES; LOCK TABLES `loop_element_models` WRITE; /*!40000 ALTER TABLE `loop_element_models` DISABLE KEYS */; -INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-01-30 15:21:59.168542','','2020-01-30 15:21:59.460129','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n',NULL,'CONFIG_POLICY'); +INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-02-10 17:03:33.661538','','2020-02-10 17:03:34.923034',NULL,NULL,'CONFIG_POLICY'); /*!40000 ALTER TABLE `loop_element_models` ENABLE KEYS */; UNLOCK TABLES; @@ -73,9 +73,9 @@ UNLOCK TABLES; LOCK TABLES `loop_templates` WRITE; /*!40000 ALTER TABLE `loop_templates` DISABLE KEYS */; -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca','','2020-01-30 15:21:59.434409','','2020-01-30 15:21:59.434409','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-3369cc54-4ce8-4539-9493-d983c7823d66',0,'VESTCAOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca_3','','2020-01-30 15:21:59.294006','','2020-01-30 15:21:59.294006','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-5b5d899d-819d-4813-bfd7-c5c1cdb9b2fc',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName2_tca_2','','2020-01-30 15:21:59.154059','','2020-01-30 15:21:59.154059','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-c12c1f86-295b-44a6-bbcf-2bbe40d70f2f',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_GDC6j_v1_0_ResourceInstanceName1_tca','','2020-02-10 17:03:34.815508','','2020-02-10 17:03:34.815508','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-a733c5f2-9113-4747-a2d2-4f9a9da9901b',0,'VEStca_tcaOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_GDC6j_v1_0_ResourceInstanceName1_tca_3','','2020-02-10 17:03:34.343090','','2020-02-10 17:03:34.343090','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-8003bdb0-7171-404d-8ea4-fbe3cfd34589',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_GDC6j_v1_0_ResourceInstanceName2_tca_2','','2020-02-10 17:03:33.619163','','2020-02-10 17:03:33.619163','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-d7711567-0d72-4206-8705-c4258f2dc4c6',0,'VEStca_k8sOperationalPolicy','63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; UNLOCK TABLES; @@ -85,7 +85,7 @@ UNLOCK TABLES; LOCK TABLES `loopelementmodels_to_policymodels` WRITE; /*!40000 ALTER TABLE `loopelementmodels_to_policymodels` DISABLE KEYS */; -INSERT INTO `loopelementmodels_to_policymodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','onap.policies.monitoring.cdap.tca.hi.lo.app','1.0'); +INSERT INTO `loopelementmodels_to_policymodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0'); /*!40000 ALTER TABLE `loopelementmodels_to_policymodels` ENABLE KEYS */; UNLOCK TABLES; @@ -113,9 +113,9 @@ UNLOCK TABLES; LOCK TABLES `looptemplates_to_loopelementmodels` WRITE; /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` DISABLE KEYS */; -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName1_tca_3',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_srIFK_v1_0_ResourceInstanceName2_tca_2',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_GDC6j_v1_0_ResourceInstanceName1_tca',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_GDC6j_v1_0_ResourceInstanceName1_tca_3',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_GDC6j_v1_0_ResourceInstanceName2_tca_2',0); /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` ENABLE KEYS */; UNLOCK TABLES; @@ -143,7 +143,7 @@ UNLOCK TABLES; LOCK TABLES `policy_models` WRITE; /*!40000 ALTER TABLE `policy_models` DISABLE KEYS */; -INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0',NULL,'2020-01-30 15:21:59.176333','','2020-01-30 15:21:59.461713','app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n'); +INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0','','2020-02-10 17:03:33.698994','','2020-02-10 17:03:33.698994','app','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); /*!40000 ALTER TABLE `policy_models` ENABLE KEYS */; UNLOCK TABLES; @@ -165,4 +165,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-01-30 14:23:27 +-- Dump completed on 2020-02-10 16:04:53 diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java b/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java new file mode 100644 index 000000000..d99e9b569 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java @@ -0,0 +1,110 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.client; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.builder.ExchangeBuilder; +import org.onap.clamp.clds.config.ClampProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * The class implements the communication with the Policy Engine to retrieve + * policy models (tosca). It mainly delegates the physical calls to Camel + * engine. + * + */ +@Component +public class PolicyEngineServices { + private final CamelContext camelContext; + + private final ClampProperties refProp; + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyEngineServices.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + public static final String POLICY_RETRY_INTERVAL = "policy.retry.interval"; + public static final String POLICY_RETRY_LIMIT = "policy.retry.limit"; + + @Autowired + public PolicyEngineServices(CamelContext camelContext, ClampProperties refProp) { + this.refProp = refProp; + this.camelContext = camelContext; + } + + private void downloadAllPolicies() { + /* + * Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) + * .withProperty("blueprintResourceId", + * resourceUuid).withProperty("blueprintServiceId", serviceUuid) + * .withProperty("blueprintName", artifactName).build(); + * metricsLogger.info("Attempt n°" + i + " to contact DCAE inventory"); + * + * Exchange exchangeResponse = + * camelContext.createProducerTemplate().send("direct:get-all-policy-models", + * myCamelExchange); + */ + } + + /** + * This method can be used to download a policy tosca model on the engine. + * + * @param policyType The policy type (id) + * @param policyVersion The policy version + * @return A string with the whole policy tosca model + * @throws InterruptedException in case of issue when sleeping during the retry + */ + public String downloadOnePolicy(String policyType, String policyVersion) throws InterruptedException { + int retryInterval = 0; + int retryLimit = 1; + if (refProp.getStringValue(POLICY_RETRY_LIMIT) != null) { + retryLimit = Integer.valueOf(refProp.getStringValue(POLICY_RETRY_LIMIT)); + } + if (refProp.getStringValue(POLICY_RETRY_INTERVAL) != null) { + retryInterval = Integer.valueOf(refProp.getStringValue(POLICY_RETRY_INTERVAL)); + } + for (int i = 0; i < retryLimit; i++) { + Exchange paramExchange = ExchangeBuilder.anExchange(camelContext) + .withProperty("policyModelName", policyType).withProperty("policyModelVersion", policyVersion) + .build(); + + Exchange exchangeResponse = camelContext.createProducerTemplate().send("direct:get-policy-model", + paramExchange); + + if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) { + return (String) exchangeResponse.getIn().getBody(); + } else { + logger.info("Policy " + retryInterval + "ms before retrying ..."); + // wait for a while and try to connect to DCAE again + Thread.sleep(retryInterval); + } + } + return ""; + } + +} diff --git a/src/main/java/org/onap/clamp/clds/config/ClampProperties.java b/src/main/java/org/onap/clamp/clds/config/ClampProperties.java index 9905585d3..8eae9066d 100644 --- a/src/main/java/org/onap/clamp/clds/config/ClampProperties.java +++ b/src/main/java/org/onap/clamp/clds/config/ClampProperties.java @@ -23,13 +23,11 @@ package org.onap.clamp.clds.config; -import com.google.common.base.Splitter; - import com.google.gson.JsonElement; + import java.io.IOException; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.util.List; import org.apache.commons.io.IOUtils; import org.onap.clamp.clds.util.JsonUtils; @@ -53,8 +51,7 @@ public class ClampProperties { /** * get property value. * - * @param key - * The first key + * @param key The first key * @return The string with the value */ public String getStringValue(String key) { @@ -65,10 +62,8 @@ public class ClampProperties { * get property value for a combo key (key1 + "." + key2). If not found just use * key1. * - * @param key1 - * The first key - * @param key2 - * The second key after a dot + * @param key1 The first key + * @param key2 The second key after a dot * @return The string with the value */ public String getStringValue(String key1, String key2) { @@ -83,17 +78,15 @@ public class ClampProperties { * Return json as objects that can be updated. The value obtained from the * clds-reference file will be used as a filename. * - * @param key - * The key that will be used to access the clds-reference file + * @param key The key that will be used to access the clds-reference file * @return A jsonNode - * @throws IOException - * In case of issues with the JSON parser + * @throws IOException In case of issues with the JSON parser */ public JsonElement getJsonTemplate(String key) throws IOException { String fileReference = getStringValue(key); return (fileReference != null) - ? JsonUtils.GSON.fromJson(getFileContentFromPath(fileReference), JsonElement.class) - : null; + ? JsonUtils.GSON.fromJson(getFileContentFromPath(fileReference), JsonElement.class) + : null; } /** @@ -101,30 +94,25 @@ public class ClampProperties { * "." + key2), otherwise default to just key1. The value obtained from the * clds-reference file will be used as a filename. * - * @param key1 - * The first key - * @param key2 - * The second key after a dot + * @param key1 The first key + * @param key2 The second key after a dot * @return A JsonNode - * @throws IOException - * In case of issues with the JSON parser + * @throws IOException In case of issues with the JSON parser */ public JsonElement getJsonTemplate(String key1, String key2) throws IOException { String fileReference = getStringValue(key1, key2); return (fileReference != null) - ? JsonUtils.GSON.fromJson(getFileContentFromPath(fileReference), JsonElement.class) - : null; + ? JsonUtils.GSON.fromJson(getFileContentFromPath(fileReference), JsonElement.class) + : null; } /** * Return the file content. The value obtained from the clds-reference file will * be used as a filename. * - * @param key - * The key that will be used to access the clds-reference file + * @param key The key that will be used to access the clds-reference file * @return File content in String - * @throws IOException - * In case of issues with the JSON parser + * @throws IOException In case of issues with the JSON parser */ public String getFileContent(String key) throws IOException { String fileReference = getStringValue(key); @@ -136,13 +124,10 @@ public class ClampProperties { * otherwise default to just key1. The value obtained from the clds-reference * file will be used as a filename. * - * @param key1 - * The first key - * @param key2 - * The second key after a dot + * @param key1 The first key + * @param key2 The second key after a dot * @return File content in String - * @throws IOException - * In case of issues with the JSON parser + * @throws IOException In case of issues with the JSON parser */ public String getFileContent(String key1, String key2) throws IOException { String fileReference = getStringValue(key1, key2); @@ -153,18 +138,4 @@ public class ClampProperties { URL url = appContext.getResource(filepath).getURL(); return IOUtils.toString(url, StandardCharsets.UTF_8); } - - /** - * Returns the list of strings split with separator. - * - * @param key - * property key - * @param separator - * property value separator - * @return List of Strings split with a separator - */ - public List getStringList(String key, String separator) { - return Splitter.on(separator).trimResults().omitEmptyStrings() - .splitToList(env.getProperty(CONFIG_PREFIX + key)); - } } diff --git a/src/main/java/org/onap/clamp/clds/config/PolicyConfiguration.java b/src/main/java/org/onap/clamp/clds/config/PolicyConfiguration.java deleted file mode 100644 index a4f37e8bb..000000000 --- a/src/main/java/org/onap/clamp/clds/config/PolicyConfiguration.java +++ /dev/null @@ -1,133 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.clds.config; - -import java.util.Properties; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@ConfigurationProperties(prefix = "clamp.config.policy") -public class PolicyConfiguration { - - public static final String PDP_URL1 = "PDP_URL1"; - public static final String PDP_URL2 = "PDP_URL2"; - public static final String PAP_URL = "PAP_URL"; - public static final String NOTIFICATION_TYPE = "NOTIFICATION_TYPE"; - public static final String NOTIFICATION_UEB_SERVERS = "NOTIFICATION_UEB_SERVERS"; - public static final String CLIENT_ID = "CLIENT_ID"; - public static final String CLIENT_KEY = "CLIENT_KEY"; - public static final String ENVIRONMENT = "ENVIRONMENT"; - private String pdpUrl1; - private String pdpUrl2; - private String papUrl; - private String notificationType; - private String notificationUebServers; - private String clientId; - private String clientKey; - private String policyEnvironment; - - public String getPdpUrl1() { - return pdpUrl1; - } - - public void setPdpUrl1(String pdpUrl1) { - this.pdpUrl1 = pdpUrl1; - } - - public String getPdpUrl2() { - return pdpUrl2; - } - - public void setPdpUrl2(String pdpUrl2) { - this.pdpUrl2 = pdpUrl2; - } - - public String getPapUrl() { - return papUrl; - } - - public void setPapUrl(String papUrl) { - this.papUrl = papUrl; - } - - public String getNotificationType() { - return notificationType; - } - - public void setNotificationType(String notificationType) { - this.notificationType = notificationType; - } - - public String getNotificationUebServers() { - return notificationUebServers; - } - - public void setNotificationUebServers(String notificationUebServers) { - this.notificationUebServers = notificationUebServers; - } - - public String getClientId() { - return clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getClientKey() { - return clientKey; - } - - public void setClientKey(String clientKey) { - this.clientKey = clientKey; - } - - public String getPolicyEnvironment() { - return policyEnvironment; - } - - public void setPolicyEnvironment(String environment) { - this.policyEnvironment = environment; - } - - /** - * Returns policy configuration properties. - * - * @return policy configuration properties - */ - public Properties getProperties() { - Properties prop = new Properties(); - prop.put(PDP_URL1, pdpUrl1); - prop.put(PDP_URL2, pdpUrl2); - prop.put(PAP_URL, papUrl); - prop.put(NOTIFICATION_TYPE, notificationType); - prop.put(NOTIFICATION_UEB_SERVERS, notificationUebServers); - prop.put(CLIENT_ID, clientId); - prop.put(CLIENT_KEY, clientKey); - prop.put(ENVIRONMENT, policyEnvironment); - return prop; - } -} diff --git a/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java b/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java index 5a3e22a35..eca45d66f 100644 --- a/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/config/spring/SdcControllerConfiguration.java @@ -41,14 +41,12 @@ import org.onap.clamp.loop.CsarInstaller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.scheduling.annotation.Scheduled; @Configuration -@ComponentScan(basePackages = { "org.onap.clamp.loop", "org.onap.clamp.clds.config" }) -@Profile("clamp-sdc-controller-new") +@Profile("clamp-sdc-controller") public class SdcControllerConfiguration { private static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcControllerConfiguration.class); diff --git a/src/main/java/org/onap/clamp/clds/exception/sdc/controller/BlueprintParserException.java b/src/main/java/org/onap/clamp/clds/exception/sdc/controller/BlueprintParserException.java new file mode 100644 index 000000000..7257fd8a0 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/exception/sdc/controller/BlueprintParserException.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.exception.sdc.controller; + +/** + * Exception during blueprint parsing. + */ +public class BlueprintParserException extends Exception { + + /** + * Serial ID. + */ + private static final long serialVersionUID = -3044162346353623199L; + + /** + * This constructor can be used to create a new SdcDownloadException. + * + * @param message The message to dump + */ + public BlueprintParserException(final String message) { + super(message); + } + + /** + * This constructor can be used to create a new SdcDownloadException. + * + * @param message The message to dump + * @param cause The Throwable cause object + */ + public BlueprintParserException(final String message, final Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java index 19bc23d5e..fc2ca5caa 100644 --- a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java +++ b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java @@ -46,7 +46,7 @@ public class DcaeInventoryCache { public void addDcaeInventoryResponse(DcaeInventoryResponse inventoryResponse) { Set responsesSet = blueprintsMap.get(inventoryResponse.getAsdcServiceId()); if (responsesSet == null) { - responsesSet = new TreeSet(); + responsesSet = new TreeSet<>(); blueprintsMap.put(inventoryResponse.getAsdcServiceId(), responsesSet); } responsesSet.add(inventoryResponse); diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java index bd18baea6..fbb37d525 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java @@ -33,6 +33,7 @@ import java.util.concurrent.ThreadLocalRandom; import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.config.sdc.SdcSingleControllerConfiguration; +import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.exception.sdc.controller.SdcControllerException; @@ -290,6 +291,10 @@ public class SdcSingleController { sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY, DistributionStatusEnum.DEPLOY_ERROR, e.getMessage()); Thread.currentThread().interrupt(); + } catch (BlueprintParserException e) { + logger.error("BlueprintParser exception caught during the notification processing", e); + sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY, + DistributionStatusEnum.DEPLOY_ERROR, e.getMessage()); } catch (RuntimeException e) { logger.error("Unexpected exception caught during the notification processing", e); sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY, diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintMicroService.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintMicroService.java new file mode 100644 index 000000000..e00ce9430 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintMicroService.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Nokia Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * Modifications copyright (c) 2019-2020 AT&T + * =================================================================== + * + */ + +package org.onap.clamp.clds.sdc.controller.installer; + +import java.util.Objects; + +public class BlueprintMicroService { + private final String name; + private final String modelType; + private final String inputFrom; + private final String modelVersion; + + /** + * The Micro service constructor. + * + * @param name The name in String + * @param modelType The model type + * @param inputFrom Comes from (single chained) + */ + public BlueprintMicroService(String name, String modelType, String inputFrom, String modelVersion) { + this.name = name; + this.inputFrom = inputFrom; + this.modelType = modelType; + this.modelVersion = modelVersion; + } + + public String getName() { + return name; + } + + public String getModelType() { + return modelType; + } + + public String getInputFrom() { + return inputFrom; + } + + /** + * modelVerrsion getter. + * + * @return the modelVersion + */ + public String getModelVersion() { + return modelVersion; + } + + @Override + public String toString() { + return "MicroService {" + "name='" + name + '\'' + ", modelType='" + modelType + '\'' + ", inputFrom='" + + inputFrom + '\'' + ", modelVersion='" + modelVersion + '\'' + '}'; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + BlueprintMicroService that = (BlueprintMicroService) obj; + return name.equals(that.name) && modelType.equals(that.modelType) && inputFrom.equals(that.inputFrom) + && modelVersion.equals(that.modelVersion); + } + + @Override + public int hashCode() { + return Objects.hash(name, modelType, inputFrom, modelVersion); + } +} diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java index 0dd231f03..981a20416 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java @@ -24,6 +24,8 @@ package org.onap.clamp.clds.sdc.controller.installer; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -38,76 +40,74 @@ import java.util.Map.Entry; import java.util.Set; import org.json.JSONObject; -import org.springframework.stereotype.Component; +import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; import org.yaml.snakeyaml.Yaml; -@Component public class BlueprintParser { static final String TCA = "TCA"; - static final String HOLMES = "Holmes"; - private static final String TCA_POLICY = "tca_policy"; - private static final String HOLMES_PREFIX = "holmes"; private static final String NODE_TEMPLATES = "node_templates"; private static final String DCAE_NODES = "dcae.nodes."; + private static final String DCAE_NODES_POLICY = "dcae.nodes.policy"; private static final String TYPE = "type"; private static final String PROPERTIES = "properties"; private static final String NAME = "name"; private static final String INPUT = "inputs"; private static final String GET_INPUT = "get_input"; - private static final String POLICY_MODELID = "policy_model_id"; + private static final String POLICY_MODEL_ID = "policy_model_id"; + private static final String POLICY_MODEL_VERSION = "policy_model_version"; private static final String RELATIONSHIPS = "relationships"; private static final String CLAMP_NODE_RELATIONSHIPS_GETS_INPUT_FROM = "clamp_node.relationships.gets_input_from"; private static final String TARGET = "target"; + public static final String DEFAULT_VERSION = "1.0.0"; + + private static final EELFLogger logger = EELFManager.getInstance().getLogger(BlueprintParser.class); + + private BlueprintParser() { + + } /** * Get all micro services from blueprint. * * @param blueprintString the blueprint in a String * @return A set of MircoService + * @throws BlueprintParserException In case of issues with the parsing */ - public Set getMicroServices(String blueprintString) { - Set microServices = new HashSet<>(); + public static Set getMicroServices(String blueprintString) throws BlueprintParserException { + Set microServices = new HashSet<>(); JsonObject blueprintJson = BlueprintParser.convertToJson(blueprintString); JsonObject nodeTemplateList = blueprintJson.get(NODE_TEMPLATES).getAsJsonObject(); JsonObject inputList = blueprintJson.get(INPUT).getAsJsonObject(); for (Entry entry : nodeTemplateList.entrySet()) { JsonObject nodeTemplate = entry.getValue().getAsJsonObject(); - if (nodeTemplate.get(TYPE).getAsString().contains(DCAE_NODES)) { - MicroService microService = getNodeRepresentation(entry, nodeTemplateList, inputList); - microServices.add(microService); + if (!nodeTemplate.get(TYPE).getAsString().contains(DCAE_NODES_POLICY) + && nodeTemplate.get(TYPE).getAsString().contains(DCAE_NODES)) { + BlueprintMicroService microService = getNodeRepresentation(entry, nodeTemplateList, inputList); + if (!microService.getModelType().isBlank()) { + microServices.add(microService); + } else { + logger.warn("Microservice " + microService.getName() + + " will NOT be used by CLAMP as the model type is not defined or has not been found"); + } } } - microServices.removeIf(ms -> TCA_POLICY.equals(ms.getName())); + logger.debug("Those microservices have been found in the blueprint:" + microServices); return microServices; } /** - * Does a fallback to TCA or Holmes. + * Does a fallback to TCA. * - * @param blueprintString the blueprint in a String * @return The list of microservices */ - public List fallbackToOneMicroService(String blueprintString) { - JsonObject jsonObject = BlueprintParser.convertToJson(blueprintString); - JsonObject results = jsonObject.get(NODE_TEMPLATES).getAsJsonObject(); - String theBiggestMicroServiceContent = ""; - String theBiggestMicroServiceKey = ""; - for (Entry entry : results.entrySet()) { - String msAsString = entry.getValue().toString(); - int len = msAsString.length(); - if (len > theBiggestMicroServiceContent.length()) { - theBiggestMicroServiceContent = msAsString; - theBiggestMicroServiceKey = entry.getKey(); - } - } - String msName = theBiggestMicroServiceKey.toLowerCase().contains(HOLMES_PREFIX) ? HOLMES : TCA; - return Collections - .singletonList(new MicroService(msName, "onap.policies.monitoring.cdap.tca.hi.lo.app", "", "")); + public static List fallbackToOneMicroService() { + return Collections.singletonList( + new BlueprintMicroService(TCA, "onap.policies.monitoring.cdap.tca.hi.lo.app", "", DEFAULT_VERSION)); } - String getName(Entry entry) { + static String getName(Entry entry) { String microServiceYamlName = entry.getKey(); JsonObject ob = entry.getValue().getAsJsonObject(); if (ob.has(PROPERTIES)) { @@ -119,7 +119,7 @@ public class BlueprintParser { return microServiceYamlName; } - String getInput(Entry entry) { + static String getInput(Entry entry) { JsonObject ob = entry.getValue().getAsJsonObject(); if (ob.has(RELATIONSHIPS)) { JsonArray relationships = ob.getAsJsonArray(RELATIONSHIPS); @@ -133,51 +133,81 @@ public class BlueprintParser { return ""; } - String findModelTypeInTargetArray(JsonArray jsonArray, JsonObject nodeTemplateList, JsonObject inputList) { - for (JsonElement elem : jsonArray) { - String modelType = getModelType( - new AbstractMap.SimpleEntry(elem.getAsJsonObject().get(TARGET).getAsString(), - nodeTemplateList.get(elem.getAsJsonObject().get(TARGET).getAsString()).getAsJsonObject()), - nodeTemplateList, inputList); - if (!modelType.isEmpty()) { - return modelType; + static String findPropertyInRelationshipsArray(String propertyName, JsonArray relationshipsArray, + JsonObject blueprintNodeTemplateList, JsonObject blueprintInputList) throws BlueprintParserException { + for (JsonElement elem : relationshipsArray) { + if (blueprintNodeTemplateList.get(elem.getAsJsonObject().get(TARGET).getAsString()) == null) { + throw new BlueprintParserException( + "The Target mentioned in the blueprint is not a known entry in the blueprint: " + + elem.getAsJsonObject().get(TARGET).getAsString()); + } else { + String property = getPropertyValue(propertyName, + new AbstractMap.SimpleEntry( + elem.getAsJsonObject().get(TARGET).getAsString(), blueprintNodeTemplateList + .get(elem.getAsJsonObject().get(TARGET).getAsString()).getAsJsonObject()), + blueprintNodeTemplateList, blueprintInputList); + if (!property.isEmpty()) { + return property; + } } } return ""; } - String getModelType(Entry entry, JsonObject nodeTemplateList, JsonObject inputList) { - JsonObject ob = entry.getValue().getAsJsonObject(); + static String getDirectOrInputPropertyValue(String propertyName, JsonObject blueprintInputList, + JsonObject nodeTemplateContent) { + JsonObject properties = nodeTemplateContent.get(PROPERTIES).getAsJsonObject(); + if (properties.has(propertyName)) { + if (properties.get(propertyName).isJsonObject()) { + // it's a blueprint parameter + return blueprintInputList + .get(properties.get(propertyName).getAsJsonObject().get(GET_INPUT).getAsString()) + .getAsJsonObject().get("default").getAsString(); + } else { + // It's a direct value + return properties.get(propertyName).getAsString(); + } + } + return ""; + } + + static String getPropertyValue(String propertyName, Entry nodeTemplateEntry, + JsonObject blueprintNodeTemplateList, JsonObject blueprintIputList) throws BlueprintParserException { + JsonObject nodeTemplateContent = nodeTemplateEntry.getValue().getAsJsonObject(); // Search first in this node template - if (ob.has(PROPERTIES)) { - JsonObject properties = ob.get(PROPERTIES).getAsJsonObject(); - if (properties.has(POLICY_MODELID)) { - if (properties.get(POLICY_MODELID).isJsonObject()) { - // it's a blueprint parameter - return inputList.get(properties.get(POLICY_MODELID).getAsJsonObject().get(GET_INPUT).getAsString()) - .getAsJsonObject().get("default").getAsString(); - } else { - // It's a direct value - return properties.get(POLICY_MODELID).getAsString(); - } + if (nodeTemplateContent.has(PROPERTIES)) { + String propValue = getDirectOrInputPropertyValue(propertyName, blueprintIputList, nodeTemplateContent); + if (!propValue.isBlank()) { + return propValue; } } // Or it's may be defined in a relationship - if (ob.has(RELATIONSHIPS)) { - return findModelTypeInTargetArray(ob.get(RELATIONSHIPS).getAsJsonArray(), nodeTemplateList, inputList); + if (nodeTemplateContent.has(RELATIONSHIPS)) { + return findPropertyInRelationshipsArray(propertyName, + nodeTemplateContent.get(RELATIONSHIPS).getAsJsonArray(), blueprintNodeTemplateList, + blueprintIputList); } return ""; } - MicroService getNodeRepresentation(Entry entry, JsonObject nodeTemplateList, - JsonObject inputList) { - String name = getName(entry); - String getInputFrom = getInput(entry); - String modelType = getModelType(entry, nodeTemplateList, inputList); - return new MicroService(name, modelType, getInputFrom, ""); + static BlueprintMicroService getNodeRepresentation(Entry nodeTemplateEntry, + JsonObject blueprintNodeTemplateList, JsonObject blueprintInputList) throws BlueprintParserException { + String modelIdFound = getPropertyValue(POLICY_MODEL_ID, nodeTemplateEntry, blueprintNodeTemplateList, + blueprintInputList); + String versionFound = getPropertyValue(POLICY_MODEL_VERSION, nodeTemplateEntry, blueprintNodeTemplateList, + blueprintInputList); + if (modelIdFound.isBlank()) { + logger.warn("policy_model_id is not defined for the node template:" + nodeTemplateEntry.getKey()); + } + if (versionFound.isBlank()) { + logger.warn("policy_model_version is not defined (setting it to a default value) for the node template:" + + nodeTemplateEntry.getKey()); + } + return new BlueprintMicroService(getName(nodeTemplateEntry), modelIdFound, getInput(nodeTemplateEntry), + !versionFound.isBlank() ? versionFound : DEFAULT_VERSION); } - private String getTarget(JsonObject elementObject) { + private static String getTarget(JsonObject elementObject) { if (elementObject.has(TYPE) && elementObject.has(TARGET) && elementObject.get(TYPE).getAsString().equals(CLAMP_NODE_RELATIONSHIPS_GETS_INPUT_FROM)) { return elementObject.get(TARGET).getAsString(); @@ -186,10 +216,7 @@ public class BlueprintParser { } private static JsonObject convertToJson(String yamlString) { - Yaml yaml = new Yaml(); - Map map = yaml.load(yamlString); - - JSONObject jsonObject = new JSONObject(map); - return new Gson().fromJson(jsonObject.toString(), JsonObject.class); + Map map = new Yaml().load(yamlString); + return new Gson().fromJson(new JSONObject(map).toString(), JsonObject.class); } } diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java index 9e76cc938..2bd259c2b 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/ChainGenerator.java @@ -42,11 +42,11 @@ public class ChainGenerator { * @param input A set of microservices * @return The list of microservice chained */ - public List getChainOfMicroServices(Set input) { - LinkedList returnList = new LinkedList<>(); + public List getChainOfMicroServices(Set input) { + LinkedList returnList = new LinkedList<>(); if (preValidate(input)) { - LinkedList theList = new LinkedList<>(); - for (MicroService ms : input) { + LinkedList theList = new LinkedList<>(); + for (BlueprintMicroService ms : input) { insertNodeTemplateIntoChain(ms, theList); } if (postValidate(theList)) { @@ -56,16 +56,16 @@ public class ChainGenerator { return returnList; } - private boolean preValidate(Set input) { - List noInputs = input.stream().filter(ms -> "".equals(ms.getInputFrom())) + private boolean preValidate(Set input) { + List noInputs = input.stream().filter(ms -> "".equals(ms.getInputFrom())) .collect(Collectors.toList()); return noInputs.size() == 1; } - private boolean postValidate(LinkedList microServices) { + private boolean postValidate(LinkedList microServices) { for (int i = 1; i < microServices.size() - 1; i++) { - MicroService prev = microServices.get(i - 1); - MicroService current = microServices.get(i); + BlueprintMicroService prev = microServices.get(i - 1); + BlueprintMicroService current = microServices.get(i); if (!current.getInputFrom().equals(prev.getName())) { return false; } @@ -73,11 +73,11 @@ public class ChainGenerator { return true; } - private void insertNodeTemplateIntoChain(MicroService microServicetoInsert, - LinkedList chainOfMicroServices) { + private void insertNodeTemplateIntoChain(BlueprintMicroService microServicetoInsert, + LinkedList chainOfMicroServices) { int insertIndex = 0; for (int i = 0; i < chainOfMicroServices.size(); i++) { - MicroService current = chainOfMicroServices.get(i); + BlueprintMicroService current = chainOfMicroServices.get(i); if (microServicetoInsert.getName().equals(current.getInputFrom())) { insertIndex = i; break; diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java deleted file mode 100644 index 68ac842cf..000000000 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/MicroService.java +++ /dev/null @@ -1,93 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Nokia Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * Modifications copyright (c) 2019 AT&T - * =================================================================== - * - */ - -package org.onap.clamp.clds.sdc.controller.installer; - -import java.util.Objects; - -public class MicroService { - private final String name; - private final String modelType; - private final String inputFrom; - private String mappedNameJpa; - - /** - * The Micro service constructor. - * - * @param name The name in String - * @param modelType The model type - * @param inputFrom Comes from (single chained) - * @param mappedNameJpa Name in database - */ - public MicroService(String name, String modelType, String inputFrom, String mappedNameJpa) { - this.name = name; - this.inputFrom = inputFrom; - this.mappedNameJpa = mappedNameJpa; - this.modelType = modelType; - } - - public String getName() { - return name; - } - - public String getModelType() { - return modelType; - } - - public String getInputFrom() { - return inputFrom; - } - - @Override - public String toString() { - return "MicroService{" + "name='" + name + '\'' + ", modelType='" + modelType + '\'' + ", inputFrom='" - + inputFrom + '\'' + ", mappedNameJpa='" + mappedNameJpa + '\'' + '}'; - } - - public String getMappedNameJpa() { - return mappedNameJpa; - } - - public void setMappedNameJpa(String mappedNameJpa) { - this.mappedNameJpa = mappedNameJpa; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - MicroService that = (MicroService) obj; - return name.equals(that.name) && modelType.equals(that.modelType) && inputFrom.equals(that.inputFrom) - && mappedNameJpa.equals(that.mappedNameJpa); - } - - @Override - public int hashCode() { - return Objects.hash(name, modelType, inputFrom, mappedNameJpa); - } -} diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java b/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java index 8ded0cb87..6ce89873b 100755 --- a/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java +++ b/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java @@ -28,12 +28,12 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import org.onap.clamp.clds.sdc.controller.installer.MicroService; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; public class ClampGraphBuilder { private String policy; private String collector; - private List microServices = new ArrayList<>(); + private List microServices = new ArrayList<>(); private final Painter painter; public ClampGraphBuilder(Painter painter) { @@ -50,12 +50,12 @@ public class ClampGraphBuilder { return this; } - public ClampGraphBuilder addMicroService(MicroService ms) { + public ClampGraphBuilder addMicroService(BlueprintMicroService ms) { microServices.add(ms); return this; } - public ClampGraphBuilder addAllMicroServices(List msList) { + public ClampGraphBuilder addAllMicroServices(List msList) { microServices.addAll(msList); return this; } diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java b/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java index af6caf932..d96c9e537 100755 --- a/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java +++ b/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java @@ -31,7 +31,7 @@ import java.awt.RenderingHints; import java.util.List; import org.apache.batik.svggen.SVGGraphics2D; -import org.onap.clamp.clds.sdc.controller.installer.MicroService; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; public class Painter { private final int canvasSize; @@ -57,7 +57,7 @@ public class Painter { this.canvasSize = DEFALUT_CANVAS_SIZE; } - DocumentBuilder doPaint(String collector, List microServices, String policy) { + DocumentBuilder doPaint(String collector, List microServices, String policy) { int numOfRectangles = 2 + microServices.size(); int numOfArrows = numOfRectangles + 1; int baseLength = (canvasSize - 2 * CIRCLE_RADIUS) / (numOfArrows + numOfRectangles); @@ -76,12 +76,12 @@ public class Painter { return ib.getDocumentBuilder(); } - private void doTheActualDrawing(String collector, List microServices, String policy, + private void doTheActualDrawing(String collector, List microServices, String policy, ImageBuilder ib) { ib.circle("start-circle", SLIM_LINE).arrow().rectangle(collector, RectTypes.COLECTOR, collector); - for (MicroService ms : microServices) { - ib.arrow().rectangle(ms.getMappedNameJpa(), RectTypes.MICROSERVICE, ms.getName()); + for (BlueprintMicroService ms : microServices) { + ib.arrow().rectangle(ms.getModelType(), RectTypes.MICROSERVICE, ms.getName()); } ib.arrow().rectangle(policy, RectTypes.POLICY, policy).arrow().circle("stop-circle", THICK_LINE); diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java b/src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java index ae0c1729c..251f48864 100644 --- a/src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java +++ b/src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java @@ -27,7 +27,7 @@ package org.onap.clamp.clds.util.drawing; import java.util.List; import org.apache.batik.svggen.SVGGraphics2D; -import org.onap.clamp.clds.sdc.controller.installer.MicroService; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; import org.onap.clamp.clds.util.XmlTools; import org.springframework.stereotype.Component; import org.w3c.dom.Document; @@ -40,7 +40,7 @@ public class SvgFacade { * @param microServicesChain THe chain of microservices * @return A String containing the SVG */ - public String getSvgImage(List microServicesChain) { + public String getSvgImage(List microServicesChain) { SVGGraphics2D svgGraphics2D = new SVGGraphics2D(XmlTools.createEmptySvgDocument()); Document document = XmlTools.createEmptySvgDocument(); DocumentBuilder dp = new DocumentBuilder(document, svgGraphics2D.getDOMFactory()); diff --git a/src/main/java/org/onap/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/clamp/loop/CsarInstaller.java index 013d3419d..022b0e28a 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstaller.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstaller.java @@ -33,13 +33,15 @@ import java.util.Map.Entry; import org.json.simple.parser.ParseException; import org.onap.clamp.clds.client.DcaeInventoryServices; +import org.onap.clamp.clds.client.PolicyEngineServices; +import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser; import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.clamp.clds.sdc.controller.installer.MicroService; import org.onap.clamp.clds.util.drawing.SvgFacade; import org.onap.clamp.loop.service.CsarServiceInstaller; import org.onap.clamp.loop.service.Service; @@ -47,6 +49,8 @@ import org.onap.clamp.loop.template.LoopElementModel; import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.loop.template.LoopTemplatesRepository; import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelId; +import org.onap.clamp.loop.template.PolicyModelsRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @@ -61,31 +65,27 @@ import org.springframework.stereotype.Component; public class CsarInstaller { private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarInstaller.class); - public static final String CONTROL_NAME_PREFIX = "ClosedLoop-"; - public static final String GET_INPUT_BLUEPRINT_PARAM = "get_input"; - // This will be used later as the policy scope - public static final String MODEL_NAME_PREFIX = "Loop_"; @Autowired - LoopsRepository loopRepository; + private PolicyModelsRepository policyModelsRepository; @Autowired - LoopTemplatesRepository loopTemplatesRepository; + private LoopTemplatesRepository loopTemplatesRepository; @Autowired - BlueprintParser blueprintParser; + private ChainGenerator chainGenerator; @Autowired - ChainGenerator chainGenerator; + private DcaeInventoryServices dcaeInventoryService; @Autowired - DcaeInventoryServices dcaeInventoryService; + private SvgFacade svgFacade; @Autowired - private SvgFacade svgFacade; + private CsarServiceInstaller csarServiceInstaller; @Autowired - CsarServiceInstaller csarServiceInstaller; + private PolicyEngineServices policyEngineServices; /** * Verify whether Csar is deployed. @@ -113,8 +113,11 @@ public class CsarInstaller { * @param csar The Csar Handler * @throws SdcArtifactInstallerException The SdcArtifactInstallerException * @throws InterruptedException The InterruptedException + * @throws BlueprintParserException In case of issues with the blueprint + * parsing */ - public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException { + public void installTheCsar(CsarHandler csar) + throws SdcArtifactInstallerException, InterruptedException, BlueprintParserException { logger.info("Installing the CSAR " + csar.getFilePath()); installTheLoopTemplates(csar, csarServiceInstaller.installTheService(csar)); logger.info("Successfully installed the CSAR " + csar.getFilePath()); @@ -127,9 +130,11 @@ public class CsarInstaller { * @param service The service object that is related to the loop * @throws SdcArtifactInstallerException The SdcArtifactInstallerException * @throws InterruptedException The InterruptedException + * @throws BlueprintParserException In case of issues with the blueprint + * parsing */ public void installTheLoopTemplates(CsarHandler csar, Service service) - throws SdcArtifactInstallerException, InterruptedException { + throws SdcArtifactInstallerException, InterruptedException, BlueprintParserException { try { logger.info("Installing the Loops"); for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { @@ -145,20 +150,20 @@ public class CsarInstaller { } private LoopTemplate createLoopTemplateFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact, - Service service) throws IOException, ParseException, InterruptedException { + Service service) throws IOException, ParseException, InterruptedException, BlueprintParserException { LoopTemplate newLoopTemplate = new LoopTemplate(); newLoopTemplate.setBlueprint(blueprintArtifact.getDcaeBlueprint()); newLoopTemplate.setName(LoopTemplate.generateLoopTemplateName(csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), blueprintArtifact.getResourceAttached().getResourceInstanceName(), blueprintArtifact.getBlueprintArtifactName())); - List microServicesChain = chainGenerator - .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); + List microServicesChain = chainGenerator + .getChainOfMicroServices(BlueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint())); if (microServicesChain.isEmpty()) { - microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint()); + microServicesChain = BlueprintParser.fallbackToOneMicroService(); } newLoopTemplate.setModelService(service); - newLoopTemplate.addLoopElementModels(createMicroServiceModels(microServicesChain, csar, blueprintArtifact)); + newLoopTemplate.addLoopElementModels(createMicroServiceModels(microServicesChain)); newLoopTemplate.setMaximumInstancesAllowed(0); newLoopTemplate.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact); @@ -166,14 +171,14 @@ public class CsarInstaller { return newLoopTemplate; } - private HashSet createMicroServiceModels(List microServicesChain, CsarHandler csar, - BlueprintArtifact blueprintArtifact) throws IOException { + private HashSet createMicroServiceModels(List microServicesChain) + throws InterruptedException { HashSet newSet = new HashSet<>(); - for (MicroService microService : microServicesChain) { + for (BlueprintMicroService microService : microServicesChain) { LoopElementModel loopElementModel = new LoopElementModel(microService.getModelType(), "CONFIG_POLICY", - blueprintArtifact.getDcaeBlueprint()); + null); newSet.add(loopElementModel); - loopElementModel.addPolicyModel(createPolicyModel(microService, csar)); + loopElementModel.addPolicyModel(getPolicyModel(microService)); } return newSet; } @@ -183,14 +188,20 @@ public class CsarInstaller { return policyNameArray[policyNameArray.length - 1]; } - private PolicyModel createPolicyModel(MicroService microService, CsarHandler csar) throws IOException { - return new PolicyModel(microService.getModelType(), csar.getPolicyModelYaml().orElse(""), "1.0", - createPolicyAcronym(microService.getModelType())); + private PolicyModel createPolicyModel(BlueprintMicroService microService) throws InterruptedException { + return new PolicyModel(microService.getModelType(), + policyEngineServices.downloadOnePolicy(microService.getModelType(), microService.getModelVersion()), + microService.getModelVersion(), createPolicyAcronym(microService.getModelType())); + } + + private PolicyModel getPolicyModel(BlueprintMicroService microService) throws InterruptedException { + return policyModelsRepository + .findById(new PolicyModelId(microService.getModelType(), microService.getModelVersion())) + .orElse(createPolicyModel(microService)); } /** - * ll get the latest version of the artifact (version can be specified to DCAE - * call). + * Get the service blueprint Id in the Dcae inventory using the SDC UUID. * * @return The DcaeInventoryResponse object containing the dcae values */ diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java index e3f05a01d..0a0831bb7 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java @@ -70,7 +70,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * Here we store the blueprint coming from DCAE. */ - @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") + @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml") private String blueprint; /** diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java index 886e8c806..53539fccb 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java @@ -224,7 +224,13 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable @Override public int compareTo(PolicyModel arg0) { - // Reverse it, so that by default we have the latest - return SemanticVersioning.compare(arg0.getVersion(), this.version); + + if (this.getPolicyModelType().equals(arg0.getPolicyModelType())) { + // Reverse it, so that by default we have the latest in they are same model type + return SemanticVersioning.compare(arg0.getVersion(), this.version); + } else { + return this.getPolicyModelType().compareTo(arg0.getPolicyModelType()); + } + } } diff --git a/src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java b/src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java new file mode 100644 index 000000000..b712dc3f6 --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java @@ -0,0 +1,61 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.downloader; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +import org.apache.camel.CamelContext; +import org.onap.clamp.clds.client.DcaeInventoryServices; +import org.onap.clamp.clds.config.ClampProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * This class implements a periodic job that is done in the background to + * synchronize policy models available on the policy engine and the clamp + * database table PolicyModel. + */ +@Configuration +@Profile("clamp-policy-controller") +public class PolicyDownloader { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + public static final String POLICY_RETRY_INTERVAL = "policy.retry.interval"; + public static final String POLICY_RETRY_LIMIT = "policy.retry.limit"; + + private final CamelContext camelContext; + + private final ClampProperties refProp; + + @Autowired + public PolicyDownloader(CamelContext camelContext, ClampProperties refProp) { + this.refProp = refProp; + this.camelContext = camelContext; + } + +} diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties index d389b211c..b9af1b470 100644 --- a/src/main/resources/application-noaaf.properties +++ b/src/main/resources/application-noaaf.properties @@ -73,7 +73,7 @@ clamp.config.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile server.servlet.context-path=/ #Modified engine-rest applicationpath -spring.profiles.active=clamp-default,clamp-default-user,clamp-sdc-controller-new,clamp-ssl-config +spring.profiles.active=clamp-default,clamp-default-user,clamp-sdc-controller,clamp-ssl-config spring.http.converters.preferred-json-mapper=gson #The max number of active threads in this pool @@ -160,26 +160,6 @@ clamp.config.policy.pap.url=http4://localhost:8085 clamp.config.policy.pap.userName=healthcheck clamp.config.policy.pap.password=zb!XztG34 - -clamp.config.policy.clientKey=dGVzdA== -#DEVL for development -#TEST for Test environments -#PROD for prod environments -clamp.config.policy.policyEnvironment=TEST -# General Policy request properties -# -clamp.config.policy.onap.name=DCAE -clamp.config.policy.pdp.group=default -clamp.config.policy.ms.type=MicroService -clamp.config.policy.ms.policyNamePrefix=Config_MS_ -clamp.config.policy.op.policyNamePrefix=Config_BRMS_Param_ -clamp.config.policy.base.policyNamePrefix=Config_ -clamp.config.policy.op.type=BRMS_Param - -clamp.config.import.tosca.model=true -clamp.config.tosca.policyTypes=tca -clamp.config.tosca.filePath=/tmp/tosca-models - # TCA MicroService Policy request build properties # clamp.config.tca.policyid.prefix=DCAE.Config_ diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b97d64364..e4568995d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -78,7 +78,7 @@ server.ssl.trust-store-password=enc:iDnPBBLq_EMidXlMa1FEuBR8TZzYxrCg66vq_XfLHdJ server.servlet.context-path=/ #Modified engine-rest applicationpath -spring.profiles.active=clamp-default,clamp-aaf-authentication,clamp-sdc-controller-new,clamp-ssl-config +spring.profiles.active=clamp-default,clamp-aaf-authentication,clamp-sdc-controller,clamp-ssl-config spring.http.converters.preferred-json-mapper=gson #The max number of active threads in this pool @@ -163,34 +163,6 @@ clamp.config.policy.pap.url=http4://policy.api.simpledemo.onap.org:6969 clamp.config.policy.pap.userName=healthcheck clamp.config.policy.pap.password=zb!XztG34 -clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 -clamp.config.policy.pdpUrl2=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 -clamp.config.policy.papUrl=http://policy.api.simpledemo.onap.org:8081/pap/ , testpap, alpha123 -clamp.config.policy.notificationType=websocket -clamp.config.policy.notificationUebServers=localhost -clamp.config.policy.notificationTopic=PDPD-CONFIGURATION -clamp.config.policy.clientId=python -# base64 encoding - -clamp.config.policy.clientKey=dGVzdA== -#DEVL for development -#TEST for Test environments -#PROD for prod environments -clamp.config.policy.policyEnvironment=TEST -# General Policy request properties -# -clamp.config.policy.onap.name=DCAE -clamp.config.policy.pdp.group=default -clamp.config.policy.ms.type=MicroService -clamp.config.policy.ms.policyNamePrefix=Config_MS_ -clamp.config.policy.op.policyNamePrefix=Config_BRMS_Param_ -clamp.config.policy.base.policyNamePrefix=Config_ -clamp.config.policy.op.type=BRMS_Param - -clamp.config.import.tosca.model=true -clamp.config.tosca.policyTypes=tca -clamp.config.tosca.filePath=/tmp/tosca-models - # TCA MicroService Policy request build properties # clamp.config.tca.policyid.prefix=DCAE.Config_ diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml index 97416a6cc..ce24b27ce 100644 --- a/src/main/resources/clds/camel/routes/policy-flows.xml +++ b/src/main/resources/clds/camel/routes/policy-flows.xml @@ -1,520 +1,587 @@ - - - - false - - - - ${header.CamelHttpResponseCode} != 200 - - false - - - - - false - - - - ${header.CamelHttpResponseCode} != 200 - - false - - - - - ${exchangeProperty[policyComponent].computeState(*)} - - - - - - - - - - GET - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[policyName]} GET - Policy status - - - - POLICY - - - - - - - - - - - - - GET - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[policyName]} GET Policy deployment - status - - - - POLICY + + + + false - - - - - - - - - - - ${exchangeProperty[microServicePolicy].createPolicyPayload()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[microServicePolicy].getName()} creation - status - + + + ${header.CamelHttpResponseCode} != 200 + + false + + + + + false - - POLICY + + + ${header.CamelHttpResponseCode} != 200 + + false + + + + + ${exchangeProperty[policyComponent].computeState(*)} - - - - + - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET + Policy status + + + + POLICY + + + + + - - - - - ${exchangeProperty[microServicePolicy].getName()} removal - status - - - - POLICY - - - - - + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET Policy deployment + status + + + + POLICY + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + + ${exchangeProperty[microServicePolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[microServicePolicy].getName()} creation + status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[operationalPolicy].createPolicyPayload()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[operationalPolicy].getName()} creation - status - - - - POLICY - - - - - + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[operationalPolicy].getName()} removal - status - - - - POLICY - - - - - + + + + + ${exchangeProperty[microServicePolicy].getName()} removal + status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[guardPolicy].getValue()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[guardPolicy].getKey()} creation status - - - - POLICY - - - - - + + + + + + + ${exchangeProperty[operationalPolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} creation + status + + + + POLICY + + + + + - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} removal + status + + + + POLICY + + + + + - - - - - ${exchangeProperty[guardPolicy].getKey()} removal status - - - - POLICY - - - - - + + + + + + + ${exchangeProperty[guardPolicy].getValue()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[guardPolicy].getKey()} creation status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + - - - - - PDP Group push ALL status - - - POLICY - - - - - + + + + + ${exchangeProperty[guardPolicy].getKey()} removal status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])} - - - ${body} - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - ${exchangeProperty[policyName]} PDP Group removal status - - - - POLICY - - - - - java.lang.Exception - - false - - - PDP Group removal, Error reported: ${exception} - - - POLICY - - - - - - - - - + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + PDP Group push ALL status + + + POLICY + + + + + + + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])} + + + ${body} + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + ${exchangeProperty[policyName]} PDP Group removal status + + + + POLICY + + + + + java.lang.Exception + + false + + + PDP Group removal, Error reported: ${exception} + + + POLICY + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/clds/it/PolicyConfigurationItCase.java b/src/test/java/org/onap/clamp/clds/it/PolicyConfigurationItCase.java deleted file mode 100644 index fd20e360a..000000000 --- a/src/test/java/org/onap/clamp/clds/it/PolicyConfigurationItCase.java +++ /dev/null @@ -1,71 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.clds.it; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.clamp.clds.config.PolicyConfiguration; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * Test Config Policy read from application.properties. - */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class PolicyConfigurationItCase { - - @Autowired - private PolicyConfiguration policyConfiguration; - - @Test - public void testPolicyConfiguration() { - assertNotNull(policyConfiguration.getPdpUrl1()); - assertNotNull(policyConfiguration.getPdpUrl2()); - assertNotNull(policyConfiguration.getPapUrl()); - assertNotNull(policyConfiguration.getPolicyEnvironment()); - assertNotNull(policyConfiguration.getClientId()); - assertNotNull(policyConfiguration.getClientKey()); - assertNotNull(policyConfiguration.getNotificationType()); - assertNotNull(policyConfiguration.getNotificationUebServers()); - assertEquals(8, policyConfiguration.getProperties().size()); - assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PDP_URL1)) - .contains("/pdp/ , testpdp, alpha123")); - assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PDP_URL2)) - .contains("/pdp/ , testpdp, alpha123")); - assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PAP_URL)) - .contains("/pap/ , testpap, alpha123")); - assertEquals("websocket", policyConfiguration.getProperties().get(PolicyConfiguration.NOTIFICATION_TYPE)); - assertEquals("localhost", - policyConfiguration.getProperties().get(PolicyConfiguration.NOTIFICATION_UEB_SERVERS)); - assertEquals("python", policyConfiguration.getProperties().get(PolicyConfiguration.CLIENT_ID)); - assertEquals("dGVzdA==", policyConfiguration.getProperties().get(PolicyConfiguration.CLIENT_KEY)); - assertEquals("DEVL", policyConfiguration.getProperties().get(PolicyConfiguration.ENVIRONMENT)); - } -} diff --git a/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java b/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java index d34042038..c25415ecc 100644 --- a/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java @@ -28,10 +28,9 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; - import com.google.gson.JsonElement; + import java.io.IOException; -import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -55,19 +54,15 @@ public class CldsReferencePropertiesItCase { */ @Test public void testGetStringValue() { - assertEquals("DCAE", refProp.getStringValue("policy.onap.name")); - assertEquals("Config_MS_", refProp.getStringValue("policy.ms.policyNamePrefix", "")); - assertEquals("Config_MS_", refProp.getStringValue("policy.ms.policyNamePrefix", "testos")); - assertEquals("Config_MS_", refProp.getStringValue("policy.ms", "policyNamePrefix")); - assertNull(refProp.getStringValue("does.not.exist")); + assertEquals("healthcheck", refProp.getStringValue("policy.api.userName")); } @Test public void shouldReturnJsonFromTemplate() throws IOException { - //when + // when JsonElement root = refProp.getJsonTemplate("ui.location.default"); - //then + // then assertNotNull(root); assertTrue(root.isJsonObject()); assertEquals("Data Center 1", root.getAsJsonObject().get("DC1").getAsString()); @@ -75,10 +70,10 @@ public class CldsReferencePropertiesItCase { @Test public void shouldReturnJsonFromTemplate_2() throws IOException { - //when + // when JsonElement root = refProp.getJsonTemplate("ui.location", "default"); - //then + // then assertNotNull(root); assertTrue(root.isJsonObject()); assertEquals("Data Center 1", root.getAsJsonObject().get("DC1").getAsString()); @@ -86,18 +81,17 @@ public class CldsReferencePropertiesItCase { @Test public void shouldReturnNullIfPropertyNotFound() throws IOException { - //when + // when JsonElement root = refProp.getJsonTemplate("ui.location", ""); - //then + // then assertNull(root); } /** * Test getting prop value as a JSON Node / template. * - * @throws IOException - * when JSON parsing fails + * @throws IOException when JSON parsing fails */ @Test public void testGetFileContent() throws IOException { @@ -109,13 +103,4 @@ public class CldsReferencePropertiesItCase { content = refProp.getFileContent("ui.location", "default"); assertEquals(location, content); } - - @Test - public void testGetStringList() { - List profileList = refProp.getStringList("policy.pdpUrl1", ","); - assertEquals(3, profileList.size()); - assertTrue(profileList.get(0).trim().startsWith("http://localhost:")); - assertEquals("testpdp", profileList.get(1).trim()); - assertEquals("alpha123", profileList.get(2).trim()); - } } diff --git a/src/test/java/org/onap/clamp/clds/it/config/SdcControllersConfigurationItCase.java b/src/test/java/org/onap/clamp/clds/it/config/SdcControllersConfigurationItCase.java index 7c520a252..7ef734533 100644 --- a/src/test/java/org/onap/clamp/clds/it/config/SdcControllersConfigurationItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/config/SdcControllersConfigurationItCase.java @@ -45,7 +45,7 @@ import org.springframework.test.util.ReflectionTestUtils; */ @RunWith(SpringRunner.class) @SpringBootTest -@ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller-new") +@ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller") public class SdcControllersConfigurationItCase { @Autowired diff --git a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java index e48bfc44a..9efb68983 100644 --- a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java +++ b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParserTest.java @@ -44,6 +44,7 @@ import org.json.JSONObject; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; +import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; import org.onap.clamp.clds.util.ResourceFileUtil; import org.yaml.snakeyaml.Yaml; @@ -53,17 +54,16 @@ public class BlueprintParserTest { private static final String SECOND_APPP = "second_app"; private static final String THIRD_APPP = "third_app"; private static final String MODEL_TYPE1 = "type1"; - private static final String MODEL_TYPE2 = "type2"; - private static final String MODEL_TYPE3 = "type3"; + private static final String MODEL_TYPE_TCA = "onap.policies.monitoring.cdap.tca.hi.lo.app"; + private static final String VERSION = "1.0.0"; private static String microServiceTheWholeBlueprintValid; - private static String microServiceBlueprintOldStyleTCA; - private static String microServiceBlueprintOldStyleHolmes; private static String newMicroServiceBlueprint; - private static JsonObject jsonObjectBlueprintValid; + private static JsonObject jsonObjectBlueprintInvalid; private static JsonObject jsonObjectBlueprintWithoutName; private static JsonObject jsonObjectBlueprintWithoutProperties; private static JsonObject jsonObjectBlueprintWithoutRelationships; + private static JsonObject jsonObjectBlueprintValidWithVersion; /** * Method to load Blueprints before all test. @@ -74,20 +74,21 @@ public class BlueprintParserTest { public static void loadBlueprints() throws IOException { microServiceTheWholeBlueprintValid = ResourceFileUtil .getResourceAsString("clds/blueprint-with-microservice-chain.yaml"); - microServiceBlueprintOldStyleTCA = ResourceFileUtil.getResourceAsString("clds/tca-old-style-ms.yaml"); + newMicroServiceBlueprint = ResourceFileUtil.getResourceAsString("clds/new-microservice.yaml"); - microServiceBlueprintOldStyleHolmes = ResourceFileUtil.getResourceAsString("clds/holmes-old-style-ms.yaml"); - String microServiceBlueprintValid = ResourceFileUtil - .getResourceAsString("clds/single-microservice-fragment-valid.yaml"); + String microServiceBlueprintInvalid = ResourceFileUtil + .getResourceAsString("clds/single-microservice-fragment-invalid.yaml"); + jsonObjectBlueprintInvalid = yamlToJson(microServiceBlueprintInvalid); String microServiceBlueprintWithoutName = ResourceFileUtil .getResourceAsString("clds/single-microservice-fragment-without-name.yaml"); + jsonObjectBlueprintWithoutName = yamlToJson(microServiceBlueprintWithoutName); String microServiceBlueprintWithoutProperties = ResourceFileUtil .getResourceAsString("clds/single-microservice-fragment-without-properties.yaml"); - - jsonObjectBlueprintValid = yamlToJson(microServiceBlueprintValid); - jsonObjectBlueprintWithoutName = yamlToJson(microServiceBlueprintWithoutName); jsonObjectBlueprintWithoutProperties = yamlToJson(microServiceBlueprintWithoutProperties); + String microServiceBlueprintValidWithVersion = ResourceFileUtil + .getResourceAsString("clds/single-microservice-fragment-valid-with-version.yaml"); + jsonObjectBlueprintValidWithVersion = yamlToJson(microServiceBlueprintValidWithVersion); String microServiceBlueprintWithoutRelationships = ResourceFileUtil .getResourceAsString("clds/single-microservice-fragment-without-relationships.yaml"); @@ -97,11 +98,11 @@ public class BlueprintParserTest { @Test public void getNameShouldReturnDefinedName() { - final JsonObject jsonObject = jsonObjectBlueprintValid; + final JsonObject jsonObject = jsonObjectBlueprintInvalid; String expectedName = jsonObject.get(jsonObject.keySet().iterator().next()).getAsJsonObject().get("properties") .getAsJsonObject().get("name").getAsString(); Entry entry = jsonObject.entrySet().iterator().next(); - String actualName = new BlueprintParser().getName(entry); + String actualName = BlueprintParser.getName(entry); Assert.assertEquals(expectedName, actualName); } @@ -112,7 +113,7 @@ public class BlueprintParserTest { String expectedName = jsonObject.keySet().iterator().next(); Entry entry = jsonObject.entrySet().iterator().next(); - String actualName = new BlueprintParser().getName(entry); + String actualName = BlueprintParser.getName(entry); Assert.assertEquals(expectedName, actualName); } @@ -123,18 +124,18 @@ public class BlueprintParserTest { String expectedName = jsonObject.keySet().iterator().next(); Entry entry = jsonObject.entrySet().iterator().next(); - String actualName = new BlueprintParser().getName(entry); + String actualName = BlueprintParser.getName(entry); Assert.assertEquals(expectedName, actualName); } @Test public void getInputShouldReturnInputWhenPresent() { - final JsonObject jsonObject = jsonObjectBlueprintValid; + final JsonObject jsonObject = jsonObjectBlueprintInvalid; String expected = FIRST_APPP; Entry entry = jsonObject.entrySet().iterator().next(); - String actual = new BlueprintParser().getInput(entry); + String actual = BlueprintParser.getInput(entry); Assert.assertEquals(expected, actual); } @@ -145,63 +146,56 @@ public class BlueprintParserTest { String expected = ""; Entry entry = jsonObject.entrySet().iterator().next(); - String actual = new BlueprintParser().getInput(entry); + String actual = BlueprintParser.getInput(entry); Assert.assertEquals(expected, actual); } - @Test - public void getNodeRepresentationFromCompleteYaml() { - final JsonObject jsonObject = jsonObjectBlueprintValid; - - MicroService expected = new MicroService(SECOND_APPP, MODEL_TYPE1, FIRST_APPP, ""); - Entry entry = jsonObject.entrySet().iterator().next(); - MicroService actual = new BlueprintParser().getNodeRepresentation(entry, jsonObject, null); - - Assert.assertEquals(expected, actual); + @Test(expected = BlueprintParserException.class) + public void getNodeRepresentationFromIncompleteYaml() throws BlueprintParserException { + BlueprintParser.getNodeRepresentation(jsonObjectBlueprintInvalid.entrySet().iterator().next(), + jsonObjectBlueprintInvalid, null); } @Test - public void getMicroServicesFromBlueprintTest() { - MicroService thirdApp = new MicroService(THIRD_APPP, MODEL_TYPE3, "", ""); - MicroService firstApp = new MicroService(FIRST_APPP, MODEL_TYPE1, THIRD_APPP, ""); - MicroService secondApp = new MicroService(SECOND_APPP, MODEL_TYPE2, FIRST_APPP, ""); + public void getNodeRepresentationFromCompleteYamlWithModelVersion() throws BlueprintParserException { + final JsonObject jsonObject = jsonObjectBlueprintValidWithVersion; - Set expected = new HashSet<>(Arrays.asList(firstApp, secondApp, thirdApp)); - Set actual = new BlueprintParser().getMicroServices(microServiceTheWholeBlueprintValid); + BlueprintMicroService expected = new BlueprintMicroService(SECOND_APPP, MODEL_TYPE1, "", "10.0.0"); + Entry entry = jsonObject.entrySet().iterator().next(); + BlueprintMicroService actual = BlueprintParser.getNodeRepresentation(entry, jsonObject, null); Assert.assertEquals(expected, actual); } @Test + public void getMicroServicesFromBlueprintTest() throws BlueprintParserException { + BlueprintMicroService thirdApp = new BlueprintMicroService(THIRD_APPP, MODEL_TYPE_TCA, SECOND_APPP, VERSION); + BlueprintMicroService firstApp = new BlueprintMicroService(FIRST_APPP, MODEL_TYPE_TCA, "", VERSION); + BlueprintMicroService secondApp = new BlueprintMicroService(SECOND_APPP, MODEL_TYPE_TCA, FIRST_APPP, VERSION); - public void fallBackToOneMicroServiceTcaTest() { - MicroService tcaMs = new MicroService(BlueprintParser.TCA, "onap.policies.monitoring.cdap.tca.hi.lo.app", "", - ""); - List expected = Collections.singletonList(tcaMs); - List actual = new BlueprintParser().fallbackToOneMicroService(microServiceBlueprintOldStyleTCA); + Set expected = new HashSet<>(Arrays.asList(firstApp, secondApp, thirdApp)); + Set actual = BlueprintParser.getMicroServices(microServiceTheWholeBlueprintValid); Assert.assertEquals(expected, actual); } @Test - public void fallBackToOneMicroServiceHolmesTest() { - MicroService holmesMs = new MicroService(BlueprintParser.HOLMES, "onap.policies.monitoring.cdap.tca.hi.lo.app", - "", ""); - - List expected = Collections.singletonList(holmesMs); - List actual = new BlueprintParser() - .fallbackToOneMicroService(microServiceBlueprintOldStyleHolmes); + public void fallBackToOneMicroServiceTcaTest() { + BlueprintMicroService tcaMs = new BlueprintMicroService(BlueprintParser.TCA, + "onap.policies.monitoring.cdap.tca.hi.lo.app", "", VERSION); + List expected = Collections.singletonList(tcaMs); + List actual = BlueprintParser.fallbackToOneMicroService(); Assert.assertEquals(expected, actual); } @Test - public void newMicroServiceTest() { - List microServicesChain = new ChainGenerator() - .getChainOfMicroServices(new BlueprintParser().getMicroServices(newMicroServiceBlueprint)); + public void newMicroServiceTest() throws BlueprintParserException { + List microServicesChain = new ChainGenerator() + .getChainOfMicroServices(BlueprintParser.getMicroServices(newMicroServiceBlueprint)); if (microServicesChain.isEmpty()) { - microServicesChain = new BlueprintParser().fallbackToOneMicroService(newMicroServiceBlueprint); + microServicesChain = BlueprintParser.fallbackToOneMicroService(); } assertThat(microServicesChain.size()).isEqualTo(1); assertThat(microServicesChain.get(0).getName()).isEqualTo("pmsh"); diff --git a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java index 4b4563cd4..83b3dda01 100644 --- a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java +++ b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/ChainGeneratorTest.java @@ -36,42 +36,43 @@ public class ChainGeneratorTest { private static final String SECOND_APPP = "second_app"; private static final String THIRD_APPP = "third_app"; private static final String FOURTH_APPP = "fourth_app"; + private static final String DEFAULT_VERSION = "1.0.0"; @Test public void getChainOfMicroServicesTest() { - MicroService ms1 = new MicroService(FIRST_APPP, "", "", ""); - MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, ""); - MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, ""); - MicroService ms4 = new MicroService(FOURTH_APPP, "", THIRD_APPP, ""); + BlueprintMicroService ms1 = new BlueprintMicroService(FIRST_APPP, "", "", DEFAULT_VERSION); + BlueprintMicroService ms2 = new BlueprintMicroService(SECOND_APPP, "", FIRST_APPP, DEFAULT_VERSION); + BlueprintMicroService ms3 = new BlueprintMicroService(THIRD_APPP, "", SECOND_APPP, DEFAULT_VERSION); + BlueprintMicroService ms4 = new BlueprintMicroService(FOURTH_APPP, "", THIRD_APPP, DEFAULT_VERSION); - List expectedList = Arrays.asList(ms1, ms2, ms3, ms4); - Set inputSet = new HashSet<>(expectedList); + List expectedList = Arrays.asList(ms1, ms2, ms3, ms4); + Set inputSet = new HashSet<>(expectedList); - List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); + List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); Assert.assertEquals(expectedList, actualList); } @Test public void getChainOfMicroServicesTwiceNoInputTest() { - MicroService ms1 = new MicroService(FIRST_APPP, "", "", ""); - MicroService ms2 = new MicroService(SECOND_APPP, "", "", ""); - MicroService ms3 = new MicroService(THIRD_APPP, "", SECOND_APPP, ""); - MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, ""); + BlueprintMicroService ms1 = new BlueprintMicroService(FIRST_APPP, "", "", DEFAULT_VERSION); + BlueprintMicroService ms2 = new BlueprintMicroService(SECOND_APPP, "", "", DEFAULT_VERSION); + BlueprintMicroService ms3 = new BlueprintMicroService(THIRD_APPP, "", SECOND_APPP, DEFAULT_VERSION); + BlueprintMicroService ms4 = new BlueprintMicroService(FOURTH_APPP, "", FIRST_APPP, DEFAULT_VERSION); - Set inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4)); - List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); + Set inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4)); + List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); Assert.assertTrue(actualList.isEmpty()); } @Test public void getChainOfMicroServicesBranchingTest() { - MicroService ms1 = new MicroService(FIRST_APPP, "", "", ""); - MicroService ms2 = new MicroService(SECOND_APPP, "", FIRST_APPP, ""); - MicroService ms3 = new MicroService(THIRD_APPP, "", FIRST_APPP, ""); - MicroService ms4 = new MicroService(FOURTH_APPP, "", FIRST_APPP, ""); + BlueprintMicroService ms1 = new BlueprintMicroService(FIRST_APPP, "", "", DEFAULT_VERSION); + BlueprintMicroService ms2 = new BlueprintMicroService(SECOND_APPP, "", FIRST_APPP, DEFAULT_VERSION); + BlueprintMicroService ms3 = new BlueprintMicroService(THIRD_APPP, "", FIRST_APPP, DEFAULT_VERSION); + BlueprintMicroService ms4 = new BlueprintMicroService(FOURTH_APPP, "", FIRST_APPP, DEFAULT_VERSION); - Set inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4)); - List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); + Set inputSet = new HashSet<>(Arrays.asList(ms1, ms2, ms3, ms4)); + List actualList = new ChainGenerator().getChainOfMicroServices(inputSet); Assert.assertTrue(actualList.isEmpty()); } } diff --git a/src/test/java/org/onap/clamp/clds/util/CryptoUtilsTest.java b/src/test/java/org/onap/clamp/clds/util/CryptoUtilsTest.java index 1453d0baa..f6054d538 100644 --- a/src/test/java/org/onap/clamp/clds/util/CryptoUtilsTest.java +++ b/src/test/java/org/onap/clamp/clds/util/CryptoUtilsTest.java @@ -45,7 +45,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) -@PowerMockIgnore({ "javax.crypto.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*" }) +@PowerMockIgnore({ "javax.crypto.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*" }) public class CryptoUtilsTest { private final String data = "This is a test string"; diff --git a/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java b/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java index 269ad42e1..65eb2696f 100644 --- a/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java +++ b/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java @@ -39,7 +39,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.onap.clamp.clds.sdc.controller.installer.MicroService; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; @RunWith(MockitoJUnitRunner.class) public class ClampGraphBuilderTest { @@ -50,7 +50,7 @@ public class ClampGraphBuilderTest { private ArgumentCaptor collectorCaptor; @Captor - private ArgumentCaptor> microServicesCaptor; + private ArgumentCaptor> microServicesCaptor; @Captor private ArgumentCaptor policyCaptor; @@ -58,17 +58,17 @@ public class ClampGraphBuilderTest { @Test public void clampGraphBuilderCompleteChainTest() { String collector = "VES"; - MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id"); - MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id"); + BlueprintMicroService ms1 = new BlueprintMicroService("ms1", "", "", "1.0.0"); + BlueprintMicroService ms2 = new BlueprintMicroService("ms2", "", "", "1.0.0"); String policy = "OperationalPolicy"; - final List microServices = Arrays.asList(ms1, ms2); + final List microServices = Arrays.asList(ms1, ms2); ClampGraphBuilder clampGraphBuilder = new ClampGraphBuilder(mockPainter); clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).policy(policy).build(); verify(mockPainter, times(1)).doPaint(collectorCaptor.capture(), microServicesCaptor.capture(), - policyCaptor.capture()); + policyCaptor.capture()); Assert.assertEquals(collector, collectorCaptor.getValue()); Assert.assertEquals(microServices, microServicesCaptor.getValue()); @@ -78,8 +78,8 @@ public class ClampGraphBuilderTest { @Test(expected = InvalidStateException.class) public void clampGraphBuilderNoPolicyGivenTest() { String collector = "VES"; - MicroService ms1 = new MicroService("ms1", "", "", "ms1_jpa_id"); - MicroService ms2 = new MicroService("ms2", "", "", "ms2_jpa_id"); + BlueprintMicroService ms1 = new BlueprintMicroService("ms1", "", "", "1.0.0"); + BlueprintMicroService ms2 = new BlueprintMicroService("ms2", "", "", "1.0.0"); ClampGraphBuilder clampGraphBuilder = new ClampGraphBuilder(mockPainter); clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).build(); diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index 70adf3eef..636684cdb 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -44,6 +44,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.onap.clamp.clds.Application; +import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.sdc.controller.installer.BlueprintArtifact; @@ -73,7 +74,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) -@ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller-new") +@ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller") public class CsarInstallerItCase { private static final String CSAR_ARTIFACT_NAME = "example/sdc/service_Vloadbalancerms_csar.csar"; @@ -180,7 +181,7 @@ public class CsarInstallerItCase { @Test @Transactional public void testIsCsarAlreadyDeployedTca() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, InterruptedException { + CsarHandlerException, IOException, InterruptedException, BlueprintParserException { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csarHandler = buildFakeCsarHandler(generatedName); assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); @@ -192,7 +193,7 @@ public class CsarInstallerItCase { @Transactional @Commit public void testInstallTheCsarTca() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, JSONException, InterruptedException { + CsarHandlerException, IOException, JSONException, InterruptedException, BlueprintParserException { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csar = buildFakeCsarHandler(generatedName); csarInstaller.installTheCsar(csar); @@ -233,16 +234,9 @@ public class CsarInstallerItCase { assertThat(policyModelsRepository.findAll().size()).isEqualByComparingTo(1); assertThat(policyModelsRepository - .existsById(new PolicyModelId("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0"))).isTrue(); - } - - @Test(expected = SdcArtifactInstallerException.class) - @Transactional - public void shouldThrowSdcArtifactInstallerException() - throws SdcArtifactInstallerException, SdcToscaParserException, IOException, InterruptedException { - String generatedName = RandomStringUtils.randomAlphanumeric(5); - CsarHandler csarHandler = buildFakeCsarHandler(generatedName); - Mockito.when(csarHandler.getPolicyModelYaml()).thenThrow(IOException.class); - csarInstaller.installTheCsar(csarHandler); + .existsById(new PolicyModelId("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"))).isTrue(); + assertThat(policyModelsRepository + .getOne((new PolicyModelId("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"))) + .getPolicyModelTosca()).isNotBlank(); } } diff --git a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java index f8c1d8662..ce1181d33 100644 --- a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java +++ b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java @@ -28,6 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; +import java.util.stream.Collectors; import javax.transaction.Transactional; @@ -52,11 +53,13 @@ public class PolicyModelServiceItCase { @Autowired PolicyModelsRepository policyModelsRepository; - private static final String POLICY_MODEL_TYPE_1 = "org.onap.test"; + private static final String POLICY_MODEL_TYPE_1 = "org.onap.testos"; private static final String POLICY_MODEL_TYPE_1_VERSION_1 = "1.0.0"; - private static final String POLICY_MODEL_TYPE_2 = "org.onap.test2"; + private static final String POLICY_MODEL_TYPE_2 = "org.onap.testos2"; + private static final String POLICY_MODEL_TYPE_3 = "org.onap.testos3"; private static final String POLICY_MODEL_TYPE_2_VERSION_1 = "1.0.0"; + private static final String POLICY_MODEL_TYPE_3_VERSION_1 = "1.0.0"; private static final String POLICY_MODEL_TYPE_2_VERSION_2 = "2.0.0"; private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, @@ -150,9 +153,17 @@ public class PolicyModelServiceItCase { PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); policyModelsService.saveOrUpdatePolicyModel(policyModel2); + PolicyModel policyModel3 = getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", POLICY_MODEL_TYPE_3_VERSION_1, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel3); SortedSet sortedSet = new TreeSet<>(); policyModelsService.getAllPolicyModels().forEach(sortedSet::add); - assertThat(sortedSet).contains(policyModel2, policyModel1); + List listToCheck = sortedSet.stream().filter( + policy -> policy.equals(policyModel3) || policy.equals(policyModel2) || policy.equals(policyModel1)) + .collect(Collectors.toList()); + assertThat(listToCheck.get(0)).isEqualByComparingTo(policyModel2); + assertThat(listToCheck.get(1)).isEqualByComparingTo(policyModel1); + assertThat(listToCheck.get(2)).isEqualByComparingTo(policyModel3); } } diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index bbade742c..17c42f560 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -116,7 +116,7 @@ spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.use-new-id-generator-mappings=true # Whether to enable logging of SQL statements. -spring.jpa.show-sql=true +#spring.jpa.show-sql=true #Async Executor default Parameters async.core.pool.size=10 @@ -148,33 +148,6 @@ clamp.config.policy.pap.url=http4://localhost:${docker.http-cache.port.host} clamp.config.policy.pap.userName=healthcheck clamp.config.policy.pap.password=zb!XztG34 -clamp.config.policy.pdpUrl1=http://localhost:${docker.http-cache.port.host}/pdp/ , testpdp, alpha123 -clamp.config.policy.pdpUrl2=http://localhost:${docker.http-cache.port.host}/pdp/ , testpdp, alpha123 -clamp.config.policy.papUrl=http://localhost:${docker.http-cache.port.host}/pap/ , testpap, alpha123 -clamp.config.policy.notificationType=websocket -clamp.config.policy.notificationUebServers=localhost -clamp.config.policy.notificationTopic= -clamp.config.policy.clientId=python -# base64 encoding -clamp.config.policy.clientKey=dGVzdA== -#DEVL for development -#TEST for Test environments -#PROD for prod environments -clamp.config.policy.policyEnvironment=DEVL -# General Policy request properties -# -clamp.config.policy.onap.name=DCAE -clamp.config.policy.pdp.group=default -clamp.config.policy.ms.type=MicroService -clamp.config.policy.ms.policyNamePrefix=Config_MS_ -clamp.config.policy.op.policyNamePrefix=Config_BRMS_Param_ -clamp.config.policy.base.policyNamePrefix=Config_ -clamp.config.policy.op.type=BRMS_Param - -clamp.config.import.tosca.model=false -clamp.config.tosca.policyTypes=tca -clamp.config.tosca.filePath=/tmp/tosca-models - # TCA MicroService Policy request build properties # clamp.config.tca.policyid.prefix=DCAE.Config_ diff --git a/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java b/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java deleted file mode 100644 index 904525bea..000000000 --- a/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.policy.operational; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; - -import java.io.IOException; - -import org.junit.Test; -import org.onap.clamp.clds.util.ResourceFileUtil; -import org.skyscreamer.jsonassert.JSONAssert; - -public class OperationalPolicyRepresentationBuilderTest { - - @Test - public void testOperationalPolicyPayloadConstruction() throws IOException { - JsonObject jsonModel = new GsonBuilder().create() - .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class); - - JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(jsonModel); - - assertThat(jsonSchema).isNotNull(); - - JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/operational-policy-json-schema.json"), - new GsonBuilder().create().toJson(jsonSchema), false); - } - -} diff --git a/src/test/resources/clds/blueprint-parser-mapping.json b/src/test/resources/clds/blueprint-parser-mapping.json deleted file mode 100644 index a22e9fcf1..000000000 --- a/src/test/resources/clds/blueprint-parser-mapping.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "blueprintKey": "tca_", - "dcaeDeployable":"true", - "files": { - "bpmnXmlFilePath": "classpath:/clds/templates/bpmn/tca-template.xml", - "svgXmlFilePath": "classpath:/clds/templates/bpmn/tca-img.xml" - } - }, - { - "blueprintKey": "holmes_", - "dcaeDeployable":"false", - "files": { - "bpmnXmlFilePath": "classpath:/clds/templates/bpmn/holmes-template.xml", - "svgXmlFilePath": "classpath:/clds/templates/bpmn/holmes-img.xml" - } - } -] diff --git a/src/test/resources/clds/blueprint-with-microservice-chain.yaml b/src/test/resources/clds/blueprint-with-microservice-chain.yaml index fa2d72052..0e9e4bc8c 100644 --- a/src/test/resources/clds/blueprint-with-microservice-chain.yaml +++ b/src/test/resources/clds/blueprint-with-microservice-chain.yaml @@ -1,98 +1,202 @@ tosca_definitions_version: cloudify_dsl_1_3 +description: > + This blueprint deploys/manages the TCA module as a Docker container + imports: - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml - - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.4/k8splugin_types.yaml + - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml inputs: - first_app_docker_image: + aaiEnrichmentHost: + type: string + default: "aai.onap.svc.cluster.local" + aaiEnrichmentPort: + type: string + default: "8443" + enableAAIEnrichment: + type: string + default: true + dmaap_host: + type: string + default: message-router.onap.svc.cluster.local + dmaap_port: type: string - default: "image1" - second_app_docker_image: + default: "3904" + enableRedisCaching: type: string - default: "image2" - third_app_docker_image: + default: false + redisHosts: type: string - default: "image3" - dmaap_ip: + default: dcae-redis.onap.svc.cluster.local:6379 + tag_version: type: string - default: "message-router:3904" - dmaap_topic: + default: "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest" + consul_host: type: string - default: "/events/unauthenticated.DCAE_CL_OUTPUT" + default: consul-server.onap.svc.cluster.local + consul_port: + type: string + default: "8500" + cbs_host: + type: string + default: "config-binding-service.dcae.svc.cluster.local" + cbs_port: + type: string + default: "10000" policy_id: type: string - default: "policy_id" + default: "none" + external_port: + type: string + description: Kubernetes node port on which CDAPgui is exposed + default: "32012" + policy_model_id: + type: string + default: "onap.policies.monitoring.cdap.tca.hi.lo.app" + node_templates: - second_app: - type: dcae.nodes.ContainerizedServiceComponentUsingDmaap + first_app: + type: dcae.nodes.ContainerizedServiceComponent properties: - service_component_type: dcaegen2-analytics-tca - service_component_name_override: second_app - image: { get_input: second_app_docker_image } - policy_id: - policy_model_id: "type2" - interfaces: - cloudify.interfaces.lifecycle: - start: - inputs: - envs: - grpc_server.host: "first_app.onap" - dmaap_ip: {get_input: dmaap_ip} - dmapp_topic: {get_input: dmaap_topic} - policy_id: {get_input: policy_id} - ports: - - 8080:8080 + service_component_type: 'dcaegen2-analytics-tca' + application_config: {} + docker_config: {} + image: + get_input: tag_version + log_info: + log_directory: "/opt/app/TCAnalytics/logs" relationships: - - type: cloudify.relationships.connected_to - target: first_app + - target: tca_policy_1 + type: cloudify.relationships.depends_on + second_app: + type: dcae.nodes.ContainerizedServiceComponent + relationships: + - target: tca_policy_2 + type: cloudify.relationships.depends_on - type: clamp_node.relationships.gets_input_from target: first_app - first_app: - type: dcae.nodes.ContainerizedPlatformComponent properties: - name: first_app - dns_name: "first_app" - image: { get_input: first_app_docker_image } - container_port: 6565 - policy_id: - policy_model_id: "type1" + service_component_type: 'dcaegen2-analytics-tca' + application_config: {} + docker_config: {} + image: + get_input: tag_version + log_info: + log_directory: "/opt/app/TCAnalytics/logs" + application_config: + app_config: + appDescription: DCAE Analytics Threshold Crossing Alert Application + appName: dcae-tca + tcaAlertsAbatementTableName: TCAAlertsAbatementTable + tcaAlertsAbatementTableTTLSeconds: '1728000' + tcaSubscriberOutputStreamName: TCASubscriberOutputStream + tcaVESAlertsTableName: TCAVESAlertsTable + tcaVESAlertsTableTTLSeconds: '1728000' + tcaVESMessageStatusTableName: TCAVESMessageStatusTable + tcaVESMessageStatusTableTTLSeconds: '86400' + thresholdCalculatorFlowletInstances: '2' + app_preferences: + aaiEnrichmentHost: + get_input: aaiEnrichmentHost + aaiEnrichmentIgnoreSSLCertificateErrors: 'true' + aaiEnrichmentPortNumber: '8443' + aaiEnrichmentProtocol: https + aaiEnrichmentUserName: dcae@dcae.onap.org + aaiEnrichmentUserPassword: demo123456! + aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query + aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf + enableAAIEnrichment: + get_input: enableAAIEnrichment + enableRedisCaching: + get_input: enableRedisCaching + redisHosts: + get_input: redisHosts + enableAlertCEFFormat: 'false' + publisherContentType: application/json + publisherHostName: + get_input: dmaap_host + publisherHostPort: + get_input: dmaap_port + publisherMaxBatchSize: '1' + publisherMaxRecoveryQueueSize: '100000' + publisherPollingInterval: '20000' + publisherProtocol: http + publisherTopicName: unauthenticated.DCAE_CL_OUTPUT + subscriberConsumerGroup: OpenDCAE-c12 + subscriberConsumerId: c12 + subscriberContentType: application/json + subscriberHostName: + get_input: dmaap_host + subscriberHostPort: + get_input: dmaap_port + subscriberMessageLimit: '-1' + subscriberPollingInterval: '30000' + subscriberProtocol: http + subscriberTimeoutMS: '-1' + subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT + tca_policy: '' + service_component_type: dcaegen2-analytics_tca interfaces: cloudify.interfaces.lifecycle: start: inputs: envs: - dmaap_ip: {get_input: dmaap_ip} - dmapp_topic: {get_input: dmaap_topic} - policy_id: {get_input: policy_id} + DMAAPHOST: + { get_input: dmaap_host } + DMAAPPORT: + { get_input: dmaap_port } + DMAAPPUBTOPIC: "unauthenticated.DCAE_CL_OUTPUT" + DMAAPSUBTOPIC: "unauthenticated.VES_MEASUREMENT_OUTPUT" + AAIHOST: + { get_input: aaiEnrichmentHost } + AAIPORT: + { get_input: aaiEnrichmentPort } + CONSUL_HOST: + { get_input: consul_host } + CONSUL_PORT: + { get_input: consul_port } + CBS_HOST: + { get_input: cbs_host } + CBS_PORT: + { get_input: cbs_port } + CONFIG_BINDING_SERVICE: "config_binding_service" ports: - - 8081:8081 + - concat: ["11011:", { get_input: external_port }] + third_app: + type: dcae.nodes.ContainerizedServiceComponent + properties: + service_component_type: 'dcaegen2-analytics-tca' + application_config: {} + docker_config: {} + image: + get_input: tag_version + log_info: + log_directory: "/opt/app/TCAnalytics/logs" relationships: - - type: cloudify.relationships.connected_to - target: third_app + - target: tca_policy_3 + type: cloudify.relationships.depends_on - type: clamp_node.relationships.gets_input_from - target: third_app - - third_app: - type: dcae.nodes.ContainerizedPlatformComponent + target: second_app + tca_policy_1: + type: dcae.nodes.policy properties: - name: third_app - dns_name: "third_app" - image: { get_input: third_app_docker_image } - container_port: 443 policy_id: - policy_model_id: "type3" - interfaces: - cloudify.interfaces.lifecycle: - start: - inputs: - envs: - dmaap_ip: {get_input: dmaap_ip} - dmapp_topic: {get_input: dmaap_topic} - policy_id: {get_input: policy_id} - ports: - - 8082:8082 - tca_policy: + get_input: policy_id + policy_model_id: + get_input: policy_model_id + tca_policy_2: type: dcae.nodes.policy properties: - policy_id: { get_input: policy_id } \ No newline at end of file + policy_id: + get_input: policy_id + policy_model_id: + get_input: policy_model_id + + tca_policy_3: + type: dcae.nodes.policy + properties: + policy_id: + get_input: policy_id + policy_model_id: + get_input: policy_model_id diff --git a/src/test/resources/clds/camel/rest/clamp-api-v2.xml b/src/test/resources/clds/camel/rest/clamp-api-v2.xml index cf99625ee..a0a3eb104 100644 --- a/src/test/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/test/resources/clds/camel/rest/clamp-api-v2.xml @@ -237,6 +237,48 @@ + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + - - - - false - - - - ${header.CamelHttpResponseCode} != 200 - - false - - - - - false - - - - ${header.CamelHttpResponseCode} != 200 - - false - - - - - ${exchangeProperty[policyComponent].computeState(*)} - - - - - - - - - - GET - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[policyName]} GET - Policy status - - - - POLICY - - - - - - - - - - - - - GET - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[policyName]} GET Policy deployment - status - - - - POLICY + + + + false - - - - - - - - - - - ${exchangeProperty[microServicePolicy].createPolicyPayload()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[microServicePolicy].getName()} creation - status - + + + ${header.CamelHttpResponseCode} != 200 + + false + + + + + false - - POLICY + + + ${header.CamelHttpResponseCode} != 200 + + false + + + + + ${exchangeProperty[policyComponent].computeState(*)} - - - - + - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET + Policy status + + + + POLICY + + + + + - - - - - ${exchangeProperty[microServicePolicy].getName()} removal - status - - - - POLICY - - - - - + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET Policy deployment + status + + + + POLICY + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + + ${exchangeProperty[microServicePolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[microServicePolicy].getName()} creation + status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[operationalPolicy].createPolicyPayload()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[operationalPolicy].getName()} creation - status - - - - POLICY - - - - - + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[operationalPolicy].getName()} removal - status - - - - POLICY - - - - - + + + + + ${exchangeProperty[microServicePolicy].getName()} removal + status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[guardPolicy].getValue()} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - - - - ${exchangeProperty[guardPolicy].getKey()} creation status - - - - POLICY - - - - - + + + + + + + ${exchangeProperty[operationalPolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} creation + status + + + + POLICY + + + + + - - - - - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} removal + status + + + + POLICY + + + + + - - - - - ${exchangeProperty[guardPolicy].getKey()} removal status - - - - POLICY - - - - - + + + + + + + ${exchangeProperty[guardPolicy].getValue()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[guardPolicy].getKey()} creation status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])} - - - - POST - - - application/json - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + - - - - - PDP Group push ALL status - - - POLICY - - - - - + + + + + ${exchangeProperty[guardPolicy].getKey()} removal status + + + + POLICY + + + + + - - - - - - - ${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])} - - - ${body} - - - null - - - DELETE - - - ${exchangeProperty[X-ONAP-RequestID]} - - - - ${exchangeProperty[X-ONAP-InvocationID]} - - - - ${exchangeProperty[X-ONAP-PartnerName]} - - - - - - ${exchangeProperty[policyName]} PDP Group removal status - - - - POLICY - - - - - java.lang.Exception - - false - - - PDP Group removal, Error reported: ${exception} - - - POLICY - - - - - - - - - + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + PDP Group push ALL status + + + POLICY + + + + + + + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])} + + + ${body} + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + ${exchangeProperty[policyName]} PDP Group removal status + + + + POLICY + + + + + java.lang.Exception + + false + + + PDP Group removal, Error reported: ${exception} + + + POLICY + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/clds/holmes-old-style-ms.yaml b/src/test/resources/clds/holmes-old-style-ms.yaml deleted file mode 100644 index 3f0c9a604..000000000 --- a/src/test/resources/clds/holmes-old-style-ms.yaml +++ /dev/null @@ -1,117 +0,0 @@ -tosca_definitions_version: cloudify_dsl_1_3 -imports: - - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml - - https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/docker/2.3.0+t.0.4/node-type.yaml - - https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml - - http://nexus01.research.att.com:8081/repository/solutioning01-mte2-raw/type_files/dmaap/1.2.0/dmaap.yaml -inputs: - dcae_service_location: - type: string - docker_host_override: - type: string - topic0_aaf_password: - type: string - topic0_aaf_username: - type: string - topic0_client_role: - type: string - topic1_aaf_password: - type: string - topic1_aaf_username: - type: string - topic1_client_role: - type: string - location_id: - type: string - service_id: - type: string - policy_id: - type: string - default: "CLAMPPolicyTriggerNoaapp_v1_0_29b0578b_dcee_472c_8cdd0.ClosedLoop_860ee9f2_ba64_11e8_a16b_02bd571477fe_TCA_1d13unw" -node_templates: - policy_0: - type: dcae.nodes.policy - properties: - policy_model: policy.nodes.holmes - policy_filter: "DCAE.Config_Holmes.*" - policy_id: - get_input: policy_id - docker_host_host: - type: dcae.nodes.SelectedDockerHost - properties: - docker_host_override: - get_input: docker_host_override - location_id: - get_input: dcae_service_location - holmes_rule_homes-rule: - type: dcae.nodes.DockerContainerForComponentsUsingDmaap - properties: - application_config: - services_calls: - - msb_config: - concat: - - '{{' - - get_property: - - SELF - - msb_config - - node_name - - '}}' - streams_publishes: [] - streams_subscribes: - - sec_measurement_unsecure: - aaf_password: - get_input: topic0_aaf_password - aaf_username: - get_input: topic0_aaf_username - dmaap_info: <> - type: message_router - - sec_measurement: - aaf_password: - get_input: topic1_aaf_password - aaf_username: - get_input: topic1_aaf_username - dmaap_info: <> - type: message_router - docker_config: - healthcheck: - endpoint: api/holmes-rule-mgmt/v1/healthcheck - interval: 15s - timeout: 1s - type: http - ports: - - 9101:9101 - image: nexus3.onap.org:10001/onap/holmes/rule-manamgement:latest - location_id: - get_input: dcae_service_location - service_component_type: dcae-analytics-holmes-rule-manamgement - streams_publishes: [] - streams_subscribes: - - client_role: - get_input: topic0_client_role - location: - get_input: dcae_service_location - name: topic0 - type: message_router - - client_role: - get_input: topic1_client_role - location: - get_input: dcae_service_location - name: topic1 - type: message_router - relationships: - - target: docker_host_host - type: dcae.relationships.component_contained_in - - target: topic0 - type: dcae.relationships.subscribe_to_events - - target: topic1 - type: dcae.relationships.subscribe_to_events - - target: policy_0 - type: dcae.relationships.depends_on - topic0: - type: dcae.nodes.Topic - properties: - topic_name: '' - topic1: - type: dcae.nodes.Topic - properties: - topic_name: '' diff --git a/src/test/resources/clds/single-microservice-fragment-invalid.yaml b/src/test/resources/clds/single-microservice-fragment-invalid.yaml new file mode 100644 index 000000000..2c1680717 --- /dev/null +++ b/src/test/resources/clds/single-microservice-fragment-invalid.yaml @@ -0,0 +1,25 @@ +second_app: + type: dcae.nodes.ContainerizedServiceComponentUsingDmaap + properties: + service_component_type: dcaegen2-analytics-tca + service_component_name_override: second_app + image: { get_input: second_app_docker_image } + name: second_app + policy_id: + policy_model_id: "type1" + interfaces: + cloudify.interfaces.lifecycle: + start: + inputs: + envs: + grpc_server.host: "first_app.onap" + dmaap_ip: {get_input: dmaap_ip} + dmapp_topic: {get_input: dmaap_topic} + policy_id: {get_input: policy_id} + ports: + - 8080:8080 + relationships: + - type: cloudify.relationships.connected_to + target: first_app + - type: clamp_node.relationships.gets_input_from + target: first_app \ No newline at end of file diff --git a/src/test/resources/clds/single-microservice-fragment-valid-with-version.yaml b/src/test/resources/clds/single-microservice-fragment-valid-with-version.yaml new file mode 100644 index 000000000..ae31fb16a --- /dev/null +++ b/src/test/resources/clds/single-microservice-fragment-valid-with-version.yaml @@ -0,0 +1,21 @@ +second_app: + type: dcae.nodes.ContainerizedServiceComponentUsingDmaap + properties: + service_component_type: dcaegen2-analytics-tca + service_component_name_override: second_app + image: { get_input: second_app_docker_image } + name: second_app + policy_id: + policy_model_id: "type1" + policy_model_version: "10.0.0" + interfaces: + cloudify.interfaces.lifecycle: + start: + inputs: + envs: + grpc_server.host: "first_app.onap" + dmaap_ip: {get_input: dmaap_ip} + dmapp_topic: {get_input: dmaap_topic} + policy_id: {get_input: policy_id} + ports: + - 8080:8080 diff --git a/src/test/resources/clds/single-microservice-fragment-valid.yaml b/src/test/resources/clds/single-microservice-fragment-valid.yaml deleted file mode 100644 index 2c1680717..000000000 --- a/src/test/resources/clds/single-microservice-fragment-valid.yaml +++ /dev/null @@ -1,25 +0,0 @@ -second_app: - type: dcae.nodes.ContainerizedServiceComponentUsingDmaap - properties: - service_component_type: dcaegen2-analytics-tca - service_component_name_override: second_app - image: { get_input: second_app_docker_image } - name: second_app - policy_id: - policy_model_id: "type1" - interfaces: - cloudify.interfaces.lifecycle: - start: - inputs: - envs: - grpc_server.host: "first_app.onap" - dmaap_ip: {get_input: dmaap_ip} - dmapp_topic: {get_input: dmaap_topic} - policy_id: {get_input: policy_id} - ports: - - 8080:8080 - relationships: - - type: cloudify.relationships.connected_to - target: first_app - - type: clamp_node.relationships.gets_input_from - target: first_app \ No newline at end of file diff --git a/src/test/resources/clds/tca-old-style-ms.yaml b/src/test/resources/clds/tca-old-style-ms.yaml deleted file mode 100644 index b976190a1..000000000 --- a/src/test/resources/clds/tca-old-style-ms.yaml +++ /dev/null @@ -1,169 +0,0 @@ -tosca_definitions_version: cloudify_dsl_1_3 -imports: - - "http://www.getcloudify.org/spec/cloudify/3.4/types.yaml" - - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dockerplugin/3.2.0/dockerplugin_types.yaml - - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/relationshipplugin/1.0.0/relationshipplugin_types.yaml - - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml - -inputs: - dh_override: - type: string - default: "component_dockerhost" - dh_location_id: - type: string - default: "zone1" - aaiEnrichmentHost: - type: string - default: "none" - aaiEnrichmentPort: - type: string - default: 8443 - enableAAIEnrichment: - type: string - default: false - dmaap_host: - type: string - default: dmaap.onap-message-router - dmaap_port: - type: string - default: 3904 - enableRedisCaching: - type: string - default: false - redisHosts: - type: string - tag_version: - type: string - default: "nexus3.onap.org:10001/onap//onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.0.0" - consul_host: - type: string - default: consul-server.onap-consul - consul_port: - type: string - default: "8500" - cbs_host: - type: string - default: "config-binding-service.dcae" - cbs_port: - type: string - default: "10000" - policy_id: - type: string - default: "none" - external_port: - type: string - description: "Port for CDAPgui to be exposed" - default: "32010" - -node_templates: - docker_service_host: - properties: - docker_host_override: - get_input: dh_override - location_id: - get_input: dh_location_id - type: dcae.nodes.SelectedDockerHost - tca_docker: - relationships: - - type: dcae.relationships.component_contained_in - target: docker_service_host - - target: tca_policy - type: cloudify.relationships.depends_on - type: dcae.nodes.DockerContainerForComponentsUsingDmaap - properties: - application_config: - app_config: - appDescription: DCAE Analytics Threshold Crossing Alert Application - appName: dcae-tca - tcaAlertsAbatementTableName: TCAAlertsAbatementTable - tcaAlertsAbatementTableTTLSeconds: '1728000' - tcaSubscriberOutputStreamName: TCASubscriberOutputStream - tcaVESAlertsTableName: TCAVESAlertsTable - tcaVESAlertsTableTTLSeconds: '1728000' - tcaVESMessageStatusTableName: TCAVESMessageStatusTable - tcaVESMessageStatusTableTTLSeconds: '86400' - thresholdCalculatorFlowletInstances: '2' - app_preferences: - aaiEnrichmentHost: - get_input: aaiEnrichmentHost - aaiEnrichmentIgnoreSSLCertificateErrors: 'true' - aaiEnrichmentPortNumber: '8443' - aaiEnrichmentProtocol: https - aaiEnrichmentUserName: DCAE - aaiEnrichmentUserPassword: DCAE - aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query - aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf - enableAAIEnrichment: - get_input: enableAAIEnrichment - enableRedisCaching: - get_input: enableRedisCaching - redisHosts: - get_input: redisHosts - enableAlertCEFFormat: 'false' - publisherContentType: application/json - publisherHostName: - get_input: dmaap_host - publisherHostPort: - get_input: dmaap_port - publisherMaxBatchSize: '1' - publisherMaxRecoveryQueueSize: '100000' - publisherPollingInterval: '20000' - publisherProtocol: http - publisherTopicName: unauthenticated.DCAE_CL_OUTPUT - subscriberConsumerGroup: OpenDCAE-c12 - subscriberConsumerId: c12 - subscriberContentType: application/json - subscriberHostName: - get_input: dmaap_host - subscriberHostPort: - get_input: dmaap_port - subscriberMessageLimit: '-1' - subscriberPollingInterval: '30000' - subscriberProtocol: http - subscriberTimeoutMS: '-1' - subscriberTopicName: unauthenticated.SEC_MEASUREMENT_OUTPUT - tca_policy_default: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"LESS_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"},{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":700,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"vLoadBalancer","controlLoopSchemaType":"VM","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"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"}]}]}' - service_component_type: dcaegen2-analytics_tca - docker_config: - healthcheck: - endpoint: /healthcheck - interval: 15s - timeout: 1s - type: http - image: - get_input: tag_version - interfaces: - cloudify.interfaces.lifecycle: - start: - inputs: - envs: - DMAAPHOST: - { get_input: dmaap_host } - DMAAPPORT: - { get_input: dmaap_port } - DMAAPPUBTOPIC: "unauthenticated.DCAE_CL_OUTPUT" - DMAAPSUBTOPIC: "unauthenticated.SEC_MEASUREMENT_OUTPUT" - AAIHOST: - { get_input: aaiEnrichmentHost } - AAIPORT: - { get_input: aaiEnrichmentPort } - CONSUL_HOST: - { get_input: consul_host } - CONSUL_PORT: - { get_input: consul_port } - CBS_HOST: - { get_input: cbs_host } - CBS_PORT: - { get_input: cbs_port } - CONFIG_BINDING_SERVICE: "config_binding_service" - ports: - - concat: ["11011:", { get_input: external_port }] - stop: - inputs: - cleanup_image: true - tca_policy: - type: dcae.nodes.policy - properties: - policy_id: - get_input: policy_id - diff --git a/src/test/resources/example/sdc/blueprint-dcae/holmes.yaml b/src/test/resources/example/sdc/blueprint-dcae/holmes.yaml deleted file mode 100644 index f180a7df6..000000000 --- a/src/test/resources/example/sdc/blueprint-dcae/holmes.yaml +++ /dev/null @@ -1,174 +0,0 @@ -tosca_definitions_version: cloudify_dsl_1_3 -imports: -- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml -- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/docker/2.3.0+t.0.4/node-type.yaml -- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml -- http://nexus01.research.att.com:8081/repository/solutioning01-mte2-raw/type_files/dmaap/1.2.0/dmaap.yaml -inputs: - dcae_service_location: - type: string - docker_host_override: - type: string - topic0_aaf_password: - type: string - topic0_aaf_username: - type: string - topic0_client_role: - type: string - topic1_aaf_password: - type: string - topic1_aaf_username: - type: string - topic1_client_role: - type: string -node_templates: - policy_0: - type: dcae.nodes.policy - properties: - policy_model: policy.nodes.holmes - policy_filter: "DCAE.Config_Holmes.*" - docker_host_host: - type: dcae.nodes.SelectedDockerHost - properties: - docker_host_override: - get_input: docker_host_override - location_id: - get_input: dcae_service_location - holmes-rule_homes-rule: - type: dcae.nodes.DockerContainerForComponentsUsingDmaap - properties: - application_config: - holmes.default.rule.volte.scenario1: 'package dcae.ves.test - - import org.onap.some.related.packages; - - rule"SameVNF_Relation_Rule" - - salience 120 - - no-loop true - - when - - $root : VesAlarm( - - $sourceId: sourceId, sourceId != null && !sourceId.equals(""), - - specificProblem in ( "LSS_cpiPCSCFFailReg(121297)", "LSS_cpiSIPRetransmitInvite(120267)" ), - - $eventId: eventId) - - $child : VesAlarm( eventId != $eventId, - - CorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId), - - specificProblem in ("LSS_externalLinkDown(4271)","LSS_failedAttachReqsRateExceeded(4272)"), - - this after [-60s, 60s] $root) - - then - - DmaapService.publishResult(...); - - end' - holmes.default.rule.volte.scenario2: 'package dcae.ves.test - - import org.onap.some.related.packages; - - rule"SameVNF_Relation_Rule_1" - - salience 120 - - no-loop true - - when - - $root : VesAlarm( - - $sourceId: sourceId, sourceId != null && !sourceId.equals(""), - - specificProblem in ( "LSS_cpiPCSCFFailReg(121297)", "LSS_cpiSIPRetransmitInvite(120267)" ), - - $eventId: eventId) - - $child : VesAlarm( eventId != $eventId, - - CorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId), - - specificProblem in ("LSS_externalLinkDown(4271)","LSS_failedAttachReqsRateExceeded(4272)"), - - this after [-60s, 60s] $root) - - then - - DmaapService.publishResult(...); - - end' - services_calls: - - msb_config: - concat: - - '{{' - - get_property: - - SELF - - msb_config - - node_name - - '}}' - streams_publishes: [] - streams_subscribes: - - sec_measurement_unsecure: - aaf_password: - get_input: topic0_aaf_password - aaf_username: - get_input: topic0_aaf_username - dmaap_info: <> - type: message_router - - sec_measurement: - aaf_password: - get_input: topic1_aaf_password - aaf_username: - get_input: topic1_aaf_username - dmaap_info: <> - type: message_router - docker_config: - healthcheck: - endpoint: api/holmes-rule-mgmt/v1/healthcheck - interval: 15s - timeout: 1s - type: http - ports: - - 9101:9101 - image: nexus3.onap.org:10001/onap/holmes/rule-manamgement:latest - location_id: - get_input: dcae_service_location - service_component_type: dcae-analytics-holmes-rule-manamgement - streams_publishes: [] - streams_subscribes: - - client_role: - get_input: topic0_client_role - location: - get_input: dcae_service_location - name: topic0 - type: message_router - - client_role: - get_input: topic1_client_role - location: - get_input: dcae_service_location - name: topic1 - type: message_router - relationships: - - target: docker_host_host - type: dcae.relationships.component_contained_in - - target: topic0 - type: dcae.relationships.subscribe_to_events - - target: topic1 - type: dcae.relationships.subscribe_to_events - - target: policy_0 - type: dcae.relationships.depends_on - topic0: - type: dcae.nodes.Topic - properties: - topic_name: '' - topic1: - type: dcae.nodes.Topic - properties: - topic_name: '' diff --git a/src/test/resources/example/sdc/blueprint-dcae/not-recognized.yaml b/src/test/resources/example/sdc/blueprint-dcae/not-recognized.yaml deleted file mode 100644 index 6522885ff..000000000 --- a/src/test/resources/example/sdc/blueprint-dcae/not-recognized.yaml +++ /dev/null @@ -1,130 +0,0 @@ -tosca_definitions_version: cloudify_dsl_1_3 -imports: -- http://dockercentral.it.att.com:8093/nexus/repository/rawcentral/com.att.dcae.controller/type_files/dockerplugin/2.4.0+t.0.8/node-type.yaml -- http://dockercentral.it.att.com:8093/nexus/repository/rawcentral/com.att.dcae.controller/type_files/dmaap/1.2.0+t.0.9/dmaap.yaml -- http://dockercentral.it.att.com:8093/nexus/repository/rawcentral/com.att.dcae.controller/type_files/relationship/1.0.0+t.0.1/relationship-types.yaml -inputs: - commonEventHeader.domain: - type: string - commonEventHeader.version: - type: string - dcae_service_location: - type: string - docker_host_override: - type: string - default: '' - elementType: - type: string - feed_id: - type: string - mappingType: - type: string - measurementsForVfScalingFields.measurementsForVfScalingVersion: - type: string - phases.docker_map.phaseName: - type: string - topic1_aaf_password: - type: string - topic1_aaf_username: - type: string - topic1_client_role: - type: string -node_templates: - DockerMap_n.1519416493392.3_DockerMap: - type: dcae.nodes.DockerContainerForComponentsUsingDmaap - properties: - application_config: - commonEventHeader.domain: - get_input: commonEventHeader.domain - commonEventHeader.version: - get_input: commonEventHeader.version - csvToVesJson: '{"processing":[{"phase":"pmossFoiPhase","filter":{"class":"Contains","string":"${file}","value":"NOKvMRF"},"processors":[{"class":"LogEvent","title":"PM-FOIEvent-Received","logName":"com.att.gfp.dcae.eventProcessor.input","logLevel":"DEBUG"},{"class":"RunPhase","phase":"vFoiNokRunPhase"}]},{"phase":"vFoiNokRunPhase","comments":"generic parsing","processors":[{"replace":",","field":"data","class":"ReplaceText","find":";"},{"replace":",","field":"file","class":"ReplaceText","find":"_"}]},{"phase":"vFoiNokRunPhase","filter":{"class":"Contains","string":"${data[1]}","value":"Begin date"},"processors":[{"class":"ExtractText","field":"event.commonEventHeader.startEpochMicrosec","value":"${data[1]}","regex":".*Begin date,([^,]*),.*"},{"class":"DateFormatter","value":"${event.commonEventHeader.startEpochMicrosec}","fromFormat":"MM/dd/yy HH:mm:ss a","fromTz":"GMT","toField":"event.commonEventHeader.startEpochMicrosec","toFormat":"#ms","toTz":"#ms"}]},{"phase":"vFoiNokRunPhase","filter":{"class":"Contains","string":"${data[2]}","value":"End date"},"processors":[{"class":"ExtractText","field":"event.commonEventHeader.lastEpochMicrosec","value":"${data[2]}","regex":".*End date,([^,]*),.*"},{"class":"DateFormatter","value":"${event.commonEventHeader.lastEpochMicrosec}","fromFormat":"MM/dd/yy HH:mm:ss a","fromTz":"GMT","toField":"event.commonEventHeader.lastEpochMicrosec","toFormat":"#ms","toTz":"#ms"},{"class":"DateFormatter","value":"${event.commonEventHeader.lastEpochMicrosec}","fromFormat":"#ms","fromTz":"#ms","toField":"event.commonEventHeader.internalHeaderFields.DATETIMEUTC","toFormat":"yyyyMMddHHmmss","toTz":"GMT"}]},{"phase":"vFoiNokRunPhase","processors":[{"class":"ExtractText","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[0].value","value":"${data[7]}","regex":".*CpuSys,+(\\d+,){3}.*"},{"class":"ReplaceText","replace":"","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[0].value","find":","},{"class":"ExtractText","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[1].value","value":"${data[5]}","regex":".*CpuUsage,+(\\d+,){3}.*"},{"class":"ReplaceText","replace":"","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[1].value","find":","},{"class":"ExtractText","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[2].value","value":"${data[7]}","regex":".*CpuSys,+(\\d+,){2}.*"},{"class":"ReplaceText","replace":"","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[2].value","find":","},{"class":"ExtractText","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[3].value","value":"${data[5]}","regex":".*CpuUsage,+(\\d+,){2}.*"},{"class":"ReplaceText","replace":"","field":"event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[3].value","find":","}]},{"phase":"vFoiNokRunPhase","processors":[{"class":"ExtractText","field":"event.commonEventHeader.eventName","value":"${file}","regex":"([^,]*),.*"},{"class":"ExtractText","field":"event.commonEventHeader.reportingEntityName","value":"${file}","regex":".*,([^,]*)\\..*"}]},{"phase":"vFoiNokRunPhase","comments":"generic parsing","processors":[{"class":"Set","updates":{"event.commonEventHeader.lastEpochMicrosec":"${event.commonEventHeader.lastEpochMicrosec}000","event.commonEventHeader.startEpochMicrosec":"${event.commonEventHeader.startEpochMicrosec}000","event.commonEventHeader.domain":"measurementsForVfScaling","event.commonEventHeader.eventName":"Mfvs_${event.commonEventHeader.eventName}","event.commonEventHeader.eventType":"csv2ves","event.commonEventHeader.priority":"Normal","event.commonEventHeader.sequence":0,"event.commonEventHeader.sourceName":"${event.commonEventHeader.reportingEntityName}","event.commonEventHeader.version":3.0,"event.commonEventHeader.eventId":"%{now.ms}","event.commonEventHeader.internalHeaderFields.dbTableSuffix":"","event.measurementsForVfScalingFields.measurementInterval":900,"event.measurementsForVfScalingFields.measurementsForVfScalingVersion":2.0,"event.measurementsForVfScalingFields.additionalMeasurements.name":"csv2ves","event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[0].name":"CpuSysMax","event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[1].name":"CpuUsageMax","event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[2].name":"CpuSysAverage","event.measurementsForVfScalingFields.additionalMeasurements.arrayOfFields[3].name":"CpuUsageAverage"}},{"class":"DateFormatter","value":"${event.commonEventHeader.eventId}","fromFormat":"#ms","fromTz":"#ms","toField":"event.commonEventHeader.eventId","toFormat":"yyyyMMddHHmmssSSS","toTz":"GMT"}]},{"phase":"vFoiNokRunPhase","processors":[{"class":"Clear","fields":["data","file"]},{"class":"LogText","logLevel":"INFO","logText":"Finished-PM-FOIEvent-parsing"},{"class":"LogEvent","title":"PM-FOIEvent-Received-Output"},{"class":"RunPhase","phase":"foiEventToDmaapPhase"}]}]}' - elementType: - get_input: elementType - isSelfServeComponent: 'True' - mappingType: - get_input: mappingType - measurementsForVfScalingFields.measurementsForVfScalingVersion: - get_input: measurementsForVfScalingFields.measurementsForVfScalingVersion - phases.docker_map.phaseName: - get_input: phases.docker_map.phaseName - services_calls: {} - streams_publishes: - DCAE-VES-PM-EVENT: - aaf_password: - get_input: topic1_aaf_password - aaf_username: - get_input: topic1_aaf_username - dmaap_info: <> - type: message_router - streams_subscribes: - DCAE_PM_DATA_C_M: - dmaap_info: <> - type: data_router - useDtiConfig: 'False' - docker_config: - healthcheck: - interval: 300s - script: /opt/app/vec/bin/common/HealthCheck_DockerMap.sh - timeout: 15s - type: docker - volumes: - - container: - bind: /opt/app/dcae-certificate - host: - path: /opt/app/dcae-certificate - - container: - bind: /opt/app/dmd/log/AGENT - host: - path: /opt/logs/DCAE/dockermap/dmd/AGENT - - container: - bind: /opt/app/dmd/log/WATCHER - host: - path: /opt/logs/DCAE/dockermap/dmd/WATCHER - - container: - bind: /opt/app/vec/logs/DCAE - host: - path: /opt/logs/DCAE/dockermap/dockermap-logs - - container: - bind: /opt/app/vec/archive/data - host: - path: /opt/data/DCAE/dockermap/dockermap-archive - image: dockercentral.it.att.com:5100/com.att.dcae.controller/dcae-controller-dockermap:18.02-004 - location_id: - get_input: dcae_service_location - service_component_type: dcae.collectors.docker.map.pm - streams_publishes: - - client_role: - get_input: topic1_client_role - location: - get_input: dcae_service_location - name: topic1_n.1519416493404.5 - type: message_router - streams_subscribes: - - location: - get_input: dcae_service_location - name: feed_n.1519416394214.2 - type: data_router - relationships: - - target: docker_host_host - type: dcae.relationships.component_contained_in - - target: feed_n.1519416394214.2 - type: dcae.relationships.subscribe_to_files - - target: topic1_n.1519416493404.5 - type: dcae.relationships.publish_events - docker_host_host: - type: dcae.nodes.SelectedDockerHost - properties: - docker_host_override: - get_input: docker_host_override - location_id: - get_input: dcae_service_location - feed_n.1519416394214.2: - type: dcae.nodes.ExistingFeed - properties: - feed_id: - get_input: feed_id - topic1_n.1519416493404.5: - type: dcae.nodes.Topic - properties: - topic_name: DCAE-VES-PM-EVENT-v1 diff --git a/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-2.json b/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-2.json deleted file mode 100644 index d7a54162f..000000000 --- a/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-2.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "global": [ - { - "name": "service", - "value": [ - "4cc5b45a-1f63-4194-8100-cd8e14248c92" - ] - }, - { - "name": "vf", - "value": [ - "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad" - ] - }, - { - "name": "actionSet", - "value": [ - "vnfRecipe" - ] - }, - { - "name": "location", - "value": [ - "DC1" - ] - }, - { - "name": "deployParameters", - "value": { - "aaiEnrichmentHost": "aai.onap.svc.cluster.local", - "aaiEnrichmentPort": "8443", - "enableAAIEnrichment": true, - "dmaap_host": "message-router.onap", - "dmaap_port": "3904", - "enableRedisCaching": false, - "redisHosts": "dcae-redis.onap.svc.cluster.local:6379", - "tag_version": "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1", - "consul_host": "consul-server.onap", - "consul_port": "8500", - "cbs_host": "config-binding-servicel", - "cbs_port": "10000", - "external_port": "32012", - "policy_model_id": "onap.policies.monitoring.cdap.tca.hi.lo.app", - "policy_id": "AUTO_GENERATED_POLICY_ID_AT_SUBMIT" - } - } - ] -} \ No newline at end of file diff --git a/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-3.json b/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-3.json deleted file mode 100644 index 012c46e9c..000000000 --- a/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca-3.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "global": [ - { - "name": "service", - "value": [ - "4cc5b45a-1f63-4194-8100-cd8e14248c92" - ] - }, - { - "name": "vf", - "value": [ - "07e266fc-49ab-4cd7-8378-ca4676f1b9ec" - ] - }, - { - "name": "actionSet", - "value": [ - "vnfRecipe" - ] - }, - { - "name": "location", - "value": [ - "DC1" - ] - }, - { - "name": "deployParameters", - "value": { - "aaiEnrichmentHost": "aai.onap.svc.cluster.local", - "aaiEnrichmentPort": "8443", - "enableAAIEnrichment": true, - "dmaap_host": "message-router.onap.svc.cluster.local", - "dmaap_port": "3904", - "enableRedisCaching": false, - "redisHosts": "dcae-redis.onap.svc.cluster.local:6379", - "tag_version": "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest", - "consul_host": "consul-server.onap.svc.cluster.local", - "consul_port": "8500", - "cbs_host": "config-binding-service.dcae.svc.cluster.local", - "cbs_port": "10000", - "external_port": "32012", - "policy_id": "AUTO_GENERATED_POLICY_ID_AT_SUBMIT", - "policy_model_id": "onap.policies.monitoring.cdap.tca.hi.lo.app" - } - } - ] -} \ No newline at end of file diff --git a/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca.json b/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca.json deleted file mode 100644 index ce3158d93..000000000 --- a/src/test/resources/example/sdc/blueprint-dcae/prop-text-for-tca.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "global": [ - { - "name": "service", - "value": [ - "4cc5b45a-1f63-4194-8100-cd8e14248c92" - ] - }, - { - "name": "vf", - "value": [ - "07e266fc-49ab-4cd7-8378-ca4676f1b9ec" - ] - }, - { - "name": "actionSet", - "value": [ - "vnfRecipe" - ] - }, - { - "name": "location", - "value": [ - "DC1" - ] - }, - { - "name": "deployParameters", - "value": { - "location_id": "", - "service_id": "", - "policy_id": "AUTO_GENERATED_POLICY_ID_AT_SUBMIT" - } - } - ] -} diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml index 07e587855..c71bcba8f 100644 --- a/src/test/resources/logback.xml +++ b/src/test/resources/logback.xml @@ -1,2 +1,91 @@ - + + + + + + + + + + + + + + + + + + INFO + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/tosca/dcea_blueprint.yml b/src/test/resources/tosca/dcea_blueprint.yml deleted file mode 100644 index 0d3ea0462..000000000 --- a/src/test/resources/tosca/dcea_blueprint.yml +++ /dev/null @@ -1,170 +0,0 @@ -# -# ============LICENSE_START==================================================== -# ============================================================================= -# Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. -# ============================================================================= -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END====================================================== - -tosca_definitions_version: cloudify_dsl_1_3 - -description: > - This blueprint deploys/manages the TCA module as a Docker container - -imports: - - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml - - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.4/k8splugin_types.yaml - - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml -inputs: - aaiEnrichmentHost: - type: string - default: "aai.onap.svc.cluster.local" - aaiEnrichmentPort: - type: string - default: "8443" - enableAAIEnrichment: - type: string - default: true - dmaap_host: - type: string - default: message-router - dmaap_port: - type: string - default: "3904" - enableRedisCaching: - type: string - default: false - redisHosts: - type: string - default: dcae-redis:6379 - tag_version: - type: string - default: "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0" - consul_host: - type: string - default: consul-server - consul_port: - type: string - default: "8500" - cbs_host: - type: string - default: - test: - test: test - cbs_port: - type: string - default: "10000" - policy_id: - type: string - default: "none" - external_port: - type: string - description: Kubernetes node port on which CDAPgui is exposed - default: "32010" - -node_templates: - tca_k8s: - type: dcae.nodes.ContainerizedServiceComponent - relationships: - - target: tca_policy - type: cloudify.relationships.depends_on - properties: - service_component_type: 'dcaegen2-analytics-tca' - docker_config: {} - image: - get_input: tag_version - log_info: - log_directory: "/opt/app/TCAnalytics/logs" - application_config: - app_config: - appDescription: DCAE Analytics Threshold Crossing Alert Application - appName: dcae-tca-ak-serv - tcaAlertsAbatementTableName: TCAAlertsAbatementTable - tcaAlertsAbatementTableTTLSeconds: '1728000' - tcaSubscriberOutputStreamName: TCASubscriberOutputStream - tcaVESAlertsTableName: TCAVESAlertsTable - tcaVESAlertsTableTTLSeconds: '1728000' - tcaVESMessageStatusTableName: TCAVESMessageStatusTable - tcaVESMessageStatusTableTTLSeconds: '86400' - thresholdCalculatorFlowletInstances: '2' - app_preferences: - aaiEnrichmentHost: - get_input: aaiEnrichmentHost - aaiEnrichmentIgnoreSSLCertificateErrors: 'true' - aaiEnrichmentPortNumber: '8443' - aaiEnrichmentProtocol: https - aaiEnrichmentUserName: DCAE - aaiEnrichmentUserPassword: DCAE - aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query - aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf - enableAAIEnrichment: - get_input: enableAAIEnrichment - enableRedisCaching: - get_input: enableRedisCaching - redisHosts: - get_input: redisHosts - enableAlertCEFFormat: 'false' - publisherContentType: application/json - publisherHostName: - get_input: dmaap_host - publisherHostPort: - get_input: dmaap_port - publisherMaxBatchSize: '1' - publisherMaxRecoveryQueueSize: '100000' - publisherPollingInterval: '20000' - publisherProtocol: http - publisherTopicName: unauthenticated.DCAE_CL_OUTPUT - subscriberConsumerGroup: OpenDCAE-c12 - subscriberConsumerId: c12 - subscriberContentType: application/json - subscriberHostName: - get_input: dmaap_host - subscriberHostPort: - get_input: dmaap_port - subscriberMessageLimit: '-1' - subscriberPollingInterval: '30000' - subscriberProtocol: http - subscriberTimeoutMS: '-1' - subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT - tca_policy: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"LESS_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"},{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta","thresholdValue":700,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"vLoadBalancer","controlLoopSchemaType":"VM","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"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"}]}]}' - interfaces: - cloudify.interfaces.lifecycle: - start: - inputs: - envs: - DMAAPHOST: - { get_input: dmaap_host } - DMAAPPORT: - { get_input: dmaap_port } - DMAAPPUBTOPIC: "unauthenticated.DCAE_CL_OUTPUT" - DMAAPSUBTOPIC: "unauthenticated.VES_MEASUREMENT_OUTPUT" - AAIHOST: - { get_input: aaiEnrichmentHost } - AAIPORT: - { get_input: aaiEnrichmentPort } - CONSUL_HOST: - { get_input: consul_host } - CONSUL_PORT: - { get_input: consul_port } - CBS_HOST: - { get_input: cbs_host } - CBS_PORT: - { get_input: cbs_port } - CONFIG_BINDING_SERVICE: "config_binding_service" - ports: - - concat: ["11011:", { get_input: external_port }] - tca_policy: - type: dcae.nodes.policy - properties: - policy_id: - get_input: policy_id -- cgit 1.2.3-korg From 3a83e2a2ff88ef49535973df8dc77dc8015170da Mon Sep 17 00:00:00 2001 From: ash74268 Date: Fri, 31 Jan 2020 15:40:15 +0000 Subject: Changes include Metadata support, Upload tosca policy model and Loop Template CLAMP Metadata support to parse policy_model_type, acronym and clamp_possible_values from the Tosca Policy Model UI and Backend changes to support Loop Template Backend APIs for Dictionary referenced in the Tosca Policy Model. Upload Tosca Model UI changes to allow user to upload policy models. DB Schema changes for the Loop Element Model and updated schema for the Dictionary Added Jest test cases and snapshots checkstyle issues fix and Junits Issue-ID: CLAMP-580 Signed-off-by: ash74268 Change-Id: I57521bc1c3afaf4ca5a2acf4c59823df05fd4cd6 Signed-off-by: ash74268 --- extra/sql/bulkload/create-tables.sql | 31 +- .../clamp/clds/tosca/ToscaSchemaConstants.java | 5 + .../clamp/clds/tosca/ToscaYamlToJsonConvertor.java | 565 ++++++++---- .../onap/clamp/loop/template/LoopElementModel.java | 72 +- .../org/onap/clamp/loop/template/LoopTemplate.java | 116 ++- .../template/LoopTemplateLoopElementModelId.java | 14 +- .../clamp/loop/template/LoopTemplatesService.java | 111 +++ .../org/onap/clamp/loop/template/LoopType.java | 42 + .../clamp/loop/template/LoopTypeConvertor.java | 52 ++ .../org/onap/clamp/loop/template/PolicyModel.java | 32 +- .../clamp/loop/template/PolicyModelsService.java | 60 +- src/main/java/org/onap/clamp/tosca/Dictionary.java | 86 +- .../org/onap/clamp/tosca/DictionaryElement.java | 121 +-- .../clamp/tosca/DictionaryElementsRepository.java | 2 +- .../org/onap/clamp/tosca/DictionaryRepository.java | 4 +- .../org/onap/clamp/tosca/DictionaryService.java | 142 +++ .../org/onap/clamp/util/SemanticVersioning.java | 31 +- .../resources/clds/camel/rest/clamp-api-v2.xml | 634 +++++++++---- .../tosca/DictionaryRepositoriesTestItCase.java | 15 +- .../clds/tosca/ToscaYamlToJsonConvertorTest.java | 91 -- .../tosca/ToscaYamlToJsonConvertorTestItCase.java | 188 ++++ .../clamp/loop/LoopTemplatesServiceItCase.java | 145 +++ .../onap/clamp/tosca/DictionaryServiceItCase.java | 247 ++++++ .../onap/clamp/util/SemanticVersioningTest.java | 28 +- .../resources/clds/camel/rest/clamp-api-v2.xml | 984 +++++++++++++++++++++ .../tosca_metadata_clamp_possible_values.yaml | 184 ++++ ...metadata_clamp_possible_values_json_schema.json | 235 +++++ ui-react/src/LoopUI.js | 2 + ui-react/src/__snapshots__/LoopUI.test.js.snap | 4 + ui-react/src/__snapshots__/OnapClamp.test.js.snap | 4 + ui-react/src/api/TemplateMenuService.js | 52 +- .../dialogs/Tosca/UploadToscaPolicyModal.js | 138 +++ .../dialogs/Tosca/UploadToscaPolicyModal.test.js | 87 ++ .../dialogs/Tosca/ViewToscaPolicyModal.js | 37 +- .../dialogs/Tosca/ViewToscaPolicyModal.test.js | 87 +- .../UploadToscaPolicyModal.test.js.snap | 111 +++ .../ViewToscaPolicyModal.test.js.snap | 26 +- ui-react/src/components/menu/MenuBar.js | 3 +- .../menu/__snapshots__/MenuBar.test.js.snap | 51 ++ 39 files changed, 4133 insertions(+), 706 deletions(-) create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopType.java create mode 100644 src/main/java/org/onap/clamp/loop/template/LoopTypeConvertor.java create mode 100644 src/main/java/org/onap/clamp/tosca/DictionaryService.java delete mode 100644 src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java create mode 100644 src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTestItCase.java create mode 100644 src/test/java/org/onap/clamp/loop/LoopTemplatesServiceItCase.java create mode 100644 src/test/java/org/onap/clamp/tosca/DictionaryServiceItCase.java create mode 100644 src/test/resources/clds/camel/rest/clamp-api-v2.xml create mode 100644 src/test/resources/tosca/tosca_metadata_clamp_possible_values.yaml create mode 100644 src/test/resources/tosca/tosca_metadata_clamp_possible_values_json_schema.json create mode 100644 ui-react/src/components/dialogs/Tosca/UploadToscaPolicyModal.js create mode 100644 ui-react/src/components/dialogs/Tosca/UploadToscaPolicyModal.test.js create mode 100644 ui-react/src/components/dialogs/Tosca/__snapshots__/UploadToscaPolicyModal.test.js.snap (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 4edb46916..50c8d42ca 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -11,17 +11,22 @@ ) engine=InnoDB; create table dictionary_elements ( - name varchar(255) not null, + short_name varchar(255) not null, created_by varchar(255), created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, - description varchar(255), - short_name varchar(255) not null, - subdictionary_id varchar(255) not null, + description varchar(255) not null, + name varchar(255) not null, + subdictionary_name varchar(255), type varchar(255) not null, - dictionary_id varchar(255), - primary key (name) + primary key (short_name) + ) engine=InnoDB; + + create table dictionary_to_dictionaryelements ( + dictionary_name varchar(255) not null, + dictionary_element_short_name varchar(255) not null, + primary key (dictionary_name, dictionary_element_short_name) ) engine=InnoDB; create table hibernate_sequence ( @@ -39,6 +44,7 @@ blueprint_yaml MEDIUMTEXT, dcae_blueprint_id varchar(255), loop_element_type varchar(255) not null, + short_name varchar(255), primary key (name) ) engine=InnoDB; @@ -58,6 +64,7 @@ created_timestamp datetime(6) not null, updated_by varchar(255), updated_timestamp datetime(6) not null, + allowed_loop_type varchar(255), blueprint_yaml MEDIUMTEXT, dcae_blueprint_id varchar(255), maximum_instances_allowed integer, @@ -161,12 +168,14 @@ primary key (service_uuid) ) engine=InnoDB; - alter table dictionary_elements - add constraint UK_qxkrvsrhp26m60apfvxphpl3d unique (short_name); + alter table dictionary_to_dictionaryelements + add constraint FK68hjjinnm8nte2owstd0xwp23 + foreign key (dictionary_element_short_name) + references dictionary_elements (short_name); - alter table dictionary_elements - add constraint FKn87bpgpm9i56w7uko585rbkgn - foreign key (dictionary_id) + alter table dictionary_to_dictionaryelements + add constraint FKtqfxg46gsxwlm2gkl6ne3cxfe + foreign key (dictionary_name) references dictionary (name); alter table loop_logs diff --git a/src/main/java/org/onap/clamp/clds/tosca/ToscaSchemaConstants.java b/src/main/java/org/onap/clamp/clds/tosca/ToscaSchemaConstants.java index 595b1805e..9601649c9 100644 --- a/src/main/java/org/onap/clamp/clds/tosca/ToscaSchemaConstants.java +++ b/src/main/java/org/onap/clamp/clds/tosca/ToscaSchemaConstants.java @@ -42,6 +42,11 @@ public class ToscaSchemaConstants { public static final String PROPERTIES = "properties"; public static final String REQUIRED = "required"; public static final String ENTRY_SCHEMA = "entry_schema"; + + public static final String METADATA = "metadata"; + public static final String METADATA_POLICY_MODEL_TYPE = "policy_model_type"; + public static final String METADATA_ACRONYM = "acronym"; + public static final String METADATA_CLAMP_POSSIBLE_VALUES = "clamp_possible_values"; // Constraints public static final String CONSTRAINTS = "constraints"; diff --git a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java index 232db48c4..666ca6702 100644 --- a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java +++ b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java @@ -23,15 +23,25 @@ package org.onap.clamp.clds.tosca; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; - +import java.util.Map.Entry; +import java.util.Optional; +import java.util.stream.Collectors; import org.json.JSONArray; import org.json.JSONObject; +import org.onap.clamp.clds.config.ClampProperties; +import org.onap.clamp.tosca.DictionaryElement; +import org.onap.clamp.tosca.DictionaryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; /** @@ -39,8 +49,15 @@ import org.yaml.snakeyaml.Yaml; * Editor. * */ +@Component public class ToscaYamlToJsonConvertor { + @Autowired + private DictionaryService dictionaryService; + + @Autowired + private ClampProperties refProp; + private int simpleTypeOrder = 1000; private int complexTypeOrder = 10000; private int complexSimpleTypeOrder = 1; @@ -58,12 +75,57 @@ public class ToscaYamlToJsonConvertor { return complexTypeOrder + complexSimpleTypeOrder; } + /** + * Parses Tosca YAML string and Converts to JsonObject. + * + * @param yamlString YAML string + * @return JsonObject + */ + public JsonObject validateAndConvertToJson(String yamlString) { + + Yaml yaml = new Yaml(); + LinkedHashMap loadedYaml = yaml.load(yamlString); + if (loadedYaml == null) { + return null; + } + + JSONObject jsonObject = new JSONObject(loadedYaml); + return new Gson().fromJson(jsonObject.toString(), JsonObject.class); + } + + /** + * return the values by looking up the key in the Toscsa JSON object. + * + * @param obj Tosca Json Object + * @param key the parameter key to look up + * @return the value for the provided key + */ + public String getValueFromMetadata(JsonObject obj, String key) { + JsonElement jsonElement = obj.get(ToscaSchemaConstants.NODE_TYPES); + if (jsonElement.isJsonObject()) { + Iterator> itr = + jsonElement.getAsJsonObject().entrySet().iterator(); + while (itr.hasNext()) { + Entry entry = itr.next(); + if (entry.getValue() != null && entry.getValue().isJsonObject() + && entry.getValue().getAsJsonObject().has(ToscaSchemaConstants.METADATA)) { + JsonObject metadatas = entry.getValue().getAsJsonObject() + .get(ToscaSchemaConstants.METADATA).getAsJsonObject(); + if (metadatas.has(key)) { + return metadatas.get(key).getAsString(); + } + } + } + } + return null; + } + /** * Parses Tosca YAML string. * - * @param yamlString YAML string + * @param yamlString YAML string * @param modelTypeToUse The model type that must be used to obtain the Json - * Schema + * Schema * @return JSON string */ public String parseToscaYaml(String yamlString, String modelTypeToUse) { @@ -78,7 +140,8 @@ public class ToscaYamlToJsonConvertor { JSONObject jsonParentObject = new JSONObject(); JSONObject jsonTempObject = new JSONObject(); parseNodeAndDataType(loadedYaml, nodeTypes, dataNodes); - populateJsonEditorObject(loadedYaml, nodeTypes, dataNodes, jsonParentObject, jsonTempObject, modelTypeToUse); + populateJsonEditorObject(loadedYaml, nodeTypes, dataNodes, jsonParentObject, jsonTempObject, + modelTypeToUse); if (jsonTempObject.length() > 0) { jsonParentObject = jsonTempObject; } @@ -89,13 +152,17 @@ public class ToscaYamlToJsonConvertor { // Parse node_type and data_type @SuppressWarnings("unchecked") - private void parseNodeAndDataType(LinkedHashMap map, LinkedHashMap nodeTypes, - LinkedHashMap dataNodes) { + private void parseNodeAndDataType(LinkedHashMap map, + LinkedHashMap nodeTypes, LinkedHashMap dataNodes) { map.entrySet().stream().forEach(n -> { - if (n.getKey().contains(ToscaSchemaConstants.NODE_TYPES) && n.getValue() instanceof Map) { - parseNodeAndDataType((LinkedHashMap) n.getValue(), nodeTypes, dataNodes); - } else if (n.getKey().contains(ToscaSchemaConstants.DATA_TYPES) && n.getValue() instanceof Map) { - parseNodeAndDataType((LinkedHashMap) n.getValue(), nodeTypes, dataNodes); + if (n.getKey().contains(ToscaSchemaConstants.NODE_TYPES) + && n.getValue() instanceof Map) { + parseNodeAndDataType((LinkedHashMap) n.getValue(), nodeTypes, + dataNodes); + } else if (n.getKey().contains(ToscaSchemaConstants.DATA_TYPES) + && n.getValue() instanceof Map) { + parseNodeAndDataType((LinkedHashMap) n.getValue(), nodeTypes, + dataNodes); } else if (n.getKey().contains(ToscaSchemaConstants.POLICY_NODE)) { nodeTypes.put(n.getKey(), n.getValue()); } else if (n.getKey().contains(ToscaSchemaConstants.POLICY_DATA)) { @@ -105,83 +172,97 @@ public class ToscaYamlToJsonConvertor { } @SuppressWarnings("unchecked") - private void populateJsonEditorObject(LinkedHashMap map, LinkedHashMap nodeTypes, - LinkedHashMap dataNodes, JSONObject jsonParentObject, JSONObject jsonTempObject, - String modelTypeToUse) { + private void populateJsonEditorObject(LinkedHashMap map, + LinkedHashMap nodeTypes, LinkedHashMap dataNodes, + JSONObject jsonParentObject, JSONObject jsonTempObject, String modelTypeToUse) { Map jsonEntrySchema = new HashMap<>(); jsonParentObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_OBJECT); if (nodeTypes.get(modelTypeToUse) instanceof Map) { - ((LinkedHashMap) nodeTypes.get(modelTypeToUse)).entrySet().forEach(ntElement -> { - if (ntElement.getKey().equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) { - JSONArray rootNodeArray = new JSONArray(); - if (ntElement.getValue() instanceof Map) { - ((LinkedHashMap) ntElement.getValue()).entrySet() + ((LinkedHashMap) nodeTypes.get(modelTypeToUse)).entrySet() + .forEach(ntElement -> { + if (ntElement.getKey().equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) { + JSONArray rootNodeArray = new JSONArray(); + if (ntElement.getValue() instanceof Map) { + ((LinkedHashMap) ntElement.getValue()).entrySet() .forEach((ntPropertiesElement) -> { boolean isListNode = false; - parseDescription((LinkedHashMap) ntPropertiesElement.getValue(), - jsonParentObject); - LinkedHashMap parentPropertiesMap = (LinkedHashMap) ntPropertiesElement + parseDescription( + (LinkedHashMap) ntPropertiesElement + .getValue(), + jsonParentObject); + LinkedHashMap parentPropertiesMap = + (LinkedHashMap) ntPropertiesElement .getValue(); if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE) - && ((String) parentPropertiesMap.get(ToscaSchemaConstants.TYPE)) - .contains(ToscaSchemaConstants.TYPE_MAP) - && parentPropertiesMap.containsKey(ToscaSchemaConstants.ENTRY_SCHEMA)) { - parentPropertiesMap = (LinkedHashMap) parentPropertiesMap + && ((String) parentPropertiesMap + .get(ToscaSchemaConstants.TYPE)) + .contains(ToscaSchemaConstants.TYPE_MAP) + && parentPropertiesMap + .containsKey(ToscaSchemaConstants.ENTRY_SCHEMA)) { + parentPropertiesMap = + (LinkedHashMap) parentPropertiesMap .get(ToscaSchemaConstants.ENTRY_SCHEMA); isListNode = true; } if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE) - && ((String) parentPropertiesMap.get(ToscaSchemaConstants.TYPE)) - .contains(ToscaSchemaConstants.POLICY_DATA)) { - ((LinkedHashMap) dataNodes - .get(parentPropertiesMap.get(ToscaSchemaConstants.TYPE))).entrySet() - .stream().forEach(pmap -> { - if (pmap.getKey().equalsIgnoreCase( - ToscaSchemaConstants.PROPERTIES)) { - parseToscaProperties(ToscaSchemaConstants.POLICY_NODE, - (LinkedHashMap) pmap.getValue(), - jsonParentObject, rootNodeArray, - jsonEntrySchema, dataNodes, - incrementSimpleTypeOrder()); - } - }); + && ((String) parentPropertiesMap + .get(ToscaSchemaConstants.TYPE)) + .contains(ToscaSchemaConstants.POLICY_DATA)) { + ((LinkedHashMap) dataNodes.get( + parentPropertiesMap.get(ToscaSchemaConstants.TYPE))) + .entrySet().stream().forEach(pmap -> { + if (pmap.getKey().equalsIgnoreCase( + ToscaSchemaConstants.PROPERTIES)) { + parseToscaProperties( + ToscaSchemaConstants.POLICY_NODE, + (LinkedHashMap) pmap + .getValue(), + jsonParentObject, rootNodeArray, + jsonEntrySchema, dataNodes, + incrementSimpleTypeOrder()); + } + }); } if (isListNode) { jsonTempObject.put(JsonEditorSchemaConstants.TYPE, - JsonEditorSchemaConstants.TYPE_ARRAY); - parseDescription((LinkedHashMap) ntPropertiesElement.getValue(), - jsonTempObject); - jsonTempObject.put(JsonEditorSchemaConstants.ITEMS, jsonParentObject); + JsonEditorSchemaConstants.TYPE_ARRAY); + parseDescription( + (LinkedHashMap) ntPropertiesElement + .getValue(), + jsonTempObject); + jsonTempObject.put(JsonEditorSchemaConstants.ITEMS, + jsonParentObject); jsonTempObject.put(JsonEditorSchemaConstants.FORMAT, - JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS_TOP); + JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS_TOP); jsonTempObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS, - JsonEditorSchemaConstants.TRUE); + JsonEditorSchemaConstants.TRUE); } }); + } } - } - }); + }); } } @SuppressWarnings("unchecked") private void parseToscaProperties(String parentKey, LinkedHashMap propertiesMap, - JSONObject jsonDataNode, JSONArray array, Map jsonEntrySchema, - LinkedHashMap dataNodes, final int order) { + JSONObject jsonDataNode, JSONArray array, Map jsonEntrySchema, + LinkedHashMap dataNodes, final int order) { JSONObject jsonPropertyNode = new JSONObject(); propertiesMap.entrySet().stream().forEach(p -> { // Populate JSON Array for "required" key if (p.getValue() instanceof Map) { - LinkedHashMap nodeMap = (LinkedHashMap) p.getValue(); + LinkedHashMap nodeMap = + (LinkedHashMap) p.getValue(); if (nodeMap.containsKey(ToscaSchemaConstants.REQUIRED) - && ((boolean) nodeMap.get(ToscaSchemaConstants.REQUIRED))) { + && ((boolean) nodeMap.get(ToscaSchemaConstants.REQUIRED))) { array.put(p.getKey()); } // if(nodeMap.containsKey(ToscaSchemaConstants.CONSTRAINTS)) - parseToscaChildNodeMap(p.getKey(), nodeMap, jsonPropertyNode, jsonEntrySchema, dataNodes, array, - incrementSimpleTypeOrder()); + parseToscaChildNodeMap(p.getKey(), nodeMap, jsonPropertyNode, jsonEntrySchema, + dataNodes, array, incrementSimpleTypeOrder()); } }); jsonDataNode.put(JsonEditorSchemaConstants.REQUIRED, array); @@ -189,42 +270,48 @@ public class ToscaYamlToJsonConvertor { } @SuppressWarnings("unchecked") - private void parseToscaPropertiesForType(String parentKey, LinkedHashMap propertiesMap, - JSONObject jsonDataNode, JSONArray array, Map jsonEntrySchema, - LinkedHashMap dataNodes, boolean isType, int order) { + private void parseToscaPropertiesForType(String parentKey, + LinkedHashMap propertiesMap, JSONObject jsonDataNode, JSONArray array, + Map jsonEntrySchema, LinkedHashMap dataNodes, + boolean isType, int order) { JSONObject jsonPropertyNode = new JSONObject(); propertiesMap.entrySet().stream().forEach(p -> { // array.put(p.getKey()); boolean overWriteArray = false; if (p.getValue() instanceof Map) { - LinkedHashMap nodeMap = (LinkedHashMap) p.getValue(); + LinkedHashMap nodeMap = + (LinkedHashMap) p.getValue(); if (!(parentKey.contains(ToscaSchemaConstants.ENTRY_SCHEMA) - || parentKey.contains(ToscaSchemaConstants.POLICY_NODE)) - && nodeMap.containsKey(ToscaSchemaConstants.TYPE) - && (((String) nodeMap.get(ToscaSchemaConstants.TYPE)) - .contains(ToscaSchemaConstants.POLICY_DATA))) { + || parentKey.contains(ToscaSchemaConstants.POLICY_NODE)) + && nodeMap.containsKey(ToscaSchemaConstants.TYPE) + && (((String) nodeMap.get(ToscaSchemaConstants.TYPE)) + .contains(ToscaSchemaConstants.POLICY_DATA))) { overWriteArray = true; } if (nodeMap.containsKey(ToscaSchemaConstants.REQUIRED) - && ((boolean) nodeMap.get(ToscaSchemaConstants.REQUIRED))) { + && ((boolean) nodeMap.get(ToscaSchemaConstants.REQUIRED))) { array.put(p.getKey()); } - parseToscaChildNodeMap(p.getKey(), nodeMap, jsonPropertyNode, jsonEntrySchema, dataNodes, array, order); + parseToscaChildNodeMap(p.getKey(), nodeMap, jsonPropertyNode, jsonEntrySchema, + dataNodes, array, order); } }); jsonDataNode.put(JsonEditorSchemaConstants.REQUIRED, array); jsonDataNode.put(JsonEditorSchemaConstants.PROPERTIES, jsonPropertyNode); } - private void parseToscaChildNodeMap(String childObjectKey, LinkedHashMap childNodeMap, - JSONObject jsonPropertyNode, Map jsonEntrySchema, - LinkedHashMap dataNodes, JSONArray array, int order) { + private void parseToscaChildNodeMap(String childObjectKey, + LinkedHashMap childNodeMap, JSONObject jsonPropertyNode, + Map jsonEntrySchema, LinkedHashMap dataNodes, + JSONArray array, int order) { JSONObject childObject = new JSONObject(); // JSONArray childArray = new JSONArray(); parseDescription(childNodeMap, childObject); - parseTypes(childObjectKey, childNodeMap, childObject, jsonEntrySchema, dataNodes, array, order); + parseTypes(childObjectKey, childNodeMap, childObject, jsonEntrySchema, dataNodes, array, + order); parseConstraints(childNodeMap, childObject); + parseMetadataPossibleValues(childNodeMap, childObject); parseEntrySchema(childNodeMap, childObject, jsonPropertyNode, jsonEntrySchema, dataNodes); jsonPropertyNode.put(childObjectKey, childObject); @@ -232,15 +319,17 @@ public class ToscaYamlToJsonConvertor { } - private void parseEntrySchema(LinkedHashMap childNodeMap, JSONObject childObject, - JSONObject jsonPropertyNode, Map jsonEntrySchema, - LinkedHashMap dataNodes) { + private void parseEntrySchema(LinkedHashMap childNodeMap, + JSONObject childObject, JSONObject jsonPropertyNode, + Map jsonEntrySchema, LinkedHashMap dataNodes) { if (childNodeMap.get(ToscaSchemaConstants.ENTRY_SCHEMA) != null) { if (childNodeMap.get(ToscaSchemaConstants.ENTRY_SCHEMA) instanceof Map) { - LinkedHashMap entrySchemaMap = (LinkedHashMap) childNodeMap + LinkedHashMap entrySchemaMap = + (LinkedHashMap) childNodeMap .get(ToscaSchemaConstants.ENTRY_SCHEMA); entrySchemaMap.entrySet().stream().forEach(entry -> { - if (entry.getKey().equalsIgnoreCase(ToscaSchemaConstants.TYPE) && entry.getValue() != null) { + if (entry.getKey().equalsIgnoreCase(ToscaSchemaConstants.TYPE) + && entry.getValue() != null) { String entrySchemaType = (String) entry.getValue(); if (entrySchemaType.contains(ToscaSchemaConstants.POLICY_DATA)) { JSONArray array = new JSONArray(); @@ -248,44 +337,51 @@ public class ToscaYamlToJsonConvertor { // Already traversed JSONObject entrySchemaObject = jsonEntrySchema.get(entrySchemaType); attachEntrySchemaJsonObject(childObject, entrySchemaObject, - JsonEditorSchemaConstants.TYPE_OBJECT); + JsonEditorSchemaConstants.TYPE_OBJECT); } else if (dataNodes.containsKey(entrySchemaType)) { JSONObject entrySchemaObject = new JSONObject(); // Need to traverse - ((LinkedHashMap) dataNodes.get(entrySchemaType)).entrySet().stream() - .forEach(pmap -> { - if (pmap.getKey().equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) { - parseToscaProperties(ToscaSchemaConstants.ENTRY_SCHEMA, - (LinkedHashMap) pmap.getValue(), - entrySchemaObject, array, jsonEntrySchema, dataNodes, - incrementComplexTypeOrder()); - jsonEntrySchema.put(entrySchemaType, entrySchemaObject); - dataNodes.remove(entrySchemaType); - attachEntrySchemaJsonObject(childObject, entrySchemaObject, - JsonEditorSchemaConstants.TYPE_OBJECT); - } + ((LinkedHashMap) dataNodes.get(entrySchemaType)) + .entrySet().stream().forEach(pmap -> { + if (pmap.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) { + parseToscaProperties(ToscaSchemaConstants.ENTRY_SCHEMA, + (LinkedHashMap) pmap.getValue(), + entrySchemaObject, array, jsonEntrySchema, + dataNodes, incrementComplexTypeOrder()); + jsonEntrySchema.put(entrySchemaType, entrySchemaObject); + dataNodes.remove(entrySchemaType); + attachEntrySchemaJsonObject(childObject, + entrySchemaObject, + JsonEditorSchemaConstants.TYPE_OBJECT); + } - }); + }); } - } else if (entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING) - || entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER) - || entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) { + } else if (entrySchemaType + .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING) + || entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER) + || entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) { JSONObject entrySchemaObject = new JSONObject(); parseConstraints(entrySchemaMap, entrySchemaObject); + parseMetadataPossibleValues(entrySchemaMap, entrySchemaObject); String jsontype = JsonEditorSchemaConstants.TYPE_STRING; if (entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER) - || entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) { + || entrySchemaType + .equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) { jsontype = JsonEditorSchemaConstants.TYPE_INTEGER; } if (childNodeMap.get(ToscaSchemaConstants.TYPE) != null) { // Only known value of type is String for now if (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) { - String typeValue = (String) childNodeMap.get(ToscaSchemaConstants.TYPE); - if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_LIST)) { + String typeValue = + (String) childNodeMap.get(ToscaSchemaConstants.TYPE); + if (typeValue + .equalsIgnoreCase(ToscaSchemaConstants.TYPE_LIST)) { // Custom key for JSON Editor and UI rendering childObject.put(JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT, - JsonEditorSchemaConstants.FORMAT_SELECT); + JsonEditorSchemaConstants.FORMAT_SELECT); // childObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS, // JsonEditorSchemaConstants.TRUE); } @@ -299,7 +395,8 @@ public class ToscaYamlToJsonConvertor { } } - private void attachEntrySchemaJsonObject(JSONObject childObject, JSONObject entrySchemaObject, String dataType) { + private void attachEntrySchemaJsonObject(JSONObject childObject, JSONObject entrySchemaObject, + String dataType) { entrySchemaObject.put(JsonEditorSchemaConstants.TYPE, dataType); childObject.put(JsonEditorSchemaConstants.ITEMS, entrySchemaObject); @@ -320,33 +417,40 @@ public class ToscaYamlToJsonConvertor { * toscaKey.length()); } */ - private void parseDescription(LinkedHashMap childNodeMap, JSONObject childObject) { + private void parseDescription(LinkedHashMap childNodeMap, + JSONObject childObject) { if (childNodeMap.get(ToscaSchemaConstants.DESCRIPTION) != null) { - childObject.put(JsonEditorSchemaConstants.TITLE, childNodeMap.get(ToscaSchemaConstants.DESCRIPTION)); + childObject.put(JsonEditorSchemaConstants.TITLE, + childNodeMap.get(ToscaSchemaConstants.DESCRIPTION)); } } - private void parseTypes(String childObjectKey, LinkedHashMap childNodeMap, JSONObject childObject, - Map jsonEntrySchema, LinkedHashMap dataNodes, JSONArray array, - int order) { + private void parseTypes(String childObjectKey, LinkedHashMap childNodeMap, + JSONObject childObject, Map jsonEntrySchema, + LinkedHashMap dataNodes, JSONArray array, int order) { if (childNodeMap.get(ToscaSchemaConstants.TYPE) != null) { // Only known value of type is String for now if (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) { childObject.put(JsonEditorSchemaConstants.PROPERTY_ORDER, order); String typeValue = (String) childNodeMap.get(ToscaSchemaConstants.TYPE); if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER)) { - childObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_INTEGER); + childObject.put(JsonEditorSchemaConstants.TYPE, + JsonEditorSchemaConstants.TYPE_INTEGER); } else if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) { - childObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_INTEGER); + childObject.put(JsonEditorSchemaConstants.TYPE, + JsonEditorSchemaConstants.TYPE_INTEGER); } else if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_LIST)) { - childObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_ARRAY); + childObject.put(JsonEditorSchemaConstants.TYPE, + JsonEditorSchemaConstants.TYPE_ARRAY); // Custom key for JSON Editor and UI rendering childObject.put(JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT, - JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS_TOP); - childObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS, JsonEditorSchemaConstants.TRUE); + JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS_TOP); + childObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS, + JsonEditorSchemaConstants.TRUE); } else if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_MAP)) { - childObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_OBJECT); + childObject.put(JsonEditorSchemaConstants.TYPE, + JsonEditorSchemaConstants.TYPE_OBJECT); } else if (typeValue.contains(ToscaSchemaConstants.POLICY_DATA)) { JSONArray childArray = new JSONArray(); @@ -358,101 +462,129 @@ public class ToscaYamlToJsonConvertor { JSONObject entrySchemaObject = new JSONObject(); // Need to traverse JSONArray jsonArray = new JSONArray(); - ((LinkedHashMap) dataNodes.get(typeValue)).entrySet().stream().forEach(pmap -> { - if (pmap.getKey().equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) { - parseToscaPropertiesForType(childObjectKey, - (LinkedHashMap) pmap.getValue(), entrySchemaObject, childArray, - jsonEntrySchema, dataNodes, true, incrementComplexSimpleTypeOrder()); - jsonEntrySchema.put(typeValue, entrySchemaObject); - dataNodes.remove(typeValue); - attachTypeJsonObject(childObject, entrySchemaObject); - } - }); + ((LinkedHashMap) dataNodes.get(typeValue)).entrySet() + .stream().forEach(pmap -> { + if (pmap.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) { + parseToscaPropertiesForType(childObjectKey, + (LinkedHashMap) pmap.getValue(), + entrySchemaObject, childArray, jsonEntrySchema, dataNodes, + true, incrementComplexSimpleTypeOrder()); + jsonEntrySchema.put(typeValue, entrySchemaObject); + dataNodes.remove(typeValue); + attachTypeJsonObject(childObject, entrySchemaObject); + } + }); } } else { - childObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_STRING); + childObject.put(JsonEditorSchemaConstants.TYPE, + JsonEditorSchemaConstants.TYPE_STRING); } } if (childNodeMap.get(ToscaSchemaConstants.DEFAULT) != null) { - childObject.put(JsonEditorSchemaConstants.DEFAULT, childNodeMap.get(ToscaSchemaConstants.DEFAULT)); + childObject.put(JsonEditorSchemaConstants.DEFAULT, + childNodeMap.get(ToscaSchemaConstants.DEFAULT)); } } } - private void parseConstraints(LinkedHashMap childNodeMap, JSONObject childObject) { + private void parseConstraints(LinkedHashMap childNodeMap, + JSONObject childObject) { if (childNodeMap.containsKey(ToscaSchemaConstants.CONSTRAINTS) - && childNodeMap.get(ToscaSchemaConstants.CONSTRAINTS) != null) { - List> constraintsList = (List>) childNodeMap + && childNodeMap.get(ToscaSchemaConstants.CONSTRAINTS) != null) { + List> constraintsList = + (List>) childNodeMap .get(ToscaSchemaConstants.CONSTRAINTS); constraintsList.stream().forEach(c -> { if (c instanceof Map) { c.entrySet().stream().forEach(constraint -> { if (constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.MIN_LENGTH) - || constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.GREATER_OR_EQUAL)) { - // For String min_lenghth is minimum length whereas for number, it will be + || constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.GREATER_OR_EQUAL)) { + // For String min_lenghth is minimum length whereas for number, it will + // be // minimum or greater than to the defined value if (childNodeMap.containsKey(ToscaSchemaConstants.TYPE) - && (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) - && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE)) - .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { - childObject.put(JsonEditorSchemaConstants.MIN_LENGTH, constraint.getValue()); + && (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) + && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE)) + .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { + childObject.put(JsonEditorSchemaConstants.MIN_LENGTH, + constraint.getValue()); } else { - childObject.put(JsonEditorSchemaConstants.MINIMUM, constraint.getValue()); + childObject.put(JsonEditorSchemaConstants.MINIMUM, + constraint.getValue()); } - } else if (constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.MAX_LENGTH) - || constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.LESS_OR_EQUAL)) { - // For String max_lenghth is maximum length whereas for number, it will be + } else if (constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.MAX_LENGTH) + || constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.LESS_OR_EQUAL)) { + // For String max_lenghth is maximum length whereas for number, it will + // be // maximum or less than the defined value if (childNodeMap.containsKey(ToscaSchemaConstants.TYPE) - && (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) - && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE)) - .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { - childObject.put(JsonEditorSchemaConstants.MAX_LENGTH, constraint.getValue()); + && (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) + && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE)) + .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { + childObject.put(JsonEditorSchemaConstants.MAX_LENGTH, + constraint.getValue()); } else { - childObject.put(JsonEditorSchemaConstants.MAXIMUM, constraint.getValue()); + childObject.put(JsonEditorSchemaConstants.MAXIMUM, + constraint.getValue()); } - } else if (constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.LESS_THAN)) { - childObject.put(JsonEditorSchemaConstants.EXCLUSIVE_MAXIMUM, constraint.getValue()); - } else if (constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.GREATER_THAN)) { - childObject.put(JsonEditorSchemaConstants.EXCLUSIVE_MINIMUM, constraint.getValue()); - } else if (constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.IN_RANGE)) { + } else if (constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.LESS_THAN)) { + childObject.put(JsonEditorSchemaConstants.EXCLUSIVE_MAXIMUM, + constraint.getValue()); + } else if (constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.GREATER_THAN)) { + childObject.put(JsonEditorSchemaConstants.EXCLUSIVE_MINIMUM, + constraint.getValue()); + } else if (constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.IN_RANGE)) { if (constraint.getValue() instanceof ArrayList) { if (childNodeMap.containsKey(ToscaSchemaConstants.TYPE) - && (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) - && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE)) - .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { + && (childNodeMap + .get(ToscaSchemaConstants.TYPE) instanceof String) + && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE)) + .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { childObject.put(JsonEditorSchemaConstants.MIN_LENGTH, - ((ArrayList) constraint.getValue()).get(0)); + ((ArrayList) constraint.getValue()).get(0)); childObject.put(JsonEditorSchemaConstants.MAX_LENGTH, - ((ArrayList) constraint.getValue()).get(1)); + ((ArrayList) constraint.getValue()).get(1)); } else { childObject.put(JsonEditorSchemaConstants.MINIMUM, - ((ArrayList) constraint.getValue()).get(0)); + ((ArrayList) constraint.getValue()).get(0)); childObject.put(JsonEditorSchemaConstants.MAXIMUM, - ((ArrayList) constraint.getValue()).get(1)); + ((ArrayList) constraint.getValue()).get(1)); } } - } else if (constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.VALID_VALUES)) { + } else if (constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.VALID_VALUES)) { JSONArray validValuesArray = new JSONArray(); if (constraint.getValue() instanceof ArrayList) { - boolean processDictionary = ((ArrayList) constraint.getValue()).stream() - .anyMatch(value -> (value instanceof String - && ((String) value).contains(ToscaSchemaConstants.DICTIONARY))); + boolean processDictionary = + ((ArrayList) constraint.getValue()).stream().anyMatch( + value -> (value instanceof String && ((String) value) + .contains(ToscaSchemaConstants.DICTIONARY))); if (!processDictionary) { - ((ArrayList) constraint.getValue()).stream().forEach(value -> { - validValuesArray.put(value); - }); - childObject.put(JsonEditorSchemaConstants.ENUM, validValuesArray); + ((ArrayList) constraint.getValue()).stream() + .forEach(value -> { + validValuesArray.put(value); + }); + childObject.put(JsonEditorSchemaConstants.ENUM, + validValuesArray); } else { - ((ArrayList) constraint.getValue()).stream().forEach(value -> { - if ((value instanceof String - && ((String) value).contains(ToscaSchemaConstants.DICTIONARY))) { - processDictionaryElements(childObject, (String) value); - } + ((ArrayList) constraint.getValue()).stream() + .forEach(value -> { + if ((value instanceof String && ((String) value) + .contains(ToscaSchemaConstants.DICTIONARY))) { + processDictionaryElements(childObject, + (String) value); + } - }); + }); } } @@ -464,8 +596,117 @@ public class ToscaYamlToJsonConvertor { } } + private void parseMetadataPossibleValues(LinkedHashMap childNodeMap, + JSONObject childObject) { + if (childNodeMap.containsKey(ToscaSchemaConstants.METADATA) + && childNodeMap.get(ToscaSchemaConstants.METADATA) != null) { + LinkedHashMap metadataMap = + (LinkedHashMap) childNodeMap.get(ToscaSchemaConstants.METADATA); + if (metadataMap instanceof Map) { + metadataMap.entrySet().stream().forEach(constraint -> { + if (constraint.getKey() + .equalsIgnoreCase(ToscaSchemaConstants.METADATA_CLAMP_POSSIBLE_VALUES)) { + JSONArray validValuesArray = new JSONArray(); + + if (constraint.getValue() instanceof ArrayList) { + boolean processDictionary = ((ArrayList) constraint.getValue()) + .stream().anyMatch(value -> (value instanceof String + && ((String) value).contains(ToscaSchemaConstants.DICTIONARY))); + if (processDictionary) { + ((ArrayList) constraint.getValue()).stream().forEach(value -> { + if ((value instanceof String && ((String) value) + .contains(ToscaSchemaConstants.DICTIONARY))) { + processDictionaryElements(childObject, (String) value); + } + + }); + + } + } + + } + }); + } + } + } + private void processDictionaryElements(JSONObject childObject, String dictionaryReference) { + if (dictionaryReference.contains("#")) { + String[] dictionaryKeyArray = dictionaryReference + .substring(dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11, + dictionaryReference.length()) + .split("#"); + // We support only one # as of now. + List cldsDictionaryElements = null; + List subDictionaryElements = null; + if (dictionaryKeyArray != null && dictionaryKeyArray.length == 2) { + cldsDictionaryElements = dictionaryService.getDictionary(dictionaryKeyArray[0]) + .getDictionaryElements().stream().collect(Collectors.toList()); + subDictionaryElements = dictionaryService.getDictionary(dictionaryKeyArray[1]) + .getDictionaryElements().stream().collect(Collectors.toList()); + + if (cldsDictionaryElements != null) { + List subCldsDictionaryNames = subDictionaryElements.stream() + .map(DictionaryElement::getShortName).collect(Collectors.toList()); + JSONArray jsonArray = new JSONArray(); + + Optional.ofNullable(cldsDictionaryElements).get().stream().forEach(c -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put(JsonEditorSchemaConstants.TYPE, getJsonType(c.getType())); + if (c.getType() != null + && c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) { + jsonObject.put(JsonEditorSchemaConstants.MIN_LENGTH, 1); + } + jsonObject.put(JsonEditorSchemaConstants.ID, c.getName()); + jsonObject.put(JsonEditorSchemaConstants.LABEL, c.getShortName()); + jsonObject.put(JsonEditorSchemaConstants.OPERATORS, subCldsDictionaryNames); + jsonArray.put(jsonObject); + });; + JSONObject filterObject = new JSONObject(); + filterObject.put(JsonEditorSchemaConstants.FILTERS, jsonArray); + + childObject.put(JsonEditorSchemaConstants.TYPE, + JsonEditorSchemaConstants.TYPE_QBLDR); + // TO invoke validation on such parameters + childObject.put(JsonEditorSchemaConstants.MIN_LENGTH, 1); + childObject.put(JsonEditorSchemaConstants.QSSCHEMA, filterObject); + + } + } + } else { + String dictionaryKey = dictionaryReference.substring( + dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11, + dictionaryReference.length()); + if (dictionaryKey != null) { + List cldsDictionaryElements = + dictionaryService.getDictionary(dictionaryKey).getDictionaryElements().stream() + .collect(Collectors.toList()); + if (cldsDictionaryElements != null) { + List cldsDictionaryNames = new ArrayList<>(); + List cldsDictionaryFullNames = new ArrayList<>(); + cldsDictionaryElements.stream().forEach(c -> { + // Json type will be translated before Policy creation + if (c.getType() != null && !c.getType().equalsIgnoreCase("json")) { + cldsDictionaryFullNames.add(c.getName()); + } + cldsDictionaryNames.add(c.getShortName()); + }); + + if (!cldsDictionaryFullNames.isEmpty()) { + childObject.put(JsonEditorSchemaConstants.ENUM, cldsDictionaryFullNames); + // Add Enum titles for generated translated values during JSON instance + // generation + JSONObject enumTitles = new JSONObject(); + enumTitles.put(JsonEditorSchemaConstants.ENUM_TITLES, cldsDictionaryNames); + childObject.put(JsonEditorSchemaConstants.OPTIONS, enumTitles); + } else { + childObject.put(JsonEditorSchemaConstants.ENUM, cldsDictionaryNames); + } + + } + } + } } private String getJsonType(String toscaType) { @@ -480,4 +721,4 @@ public class ToscaYamlToJsonConvertor { return jsonType; } -} \ No newline at end of file +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java index 0a0831bb7..e6ba98151 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java @@ -24,13 +24,11 @@ package org.onap.clamp.loop.template; import com.google.gson.annotations.Expose; - import java.io.Serializable; import java.util.HashSet; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; - import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -41,7 +39,6 @@ import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; - import org.hibernate.annotations.SortNatural; import org.onap.clamp.loop.common.AuditEntity; @@ -79,16 +76,27 @@ public class LoopElementModel extends AuditEntity implements Serializable { @Column(nullable = false, name = "loop_element_type") private String loopElementType; + /** + * This variable is used to display the micro-service name in the SVG. + */ + @Expose + @Column(name = "short_name") + private String shortName; + /** * This variable is used to store the type mentioned in the micro-service * blueprint. */ @Expose - @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) - @JoinTable(name = "loopelementmodels_to_policymodels", - joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"), - inverseJoinColumns = { @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), - @JoinColumn(name = "policy_model_version", referencedColumnName = "version") }) + @ManyToMany( + fetch = FetchType.EAGER, + cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) + @JoinTable( + name = "loopelementmodels_to_policymodels", + joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"), + inverseJoinColumns = { + @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) @SortNatural private SortedSet policyModels = new TreeSet<>(); @@ -97,7 +105,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * policyModels getter. - * + * * @return the policyModel */ public SortedSet getPolicyModels() { @@ -106,7 +114,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * Method to add a new policyModel to the list. - * + * * @param policyModel The policy model */ public void addPolicyModel(PolicyModel policyModel) { @@ -116,7 +124,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * name getter. - * + * * @return the name */ public String getName() { @@ -125,7 +133,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * name setter. - * + * * @param name the name to set */ public void setName(String name) { @@ -134,7 +142,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * blueprint getter. - * + * * @return the blueprint */ public String getBlueprint() { @@ -143,7 +151,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * blueprint setter. - * + * * @param blueprint the blueprint to set */ public void setBlueprint(String blueprint) { @@ -151,10 +159,8 @@ public class LoopElementModel extends AuditEntity implements Serializable { } /** - * loopElementType getter. - * * dcaeBlueprintId getter. - * + * * @return the dcaeBlueprintId */ public String getDcaeBlueprintId() { @@ -163,7 +169,7 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * dcaeBlueprintId setter. - * + * * @param dcaeBlueprintId the dcaeBlueprintId to set */ public void setDcaeBlueprintId(String dcaeBlueprintId) { @@ -171,6 +177,8 @@ public class LoopElementModel extends AuditEntity implements Serializable { } /** + * loopElementType getter. + * * @return the loopElementType */ public String getLoopElementType() { @@ -179,16 +187,32 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * loopElementType setter. - * + * * @param loopElementType the loopElementType to set */ public void setLoopElementType(String loopElementType) { this.loopElementType = loopElementType; } + /** + * shortName getter. + * + * @return the shortName + */ + public String getShortName() { + return shortName; + } + + /** + * @param shortName the shortName to set. + */ + public void setShortName(String shortName) { + this.shortName = shortName; + } + /** * usedByLoopTemplates getter. - * + * * @return the usedByLoopTemplates */ public Set getUsedByLoopTemplates() { @@ -203,11 +227,11 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * Constructor. - * - * @param name The name id + * + * @param name The name id * @param loopElementType The type of loop element - * @param blueprint The blueprint defined for dcae that contains the - * policy type to use + * @param blueprint The blueprint defined for dcae that contains the + * policy type to use */ public LoopElementModel(String name, String loopElementType, String blueprint) { this.name = name; diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java index 3e90c1e5b..54096cb8f 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java @@ -24,14 +24,13 @@ package org.onap.clamp.loop.template; import com.google.gson.annotations.Expose; - import java.io.Serializable; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; - import javax.persistence.CascadeType; import javax.persistence.Column; +import javax.persistence.Convert; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; @@ -39,7 +38,6 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; - import org.hibernate.annotations.SortNatural; import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.service.Service; @@ -74,12 +72,18 @@ public class LoopTemplate extends AuditEntity implements Serializable { private String svgRepresentation; @Expose - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loopTemplate", orphanRemoval = true) + @OneToMany( + cascade = CascadeType.ALL, + fetch = FetchType.EAGER, + mappedBy = "loopTemplate", + orphanRemoval = true) @SortNatural private SortedSet loopElementModelsUsed = new TreeSet<>(); @Expose - @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) + @ManyToOne( + fetch = FetchType.EAGER, + cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinColumn(name = "service_uuid") private Service modelService; @@ -91,9 +95,17 @@ public class LoopTemplate extends AuditEntity implements Serializable { @Column(name = "unique_blueprint", columnDefinition = "boolean default false") private boolean uniqueBlueprint; + /** + * Type of Loop allowed to be created. + */ + @Expose + @Column(name = "allowed_loop_type") + @Convert(converter = LoopTypeConvertor.class) + private LoopType allowedLoopType = LoopType.CLOSED; + /** * name getter. - * + * * @return the name */ public String getName() { @@ -102,7 +114,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * name setter. - * + * * @param name the name to set */ public void setName(String name) { @@ -111,7 +123,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * blueprint getter. - * + * * @return the blueprint */ public String getBlueprint() { @@ -120,7 +132,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * dcaeBlueprintId getter. - * + * * @return the dcaeBlueprintId */ public String getDcaeBlueprintId() { @@ -129,7 +141,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * dcaeBlueprintId setter. - * + * * @param dcaeBlueprintId the dcaeBlueprintId to set */ public void setDcaeBlueprintId(String dcaeBlueprintId) { @@ -138,7 +150,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * blueprint setter. - * + * * @param blueprint the blueprint to set */ public void setBlueprint(String blueprint) { @@ -152,7 +164,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * svgRepresentation getter. - * + * * @return the svgRepresentation */ public String getSvgRepresentation() { @@ -161,7 +173,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * svgRepresentation setter. - * + * * @param svgRepresentation the svgRepresentation to set */ public void setSvgRepresentation(String svgRepresentation) { @@ -170,7 +182,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * loopElementModelsUsed getter. - * + * * @return the loopElementModelsUsed */ public SortedSet getLoopElementModelsUsed() { @@ -179,7 +191,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * maximumInstancesAllowed getter. - * + * * @return the maximumInstancesAllowed */ public Integer getMaximumInstancesAllowed() { @@ -188,17 +200,35 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * maximumInstancesAllowed setter. - * + * * @param maximumInstancesAllowed the maximumInstancesAllowed to set */ public void setMaximumInstancesAllowed(Integer maximumInstancesAllowed) { this.maximumInstancesAllowed = maximumInstancesAllowed; } + /** + * allowedLoopType getter. + * + * @return the allowedLoopType Type of Loop allowed to be created + */ + public LoopType getAllowedLoopType() { + return allowedLoopType; + } + + /** + * allowedLoopType setter. + * + * @param allowedLoopType the allowedLoopType to set + */ + public void setAllowedLoopType(LoopType allowedLoopType) { + this.allowedLoopType = allowedLoopType; + } + /** * Add list of loopElements to the current template, each loopElementModel is * added at the end of the list so the flowOrder is computed automatically. - * + * * @param loopElementModels The loopElementModel set to add */ public void addLoopElementModels(Set loopElementModels) { @@ -210,12 +240,12 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * Add a loopElement to the current template, the loopElementModel is added at * the end of the list so the flowOrder is computed automatically. - * + * * @param loopElementModel The loopElementModel to add */ public void addLoopElementModel(LoopElementModel loopElementModel) { - LoopTemplateLoopElementModel jointEntry = new LoopTemplateLoopElementModel(this, loopElementModel, - this.loopElementModelsUsed.size()); + LoopTemplateLoopElementModel jointEntry = new LoopTemplateLoopElementModel(this, + loopElementModel, this.loopElementModelsUsed.size()); this.loopElementModelsUsed.add(jointEntry); loopElementModel.getUsedByLoopTemplates().add(jointEntry); } @@ -223,20 +253,20 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * Add a loopElement model to the current template, the flow order must be * specified manually. - * + * * @param loopElementModel The loopElementModel to add - * @param listPosition The position in the flow + * @param listPosition The position in the flow */ public void addLoopElementModel(LoopElementModel loopElementModel, Integer listPosition) { - LoopTemplateLoopElementModel jointEntry = new LoopTemplateLoopElementModel(this, loopElementModel, - listPosition); + LoopTemplateLoopElementModel jointEntry = + new LoopTemplateLoopElementModel(this, loopElementModel, listPosition); this.loopElementModelsUsed.add(jointEntry); loopElementModel.getUsedByLoopTemplates().add(jointEntry); } /** * modelService getter. - * + * * @return the modelService */ public Service getModelService() { @@ -245,7 +275,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * modelService setter. - * + * * @param modelService the modelService to set */ public void setModelService(Service modelService) { @@ -254,7 +284,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * uniqueBlueprint getter. - * + * * @return the uniqueBlueprint */ public boolean getUniqueBlueprint() { @@ -270,17 +300,17 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * Constructor. - * - * @param name The loop template name id - * @param blueprint The blueprint containing all microservices (legacy - * case) - * @param svgRepresentation The svg representation of that loop template + * + * @param name The loop template name id + * @param blueprint The blueprint containing all microservices (legacy + * case) + * @param svgRepresentation The svg representation of that loop template * @param maxInstancesAllowed The maximum number of instances that can be - * created from that template - * @param service The service associated to that loop template + * created from that template + * @param service The service associated to that loop template */ - public LoopTemplate(String name, String blueprint, String svgRepresentation, Integer maxInstancesAllowed, - Service service) { + public LoopTemplate(String name, String blueprint, String svgRepresentation, + Integer maxInstancesAllowed, Service service) { this.name = name; this.setBlueprint(blueprint); this.svgRepresentation = svgRepresentation; @@ -322,17 +352,17 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * Generate the loop template name. * - * @param serviceName The service name - * @param serviceVersion The service version - * @param resourceName The resource name + * @param serviceName The service name + * @param serviceVersion The service version + * @param resourceName The resource name * @param blueprintFileName The blueprint file name * @return The generated loop template name */ - public static String generateLoopTemplateName(String serviceName, String serviceVersion, String resourceName, - String blueprintFileName) { + public static String generateLoopTemplateName(String serviceName, String serviceVersion, + String resourceName, String blueprintFileName) { StringBuilder buffer = new StringBuilder("LOOP_TEMPLATE_").append(serviceName).append("_v") - .append(serviceVersion).append("_").append(resourceName).append("_") - .append(blueprintFileName.replaceAll(".yaml", "")); + .append(serviceVersion).append("_").append(resourceName).append("_") + .append(blueprintFileName.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } } diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java index 3e2f8ad42..cac5f088a 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplateLoopElementModelId.java @@ -24,9 +24,7 @@ package org.onap.clamp.loop.template; import com.google.gson.annotations.Expose; - import java.io.Serializable; - import javax.persistence.Column; import javax.persistence.Embeddable; @@ -55,8 +53,8 @@ public class LoopTemplateLoopElementModelId implements Serializable { /** * Constructor. - * - * @param loopTemplateName The loop template name id + * + * @param loopTemplateName The loop template name id * @param microServiceModelName THe micro Service name id */ public LoopTemplateLoopElementModelId(String loopTemplateName, String microServiceModelName) { @@ -66,7 +64,7 @@ public class LoopTemplateLoopElementModelId implements Serializable { /** * loopTemplateName getter. - * + * * @return the loopTemplateName */ public String getLoopTemplateName() { @@ -75,7 +73,7 @@ public class LoopTemplateLoopElementModelId implements Serializable { /** * loopTemplateName setter. - * + * * @param loopTemplateName the loopTemplateName to set */ public void setLoopTemplateName(String loopTemplateName) { @@ -84,7 +82,7 @@ public class LoopTemplateLoopElementModelId implements Serializable { /** * microServiceModelName getter. - * + * * @return the microServiceModelName */ public String getLoopElementModelName() { @@ -93,7 +91,7 @@ public class LoopTemplateLoopElementModelId implements Serializable { /** * loopElementModelName setter. - * + * * @param loopElementModelName the loopElementModelName to set */ public void setLoopElementModelName(String loopElementModelName) { diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java new file mode 100644 index 000000000..279d602c8 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java @@ -0,0 +1,111 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import java.util.List; +import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; +import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser; +import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; +import org.onap.clamp.clds.util.drawing.SvgFacade; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class LoopTemplatesService { + + private final LoopTemplatesRepository loopTemplatesRepository; + + @Autowired + ChainGenerator chainGenerator; + + @Autowired + private SvgFacade svgFacade; + + /** + * Constructor. + */ + @Autowired + public LoopTemplatesService(LoopTemplatesRepository loopTemplatesRepository) { + this.loopTemplatesRepository = loopTemplatesRepository; + + } + + public LoopTemplate saveOrUpdateLoopTemplate(LoopTemplate loopTemplate) { + return loopTemplatesRepository.save(loopTemplate); + } + + /** + * Saves or updates loop template Object. + * + * @param templateName the loop template name + * @param loopTemplate the loop template object + * @return the loop template + * @throws BlueprintParserException In case of issues with the blueprint + * parsing + */ + public LoopTemplate saveOrUpdateLoopTemplateByName(String templateName, + LoopTemplate loopTemplate) throws BlueprintParserException { + + if (getLoopTemplate(templateName) != null) { + loopTemplate.setName(getLoopTemplate(templateName).getName()); + } + return saveOrUpdateLoopTemplate(createTemplateFromBlueprint(templateName, loopTemplate)); + } + + public List getLoopTemplateNames() { + return loopTemplatesRepository.getAllLoopTemplateNames(); + } + + public List getAllLoopTemplates() { + return loopTemplatesRepository.findAll(); + } + + public LoopTemplate getLoopTemplate(String name) { + return loopTemplatesRepository.findById(name).orElse(null); + } + + public void deleteLoopTemplate(String name) { + loopTemplatesRepository.deleteById(name); + } + + private LoopTemplate createTemplateFromBlueprint(String templateName, LoopTemplate loopTemplate) + throws BlueprintParserException { + + String blueprintYaml = loopTemplate.getBlueprint(); + List microServicesChain = + chainGenerator.getChainOfMicroServices(BlueprintParser.getMicroServices(blueprintYaml)); + if (microServicesChain.isEmpty()) { + microServicesChain = BlueprintParser.fallbackToOneMicroService(); + } + loopTemplate.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); + loopTemplate.setName(templateName); + + LoopTemplate existingTemplate = getLoopTemplate(templateName); + if (existingTemplate != null) { + loopTemplate.setName(existingTemplate.getName()); + } + return loopTemplate; + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopType.java b/src/main/java/org/onap/clamp/loop/template/LoopType.java new file mode 100644 index 000000000..ccbc62a83 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopType.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +/** + * Enums for AllowedLoopType in LoopTemplate enity. + * + */ +public enum LoopType { + OPEN("OPEN"), CLOSED("CLOSED"), HYBRID("HYBRID"); + + private String value; + + private LoopType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTypeConvertor.java b/src/main/java/org/onap/clamp/loop/template/LoopTypeConvertor.java new file mode 100644 index 000000000..0b05613cb --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/template/LoopTypeConvertor.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.template; + +import java.util.stream.Stream; +import javax.persistence.AttributeConverter; + +/** + * Attribute Converter to allow using LoopType Enum values in DB and Java classes. + * + */ +public class LoopTypeConvertor implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(LoopType loopType) { + if (loopType == null) { + return null; + } + return loopType.getValue(); + } + + @Override + public LoopType convertToEntityAttribute(String value) { + if (value == null) { + return null; + } + + return Stream.of(LoopType.values()).filter(c -> c.getValue().equals(value)).findFirst() + .orElseThrow(IllegalArgumentException::new); + } +} diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java index 52f662bb4..d06cb8cff 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java @@ -24,11 +24,9 @@ package org.onap.clamp.loop.template; import com.google.gson.annotations.Expose; - import java.io.Serializable; import java.util.HashSet; import java.util.Set; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -36,7 +34,6 @@ import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.ManyToMany; import javax.persistence.Table; - import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.util.SemanticVersioning; @@ -83,7 +80,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * usedByElementModels getter. - * + * * @return the usedByElementModels */ public Set getUsedByElementModels() { @@ -92,7 +89,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * policyModelTosca getter. - * + * * @return the policyModelTosca */ public String getPolicyModelTosca() { @@ -101,7 +98,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * policyModelTosca setter. - * + * * @param policyModelTosca the policyModelTosca to set */ public void setPolicyModelTosca(String policyModelTosca) { @@ -110,7 +107,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * policyModelType getter. - * + * * @return the modelType */ public String getPolicyModelType() { @@ -119,7 +116,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * policyModelType setter. - * + * * @param modelType the modelType to set */ public void setPolicyModelType(String modelType) { @@ -128,7 +125,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * version getter. - * + * * @return the version */ public String getVersion() { @@ -137,7 +134,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * version setter. - * + * * @param version the version to set */ public void setVersion(String version) { @@ -147,7 +144,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * policyAcronym getter. - * + * * @return the policyAcronym value */ public String getPolicyAcronym() { @@ -156,7 +153,7 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * policyAcronym setter. - * + * * @param policyAcronym The policyAcronym to set */ public void setPolicyAcronym(String policyAcronym) { @@ -171,13 +168,14 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable /** * Constructor. - * - * @param policyType The policyType (referenced in the blueprint + * + * @param policyType The policyType (referenced in the blueprint * @param policyModelTosca The policy tosca model in yaml - * @param version the version like 1.0.0 - * @param policyAcronym Subtype for policy if it exists (could be used by UI) + * @param version the version like 1.0.0 + * @param policyAcronym Subtype for policy if it exists (could be used by UI) */ - public PolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym) { + public PolicyModel(String policyType, String policyModelTosca, String version, + String policyAcronym) { this.policyModelType = policyType; this.policyModelTosca = policyModelTosca; this.version = version; diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java index 8e22852a9..0a09dd8d7 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2020 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,24 +23,62 @@ package org.onap.clamp.loop.template; +import com.google.gson.JsonObject; import java.util.List; - +import org.onap.clamp.clds.tosca.ToscaSchemaConstants; +import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; +import org.onap.clamp.util.SemanticVersioning; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class PolicyModelsService { private final PolicyModelsRepository policyModelsRepository; + private ToscaYamlToJsonConvertor toscaYamlToJsonConvertor; @Autowired - public PolicyModelsService(PolicyModelsRepository policyModelrepo) { + public PolicyModelsService(PolicyModelsRepository policyModelrepo, + ToscaYamlToJsonConvertor convertor) { policyModelsRepository = policyModelrepo; + toscaYamlToJsonConvertor = convertor; } public PolicyModel saveOrUpdatePolicyModel(PolicyModel policyModel) { return policyModelsRepository.save(policyModel); } + /** + * Creates or updates the Tosca Policy Model. + * + * @param policyModelType + * The policyModeltype in Tosca yaml + * @param policyModel + * The Policymodel object + * @return The Policy Model + */ + public PolicyModel saveOrUpdateByPolicyModelType(String policyModelType, + String policyModelTosca) { + JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca); + + String policyModelTypeName = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, + ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE); + String acronym = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, + ToscaSchemaConstants.METADATA_ACRONYM); + PolicyModel model = getPolicyModelByType( + policyModelTypeName != null ? policyModelTypeName : policyModelType); + + if (model == null) { + model = new PolicyModel(policyModelTypeName, policyModelTosca, + SemanticVersioning.incrementMajorVersion(null), acronym); + } else { + model.setVersion(SemanticVersioning + .incrementMajorVersion(model.getVersion() != null ? model.getVersion() : null)); + model.setPolicyModelType(policyModelTypeName); + model.setPolicyAcronym(acronym); + } + return saveOrUpdatePolicyModel(model); + } + public List getAllPolicyModelTypes() { return policyModelsRepository.getAllPolicyModelType(); } @@ -56,4 +94,20 @@ public class PolicyModelsService { public Iterable getAllPolicyModelsByType(String type) { return policyModelsRepository.findByPolicyModelType(type); } + + public PolicyModel getPolicyModelByType(String type) { + List list = policyModelsRepository.findByPolicyModelType(type); + return list.stream().sorted().findFirst().orElse(null); + } + + /** + * Retrieves the Tosca model Yaml string. + * + * @param type The PolicyModelType + * @return The Tosca model Yaml string + */ + public String getPolicyModelTosca(String type) { + PolicyModel policyModel = getPolicyModelByType(type); + return policyModel != null ? policyModel.getPolicyModelTosca() : null; + } } diff --git a/src/main/java/org/onap/clamp/tosca/Dictionary.java b/src/main/java/org/onap/clamp/tosca/Dictionary.java index 7b4e513a2..44b5b6f68 100644 --- a/src/main/java/org/onap/clamp/tosca/Dictionary.java +++ b/src/main/java/org/onap/clamp/tosca/Dictionary.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2020 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,19 +24,18 @@ package org.onap.clamp.tosca; import com.google.gson.annotations.Expose; - import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - +import java.util.HashSet; +import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; -import javax.persistence.OneToMany; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; import javax.persistence.Table; - import org.onap.clamp.loop.common.AuditEntity; /** @@ -59,19 +58,27 @@ public class Dictionary extends AuditEntity implements Serializable { @Expose @Column(name = "dictionary_second_level") - private int secondLevelDictionary; + private int secondLevelDictionary = 0; @Expose @Column(name = "dictionary_type") private String subDictionaryType; @Expose - @OneToMany(mappedBy = "dictionary", cascade = CascadeType.ALL, fetch = FetchType.EAGER) - private List dictionaryElements = new ArrayList<>(); + @ManyToMany( + fetch = FetchType.EAGER, + cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) + @JoinTable( + name = "dictionary_to_dictionaryelements", + joinColumns = @JoinColumn(name = "dictionary_name", referencedColumnName = "name"), + inverseJoinColumns = {@JoinColumn( + name = "dictionary_element_short_name", + referencedColumnName = "short_name")}) + private Set dictionaryElements = new HashSet<>(); /** * name getter. - * + * * @return the name */ public String getName() { @@ -80,7 +87,7 @@ public class Dictionary extends AuditEntity implements Serializable { /** * name setter. - * + * * @param name the name to set */ public void setName(String name) { @@ -89,7 +96,7 @@ public class Dictionary extends AuditEntity implements Serializable { /** * secondLevelDictionary getter. - * + * * @return the secondLevelDictionary */ public int getSecondLevelDictionary() { @@ -98,7 +105,7 @@ public class Dictionary extends AuditEntity implements Serializable { /** * secondLevelDictionary setter. - * + * * @param secondLevelDictionary the secondLevelDictionary to set */ public void setSecondLevelDictionary(int secondLevelDictionary) { @@ -107,7 +114,7 @@ public class Dictionary extends AuditEntity implements Serializable { /** * subDictionaryType getter. - * + * * @return the subDictionaryType */ public String getSubDictionaryType() { @@ -116,7 +123,7 @@ public class Dictionary extends AuditEntity implements Serializable { /** * subDictionaryType setter. - * + * * @param subDictionaryType the subDictionaryType to set */ public void setSubDictionaryType(String subDictionaryType) { @@ -125,20 +132,51 @@ public class Dictionary extends AuditEntity implements Serializable { /** * dictionaryElements getter. - * - * @return the dictionaryElements + * + * @return the dictionaryElements List of dictionary element */ - public List getDictionaryElements() { + public Set getDictionaryElements() { return dictionaryElements; } /** - * dictionaryElements setter. - * - * @param dictionaryElements the dictionaryElements to set + * Method to add a new dictionaryElement to the list. + * + * @param dictionaryElement The dictionary element + */ + public void addDictionaryElements(DictionaryElement dictionaryElement) { + dictionaryElements.add(dictionaryElement); + dictionaryElement.getUsedByDictionaries().add(this); + } + + /** + * Method to delete a dictionaryElement from the list. + * + * @param dictionaryElement The dictionary element */ - public void setDictionaryElements(List dictionaryElements) { - this.dictionaryElements = dictionaryElements; + public void removeDictionaryElement(DictionaryElement dictionaryElement) { + dictionaryElements.remove(dictionaryElement); + dictionaryElement.getUsedByDictionaries().remove(this); + } + + /** + * Default Constructor. + */ + public Dictionary() { + + } + + /** + * Constructor. + * + * @param name The Dictionary name + * @param secondLevelDictionary defines if dictionary is a secondary level + * @param subDictionaryType defines the type of secondary level dictionary + */ + public Dictionary(String name, int secondLevelDictionary, String subDictionaryType) { + this.name = name; + this.secondLevelDictionary = secondLevelDictionary; + this.subDictionaryType = subDictionaryType; } @Override diff --git a/src/main/java/org/onap/clamp/tosca/DictionaryElement.java b/src/main/java/org/onap/clamp/tosca/DictionaryElement.java index e81885f3e..43a3106f5 100644 --- a/src/main/java/org/onap/clamp/tosca/DictionaryElement.java +++ b/src/main/java/org/onap/clamp/tosca/DictionaryElement.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2020 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,17 +24,15 @@ package org.onap.clamp.tosca; import com.google.gson.annotations.Expose; - import java.io.Serializable; - -import javax.persistence.CascadeType; +import java.util.HashSet; +import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; +import javax.persistence.ManyToMany; import javax.persistence.Table; - import org.onap.clamp.loop.common.AuditEntity; /** @@ -51,32 +49,31 @@ public class DictionaryElement extends AuditEntity implements Serializable { @Id @Expose - @Column(nullable = false, name = "name", unique = true) - private String name; + @Column(nullable = false, name = "short_name") + private String shortName; @Expose - @Column(nullable = false, name = "short_name", unique = true) - private String shortName; + @Column(nullable = false, name = "name") + private String name; @Expose - @Column(name = "description") + @Column(nullable = false, name = "description") private String description; @Expose @Column(nullable = false, name = "type") private String type; - @Column(name = "subdictionary_id", nullable = false) @Expose + @Column(nullable = true, name = "subdictionary_name") private String subDictionary; - @ManyToOne(cascade = CascadeType.ALL) - @JoinColumn(name = "dictionary_id") - private Dictionary dictionary; + @ManyToMany(mappedBy = "dictionaryElements", fetch = FetchType.EAGER) + private Set usedByDictionaries = new HashSet<>(); /** * name getter. - * + * * @return the name */ public String getName() { @@ -85,7 +82,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * name setter. - * + * * @param name the name to set */ public void setName(String name) { @@ -94,7 +91,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * shortName getter. - * + * * @return the shortName */ public String getShortName() { @@ -103,7 +100,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * shortName setter. - * + * * @param shortName the shortName to set */ public void setShortName(String shortName) { @@ -112,7 +109,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * description getter. - * + * * @return the description */ public String getDescription() { @@ -121,7 +118,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * description setter. - * + * * @param description the description to set */ public void setDescription(String description) { @@ -130,7 +127,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * type getter. - * + * * @return the type */ public String getType() { @@ -139,7 +136,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * type setter. - * + * * @param type the type to set */ public void setType(String type) { @@ -148,7 +145,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * subDictionary getter. - * + * * @return the subDictionary */ public String getSubDictionary() { @@ -157,7 +154,7 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * subDictionary setter. - * + * * @param subDictionary the subDictionary to set */ public void setSubDictionary(String subDictionary) { @@ -165,21 +162,21 @@ public class DictionaryElement extends AuditEntity implements Serializable { } /** - * dictionary getter. - * - * @return the dictionary + * usedByDictionaries getter. + * + * @return the usedByDictionaries */ - public Dictionary getDictionary() { - return dictionary; + public Set getUsedByDictionaries() { + return usedByDictionaries; } /** - * dictionary setter. - * - * @param dictionary the dictionary to set + * usedByDictionaries setter. + * + * @param usedByDictionaries the usedByDictionaries to set */ - public void setDictionary(Dictionary dictionary) { - this.dictionary = dictionary; + public void setUsedByDictionaries(Set usedByDictionaries) { + this.usedByDictionaries = usedByDictionaries; } /** @@ -190,30 +187,46 @@ public class DictionaryElement extends AuditEntity implements Serializable { /** * Constructor. - * - * @param name The Dictionary element name - * @param shortName The short name - * @param description The description - * @param type The type of element + * + * @param name The Dictionary element name + * @param shortName The short name + * @param description The description + * @param type The type of element * @param subDictionary The sub type - * @param dictionary The parent dictionary */ - public DictionaryElement(String name, String shortName, String description, String type, String subDictionary, - Dictionary dictionary) { + public DictionaryElement(String name, String shortName, String description, String type, + String subDictionary) { this.name = name; this.shortName = shortName; this.description = description; this.type = type; this.subDictionary = subDictionary; - this.dictionary = dictionary; + } + + /** + * Constructor. + * + * @param name The Dictionary element name + * @param shortName The short name + * @param description The description + * @param type The type of element + * @param subDictionary The sub type + */ + public DictionaryElement(String name, String shortName, String description, String type, + String subDictionary, Set usedByDictionaries) { + this.name = name; + this.shortName = shortName; + this.description = description; + this.type = type; + this.subDictionary = subDictionary; + this.usedByDictionaries = usedByDictionaries; } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((dictionary == null) ? 0 : dictionary.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((shortName == null) ? 0 : shortName.hashCode()); return result; } @@ -229,21 +242,13 @@ public class DictionaryElement extends AuditEntity implements Serializable { return false; } DictionaryElement other = (DictionaryElement) obj; - if (dictionary == null) { - if (other.dictionary != null) { + if (shortName == null) { + if (other.shortName != null) { return false; } - } else if (!dictionary.equals(other.dictionary)) { - return false; - } - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { + } else if (!shortName.equals(other.shortName)) { return false; } return true; } - } diff --git a/src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java b/src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java index 96cb2e35e..43f6f1d40 100644 --- a/src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java +++ b/src/main/java/org/onap/clamp/tosca/DictionaryElementsRepository.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2020 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/src/main/java/org/onap/clamp/tosca/DictionaryRepository.java b/src/main/java/org/onap/clamp/tosca/DictionaryRepository.java index 2a087b6d9..ae8430d93 100644 --- a/src/main/java/org/onap/clamp/tosca/DictionaryRepository.java +++ b/src/main/java/org/onap/clamp/tosca/DictionaryRepository.java @@ -24,7 +24,6 @@ package org.onap.clamp.tosca; import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -35,4 +34,7 @@ public interface DictionaryRepository extends JpaRepository @Query("SELECT dict.name FROM Dictionary as dict") List getAllDictionaryNames(); + @Query("SELECT dict.name FROM Dictionary as dict where dict.secondLevelDictionary = 1") + List getAllSecondaryLevelDictionaryNames(); + } diff --git a/src/main/java/org/onap/clamp/tosca/DictionaryService.java b/src/main/java/org/onap/clamp/tosca/DictionaryService.java new file mode 100644 index 000000000..21ca1f7f7 --- /dev/null +++ b/src/main/java/org/onap/clamp/tosca/DictionaryService.java @@ -0,0 +1,142 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.tosca; + +import com.google.common.collect.Sets; +import java.util.List; +import java.util.Set; +import javax.persistence.EntityNotFoundException; +import org.onap.clamp.clds.service.SecureServiceBase; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class DictionaryService extends SecureServiceBase { + + private final DictionaryRepository dictionaryRepository; + private final DictionaryElementsRepository dictionaryElementsRepository; + + /** + * Constructor. + */ + @Autowired + public DictionaryService(DictionaryRepository dictionaryRepository, + DictionaryElementsRepository dictionaryElementsRepository) { + this.dictionaryRepository = dictionaryRepository; + this.dictionaryElementsRepository = dictionaryElementsRepository; + + } + + public Dictionary saveOrUpdateDictionary(Dictionary dictionary) { + return dictionaryRepository.save(dictionary); + } + + /** + * Creates or Updates Dictionary Element. + * + * @param dictionaryName The Dictionary name + * @param dictionary The Dictionary object with dictionary elements + * @return updated Dictionary object with all dictionary elements + */ + public Dictionary saveOrUpdateDictionaryElement(String dictionaryName, Dictionary dictionary) { + Dictionary dict = getDictionary(dictionaryName); + + Set newDictionaryElements = dictionary.getDictionaryElements(); + + for (DictionaryElement dictionaryElement : newDictionaryElements) { + if (dict.getDictionaryElements().contains(dictionaryElement)) { + // Update the Dictionary Element + getAndUpdateDictionaryElement(dict, dictionaryElement); + } else { + // Create the Dictionary Element + dict.addDictionaryElements(getAndUpdateDictionaryElement(dict, dictionaryElement)); + dictionaryRepository.save(dict); + } + } + + // Fetch again to get Dictionary with most recent updates. + return dictionaryRepository.findById(dictionaryName).orElseThrow( + () -> new EntityNotFoundException("Couldn't find Dictionary named: " + dictionaryName)); + + } + + private DictionaryElement getAndUpdateDictionaryElement(Dictionary dictionary, + DictionaryElement element) { + return dictionaryElementsRepository + .save(dictionaryElementsRepository.findById(element.getShortName()) + .map(p -> updateDictionaryElement(p, element, dictionary)) + .orElse(new DictionaryElement(element.getName(), element.getShortName(), + element.getDescription(), element.getType(), element.getSubDictionary(), + Sets.newHashSet(dictionary)))); + } + + public void deleteDictionary(Dictionary dictionary) { + dictionaryRepository.delete(dictionary); + } + + public void deleteDictionary(String dictionaryName) { + dictionaryRepository.deleteById(dictionaryName); + } + + public List getAllDictionaries() { + return dictionaryRepository.findAll(); + } + + public List getAllSecondaryLevelDictionaryNames() { + return dictionaryRepository.getAllSecondaryLevelDictionaryNames(); + } + + public Dictionary getDictionary(String dictionaryName) { + return dictionaryRepository.findById(dictionaryName).orElseThrow( + () -> new EntityNotFoundException("Couldn't find Dictionary named: " + dictionaryName)); + } + + /** + * Deletes a dictionary element from Dictionary by shortName. + * + * @param dictionaryName The dictionary name + * @param dictionaryElementShortName the dictionary Element Short name + */ + public void deleteDictionaryElement(String dictionaryName, String dictionaryElementShortName) { + if (dictionaryRepository.existsById(dictionaryName)) { + DictionaryElement element = + dictionaryElementsRepository.findById(dictionaryElementShortName).orElse(null); + if (element != null) { + Dictionary dict = getDictionary(dictionaryName); + dict.removeDictionaryElement(element); + dictionaryRepository.save(dict); + } + } + } + + private DictionaryElement updateDictionaryElement(DictionaryElement oldDictionaryElement, + DictionaryElement newDictionaryElement, Dictionary dictionary) { + oldDictionaryElement.setName(newDictionaryElement.getName()); + oldDictionaryElement.setDescription(newDictionaryElement.getDescription()); + oldDictionaryElement.setType(newDictionaryElement.getType()); + oldDictionaryElement.setSubDictionary(newDictionaryElement.getSubDictionary()); + oldDictionaryElement.getUsedByDictionaries().add(dictionary); + return oldDictionaryElement; + } +} diff --git a/src/main/java/org/onap/clamp/util/SemanticVersioning.java b/src/main/java/org/onap/clamp/util/SemanticVersioning.java index bf1529c2c..102284494 100644 --- a/src/main/java/org/onap/clamp/util/SemanticVersioning.java +++ b/src/main/java/org/onap/clamp/util/SemanticVersioning.java @@ -33,12 +33,13 @@ public class SemanticVersioning { public static final int BEFORE = -1; public static final int EQUAL = 0; public static final int AFTER = 1; + public static final String DEFAULT_VERSION = "1.0.0"; /** * The compare method that compare arg0 to arg1. - * - * @param arg0 A version in string for semantice versioning (a.b.c.d...) - * @param arg1 A version in string for semantice versioning (a.b.c.d...) + * + * @param arg0 A version in string for semantic versioning (a.b.c.d...) + * @param arg1 A version in string for semantic versioning (a.b.c.d...) * @return objects (arg0, arg1) given as parameters. It returns the value: 0: if * (arg0==arg1) -1: if (arg0 < arg1) 1: if (arg0 > arg1) */ @@ -58,11 +59,13 @@ public class SemanticVersioning { int smalestStringLength = Math.min(arg0Array.length, arg1Array.length); - for (int currentVersionIndex = 0; currentVersionIndex < smalestStringLength; ++currentVersionIndex) { - if (Integer.parseInt(arg0Array[currentVersionIndex]) < Integer.parseInt(arg1Array[currentVersionIndex])) { + for (int currentVersionIndex = + 0; currentVersionIndex < smalestStringLength; ++currentVersionIndex) { + if (Integer.parseInt(arg0Array[currentVersionIndex]) < Integer + .parseInt(arg1Array[currentVersionIndex])) { return BEFORE; } else if (Integer.parseInt(arg0Array[currentVersionIndex]) > Integer - .parseInt(arg1Array[currentVersionIndex])) { + .parseInt(arg1Array[currentVersionIndex])) { return AFTER; } // equals, so do not return anything, continue @@ -73,4 +76,18 @@ public class SemanticVersioning { return Integer.compare(arg0Array.length, arg1Array.length); } } -} \ No newline at end of file + + /** + * Method to increment a version from its current version. + * + * @param currentVersion The current Version + * @return the increment version string + */ + public static String incrementMajorVersion(String currentVersion) { + if (currentVersion == null || currentVersion.isEmpty()) { + return DEFAULT_VERSION; + } + String[] versionArray = currentVersion.split("\\."); + return String.valueOf(Integer.parseInt(versionArray[0]) + 1)+".0.0"; + } +} diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml index a0a3eb104..f2db72cb8 100644 --- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml @@ -1,8 +1,6 @@ - @@ -26,14 +24,10 @@ - - + @@ -54,14 +48,10 @@ - + - + @@ -83,16 +73,11 @@ - + - + @@ -119,16 +104,11 @@ - + - + @@ -155,16 +135,13 @@ - - + @@ -192,17 +169,12 @@ - + - + - @@ -214,8 +186,7 @@ - @@ -228,8 +199,7 @@ - @@ -237,17 +207,12 @@ - + - + - @@ -256,8 +221,7 @@ - @@ -270,8 +234,7 @@ - @@ -279,17 +242,12 @@ - + - + - @@ -300,8 +258,7 @@ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DCAE UNDEPLOY request','INFO',${exchangeProperty[loopObject]})" /> - @@ -314,8 +271,7 @@ - @@ -323,17 +279,12 @@ - + - + - @@ -344,8 +295,7 @@ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request','INFO',${exchangeProperty[loopObject]})" /> - @@ -358,8 +308,7 @@ - @@ -367,17 +316,12 @@ - + - + - @@ -389,8 +333,7 @@ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('RESTART request','INFO',${exchangeProperty[loopObject]})" /> - @@ -403,8 +346,7 @@ - @@ -412,17 +354,12 @@ - + - + - @@ -435,8 +372,7 @@ false - ${exchangeProperty[loopObject].getMicroServicePolicies()} @@ -444,8 +380,7 @@ ${body} - false @@ -453,8 +388,7 @@ - ${exchangeProperty[loopObject].getOperationalPolicies()} @@ -462,8 +396,7 @@ ${body} - false @@ -472,8 +405,7 @@ - ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} @@ -481,8 +413,7 @@ ${body} - @@ -499,8 +430,7 @@ - @@ -513,8 +443,7 @@ - @@ -524,12 +453,9 @@ - + - @@ -546,14 +472,12 @@ ${body} - - ${exchangeProperty[loopObject].getOperationalPolicies()} @@ -561,12 +485,10 @@ ${body} - - ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} @@ -574,16 +496,14 @@ ${body} - - @@ -596,8 +516,7 @@ - @@ -605,17 +524,12 @@ - + - + - @@ -641,8 +555,7 @@ - @@ -655,5 +568,408 @@ + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + ${body} + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + ${body} + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + ${body} + + + + + java.lang.Exception + + true + + + 404 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + diff --git a/src/test/java/org/onap/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java b/src/test/java/org/onap/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java index 2274fcf63..5208f7ffd 100644 --- a/src/test/java/org/onap/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java +++ b/src/test/java/org/onap/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java @@ -25,9 +25,7 @@ package org.onap.clamp.clds.tosca; import static org.assertj.core.api.Assertions.assertThat; -import java.util.LinkedList; import java.util.List; - import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; @@ -55,16 +53,12 @@ public class DictionaryRepositoriesTestItCase { dictionaryTest1.setSubDictionaryType("testType"); DictionaryElement element1 = new DictionaryElement(); - element1.setDictionary(dictionaryTest1); element1.setName("element1"); element1.setShortName("shortName1"); - element1.setSubDictionary("subDictionary1"); element1.setType("type1"); element1.setDescription("description1"); - LinkedList elementList1 = new LinkedList(); - elementList1.add(element1); - dictionaryTest1.setDictionaryElements(elementList1); + dictionaryTest1.addDictionaryElements(element1); Dictionary dictionaryTest2 = new Dictionary(); dictionaryTest2.setName("testDictionary2"); @@ -72,16 +66,13 @@ public class DictionaryRepositoriesTestItCase { dictionaryTest2.setSubDictionaryType("testType"); DictionaryElement element2 = new DictionaryElement(); - element2.setDictionary(dictionaryTest2); element2.setName("element2"); element2.setShortName("shortName2"); - element2.setSubDictionary("subDictionary2"); + element2.setSubDictionary("testDictionary1"); element2.setType("type2"); element2.setDescription("description2"); - LinkedList elementList2 = new LinkedList(); - elementList2.add(element2); - dictionaryTest2.setDictionaryElements(elementList2); + dictionaryTest2.addDictionaryElements(element2); dictionaryRepository.save(dictionaryTest1); List res1 = dictionaryRepository.getAllDictionaryNames(); diff --git a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java deleted file mode 100644 index a9e279de4..000000000 --- a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights - * reserved. - * Modifications Copyright (C) 2019 Huawei Technologies Co., Ltd. - * ================================================================================ - * 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.clamp.clds.tosca; - -import static org.junit.Assert.assertNotNull; - -import java.io.IOException; - -import org.junit.Test; -import org.onap.clamp.clds.util.ResourceFileUtil; -import org.skyscreamer.jsonassert.JSONAssert; - -public class ToscaYamlToJsonConvertorTest { - - /** - * This Test validates TOSCA yaml to JSON Schema conversion based on JSON Editor - * Schema. - * - * @throws IOException In case of issue when opening the tosca yaml file and - * converted json file - */ - @Test - public final void testParseToscaYaml() throws IOException { - String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca_example.yaml"); - ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor(); - - String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml, - "onap.policies.monitoring.cdap.tca.hi.lo.app"); - assertNotNull(parsedJsonSchema); - JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json.json"), - parsedJsonSchema, true); - } - - /** - * This Test validates TOSCA yaml with constraints to JSON Schema conversion - * based on JSON Editor Schema. - * - * @throws IOException In case of issue when opening the tosca yaml file and - * converted json file - */ - @Test - public final void testParseToscaYamlWithConstraints() throws IOException { - String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-constraints.yaml"); - ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor(); - - String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml, "onap.policies.monitoring.example.app"); - assertNotNull(parsedJsonSchema); - JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-constraints.json"), - parsedJsonSchema, true); - } - - /** - * This Test validates TOSCA yaml with different datatypes to JSON Schema - * conversion based on JSON Editor Schema. - * - * @throws IOException In case of issue when opening the tosca yaml file and - * converted json file - */ - @Test - public final void testParseToscaYamlWithTypes() throws IOException { - String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-datatypes.yaml"); - ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor(); - - String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml, "onap.policies.monitoring.example.app"); - assertNotNull(parsedJsonSchema); - JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-datatypes.json"), - parsedJsonSchema, true); - } -} diff --git a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTestItCase.java b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTestItCase.java new file mode 100644 index 000000000..f426c7625 --- /dev/null +++ b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTestItCase.java @@ -0,0 +1,188 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights + * reserved. + * Modifications Copyright (C) 2019 Huawei Technologies Co., Ltd. + * ================================================================================ + * 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.clamp.clds.tosca; + +import com.google.gson.JsonObject; +import java.io.IOException; +import javax.transaction.Transactional; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.Application; +import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.tosca.Dictionary; +import org.onap.clamp.tosca.DictionaryElement; +import org.onap.clamp.tosca.DictionaryService; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = Application.class) +public class ToscaYamlToJsonConvertorTestItCase { + + @Autowired + private DictionaryService dictionaryService; + + @Autowired + private ToscaYamlToJsonConvertor toscaYamlToJsonConvertor; + + /** + * This Test validates TOSCA yaml to JSON Schema conversion based on JSON Editor + * Schema. + * + * @throws IOException In case of issue when opening the tosca yaml file and + * converted json file + */ + @Test + public final void testParseToscaYaml() throws IOException { + String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca_example.yaml"); + ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor(); + + String parsedJsonSchema = + convertor.parseToscaYaml(toscaModelYaml, "onap.policies.monitoring.cdap.tca.hi.lo.app"); + assertNotNull(parsedJsonSchema); + JSONAssert.assertEquals( + ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json.json"), + parsedJsonSchema, true); + } + + /** + * This Test validates TOSCA yaml with constraints to JSON Schema conversion + * based on JSON Editor Schema. + * + * @throws IOException In case of issue when opening the tosca yaml file and + * converted json file + */ + @Test + public final void testParseToscaYamlWithConstraints() throws IOException { + String toscaModelYaml = + ResourceFileUtil.getResourceAsString("tosca/tosca-with-constraints.yaml"); + ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor(); + + String parsedJsonSchema = + convertor.parseToscaYaml(toscaModelYaml, "onap.policies.monitoring.example.app"); + assertNotNull(parsedJsonSchema); + JSONAssert.assertEquals( + ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-constraints.json"), + parsedJsonSchema, true); + } + + /** + * This Test validates TOSCA yaml with different datatypes to JSON Schema + * conversion based on JSON Editor Schema. + * + * @throws IOException In case of issue when opening the tosca yaml file and + * converted json file + */ + @Test + public final void testParseToscaYamlWithTypes() throws IOException { + String toscaModelYaml = + ResourceFileUtil.getResourceAsString("tosca/tosca-with-datatypes.yaml"); + ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor(); + + String parsedJsonSchema = + convertor.parseToscaYaml(toscaModelYaml, "onap.policies.monitoring.example.app"); + assertNotNull(parsedJsonSchema); + JSONAssert.assertEquals( + ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-datatypes.json"), + parsedJsonSchema, true); + } + + /** + * This Test validates Tosca yaml with metadata tag that contains policy_model_type and acronym + * parameters which defines the Tosca Policy name and its short name. + * + * @throws IOException In case of issue when opening the tosca yaml file and + * converted json file + */ + @Test + @Transactional + public final void testMetadataClampPossibleValues() throws IOException { + + // Set up dictionary elements + Dictionary dictionaryTest = new Dictionary(); + dictionaryTest.setName("Context"); + dictionaryTest.setSecondLevelDictionary(0); + + DictionaryElement element = new DictionaryElement(); + element.setName("PROD"); + element.setShortName("PROD"); + element.setType("string"); + element.setDescription("Production"); + dictionaryTest.addDictionaryElements(element); + + dictionaryService.saveOrUpdateDictionary(dictionaryTest); + + Dictionary dictionaryTest1 = new Dictionary(); + dictionaryTest1.setName("EventDictionary"); + dictionaryTest1.setSecondLevelDictionary(0); + + DictionaryElement element1 = new DictionaryElement(); + element1.setName("alarmCondition"); + element1.setShortName("alarmCondition"); + element1.setType("string"); + element1.setDescription("Alarm Condition"); + dictionaryTest1.addDictionaryElements(element1); + + dictionaryService.saveOrUpdateDictionary(dictionaryTest1); + + Dictionary dictionaryTest2 = new Dictionary(); + dictionaryTest2.setName("Operators"); + dictionaryTest2.setSecondLevelDictionary(0); + + DictionaryElement element2 = new DictionaryElement(); + element2.setName("equals"); + element2.setShortName("equals"); + element2.setType("string"); + element2.setDescription("equals"); + dictionaryTest2.addDictionaryElements(element2); + dictionaryService.saveOrUpdateDictionary(dictionaryTest2); + + String toscaModelYaml = + ResourceFileUtil.getResourceAsString("tosca/tosca_metadata_clamp_possible_values.yaml"); + + JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(toscaModelYaml); + assertNotNull(jsonObject); + String policyModelType = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, + ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE); + String acronym = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, + ToscaSchemaConstants.METADATA_ACRONYM); + String parsedJsonSchema = + toscaYamlToJsonConvertor.parseToscaYaml(toscaModelYaml, policyModelType); + + assertNotNull(parsedJsonSchema); + assertEquals("onap.policies.monitoring.cdap.tca.hi.lo.app", policyModelType); + assertEquals("tca", acronym); + JSONAssert.assertEquals( + ResourceFileUtil + .getResourceAsString("tosca/tosca_metadata_clamp_possible_values_json_schema.json"), + parsedJsonSchema, true); + } + +} diff --git a/src/test/java/org/onap/clamp/loop/LoopTemplatesServiceItCase.java b/src/test/java/org/onap/clamp/loop/LoopTemplatesServiceItCase.java new file mode 100644 index 000000000..3a36a5d82 --- /dev/null +++ b/src/test/java/org/onap/clamp/loop/LoopTemplatesServiceItCase.java @@ -0,0 +1,145 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.SortedSet; +import javax.transaction.Transactional; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.Application; +import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.LoopTemplateLoopElementModel; +import org.onap.clamp.loop.template.LoopTemplatesService; +import org.onap.clamp.loop.template.LoopType; +import org.onap.clamp.loop.template.PolicyModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class LoopTemplatesServiceItCase { + + @Autowired + LoopTemplatesService loopTemplatesService; + + private static final String POLICY_MODEL_TYPE_1 = "org.onap.test"; + private static final String VERSION = "1.0.0"; + + private LoopElementModel getLoopElementModel(String yaml, String name, String loopElementType, + String createdBy, PolicyModel policyModel) { + LoopElementModel model = new LoopElementModel(name, loopElementType, yaml); + model.setBlueprint(""); + model.setDcaeBlueprintId(""); + model.addPolicyModel(policyModel); + return model; + } + + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, + String policyAcronym, String createdBy) { + return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); + } + + private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, + String createdBy, Integer maxInstancesAllowed) { + LoopTemplate template = + new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); + template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "MicroService", + createdBy, getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", VERSION, "MS1", createdBy))); + template.setAllowedLoopType(LoopType.OPEN); + return template; + } + + @Test + @Transactional + public void shouldSaveOrUpdateLoopTemplate() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "svg", "xyz", -1); + LoopTemplate actualLoopTemplate = + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + + assertNotNull(actualLoopTemplate); + assertThat(loopTemplate.getName()).isEqualTo("TemplateName"); + assertThat(loopTemplate.getAllowedLoopType()).isEqualTo(LoopType.OPEN); + } + + @Test + @Transactional + public void shouldReturnAllLoopemplates() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "svg", "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + List loopTemplateList = loopTemplatesService.getAllLoopTemplates(); + + assertNotNull(loopTemplateList); + } + + @Test + @Transactional + public void shouldReturnLoopemplateNames() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "svg", "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + List loopTemplateNames = loopTemplatesService.getLoopTemplateNames(); + + assertNotNull(loopTemplateNames); + assertEquals("TemplateName", loopTemplateNames.get(0)); + } + + @Test + @Transactional + public void shouldReturnLoopemplate() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "svg", "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + LoopTemplate actualLoopTemplate = loopTemplatesService.getLoopTemplate("TemplateName"); + + assertNotNull(actualLoopTemplate); + assertThat(loopTemplate).isEqualTo(actualLoopTemplate); + assertThat(loopTemplate.getName()).isEqualTo(actualLoopTemplate.getName()); + assertThat(loopTemplate.getMaximumInstancesAllowed()) + .isEqualTo(actualLoopTemplate.getMaximumInstancesAllowed()); + SortedSet loopElementModelsUsed = + loopTemplate.getLoopElementModelsUsed(); + LoopTemplateLoopElementModel loopTemplateLoopElementModel = loopElementModelsUsed.first(); + assertThat(loopTemplateLoopElementModel.getLoopElementModel().getName()) + .isEqualTo("microService1"); + assertThat(loopTemplateLoopElementModel.getLoopTemplate().getName()) + .isEqualTo("TemplateName"); + } + + @Test + @Transactional + public void shouldDeleteLoopemplate() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "svg", "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + loopTemplatesService.deleteLoopTemplate("TemplateName"); + LoopTemplate actualLoopTemplate = loopTemplatesService.getLoopTemplate("TemplateName"); + assertNull(actualLoopTemplate); + } + +} diff --git a/src/test/java/org/onap/clamp/tosca/DictionaryServiceItCase.java b/src/test/java/org/onap/clamp/tosca/DictionaryServiceItCase.java new file mode 100644 index 000000000..55d347ceb --- /dev/null +++ b/src/test/java/org/onap/clamp/tosca/DictionaryServiceItCase.java @@ -0,0 +1,247 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.tosca; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; +import javax.persistence.EntityNotFoundException; +import javax.transaction.Transactional; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.Application; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class DictionaryServiceItCase { + + @Autowired + private DictionaryService dictionaryService; + + @Autowired + private DictionaryElementsRepository dictionaryElementsRepository; + + private DictionaryElement getDictionaryElement(String shortName, String name, + String description, String type, String subDictionaryName) { + + return new DictionaryElement(name, shortName, description, type, subDictionaryName); + + } + + private Dictionary getSimpleDictionaryExample() { + + Dictionary dictionary = new Dictionary("Dictionary1", 0, null); + + dictionary.addDictionaryElements(getDictionaryElement("DE1", "DictionaryElement1", + "DictionaryElement1", "string", null)); + + dictionary.addDictionaryElements(getDictionaryElement("DE2", "DictionaryElement2", + "DictionaryElement2", "number", null)); + + return dictionary; + } + + private Dictionary getSecondaryDictionaryExample() { + + Dictionary dictionary = new Dictionary("SecondaryDict", 1, "string"); + + dictionary.addDictionaryElements(getDictionaryElement("SDE1", "SecondaryDictElement1", + "SecondaryDictElement1", "string", null)); + + dictionary.addDictionaryElements(getDictionaryElement("SDE2", "SecondaryDictElement2", + "SecondaryDictElement2", "string", null)); + + return dictionary; + } + + /** + * Test to validate that Dictionary is created. + */ + @Test + @Transactional + public void shouldCreateDictionary() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary actualDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); + assertNotNull(actualDictionary); + assertThat(actualDictionary).isEqualTo(dictionary); + assertThat(actualDictionary.getName()).isEqualTo(dictionary.getName()); + + assertThat(actualDictionary.getDictionaryElements()).contains( + dictionaryElementsRepository.findById("DE1").get(), + dictionaryElementsRepository.findById("DE2").get()); + } + + /** + * Test to validate a DictionaryElement is created for a Dictionary. + */ + @Test + @Transactional + public void shouldCreateorUpdateDictionaryElement() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary actualDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); + DictionaryElement dictionaryElement = + getDictionaryElement("DictionaryElement3", "DE3", "DictionaryElement3", "date", null); + actualDictionary.addDictionaryElements(dictionaryElement); + Dictionary updatedDictionary = dictionaryService + .saveOrUpdateDictionaryElement(actualDictionary.getName(), actualDictionary); + assertNotNull(updatedDictionary); + assertTrue(updatedDictionary.getDictionaryElements().contains(dictionaryElement)); + assertThat(updatedDictionary.getName()).isEqualTo(actualDictionary.getName()); + // update the dictionary element. + dictionaryElement.setDescription("DictionaryElement3 New Description"); + Dictionary dictionary3 = new Dictionary("Dictionary1", 0, null); + dictionary3.addDictionaryElements(dictionaryElement); + Dictionary updatedDictionary2 = + dictionaryService.saveOrUpdateDictionaryElement(dictionary3.getName(), dictionary3); + + assertNotNull(updatedDictionary2); + assertTrue(updatedDictionary2.getDictionaryElements().contains(dictionaryElement)); + updatedDictionary2.getDictionaryElements().forEach(element -> { + if (element.equals(dictionaryElement)) { + assertTrue(element.getDescription().equals(dictionaryElement.getDescription())); + } + }); + + } + + /** + * Test to validate that All Dictionaries are retrieved. + */ + @Test + @Transactional + public void shouldReturnAllDictionaries() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary secondaryDictionary = getSecondaryDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + dictionaryService.saveOrUpdateDictionary(secondaryDictionary); + + List list = dictionaryService.getAllDictionaries(); + assertNotNull(list); + assertThat(list).contains(dictionary, secondaryDictionary); + } + + /** + * Test to validate one Dictionary is returned. + */ + @Test + @Transactional + public void shouldReturnOneDictionary() { + Dictionary dictionary = getSimpleDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + + Dictionary returnedDictionary = dictionaryService.getDictionary("Dictionary1"); + assertNotNull(returnedDictionary); + assertThat(returnedDictionary).isEqualTo(dictionary); + assertThat(returnedDictionary.getDictionaryElements()) + .isEqualTo(dictionary.getDictionaryElements()); + } + + /** + * Test to validate one Dictionary is returned. + */ + @Test + @Transactional + public void shouldReturnEntityNotFoundException() { + try { + dictionaryService.getDictionary("Test"); + } catch (Exception e) { + assertThat(e).isInstanceOf(EntityNotFoundException.class); + assertTrue(e.getMessage().equals("Couldn't find Dictionary named: Test")); + } + } + + /** + * Test to validate Dictionary is deleted. + */ + @Test + @Transactional + public void shouldDeleteDictionaryByObject() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary returnedDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); + + dictionaryService.deleteDictionary(returnedDictionary); + try { + dictionaryService.getDictionary("Dictionary1"); + } catch (EntityNotFoundException e) { + assertTrue(e.getMessage().equals("Couldn't find Dictionary named: Dictionary1")); + } + } + + /** + * Test to validate Dictionary is deleted by Name. + */ + @Test + @Transactional + public void shouldDeleteDictionaryByName() { + Dictionary dictionary = getSimpleDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + dictionaryService.deleteDictionary(dictionary.getName()); + try { + dictionaryService.getDictionary("Dictionary1"); + } catch (EntityNotFoundException e) { + assertTrue(e.getMessage().equals("Couldn't find Dictionary named: Dictionary1")); + } + } + + /** + * Test to validate DictionaryElements is deleted by Name. + */ + @Test + @Transactional + public void shouldDeleteDictionaryElementsByName() { + Dictionary dictionary = getSimpleDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + DictionaryElement dictionaryElement = + dictionaryElementsRepository.findById("DE1").orElse(null); + assertNotNull(dictionaryElement); + dictionaryService.deleteDictionaryElement("Dictionary1", "DE1"); + dictionary = dictionaryService.getDictionary("Dictionary1"); + DictionaryElement deletedDictionaryElement = + dictionaryElementsRepository.findById("DE1").orElse(null); + assertThat(deletedDictionaryElement).isNotIn(dictionary.getDictionaryElements()); + } + + /** + * Test to validate all secondary level dictionary names are returned. + */ + @Test + @Transactional + public void shouldReturnAllSecondaryLevelDictionaryNames() { + Dictionary dictionary = getSecondaryDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + + Dictionary dictionary2 = new Dictionary("SecondaryDict2", 1, "string"); + dictionaryService.saveOrUpdateDictionary(dictionary2); + List secondaryDictionaryNames = + dictionaryService.getAllSecondaryLevelDictionaryNames(); + + assertNotNull(secondaryDictionaryNames); + assertThat(secondaryDictionaryNames).contains(dictionary.getName(), dictionary2.getName()); + } +} diff --git a/src/test/java/org/onap/clamp/util/SemanticVersioningTest.java b/src/test/java/org/onap/clamp/util/SemanticVersioningTest.java index 1fb5922fd..e018f0952 100644 --- a/src/test/java/org/onap/clamp/util/SemanticVersioningTest.java +++ b/src/test/java/org/onap/clamp/util/SemanticVersioningTest.java @@ -6,27 +6,27 @@ * 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 not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END============================================ * =================================================================== - * + * */ package org.onap.clamp.util; -import static org.assertj.core.api.Assertions.assertThat; - import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; + public class SemanticVersioningTest { @Test @@ -68,4 +68,12 @@ public class SemanticVersioningTest { assertThat(SemanticVersioning.compare(null, "1.0")).isEqualTo(-1); assertThat(SemanticVersioning.compare("1.0", null)).isEqualTo(1); } + + @Test + public void incrementVersionTest() { + assertThat(SemanticVersioning.incrementMajorVersion("1.0")).isEqualTo("2.0.0"); + assertThat(SemanticVersioning.incrementMajorVersion("1.0.0")).isEqualTo("2.0.0"); + assertThat(SemanticVersioning.incrementMajorVersion("1")).isEqualTo("2.0.0"); + assertThat(SemanticVersioning.incrementMajorVersion("1.2.3")).isEqualTo("2.0.0"); + } } diff --git a/src/test/resources/clds/camel/rest/clamp-api-v2.xml b/src/test/resources/clds/camel/rest/clamp-api-v2.xml new file mode 100644 index 000000000..b0a8d2fd7 --- /dev/null +++ b/src/test/resources/clds/camel/rest/clamp-api-v2.xml @@ -0,0 +1,984 @@ + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + ${body} + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + ${body} + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + ${body} + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + false + + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + + false + + + + + + + ${exchangeProperty[loopObject].getOperationalPolicies()} + + + ${body} + + + + false + + + + + + + + ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} + + + ${body} + + + + + false + + + + + + + + 3000 + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + + + + + + ${exchangeProperty[loopObject].getOperationalPolicies()} + + + ${body} + + + + + + ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} + + + ${body} + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + ${exchangeProperty[loopObject]} + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + ${body} + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + ${body} + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + ${body} + + + + + java.lang.Exception + + true + + + 404 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + true + + + 500 + + + ERROR: ${exception.message} + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + diff --git a/src/test/resources/tosca/tosca_metadata_clamp_possible_values.yaml b/src/test/resources/tosca/tosca_metadata_clamp_possible_values.yaml new file mode 100644 index 000000000..4d3c3dff2 --- /dev/null +++ b/src/test/resources/tosca/tosca_metadata_clamp_possible_values.yaml @@ -0,0 +1,184 @@ +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.policies.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 + metadata: + policy_model_type: onap.policies.monitoring.cdap.tca.hi.lo.app + acronym: tca + +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 + context: + type: string + required: true + description: TCA Policy Dummy Context + metadata: + clamp_possible_values: ["Dictionary:Context"] + + signature: + type: onap.datatypes.monitoring.Dummy_Signature + description: Signature + required: true + + onap.datatypes.monitoring.Dummy_Signature: + derived_from: tosca.datatypes.Root + properties: + filter_clause: + type: string + description: Filter Clause + required: true + metadata: + clamp_possible_values: ["Dictionary:EventDictionary#Operators"] + + 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/src/test/resources/tosca/tosca_metadata_clamp_possible_values_json_schema.json b/src/test/resources/tosca/tosca_metadata_clamp_possible_values_json_schema.json new file mode 100644 index 000000000..af8c1f961 --- /dev/null +++ b/src/test/resources/tosca/tosca_metadata_clamp_possible_values_json_schema.json @@ -0,0 +1,235 @@ +{ + "schema":{ + "uniqueItems":"true", + "format":"tabs-top", + "type":"array", + "title":"TCA Policy JSON", + "items":{ + "type":"object", + "title":"TCA Policy JSON", + "required":[ + "domain", + "metricsPerEventName" + ], + "properties":{ + "domain":{ + "propertyOrder":1001, + "default":"measurementsForVfScaling", + "title":"Domain name to which TCA needs to be applied", + "type":"string" + }, + "metricsPerEventName":{ + "propertyOrder":1002, + "uniqueItems":"true", + "format":"tabs-top", + "title":"Contains eventName and threshold details that need to be applied to given eventName", + "type":"array", + "items":{ + "type":"object", + "required":[ + "controlLoopSchemaType", + "eventName", + "policyName", + "policyScope", + "policyVersion", + "thresholds", + "context", + "signature" + ], + "properties":{ + "policyVersion":{ + "propertyOrder":1007, + "title":"TCA Policy Scope Version", + "type":"string" + }, + "thresholds":{ + "propertyOrder":1008, + "uniqueItems":"true", + "format":"tabs-top", + "title":"Thresholds associated with eventName", + "type":"array", + "items":{ + "type":"object", + "required":[ + "closedLoopControlName", + "closedLoopEventStatus", + "direction", + "fieldPath", + "severity", + "thresholdValue", + "version" + ], + "properties":{ + "severity":{ + "propertyOrder":1013, + "title":"Threshold Event Severity", + "type":"string", + "enum":[ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "NORMAL" + ] + }, + "fieldPath":{ + "propertyOrder":1012, + "title":"Json field Path as per CEF message which needs to be analyzed for TCA", + "type":"string", + "enum":[ + "$.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" + ] + }, + "thresholdValue":{ + "propertyOrder":1014, + "title":"Threshold value for the field Path inside CEF message", + "type":"integer" + }, + "closedLoopEventStatus":{ + "propertyOrder":1010, + "title":"Closed Loop Event Status of the threshold", + "type":"string", + "enum":[ + "ONSET", + "ABATED" + ] + }, + "closedLoopControlName":{ + "propertyOrder":1009, + "title":"Closed Loop Control Name associated with the threshold", + "type":"string" + }, + "version":{ + "propertyOrder":1015, + "title":"Version number associated with the threshold", + "type":"string" + }, + "direction":{ + "propertyOrder":1011, + "title":"Direction of the threshold", + "type":"string", + "enum":[ + "LESS", + "LESS_OR_EQUAL", + "GREATER", + "GREATER_OR_EQUAL", + "EQUAL" + ] + } + } + } + }, + "policyName":{ + "propertyOrder":1005, + "title":"TCA Policy Scope Name", + "type":"string" + }, + "signature":{ + "propertyOrder":1017, + "title":"Signature", + "required":[ + "filter_clause" + ], + "properties":{ + "filter_clause":{ + "propertyOrder":30002, + "qschema":{ + "filters":[ + { + "operators":[ + "equals" + ], + "minLength":1, + "id":"alarmCondition", + "label":"alarmCondition", + "type":"string" + } + ] + }, + "minLength":1, + "title":"Filter Clause", + "type":"qbldr" + } + } + }, + "controlLoopSchemaType":{ + "propertyOrder":1003, + "title":"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM", + "type":"string", + "enum":[ + "VM", + "VNF" + ] + }, + "policyScope":{ + "propertyOrder":1006, + "title":"TCA Policy Scope", + "type":"string" + }, + "context":{ + "propertyOrder":1016, + "options":{ + "enum_titles":[ + "PROD" + ] + }, + "title":"TCA Policy Dummy Context", + "type":"string", + "enum":[ + "PROD" + ] + }, + "eventName":{ + "propertyOrder":1004, + "title":"Event name to which thresholds need to be applied", + "type":"string" + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/ui-react/src/LoopUI.js b/ui-react/src/LoopUI.js index 9eea0be95..19b0814db 100644 --- a/ui-react/src/LoopUI.js +++ b/ui-react/src/LoopUI.js @@ -43,6 +43,7 @@ import ConfigurationPolicyModal from './components/dialogs/ConfigurationPolicy/C import LoopPropertiesModal from './components/dialogs/Loop/LoopPropertiesModal'; import UserInfoModal from './components/dialogs/UserInfoModal'; import LoopService from './api/LoopService'; +import UploadToscaPolicyModal from './components/dialogs/Tosca/UploadToscaPolicyModal'; import ViewToscaPolicyModal from './components/dialogs/Tosca/ViewToscaPolicyModal'; import ViewBlueprintMicroServiceTemplatesModal from './components/dialogs/Tosca/ViewBlueprintMicroServiceTemplatesModal'; import PerformAction from './components/dialogs/PerformActions'; @@ -248,6 +249,7 @@ export default class LoopUI extends React.Component { render() { return ( + ()} /> ()} /> ()} /> + + { + if (event.target.files && event.target.files[0]) { + const scope = this; + let reader = new FileReader(); + this.setState({policyModelType: '', policyModelTosca: '' }); + reader.onload = function(e) { + var lines = reader.result.split('\n'); + for (var line = 0; line < lines.length; line++) { + if(lines[line].trim().slice(0, 24) === 'onap.policies.monitoring') { + var microsvc = lines[line].trim().slice(0, -1); + scope.setState({ policyModelType: microsvc, policyModelTosca: reader.result}); + } + } + }; + console.log("Filename is", event.target.files[0]); + reader.readAsText(event.target.files[0]); + } + this.setState({selectedFile: event.target.files[0]}); + }; + + handleClose() { + this.setState({ show: false }); + this.props.history.push('/'); + } + + handleUploadToscaPolicyModel(e) { + e.preventDefault(); + console.log("Policy Model Type is", this.state.policyModelType); + if(this.state.policyModelType && this.state.policyModelTosca) { + TemplateMenuService.uploadToscaPolicyModal(this.state.policyModelType, this.state.policyModelTosca).then(resp => { + if(resp.status === 200) { + this.setState({apiResponseStatus: resp.status, apiResponseMessage: resp.message, upldBtnClicked: true}); + } else { + this.setState({apiResponseStatus: 500, apiResponseMessage: resp, upldBtnClicked: true}); + } + }); + } else { + this.setState({apiResponse: 500, apiResponseMessage: 'Parameters are missing', upldBtnClicked: true}); + } +} + + handlePolicyModelType = event => { + this.setState({ + policyModelType: event.target.value + }) + } + + render() { + return ( + + + Upload Tosca Modal + + + + + this.fileInput = fileInput}/> + + +

    {this.state.selectedFile.name}

    +
    + Micro Service Name: + + +
    +
    + + {!this.state.apiResponseStatus?:""} + {!this.state.apiResponseStatus?:""} + {this.state.apiResponseStatus? +

    {this.state.apiResponseMessage}

    + +
    :""} +
    +
    + ); + } +} diff --git a/ui-react/src/components/dialogs/Tosca/UploadToscaPolicyModal.test.js b/ui-react/src/components/dialogs/Tosca/UploadToscaPolicyModal.test.js new file mode 100644 index 000000000..dac8ac920 --- /dev/null +++ b/ui-react/src/components/dialogs/Tosca/UploadToscaPolicyModal.test.js @@ -0,0 +1,87 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ +import React from 'react'; +import { shallow } from 'enzyme'; +import UploadToscaPolicyModal from './UploadToscaPolicyModal'; + + +describe('Test Upload Tosca Policy Model', () => { + + it('Test handleMicroServiceName', () => { + + const component = shallow(); + + const inputValue = 'TCA' + + const button = component.find('input').at(1); + + button.simulate('change', { target: { value: inputValue }}); + + expect(component.state('policyModelType')).toEqual(inputValue); + + expect(component).toMatchSnapshot(); + + }); + + it('Test handleUploadToscaPolicyModel for Tosca Model', () => { + + const component = shallow(); + + const fakeEvent = { preventDefault: () => console.log('preventDefault') }; + + component.setState({ + policyModelType: "TCA", + upldBtnClicked: false, + policyModelTosca: "TCAToscaModelYaml", + selectedFile: { name: "tca.yaml"} + }); + + const Button = component.find('Button').at(1); + + Button.simulate('click', fakeEvent); + + expect(component.state('policyModelTosca')).toEqual('TCAToscaModelYaml'); + + }); + + it('Test handleClose', () => { + + const historyMock = { push: jest.fn() }; + + const handleClose = jest.spyOn(UploadToscaPolicyModal.prototype,'handleClose'); + + const component = shallow() + + component.find('[variant="secondary"]').at(1).prop('onClick')(); + + expect(handleClose).toHaveBeenCalledTimes(1); + + expect(component.state('show')).toEqual(false); + + expect(historyMock.push.mock.calls[0]).toEqual([ '/']); + + handleClose.mockClear(); + + }); + +}); diff --git a/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.js b/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.js index 6a93d4d98..5b66a25c0 100644 --- a/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.js +++ b/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.js @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2020 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -58,29 +58,29 @@ export default class ViewToscalPolicyModal extends React.Component { show: true, content: 'Please select Tosca model to view the details', selectedRow: -1, - toscaNames: [], + toscaPolicyModelNames: [], toscaColumns: [ { title: "#", field: "index", render: rowData => rowData.tableData.id + 1, cellStyle: cellStyle, headerStyle: headerStyle }, - { title: "Micro Service Name", field: "toscaModelName", + { title: "Policy Model Type", field: "policyModelType", cellStyle: cellStyle, headerStyle: headerStyle }, - { title: "PolicyType", field: "policyType", + { title: "Policy Acronym", field: "policyAcronym", cellStyle: cellStyle, headerStyle: headerStyle }, - { title: "Version", field: "toscaModelRevisions[0].version", + { title: "Version", field: "version", cellStyle: cellStyle, headerStyle: headerStyle }, - { title: "Uploaded By", field: "userId", + { title: "Uploaded By", field: "updatedBy", cellStyle: cellStyle, headerStyle: headerStyle }, - { title: "Uploaded Date", field: "lastUpdatedDate", editable: 'never', + { title: "Uploaded Date", field: "updatedDate", editable: 'never', cellStyle: cellStyle, headerStyle: headerStyle } @@ -101,6 +101,7 @@ export default class ViewToscalPolicyModal extends React.Component { this.handleClose = this.handleClose.bind(this); this.getPolicyToscaModels = this.getToscaPolicyModels.bind(this); this.handleYamlContent = this.handleYamlContent.bind(this); + this.getToscaPolicyModelYaml = this.getToscaPolicyModelYaml.bind(this); } componentWillMount() { @@ -108,11 +109,25 @@ export default class ViewToscalPolicyModal extends React.Component { } getToscaPolicyModels() { - TemplateMenuService.getToscaPolicyModels().then(toscaNames => { - this.setState({ toscaNames: toscaNames }); + TemplateMenuService.getToscaPolicyModels().then(toscaPolicyModelNames => { + this.setState({ toscaPolicyModelNames: toscaPolicyModelNames }); }); } + getToscaPolicyModelYaml(policyModelType) { + if (typeof policyModelType !== "undefined") { + TemplateMenuService.getToscaPolicyModelYaml(policyModelType).then(toscaYaml => { + if (toscaYaml.length !== 0) { + this.setState({content: toscaYaml}) + } else { + this.setState({ content: 'Please select Tosca model to view the details' }) + } + }); + } else { + this.setState({ content: 'Please select Tosca model to view the details' }) + } + } + handleYamlContent(event) { this.setState({ content: event.target.value }); } @@ -130,10 +145,10 @@ export default class ViewToscalPolicyModal extends React.Component { {this.setState({content: rowData.toscaModelRevisions[0].toscaModelYaml, selectedRow: rowData.tableData.id})}} + onRowClick={(event, rowData) => {this.getToscaPolicyModelYaml(rowData.policyModelType);this.setState({selectedRow: rowData.tableData.id})}} options={{ headerStyle: rowHeaderStyle, rowStyle: rowData => ({ diff --git a/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.test.js b/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.test.js index 1445e8863..952e88867 100644 --- a/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.test.js +++ b/ui-react/src/components/dialogs/Tosca/ViewToscaPolicyModal.test.js @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2020 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -39,12 +39,12 @@ describe('Verify ViewToscaPolicyModal', () => { json: () => { return Promise.resolve({ "index": "1", - "toscaModelYaml":"MTCA", - "toscaModelName":"DCAE_MTCAConfig", - "version":"16", - "userId":"aj928f", - "policyType":"mtca", - "lastUpdatedDate":"05-07-2019 19:09:42" + "policyModelTosca":"TCA", + "policyModelType":"onap.policies.monitoring.cdap.tca.hi.lo.app", + "version":"1.0.0", + "policyAcronym": "TCA", + "updatedDate": "2020-01-31T20:49:48.658795600Z", + "updatedBy": "admin" }); } }); @@ -60,11 +60,12 @@ describe('Verify ViewToscaPolicyModal', () => { json: () => { return Promise.resolve({ "index": "1", - "toscaModelName":"DCAE_MTCAConfig", - "version":"16", - "userId":"aj928f", - "policyType":"mtca", - "lastUpdatedDate":"05-07-2019 19:09:42" + "policyModelTosca":"TCA", + "policyModelType":"onap.policies.monitoring.cdap.tca.hi.lo.app", + "version":"1.0.0", + "policyAcronym": "TCA", + "updatedDate": "2020-01-31T20:49:48.658795600Z", + "updatedBy": "admin" }); } }); @@ -95,12 +96,12 @@ describe('Verify ViewToscaPolicyModal', () => { json: () => { return Promise.resolve({ "index": "1", - "toscaModelYaml":"MTCA", - "toscaModelName":"DCAE_MTCAConfig", - "version":"16", - "userId":"aj928f", - "policyType":"mtca", - "lastUpdatedDate":"05-07-2019 19:09:42" + "policyModelTosca":"TCA", + "policyModelType":"onap.policies.monitoring.cdap.tca.hi.lo.app", + "version":"1.0.0", + "policyAcronym": "TCA", + "updatedDate": "2020-01-31T20:49:48.658795600Z", + "updatedBy": "admin" }); } }); @@ -108,12 +109,12 @@ describe('Verify ViewToscaPolicyModal', () => { const component = shallow(); component.setState({ toscaNames: { "index": "1", - "toscaModelYaml": "MTCA", - "toscaModelName": "DCAE_MTCAConfig", - "version" : "16", - "userId" : "aj928f", - "policyType" : "mtca", - "lastUpdatedDate" : "05-07-2019 19:09:42" + "policyModelTosca":"TCA", + "policyModelType":"onap.policies.monitoring.cdap.tca.hi.lo.app", + "version":"1.0.0", + "policyAcronym": "TCA", + "updatedDate": "2020-01-31T20:49:48.658795600Z", + "updatedBy": "admin" } }); expect(component).toMatchSnapshot(); @@ -127,12 +128,12 @@ describe('Verify ViewToscaPolicyModal', () => { json: () => { return Promise.resolve({ "index": "1", - "toscaModelYaml":"MTCA", - "toscaModelName":"DCAE_MTCAConfig", - "version":"16", - "userId":"aj928f", - "policyType":"mtca", - "lastUpdatedDate":"05-07-2019 19:09:42" + "policyModelTosca":"TCA", + "policyModelType":"onap.policies.monitoring.cdap.tca.hi.lo.app", + "version":"1.0.0", + "policyAcronym": "TCA", + "updatedDate": "2020-01-31T20:49:48.658795600Z", + "updatedBy": "admin" }); } }); @@ -149,17 +150,17 @@ describe('Verify ViewToscaPolicyModal', () => { json: () => { return Promise.resolve({ "index": "1", - "toscaModelYaml":"MTCA", - "toscaModelName":"DCAE_MTCAConfig", - "version":"16", - "userId":"aj928f", - "policyType":"mtca", - "lastUpdatedDate":"05-07-2019 19:09:42" + "policyModelTosca":"TCA", + "policyModelType":"onap.policies.monitoring.cdap.tca.hi.lo.app", + "version":"1.0.0", + "policyAcronym":"TCA", + "updatedDate": "2020-01-31T20:49:48.658795600Z", + "updatedBy": "admin" }); } }); }); - const yamlContent = 'MTCA Tosca model details'; + const yamlContent = 'TCA Tosca model details'; const component = shallow(); component.find('[value="Please select Tosca model to view the details"]').prop('onChange')({ target: { value: yamlContent }}); expect(component.state('content')).toEqual(yamlContent); @@ -173,12 +174,12 @@ describe('Verify ViewToscaPolicyModal', () => { json: () => { return Promise.resolve({ "index": "1", - "toscaModelYaml":"MTCA", - "toscaModelName":"DCAE_MTCAConfig", - "version":"16", - "userId":"aj928f", - "policyType":"mtca", - "lastUpdatedDate":"05-07-2019 19:09:42" + "policyModelTosca":"TCA", + "policyModelType":"onap.policies.monitoring.cdap.tca.hi.lo.app", + "version":"1.0.0", + "policyAcronym": "TCA", + "updatedDate": "2020-01-31T20:49:48.658795600Z", + "updatedBy": "admin" }); } }); diff --git a/ui-react/src/components/dialogs/Tosca/__snapshots__/UploadToscaPolicyModal.test.js.snap b/ui-react/src/components/dialogs/Tosca/__snapshots__/UploadToscaPolicyModal.test.js.snap new file mode 100644 index 000000000..1b5cd82a8 --- /dev/null +++ b/ui-react/src/components/dialogs/Tosca/__snapshots__/UploadToscaPolicyModal.test.js.snap @@ -0,0 +1,111 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Test Upload Tosca Policy Model Test handleMicroServiceName 1`] = ` + + + + Upload Tosca Modal + + + + + + + + +

    + + + Micro Service Name: + + + + + + + + + + +`; diff --git a/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewToscaPolicyModal.test.js.snap b/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewToscaPolicyModal.test.js.snap index e7294c080..fc5eef024 100644 --- a/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewToscaPolicyModal.test.js.snap +++ b/ui-react/src/components/dialogs/Tosca/__snapshots__/ViewToscaPolicyModal.test.js.snap @@ -30,29 +30,29 @@ exports[`Verify ViewToscaPolicyModal Test the tosca model view render method 1`] "cellStyle": Object { "border": "1px solid black", }, - "field": "toscaModelName", + "field": "policyModelType", "headerStyle": Object { "backgroundColor": "#ddd", "border": "2px solid black", }, - "title": "Micro Service Name", + "title": "Policy Model Type", }, Object { "cellStyle": Object { "border": "1px solid black", }, - "field": "policyType", + "field": "policyAcronym", "headerStyle": Object { "backgroundColor": "#ddd", "border": "2px solid black", }, - "title": "PolicyType", + "title": "Policy Acronym", }, Object { "cellStyle": Object { "border": "1px solid black", }, - "field": "toscaModelRevisions[0].version", + "field": "version", "headerStyle": Object { "backgroundColor": "#ddd", "border": "2px solid black", @@ -63,7 +63,7 @@ exports[`Verify ViewToscaPolicyModal Test the tosca model view render method 1`] "cellStyle": Object { "border": "1px solid black", }, - "field": "userId", + "field": "updatedBy", "headerStyle": Object { "backgroundColor": "#ddd", "border": "2px solid black", @@ -75,7 +75,7 @@ exports[`Verify ViewToscaPolicyModal Test the tosca model view render method 1`] "border": "1px solid black", }, "editable": "never", - "field": "lastUpdatedDate", + "field": "updatedDate", "headerStyle": Object { "backgroundColor": "#ddd", "border": "2px solid black", @@ -84,17 +84,7 @@ exports[`Verify ViewToscaPolicyModal Test the tosca model view render method 1`] }, ] } - data={ - Object { - "index": "1", - "lastUpdatedDate": "05-07-2019 19:09:42", - "policyType": "mtca", - "toscaModelName": "DCAE_MTCAConfig", - "toscaModelYaml": "MTCA", - "userId": "aj928f", - "version": "16", - } - } + data={Array []} icons={ Object { "FirstPage": Object { diff --git a/ui-react/src/components/menu/MenuBar.js b/ui-react/src/components/menu/MenuBar.js index 41a105488..6fae008ef 100644 --- a/ui-react/src/components/menu/MenuBar.js +++ b/ui-react/src/components/menu/MenuBar.js @@ -88,7 +88,8 @@ export default class MenuBar extends React.Component { - View Tosca Policy Models + Upload Tosca Policy Model + View Tosca Policy Models View Blueprint MicroService Templates diff --git a/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap b/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap index c17214aad..7ed386ff2 100644 --- a/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap +++ b/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap @@ -38,6 +38,57 @@ exports[`Verify MenuBar Test the render method 1`] = ` [Function], "; } +", + ], + }, + "displayName": "Styled(Link)", + "foldedComponentIds": Array [], + "render": [Function], + "styledComponentId": "sc-bdVaJa", + "target": [Function], + "toString": [Function], + "warnTooManyClasses": [Function], + "withComponent": [Function], + } + } + disabled={false} + to="/uploadToscaPolicyModal" + > + Upload Tosca Policy Model + + Date: Mon, 17 Feb 2020 15:31:28 -0800 Subject: Operational policy modification policyModel added to Operational policy object so that a user in the UI can add op policies, guard or whatever Issue-ID: CLAMP-647 Change-Id: I57521bc1c3afaf5ca5a2acf5c59823df06fd4cd9 Signed-off-by: sebdet --- extra/sql/bulkload/create-tables.sql | 9 ++- extra/sql/dump/test-data.sql | 36 ++++----- .../org/onap/clamp/clds/service/CldsService.java | 17 ++-- .../clamp/clds/util/drawing/ClampGraphBuilder.java | 70 +++++++++++----- .../org/onap/clamp/clds/util/drawing/Painter.java | 31 +++++--- .../onap/clamp/clds/util/drawing/SvgFacade.java | 54 ------------- .../clamp/clds/util/drawing/SvgLoopGenerator.java | 75 +++++++++++++++++ .../java/org/onap/clamp/loop/CsarInstaller.java | 27 +++---- src/main/java/org/onap/clamp/loop/Loop.java | 34 +++++--- src/main/java/org/onap/clamp/loop/LoopService.java | 35 +++++--- .../loop/components/external/DcaeComponent.java | 11 +-- .../onap/clamp/loop/template/LoopElementModel.java | 28 ++++--- .../org/onap/clamp/loop/template/LoopTemplate.java | 49 ++++++------ .../clamp/loop/template/LoopTemplatesService.java | 44 ---------- src/main/java/org/onap/clamp/policy/Policy.java | 27 ++++--- .../policy/microservice/MicroServicePolicy.java | 93 ++++++++++------------ .../microservice/MicroServicePolicyService.java | 2 +- .../policy/operational/OperationalPolicy.java | 19 ++--- .../operational/OperationalPolicyService.java | 22 ++--- .../org/onap/clamp/util/SemanticVersioning.java | 12 ++- .../clds/util/drawing/ClampGraphBuilderTest.java | 56 +++++++------ .../clds/util/drawing/SvgLoopGeneratorTest.java | 77 ++++++++++++++++++ .../org/onap/clamp/loop/DcaeComponentTest.java | 21 ++++- .../org/onap/clamp/loop/DeployFlowTestItCase.java | 52 ++++++++++-- .../onap/clamp/loop/LoopControllerTestItCase.java | 14 ++-- .../onap/clamp/loop/LoopRepositoriesItCase.java | 40 +++++----- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 80 +++++++++++-------- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 17 ++-- .../PolicyEngineControllerTestItCase.java | 14 ++-- .../microservice/MicroServicePayloadTest.java | 8 +- .../microservice/OperationalPolicyPayloadTest.java | 8 +- 31 files changed, 646 insertions(+), 436 deletions(-) delete mode 100644 src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java create mode 100644 src/main/java/org/onap/clamp/clds/util/drawing/SvgLoopGenerator.java create mode 100644 src/test/java/org/onap/clamp/clds/util/drawing/SvgLoopGeneratorTest.java (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 50c8d42ca..522086c93 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -124,10 +124,10 @@ dcae_deployment_id varchar(255), dcae_deployment_status_url varchar(255), device_type_scope varchar(255), - policy_model_type varchar(255) not null, - policy_tosca MEDIUMTEXT not null, shared bit not null, loop_element_model_id varchar(255), + policy_model_type varchar(255), + policy_model_version varchar(255), primary key (name) ) engine=InnoDB; @@ -233,6 +233,11 @@ foreign key (loop_element_model_id) references loop_element_models (name); + alter table micro_service_policies + add constraint FKn17j9ufmyhqicb6cvr1dbjvkt + foreign key (policy_model_type, policy_model_version) + references policy_models (policy_model_type, version); + alter table operational_policies add constraint FKi9kh7my40737xeuaye9xwbnko foreign key (loop_element_model_id) diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index 711b40915..0cd2e035f 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -53,7 +53,7 @@ UNLOCK TABLES; LOCK TABLES `hibernate_sequence` WRITE; /*!40000 ALTER TABLE `hibernate_sequence` DISABLE KEYS */; -INSERT INTO `hibernate_sequence` VALUES (11); +INSERT INTO `hibernate_sequence` VALUES (4); /*!40000 ALTER TABLE `hibernate_sequence` ENABLE KEYS */; UNLOCK TABLES; @@ -63,7 +63,7 @@ UNLOCK TABLES; LOCK TABLES `loop_element_models` WRITE; /*!40000 ALTER TABLE `loop_element_models` DISABLE KEYS */; -INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-02-17 01:28:17.591501','','2020-02-17 01:28:18.213276',NULL,NULL,'CONFIG_POLICY',NULL); +INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-02-19 15:16:21.107439','','2020-02-19 15:16:22.017835',NULL,NULL,'MICRO_SERVICE_TYPE',NULL); /*!40000 ALTER TABLE `loop_element_models` ENABLE KEYS */; UNLOCK TABLES; @@ -82,9 +82,9 @@ UNLOCK TABLES; LOCK TABLES `loop_templates` WRITE; /*!40000 ALTER TABLE `loop_templates` DISABLE KEYS */; -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_mrun2_v1_0_ResourceInstanceName1_tca','','2020-02-17 01:28:18.089349','','2020-02-17 01:28:18.089349','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-1158b029-696f-445f-ab39-240c366a7082',0,'VEStca_tcaOperationalPolicy',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_mrun2_v1_0_ResourceInstanceName1_tca_3','','2020-02-17 01:28:17.881069','','2020-02-17 01:28:17.881069','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-ad0016dc-8fa1-44d3-be1f-38e646d7fc6e',0,'VEStca_k8sOperationalPolicy',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_mrun2_v1_0_ResourceInstanceName2_tca_2','','2020-02-17 01:28:17.503778','','2020-02-17 01:28:17.503778','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-b68b1479-deab-49ce-b782-6bcd92e7f339',0,'VEStca_k8sOperationalPolicy',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_QIfdq_v1_0_ResourceInstanceName1_tca','','2020-02-19 15:16:21.571592','','2020-02-19 15:16:21.571592','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-7aec6c68-df86-4f02-a48f-5d383d813fd4',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_QIfdq_v1_0_ResourceInstanceName1_tca_3','','2020-02-19 15:16:21.363011','','2020-02-19 15:16:21.363011','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-01671aaa-75e6-42bc-a83e-b9ff897aec5d',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_QIfdq_v1_0_ResourceInstanceName2_tca_2','','2020-02-19 15:16:21.057572','','2020-02-19 15:16:21.057572','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-b1b12323-0d48-48b9-bb5f-f9b336d268fe',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; UNLOCK TABLES; @@ -122,9 +122,9 @@ UNLOCK TABLES; LOCK TABLES `looptemplates_to_loopelementmodels` WRITE; /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` DISABLE KEYS */; -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_mrun2_v1_0_ResourceInstanceName1_tca',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_mrun2_v1_0_ResourceInstanceName1_tca_3',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_mrun2_v1_0_ResourceInstanceName2_tca_2',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_QIfdq_v1_0_ResourceInstanceName1_tca',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_QIfdq_v1_0_ResourceInstanceName1_tca_3',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_QIfdq_v1_0_ResourceInstanceName2_tca_2',0); /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` ENABLE KEYS */; UNLOCK TABLES; @@ -152,15 +152,15 @@ UNLOCK TABLES; LOCK TABLES `policy_models` WRITE; /*!40000 ALTER TABLE `policy_models` DISABLE KEYS */; -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Guard','1.0.0','','2020-02-17 01:28:32.023344','','2020-02-17 01:28:32.023344','Guard','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.Blacklist','1.0.0','','2020-02-17 01:28:31.924684','','2020-02-17 01:28:31.924684','Blacklist','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.FrequencyLimiter','1.0.0','','2020-02-17 01:28:31.916091','','2020-02-17 01:28:31.916091','FrequencyLimiter','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.MinMax','1.0.0','','2020-02-17 01:28:31.930419','','2020-02-17 01:28:31.930419','MinMax','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Operational','1.0.0','','2020-02-17 01:28:32.007254','','2020-02-17 01:28:32.007254','Operational','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controloop.operational.Apex','1.0.0','','2020-02-17 01:28:32.020428','','2020-02-17 01:28:32.020428','Apex','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controloop.operational.Drools','1.0.0','','2020-02-17 01:28:31.916299','','2020-02-17 01:28:31.916299','Drools','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.Monitoring','1.0.0','','2020-02-17 01:28:32.090217','','2020-02-17 01:28:32.090217','Monitoring','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); -INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0','','2020-02-17 01:28:17.629390','','2020-02-17 01:28:17.629390','app','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Guard','1.0.0','','2020-02-19 15:16:32.550573','','2020-02-19 15:16:32.550573','Guard','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.Blacklist','1.0.0','','2020-02-19 15:16:32.674581','','2020-02-19 15:16:32.674581','Blacklist','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.FrequencyLimiter','1.0.0','','2020-02-19 15:16:32.580634','','2020-02-19 15:16:32.580634','FrequencyLimiter','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.MinMax','1.0.0','','2020-02-19 15:16:32.550894','','2020-02-19 15:16:32.550894','MinMax','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Operational','1.0.0','','2020-02-19 15:16:32.689085','','2020-02-19 15:16:32.689085','Operational','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controloop.operational.Apex','1.0.0','','2020-02-19 15:16:32.661448','','2020-02-19 15:16:32.661448','Apex','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controloop.operational.Drools','1.0.0','','2020-02-19 15:16:32.553673','','2020-02-19 15:16:32.553673','Drools','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.Monitoring','1.0.0','','2020-02-19 15:16:32.738454','','2020-02-19 15:16:32.738454','Monitoring','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); +INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0','','2020-02-19 15:16:21.136405','','2020-02-19 15:16:21.136405','app','{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}'); /*!40000 ALTER TABLE `policy_models` ENABLE KEYS */; UNLOCK TABLES; @@ -182,4 +182,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-02-17 9:29:33 +-- Dump completed on 2020-02-19 23:17:54 diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java index 783ee7032..3b84e360c 100644 --- a/src/main/java/org/onap/clamp/clds/service/CldsService.java +++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java @@ -102,11 +102,16 @@ public class CldsService extends SecureServiceBase { @Autowired public CldsService( @Value("${clamp.config.security.permission.type.cl:permission-type-cl}") String cldsPersmissionTypeCl, - @Value("${clamp.config.security.permission.type.cl.manage:permission-type-cl-manage}") String cldsPermissionTypeClManage, - @Value("${clamp.config.security.permission.type.cl.event:permission-type-cl-event}") String cldsPermissionTypeClEvent, - @Value("${clamp.config.security.permission.type.filter.vf:permission-type-filter-vf}") String cldsPermissionTypeFilterVf, - @Value("${clamp.config.security.permission.type.template:permission-type-template}") String cldsPermissionTypeTemplate, - @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}") String cldsPermissionTypeTosca, + @Value("${clamp.config.security.permission.type.cl.manage:permission-type-cl-manage}") + String cldsPermissionTypeClManage, + @Value("${clamp.config.security.permission.type.cl.event:permission-type-cl-event}") + String cldsPermissionTypeClEvent, + @Value("${clamp.config.security.permission.type.filter.vf:permission-type-filter-vf}") + String cldsPermissionTypeFilterVf, + @Value("${clamp.config.security.permission.type.template:permission-type-template}") + String cldsPermissionTypeTemplate, + @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}") + String cldsPermissionTypeTosca, @Value("${clamp.config.security.permission.instance:dev}") String cldsPermissionInstance) { this.cldsPermissionTypeFilterVf = cldsPermissionTypeFilterVf; this.cldsPermissionInstance = cldsPermissionInstance; @@ -125,7 +130,7 @@ public class CldsService extends SecureServiceBase { * Gets clds info. CLDS IFO service will return 3 things 1. User Name 2. CLDS * code version that is currently installed from pom.xml file 3. User * permissions - * + * * @return the clds info */ public CldsInfo getCldsInfo() { diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java b/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java index 6ce89873b..7edf6c1a4 100755 --- a/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java +++ b/src/main/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilder.java @@ -24,16 +24,17 @@ package org.onap.clamp.clds.util.drawing; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; +import java.util.HashSet; +import java.util.Set; +import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.policy.operational.OperationalPolicy; public class ClampGraphBuilder { - private String policy; + private Set policies = new HashSet<>(); private String collector; - private List microServices = new ArrayList<>(); + private Set microServices = new HashSet<>(); + private Set loopElementModels = new HashSet<>(); private final Painter painter; public ClampGraphBuilder(Painter painter) { @@ -45,33 +46,64 @@ public class ClampGraphBuilder { return this; } - public ClampGraphBuilder policy(String policy) { - this.policy = policy; + public ClampGraphBuilder addPolicy(OperationalPolicy policy) { + this.policies.add(policy); return this; } - public ClampGraphBuilder addMicroService(BlueprintMicroService ms) { + public ClampGraphBuilder addAllPolicies(Set policies) { + this.policies.addAll(policies); + return this; + } + + public ClampGraphBuilder addMicroService(MicroServicePolicy ms) { microServices.add(ms); return this; } - public ClampGraphBuilder addAllMicroServices(List msList) { + public ClampGraphBuilder addAllMicroServices(Set msList) { microServices.addAll(msList); return this; } + /** + * This method adds all loop element specified in input to the current structure. + * + * @param loopElementModels A set of LoopElementModels + * @return Return the current ClampGraphBuilder + */ + public ClampGraphBuilder addAllLoopElementModels(Set loopElementModels) { + for (LoopElementModel elem : loopElementModels) { + this.addLoopElementModel(elem); + } + return this; + } + + /** + * This method adds one loop element specified in input to the current structure. + * + * @param loopElementModel A LoopElementModels + * @return Return the current ClampGraphBuilder + */ + public ClampGraphBuilder addLoopElementModel(LoopElementModel loopElementModel) { + if (LoopElementModel.MICRO_SERVICE_TYPE.equals(loopElementModel.getLoopElementType())) { + microServices.add(new MicroServicePolicy(loopElementModel.getName(), + loopElementModel.getPolicyModels().first(), + false, + null)); + } else if (LoopElementModel.OPERATIONAL_POLICY_TYPE.equals(loopElementModel.getLoopElementType())) { + policies.add(new OperationalPolicy(loopElementModel.getName(), null, null, + loopElementModel.getPolicyModels().first())); + } + return this; + } + /** * Build the SVG. - * + * * @return Clamp graph (SVG) */ public ClampGraph build() { - if (microServices.isEmpty()) { - throw new InvalidStateException("At least one microservice is required"); - } - if (Objects.isNull(policy) || policy.trim().isEmpty()) { - throw new InvalidStateException("Policy element must be present"); - } - return new ClampGraph(painter.doPaint(collector, microServices, policy)); + return new ClampGraph(painter.doPaint(collector, microServices, policies)); } } diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java b/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java index d96c9e537..af62d84a8 100755 --- a/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java +++ b/src/main/java/org/onap/clamp/clds/util/drawing/Painter.java @@ -28,17 +28,17 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Point; import java.awt.RenderingHints; -import java.util.List; - +import java.util.Set; import org.apache.batik.svggen.SVGGraphics2D; -import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; +import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.policy.operational.OperationalPolicy; public class Painter { private final int canvasSize; private final SVGGraphics2D g2d; private final DocumentBuilder documentBuilder; - private static final int DEFALUT_CANVAS_SIZE = 900; + private static final int DEFAULT_CANVAS_SIZE = 900; private static final int SLIM_LINE = 2; private static final int THICK_LINE = 4; private static final double RECT_RATIO = 3.0 / 2.0; @@ -54,10 +54,10 @@ public class Painter { public Painter(SVGGraphics2D svgGraphics2D, DocumentBuilder documentBuilder) { this.g2d = svgGraphics2D; this.documentBuilder = documentBuilder; - this.canvasSize = DEFALUT_CANVAS_SIZE; + this.canvasSize = DEFAULT_CANVAS_SIZE; } - DocumentBuilder doPaint(String collector, List microServices, String policy) { + DocumentBuilder doPaint(String collector, Set microServices, Set policies) { int numOfRectangles = 2 + microServices.size(); int numOfArrows = numOfRectangles + 1; int baseLength = (canvasSize - 2 * CIRCLE_RADIUS) / (numOfArrows + numOfRectangles); @@ -71,20 +71,25 @@ public class Painter { Point origin = new Point(1, rectHeight / 2); ImageBuilder ib = new ImageBuilder(g2d, documentBuilder, origin, baseLength, rectHeight); - doTheActualDrawing(collector, microServices, policy, ib); + doTheActualDrawing(collector, microServices, policies, ib); return ib.getDocumentBuilder(); } - private void doTheActualDrawing(String collector, List microServices, String policy, - ImageBuilder ib) { + private void doTheActualDrawing(String collector, Set microServices, + Set policies, + ImageBuilder ib) { ib.circle("start-circle", SLIM_LINE).arrow().rectangle(collector, RectTypes.COLECTOR, collector); - for (BlueprintMicroService ms : microServices) { - ib.arrow().rectangle(ms.getModelType(), RectTypes.MICROSERVICE, ms.getName()); + for (MicroServicePolicy ms : microServices) { + ib.arrow().rectangle(ms.getName(), + RectTypes.MICROSERVICE, ms.getPolicyModel().getPolicyAcronym()); } - - ib.arrow().rectangle(policy, RectTypes.POLICY, policy).arrow().circle("stop-circle", THICK_LINE); + for (OperationalPolicy policy : policies) { + ib.arrow().rectangle(policy.getName(), RectTypes.POLICY, policy.getPolicyModel().getPolicyAcronym()) + .arrow(); + } + ib.circle("stop-circle", THICK_LINE); } private void adjustGraphics2DProperties() { diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java b/src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java deleted file mode 100644 index 251f48864..000000000 --- a/src/main/java/org/onap/clamp/clds/util/drawing/SvgFacade.java +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Nokia. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * Modifications copyright (c) 2019 AT&T - * =================================================================== - * - */ - -package org.onap.clamp.clds.util.drawing; - -import java.util.List; - -import org.apache.batik.svggen.SVGGraphics2D; -import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; -import org.onap.clamp.clds.util.XmlTools; -import org.springframework.stereotype.Component; -import org.w3c.dom.Document; - -@Component -public class SvgFacade { - /** - * Generate the SVG images from the microservice Chain. - * - * @param microServicesChain THe chain of microservices - * @return A String containing the SVG - */ - public String getSvgImage(List microServicesChain) { - SVGGraphics2D svgGraphics2D = new SVGGraphics2D(XmlTools.createEmptySvgDocument()); - Document document = XmlTools.createEmptySvgDocument(); - DocumentBuilder dp = new DocumentBuilder(document, svgGraphics2D.getDOMFactory()); - Painter painter = new Painter(svgGraphics2D, dp); - ClampGraphBuilder cgp = new ClampGraphBuilder(painter).collector("VES"); - cgp.addAllMicroServices(microServicesChain); - ClampGraph cg = cgp.policy("OperationalPolicy").build(); - return cg.getAsSvg(); - } - -} diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/SvgLoopGenerator.java b/src/main/java/org/onap/clamp/clds/util/drawing/SvgLoopGenerator.java new file mode 100644 index 000000000..f289d9798 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/util/drawing/SvgLoopGenerator.java @@ -0,0 +1,75 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * Modifications copyright (c) 2019 AT&T + * =================================================================== + * + */ + +package org.onap.clamp.clds.util.drawing; + +import java.util.HashSet; +import java.util.Set; +import org.apache.batik.svggen.SVGGraphics2D; +import org.onap.clamp.clds.util.XmlTools; +import org.onap.clamp.loop.Loop; +import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.LoopTemplateLoopElementModel; +import org.w3c.dom.Document; + +public class SvgLoopGenerator { + /** + * Generate the SVG images from the loop. + * + * @param loop The loop object, so it won't use the loop template + * @return A String containing the SVG + */ + public static String getSvgImage(Loop loop) { + SVGGraphics2D svgGraphics2D = new SVGGraphics2D(XmlTools.createEmptySvgDocument()); + Document document = XmlTools.createEmptySvgDocument(); + DocumentBuilder dp = new DocumentBuilder(document, svgGraphics2D.getDOMFactory()); + Painter painter = new Painter(svgGraphics2D, dp); + ClampGraphBuilder cgp = new ClampGraphBuilder(painter).collector("VES"); + cgp.addAllMicroServices(loop.getMicroServicePolicies()); + ClampGraph cg = cgp.addAllPolicies(loop.getOperationalPolicies()).build(); + return cg.getAsSvg(); + } + + /** + * Generate the SVG images from the loop template. + * + * @param loopTemplate The loop template + * @return A String containing the SVG + */ + public static String getSvgImage(LoopTemplate loopTemplate) { + SVGGraphics2D svgGraphics2D = new SVGGraphics2D(XmlTools.createEmptySvgDocument()); + Document document = XmlTools.createEmptySvgDocument(); + DocumentBuilder dp = new DocumentBuilder(document, svgGraphics2D.getDOMFactory()); + Painter painter = new Painter(svgGraphics2D, dp); + ClampGraphBuilder cgp = new ClampGraphBuilder(painter).collector("VES"); + Set elementModelsSet = new HashSet<>(); + for (LoopTemplateLoopElementModel elementModelLink:loopTemplate.getLoopElementModelsUsed()) { + elementModelsSet.add(elementModelLink.getLoopElementModel()); + } + ClampGraph cg = cgp.addAllLoopElementModels(elementModelsSet).build(); + return cg.getAsSvg(); + } + +} diff --git a/src/main/java/org/onap/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/clamp/loop/CsarInstaller.java index c0cfac960..b5ebdb949 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstaller.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstaller.java @@ -25,12 +25,10 @@ package org.onap.clamp.loop; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; - import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Map.Entry; - import org.json.simple.parser.ParseException; import org.onap.clamp.clds.client.DcaeInventoryServices; import org.onap.clamp.clds.client.PolicyEngineServices; @@ -42,7 +40,6 @@ import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser; import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.clamp.clds.util.drawing.SvgFacade; import org.onap.clamp.loop.service.CsarServiceInstaller; import org.onap.clamp.loop.service.Service; import org.onap.clamp.loop.template.LoopElementModel; @@ -78,9 +75,6 @@ public class CsarInstaller { @Autowired private DcaeInventoryServices dcaeInventoryService; - @Autowired - private SvgFacade svgFacade; - @Autowired private CsarServiceInstaller csarServiceInstaller; @@ -89,7 +83,7 @@ public class CsarInstaller { /** * Verify whether Csar is deployed. - * + * * @param csar The Csar Handler * @return The flag indicating whether Csar is deployed * @throws SdcArtifactInstallerException The SdcArtifactInstallerException @@ -100,16 +94,16 @@ public class CsarInstaller { for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { alreadyInstalled = alreadyInstalled && loopTemplatesRepository.existsById(LoopTemplate.generateLoopTemplateName( - csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), - blueprint.getValue().getResourceAttached().getResourceInstanceName(), - blueprint.getValue().getBlueprintArtifactName())); + csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), + blueprint.getValue().getResourceAttached().getResourceInstanceName(), + blueprint.getValue().getBlueprintArtifactName())); } return alreadyInstalled; } /** * Install the service and loop templates from the csar. - * + * * @param csar The Csar Handler * @throws SdcArtifactInstallerException The SdcArtifactInstallerException * @throws InterruptedException The InterruptedException @@ -125,7 +119,7 @@ public class CsarInstaller { /** * Install the loop templates from the csar. - * + * * @param csar The Csar Handler * @param service The service object that is related to the loop * @throws SdcArtifactInstallerException The SdcArtifactInstallerException @@ -150,7 +144,8 @@ public class CsarInstaller { } private LoopTemplate createLoopTemplateFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact, - Service service) throws IOException, ParseException, InterruptedException, BlueprintParserException { + Service service) + throws IOException, ParseException, InterruptedException, BlueprintParserException { LoopTemplate newLoopTemplate = new LoopTemplate(); newLoopTemplate.setBlueprint(blueprintArtifact.getDcaeBlueprint()); newLoopTemplate.setName(LoopTemplate.generateLoopTemplateName(csar.getSdcNotification().getServiceName(), @@ -165,7 +160,6 @@ public class CsarInstaller { newLoopTemplate.setModelService(service); newLoopTemplate.addLoopElementModels(createMicroServiceModels(microServicesChain)); newLoopTemplate.setMaximumInstancesAllowed(0); - newLoopTemplate.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact); newLoopTemplate.setDcaeBlueprintId(dcaeResponse.getTypeId()); return newLoopTemplate; @@ -175,8 +169,9 @@ public class CsarInstaller { throws InterruptedException { HashSet newSet = new HashSet<>(); for (BlueprintMicroService microService : microServicesChain) { - LoopElementModel loopElementModel = new LoopElementModel(microService.getModelType(), "CONFIG_POLICY", - null); + LoopElementModel loopElementModel = + new LoopElementModel(microService.getModelType(), LoopElementModel.MICRO_SERVICE_TYPE, + null); newSet.add(loopElementModel); loopElementModel.addPolicyModel(getPolicyModel(microService)); } diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 0ac8030d3..676626a1f 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -27,7 +27,6 @@ import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; - import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; @@ -35,7 +34,6 @@ import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; - import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -50,11 +48,11 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; - import org.hibernate.annotations.SortNatural; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.clds.util.drawing.SvgLoopGenerator; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.components.external.DcaeComponent; @@ -68,7 +66,7 @@ import org.onap.clamp.policy.operational.OperationalPolicy; @Entity @Table(name = "loops") -@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) +@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) public class Loop extends AuditEntity implements Serializable { /** @@ -101,7 +99,7 @@ public class Loop extends AuditEntity implements Serializable { private JsonObject globalPropertiesJson; @Expose - @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) + @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinColumn(name = "service_uuid") private Service modelService; @@ -119,7 +117,7 @@ public class Loop extends AuditEntity implements Serializable { private Set operationalPolicies = new HashSet<>(); @Expose - @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER) + @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER) @JoinTable(name = "loops_to_microservicepolicies", joinColumns = @JoinColumn(name = "loop_name"), inverseJoinColumns = @JoinColumn(name = "microservicepolicy_name")) private Set microServicePolicies = new HashSet<>(); @@ -130,8 +128,8 @@ public class Loop extends AuditEntity implements Serializable { private SortedSet loopLogs = new TreeSet<>(); @Expose - @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.EAGER) - @JoinColumn(name = "loop_template_name", nullable=false) + @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER) + @JoinColumn(name = "loop_template_name", nullable = false) private LoopTemplate loopTemplate; private void initializeExternalComponents() { @@ -229,14 +227,28 @@ public class Loop extends AuditEntity implements Serializable { this.loopLogs = loopLogs; } - void addOperationalPolicy(OperationalPolicy opPolicy) { + /** + * This method adds an operational policy to the loop. + * It re-computes the Svg as well. + * + * @param opPolicy the operationalPolicy to add + */ + public void addOperationalPolicy(OperationalPolicy opPolicy) { operationalPolicies.add(opPolicy); opPolicy.setLoop(this); + this.setSvgRepresentation(SvgLoopGenerator.getSvgImage(this)); } - void addMicroServicePolicy(MicroServicePolicy microServicePolicy) { + /** + * This method adds an micro service policy to the loop. + * It re-computes the Svg as well. + * + * @param microServicePolicy the micro service to add + */ + public void addMicroServicePolicy(MicroServicePolicy microServicePolicy) { microServicePolicies.add(microServicePolicy); microServicePolicy.getUsedByLoops().add(this); + this.setSvgRepresentation(SvgLoopGenerator.getSvgImage(this)); } public void addLog(LoopLog log) { @@ -295,7 +307,7 @@ public class Loop extends AuditEntity implements Serializable { * @return The generated loop name */ public static String generateLoopName(String serviceName, String serviceVersion, String resourceName, - String blueprintFileName) { + String blueprintFileName) { StringBuilder buffer = new StringBuilder("LOOP_").append(serviceName).append("_v").append(serviceVersion) .append("_").append(resourceName).append("_").append(blueprintFileName.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java index fb857fbf4..6ea412c00 100644 --- a/src/main/java/org/onap/clamp/loop/LoopService.java +++ b/src/main/java/org/onap/clamp/loop/LoopService.java @@ -24,12 +24,13 @@ package org.onap.clamp.loop; import com.google.gson.JsonObject; - import java.util.List; import java.util.Set; - import javax.persistence.EntityNotFoundException; - +import org.apache.commons.lang3.RandomStringUtils; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelsService; +import org.onap.clamp.policy.Policy; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -49,6 +50,9 @@ public class LoopService { @Autowired private OperationalPolicyService operationalPolicyService; + @Autowired + private PolicyModelsService policyModelsService; + Loop saveOrUpdateLoop(Loop loop) { return loopsRepository.save(loop); } @@ -67,7 +71,7 @@ public class LoopService { /** * This method is used to refresh the DCAE deployment status fields. - * + * * @param loop The loop instance to be modified * @param deploymentId The deployment ID as returned by DCAE * @param deploymentUrl The Deployment URL as returned by DCAE @@ -83,6 +87,19 @@ public class LoopService { loopsRepository.save(loop); } + Loop addOperationalPolicy(String loopName, String policyType, String policyVersion) { + Loop loop = findClosedLoopByName(loopName); + PolicyModel policyModel = policyModelsService.getPolicyModel(policyType, policyVersion); + if (policyModel == null) { + return null; + } + loop.addOperationalPolicy( + new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", loop.getModelService().getName(), + loop.getModelService().getVersion(), RandomStringUtils.randomAlphanumeric(3), + RandomStringUtils.randomAlphanumeric(4)), loop, null, policyModel)); + return loopsRepository.save(loop); + } + Loop updateAndSaveOperationalPolicies(String loopName, List newOperationalPolicies) { Loop loop = findClosedLoopByName(loopName); Set newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies); @@ -114,11 +131,11 @@ public class LoopService { } /** - * Api to refresh the Operational Policy UI window. - * - * @param loopName The loop Name - * @return The refreshed loop object - */ + * Api to refresh the Operational Policy UI window. + * + * @param loopName The loop Name + * @return The refreshed loop object + */ public Loop refreshOpPolicyJsonRepresentation(String loopName) { Loop loop = findClosedLoopByName(loopName); Set policyList = loop.getOperationalPolicies(); diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java index ca26b136d..89332bbd0 100644 --- a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java +++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java @@ -54,7 +54,7 @@ public class DcaeComponent extends ExternalComponent { "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop"); public static final ExternalComponentState PROCESSING_MICROSERVICE_INSTALLATION = new ExternalComponentState( "PROCESSING_MICROSERVICE_INSTALLATION", "Clamp has requested DCAE to install the microservices " - + "defined in the DCAE blueprint and it's currently processing the request"); + + "defined in the DCAE blueprint and it's currently processing the request"); public static final ExternalComponentState MICROSERVICE_INSTALLATION_FAILED = new ExternalComponentState( "MICROSERVICE_INSTALLATION_FAILED", "Clamp has requested DCAE to install the microservices defined in the DCAE blueprint and it failed"); @@ -63,7 +63,7 @@ public class DcaeComponent extends ExternalComponent { "Clamp has requested DCAE to install the DCAE blueprint and it has been installed successfully"); public static final ExternalComponentState PROCESSING_MICROSERVICE_UNINSTALLATION = new ExternalComponentState( "PROCESSING_MICROSERVICE_UNINSTALLATION", "Clamp has requested DCAE to uninstall the microservices " - + "defined in the DCAE blueprint and it's currently processing the request"); + + "defined in the DCAE blueprint and it's currently processing the request"); public static final ExternalComponentState MICROSERVICE_UNINSTALLATION_FAILED = new ExternalComponentState( "MICROSERVICE_UNINSTALLATION_FAILED", "Clamp has requested DCAE to uninstall the microservices defined in the DCAE blueprint and it failed"); @@ -91,7 +91,7 @@ public class DcaeComponent extends ExternalComponent { /** * Convert the json response to a DcaeOperationStatusResponse. - * + * * @param responseBody The DCAE response Json paylaod * @return The dcae object provisioned */ @@ -146,13 +146,14 @@ public class DcaeComponent extends ExternalComponent { /** * Return the deploy payload for DCAE. * - * @param loop The loop object + * @param loop The loop object * @param microServicePolicy The micro service policy * @return The payload used to send deploy closed loop request */ public static String getDeployPayload(Loop loop, MicroServicePolicy microServicePolicy) { JsonObject globalProp = loop.getGlobalPropertiesJson(); - JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(microServicePolicy.getName()); + JsonObject deploymentProp = + globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(microServicePolicy.getName()); String serviceTypeId = microServicePolicy.getDcaeBlueprintId(); diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java index e6ba98151..479605983 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java @@ -43,13 +43,13 @@ import org.hibernate.annotations.SortNatural; import org.onap.clamp.loop.common.AuditEntity; /** - * This class represents a micro service model for a loop template. + * This class represents a micro service/operational/... model for a loop template. + * So it's an element in the flow (a box shown in the loop). */ @Entity @Table(name = "loop_element_models") public class LoopElementModel extends AuditEntity implements Serializable { - public static final String DEFAULT_GROUP_NAME = "DEFAULT"; /** * The serial version id. */ @@ -65,11 +65,13 @@ public class LoopElementModel extends AuditEntity implements Serializable { private String dcaeBlueprintId; /** - * Here we store the blueprint coming from DCAE. + * Here we store the blueprint coming from DCAE, it can be null if this is not a micro service model. */ @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml") private String blueprint; + public static String MICRO_SERVICE_TYPE = "MICRO_SERVICE_TYPE"; + public static String OPERATIONAL_POLICY_TYPE = "OPERATIONAL_POLICY_TYPE"; /** * The type of element. */ @@ -89,14 +91,14 @@ public class LoopElementModel extends AuditEntity implements Serializable { */ @Expose @ManyToMany( - fetch = FetchType.EAGER, - cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) + fetch = FetchType.EAGER, + cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinTable( - name = "loopelementmodels_to_policymodels", - joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"), - inverseJoinColumns = { - @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), - @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) + name = "loopelementmodels_to_policymodels", + joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"), + inverseJoinColumns = { + @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) @SortNatural private SortedSet policyModels = new TreeSet<>(); @@ -228,10 +230,10 @@ public class LoopElementModel extends AuditEntity implements Serializable { /** * Constructor. * - * @param name The name id + * @param name The name id * @param loopElementType The type of loop element - * @param blueprint The blueprint defined for dcae that contains the - * policy type to use + * @param blueprint The blueprint defined for dcae that contains the + * policy type to use */ public LoopElementModel(String name, String loopElementType, String blueprint) { this.name = name; diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java index 54096cb8f..a7bbd9dd3 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplate.java @@ -39,6 +39,7 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.SortNatural; +import org.onap.clamp.clds.util.drawing.SvgLoopGenerator; import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.service.Service; @@ -73,17 +74,17 @@ public class LoopTemplate extends AuditEntity implements Serializable { @Expose @OneToMany( - cascade = CascadeType.ALL, - fetch = FetchType.EAGER, - mappedBy = "loopTemplate", - orphanRemoval = true) + cascade = CascadeType.ALL, + fetch = FetchType.EAGER, + mappedBy = "loopTemplate", + orphanRemoval = true) @SortNatural private SortedSet loopElementModelsUsed = new TreeSet<>(); @Expose @ManyToOne( - fetch = FetchType.EAGER, - cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) + fetch = FetchType.EAGER, + cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinColumn(name = "service_uuid") private Service modelService; @@ -244,10 +245,7 @@ public class LoopTemplate extends AuditEntity implements Serializable { * @param loopElementModel The loopElementModel to add */ public void addLoopElementModel(LoopElementModel loopElementModel) { - LoopTemplateLoopElementModel jointEntry = new LoopTemplateLoopElementModel(this, - loopElementModel, this.loopElementModelsUsed.size()); - this.loopElementModelsUsed.add(jointEntry); - loopElementModel.getUsedByLoopTemplates().add(jointEntry); + this.addLoopElementModel(loopElementModel,this.loopElementModelsUsed.size()); } /** @@ -255,13 +253,14 @@ public class LoopTemplate extends AuditEntity implements Serializable { * specified manually. * * @param loopElementModel The loopElementModel to add - * @param listPosition The position in the flow + * @param listPosition The position in the flow */ public void addLoopElementModel(LoopElementModel loopElementModel, Integer listPosition) { LoopTemplateLoopElementModel jointEntry = - new LoopTemplateLoopElementModel(this, loopElementModel, listPosition); + new LoopTemplateLoopElementModel(this, loopElementModel, listPosition); this.loopElementModelsUsed.add(jointEntry); loopElementModel.getUsedByLoopTemplates().add(jointEntry); + this.setSvgRepresentation(SvgLoopGenerator.getSvgImage(this)); } /** @@ -301,16 +300,16 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * Constructor. * - * @param name The loop template name id - * @param blueprint The blueprint containing all microservices (legacy - * case) - * @param svgRepresentation The svg representation of that loop template + * @param name The loop template name id + * @param blueprint The blueprint containing all microservices (legacy + * case) + * @param svgRepresentation The svg representation of that loop template * @param maxInstancesAllowed The maximum number of instances that can be - * created from that template - * @param service The service associated to that loop template + * created from that template + * @param service The service associated to that loop template */ public LoopTemplate(String name, String blueprint, String svgRepresentation, - Integer maxInstancesAllowed, Service service) { + Integer maxInstancesAllowed, Service service) { this.name = name; this.setBlueprint(blueprint); this.svgRepresentation = svgRepresentation; @@ -352,17 +351,17 @@ public class LoopTemplate extends AuditEntity implements Serializable { /** * Generate the loop template name. * - * @param serviceName The service name - * @param serviceVersion The service version - * @param resourceName The resource name + * @param serviceName The service name + * @param serviceVersion The service version + * @param resourceName The resource name * @param blueprintFileName The blueprint file name * @return The generated loop template name */ public static String generateLoopTemplateName(String serviceName, String serviceVersion, - String resourceName, String blueprintFileName) { + String resourceName, String blueprintFileName) { StringBuilder buffer = new StringBuilder("LOOP_TEMPLATE_").append(serviceName).append("_v") - .append(serviceVersion).append("_").append(resourceName).append("_") - .append(blueprintFileName.replaceAll(".yaml", "")); + .append(serviceVersion).append("_").append(resourceName).append("_") + .append(blueprintFileName.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } } diff --git a/src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java b/src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java index 279d602c8..29382137e 100644 --- a/src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java +++ b/src/main/java/org/onap/clamp/loop/template/LoopTemplatesService.java @@ -24,11 +24,7 @@ package org.onap.clamp.loop.template; import java.util.List; -import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; -import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; -import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser; import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; -import org.onap.clamp.clds.util.drawing.SvgFacade; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -40,9 +36,6 @@ public class LoopTemplatesService { @Autowired ChainGenerator chainGenerator; - @Autowired - private SvgFacade svgFacade; - /** * Constructor. */ @@ -56,24 +49,6 @@ public class LoopTemplatesService { return loopTemplatesRepository.save(loopTemplate); } - /** - * Saves or updates loop template Object. - * - * @param templateName the loop template name - * @param loopTemplate the loop template object - * @return the loop template - * @throws BlueprintParserException In case of issues with the blueprint - * parsing - */ - public LoopTemplate saveOrUpdateLoopTemplateByName(String templateName, - LoopTemplate loopTemplate) throws BlueprintParserException { - - if (getLoopTemplate(templateName) != null) { - loopTemplate.setName(getLoopTemplate(templateName).getName()); - } - return saveOrUpdateLoopTemplate(createTemplateFromBlueprint(templateName, loopTemplate)); - } - public List getLoopTemplateNames() { return loopTemplatesRepository.getAllLoopTemplateNames(); } @@ -89,23 +64,4 @@ public class LoopTemplatesService { public void deleteLoopTemplate(String name) { loopTemplatesRepository.deleteById(name); } - - private LoopTemplate createTemplateFromBlueprint(String templateName, LoopTemplate loopTemplate) - throws BlueprintParserException { - - String blueprintYaml = loopTemplate.getBlueprint(); - List microServicesChain = - chainGenerator.getChainOfMicroServices(BlueprintParser.getMicroServices(blueprintYaml)); - if (microServicesChain.isEmpty()) { - microServicesChain = BlueprintParser.fallbackToOneMicroService(); - } - loopTemplate.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain)); - loopTemplate.setName(templateName); - - LoopTemplate existingTemplate = getLoopTemplate(templateName); - if (existingTemplate != null) { - loopTemplate.setName(existingTemplate.getName()); - } - return loopTemplate; - } } diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java index c65682059..e1c08eeaa 100644 --- a/src/main/java/org/onap/clamp/policy/Policy.java +++ b/src/main/java/org/onap/clamp/policy/Policy.java @@ -42,7 +42,7 @@ import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.template.LoopElementModel; @MappedSuperclass -@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) +@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) public abstract class Policy extends AuditEntity { @Expose @@ -55,6 +55,10 @@ public abstract class Policy extends AuditEntity { @Column(columnDefinition = "json", name = "configurations_json") private JsonObject configurationsJson; + /** + * This attribute can be null when the user add a policy on the loop instance, not the template. + * When null, It therefore indicates that this policy is not by default in the loop template. + */ @Expose @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "loop_element_model_id") @@ -68,20 +72,19 @@ public abstract class Policy extends AuditEntity { /** * Name getter. - * + * * @return the name */ public abstract String getName(); /** * Name setter. - * */ public abstract void setName(String name); /** * jsonRepresentation getter. - * + * * @return the jsonRepresentation */ public JsonObject getJsonRepresentation() { @@ -90,7 +93,7 @@ public abstract class Policy extends AuditEntity { /** * jsonRepresentation setter. - * + * * @param jsonRepresentation The jsonRepresentation to set */ public void setJsonRepresentation(JsonObject jsonRepresentation) { @@ -99,7 +102,7 @@ public abstract class Policy extends AuditEntity { /** * configurationsJson getter. - * + * * @return The configurationsJson */ public JsonObject getConfigurationsJson() { @@ -108,7 +111,7 @@ public abstract class Policy extends AuditEntity { /** * configurationsJson setter. - * + * * @param configurationsJson the configurationsJson to set */ public void setConfigurationsJson(JsonObject configurationsJson) { @@ -117,7 +120,7 @@ public abstract class Policy extends AuditEntity { /** * loopElementModel getter. - * + * * @return the loopElementModel */ public LoopElementModel getLoopElementModel() { @@ -126,7 +129,7 @@ public abstract class Policy extends AuditEntity { /** * loopElementModel setter. - * + * * @param loopElementModel the loopElementModel to set */ public void setLoopElementModel(LoopElementModel loopElementModel) { @@ -135,7 +138,7 @@ public abstract class Policy extends AuditEntity { /** * pdpGroup getter. - * + * * @return the pdpGroup */ public String getPdpGroup() { @@ -144,7 +147,7 @@ public abstract class Policy extends AuditEntity { /** * pdpGroup setter. - * + * * @param pdpGroup the pdpGroup to set */ public void setPdpGroup(String pdpGroup) { @@ -162,7 +165,7 @@ public abstract class Policy extends AuditEntity { * @return The generated policy name */ public static String generatePolicyName(String policyType, String serviceName, String serviceVersion, - String resourceName, String blueprintFilename) { + String resourceName, String blueprintFilename) { StringBuilder buffer = new StringBuilder(policyType).append("_").append(serviceName).append("_v") .append(serviceVersion).append("_").append(resourceName).append("_") .append(blueprintFilename.replaceAll(".yaml", "")); diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 43c8d6e05..8d9017eae 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -30,20 +30,20 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; - import java.io.Serializable; import java.util.HashSet; import java.util.Map; import java.util.Set; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; - import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; import org.json.JSONObject; @@ -51,12 +51,13 @@ import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; +import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.Policy; import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "micro_service_policies") -@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) +@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) public class MicroServicePolicy extends Policy implements Serializable { /** * The serial version ID. @@ -71,10 +72,6 @@ public class MicroServicePolicy extends Policy implements Serializable { @Column(nullable = false, name = "name", unique = true) private String name; - @Expose - @Column(nullable = false, name = "policy_model_type") - private String modelType; - @Expose @Column(name = "context") private String context; @@ -87,9 +84,6 @@ public class MicroServicePolicy extends Policy implements Serializable { @Column(name = "shared", nullable = false) private Boolean shared; - @Column(columnDefinition = "MEDIUMTEXT", name = "policy_tosca", nullable = false) - private String policyTosca; - @ManyToMany(mappedBy = "microServicePolicies", fetch = FetchType.EAGER) private Set usedByLoops = new HashSet<>(); @@ -105,6 +99,12 @@ public class MicroServicePolicy extends Policy implements Serializable { @Column(name = "dcae_blueprint_id") private String dcaeBlueprintId; + @Expose + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumns({@JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) + private PolicyModel policyModel; + public MicroServicePolicy() { // serialization } @@ -114,24 +114,23 @@ public class MicroServicePolicy extends Policy implements Serializable { * using the ToscaYamlToJsonConvertor. * * @param name The name of the MicroService - * @param modelType The model type of the MicroService - * @param policyTosca The policy Tosca of the MicroService + * @param policyModel The policy model of the MicroService * @param shared The flag indicate whether the MicroService is shared * @param usedByLoops The list of loops that uses this MicroService */ - public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, - Set usedByLoops) { + public MicroServicePolicy(String name, PolicyModel policyModel, Boolean shared, + Set usedByLoops) { this.name = name; - this.modelType = modelType; - this.policyTosca = policyTosca; + this.policyModel = policyModel; this.shared = shared; this.setJsonRepresentation(JsonUtils.GSON_JPA_MODEL - .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyTosca, modelType), JsonObject.class)); + .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyModel.getPolicyModelTosca(), + policyModel.getPolicyModelType()), JsonObject.class)); this.usedByLoops = usedByLoops; } private JsonObject createJsonFromPolicyTosca() { - Map map = new Yaml().load(this.getPolicyTosca()); + Map map = new Yaml().load(this.getPolicyModel().getPolicyModelTosca()); JSONObject jsonObject = new JSONObject(map); return new Gson().fromJson(jsonObject.toString(), JsonObject.class); } @@ -141,18 +140,16 @@ public class MicroServicePolicy extends Policy implements Serializable { * the jsonRepresentation instead. * * @param name The name of the MicroService - * @param modelType The model type of the MicroService - * @param policyTosca The policy Tosca of the MicroService + * @param policyModel The policy model type of the MicroService * @param shared The flag indicate whether the MicroService is * shared * @param jsonRepresentation The UI representation in json format * @param usedByLoops The list of loops that uses this MicroService */ - public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, - JsonObject jsonRepresentation, Set usedByLoops) { + public MicroServicePolicy(String name, PolicyModel policyModel, Boolean shared, + JsonObject jsonRepresentation, Set usedByLoops) { this.name = name; - this.modelType = modelType; - this.policyTosca = policyTosca; + this.policyModel = policyModel; this.shared = shared; this.usedByLoops = usedByLoops; this.setJsonRepresentation(jsonRepresentation); @@ -165,7 +162,7 @@ public class MicroServicePolicy extends Policy implements Serializable { /** * name setter. - * + * * @param name the name to set */ @Override @@ -173,14 +170,6 @@ public class MicroServicePolicy extends Policy implements Serializable { this.name = name; } - public String getModelType() { - return modelType; - } - - void setModelType(String modelType) { - this.modelType = modelType; - } - public Boolean getShared() { return shared; } @@ -189,14 +178,6 @@ public class MicroServicePolicy extends Policy implements Serializable { this.shared = shared; } - public String getPolicyTosca() { - return policyTosca; - } - - void setPolicyTosca(String policyTosca) { - this.policyTosca = policyTosca; - } - public Set getUsedByLoops() { return usedByLoops; } @@ -221,9 +202,17 @@ public class MicroServicePolicy extends Policy implements Serializable { this.deviceTypeScope = deviceTypeScope; } + public PolicyModel getPolicyModel() { + return policyModel; + } + + public void setPolicyModel(PolicyModel policyModel) { + this.policyModel = policyModel; + } + /** * dcaeDeploymentId getter. - * + * * @return the dcaeDeploymentId */ public String getDcaeDeploymentId() { @@ -232,7 +221,7 @@ public class MicroServicePolicy extends Policy implements Serializable { /** * dcaeDeploymentId setter. - * + * * @param dcaeDeploymentId the dcaeDeploymentId to set */ public void setDcaeDeploymentId(String dcaeDeploymentId) { @@ -241,7 +230,7 @@ public class MicroServicePolicy extends Policy implements Serializable { /** * dcaeDeploymentStatusUrl getter. - * + * * @return the dcaeDeploymentStatusUrl */ public String getDcaeDeploymentStatusUrl() { @@ -250,7 +239,7 @@ public class MicroServicePolicy extends Policy implements Serializable { /** * dcaeDeploymentStatusUrl setter. - * + * * @param dcaeDeploymentStatusUrl the dcaeDeploymentStatusUrl to set */ public void setDcaeDeploymentStatusUrl(String dcaeDeploymentStatusUrl) { @@ -259,7 +248,7 @@ public class MicroServicePolicy extends Policy implements Serializable { /** * dcaeBlueprintId getter. - * + * * @return the dcaeBlueprintId */ public String getDcaeBlueprintId() { @@ -268,7 +257,7 @@ public class MicroServicePolicy extends Policy implements Serializable { /** * dcaeBlueprintId setter. - * + * * @param dcaeBlueprintId the dcaeBlueprintId to set */ void setDcaeBlueprintId(String dcaeBlueprintId) { @@ -306,7 +295,9 @@ public class MicroServicePolicy extends Policy implements Serializable { } private String getMicroServicePropertyNameFromTosca(JsonObject object) { - return object.getAsJsonObject("policy_types").getAsJsonObject(this.modelType).getAsJsonObject("properties") + return object.getAsJsonObject("policy_types").getAsJsonObject(this.getPolicyModel().getPolicyModelType()) + .getAsJsonObject( + "properties") .keySet().toArray(new String[1])[0]; } @@ -329,8 +320,8 @@ public class MicroServicePolicy extends Policy implements Serializable { JsonObject policyDetails = new JsonObject(); thisPolicy.add(this.getName(), policyDetails); - policyDetails.addProperty("type", this.getModelType()); - policyDetails.addProperty("version", "1.0.0"); + policyDetails.addProperty("type", this.getPolicyModel().getPolicyModelType()); + policyDetails.addProperty("version", this.getPolicyModel().getVersion()); JsonObject policyMetadata = new JsonObject(); policyDetails.add("metadata", policyMetadata); diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java index 29a4e56d0..b17bf1ac4 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java @@ -65,7 +65,7 @@ public class MicroServicePolicyService implements PolicyService updateMicroservicePolicyProperties(p, policy, loop)) - .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), + .orElse(new MicroServicePolicy(policy.getName(), policy.getPolicyModel(), policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop)))); } diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index a1c8cdbdb..0825ea9e5 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -62,7 +62,7 @@ import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "operational_policies") -@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) +@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) public class OperationalPolicy extends Policy implements Serializable { /** * The serial version ID. @@ -83,8 +83,8 @@ public class OperationalPolicy extends Policy implements Serializable { @Expose @ManyToOne(fetch = FetchType.EAGER) - @JoinColumns({ @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), - @JoinColumn(name = "policy_model_version", referencedColumnName = "version") }) + @JoinColumns({@JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) private PolicyModel policyModel; public OperationalPolicy() { @@ -98,10 +98,12 @@ public class OperationalPolicy extends Policy implements Serializable { * @param loop The loop that uses this operational policy * @param configurationsJson The operational policy property in the format of * json + * @param policyModel The policy model associated if any, can be null */ - public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson) { + public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson, PolicyModel policyModel) { this.name = name; this.loop = loop; + this.setPolicyModel(policyModel); this.setConfigurationsJson(configurationsJson); LegacyOperationalPolicy.preloadConfiguration(configurationsJson, loop); try { @@ -128,7 +130,7 @@ public class OperationalPolicy extends Policy implements Serializable { /** * name setter. - * + * * @param name the name to set */ @Override @@ -138,7 +140,7 @@ public class OperationalPolicy extends Policy implements Serializable { /** * policyModel getter. - * + * * @return the policyModel */ public PolicyModel getPolicyModel() { @@ -147,7 +149,7 @@ public class OperationalPolicy extends Policy implements Serializable { /** * policyModel setter. - * + * * @param policyModel the policyModel to set */ public void setPolicyModel(PolicyModel policyModel) { @@ -186,7 +188,7 @@ public class OperationalPolicy extends Policy implements Serializable { /** * Create policy Yaml from json defined here. - * + * * @return A string containing Yaml */ public String createPolicyPayloadYaml() { @@ -260,7 +262,6 @@ public class OperationalPolicy extends Policy implements Serializable { /** * Regenerate the Operational Policy Json Representation. - * */ public void updateJsonRepresentation() { try { diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java index 95f4f7be8..174912b22 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java @@ -35,28 +35,30 @@ import org.springframework.stereotype.Service; @Service public class OperationalPolicyService implements PolicyService { - private final OperationalPolicyRepository repository; + private final OperationalPolicyRepository operationalPolicyRepository; @Autowired public OperationalPolicyService(OperationalPolicyRepository repository) { - this.repository = repository; + this.operationalPolicyRepository = repository; } @Override public Set updatePolicies(Loop loop, List operationalPolicies) { return operationalPolicies - .stream() - .map(policy -> - repository - .findById(policy.getName()) - .map(p -> setConfigurationJson(p, policy.getConfigurationsJson())) - .orElse(new OperationalPolicy(policy.getName(), loop, policy.getConfigurationsJson()))) - .collect(Collectors.toSet()); + .parallelStream() + .map(policy -> + operationalPolicyRepository + .findById(policy.getName()) + .map(p -> setConfigurationJson(p, policy.getConfigurationsJson())) + .orElse(new OperationalPolicy(policy.getName(), loop, + policy.getConfigurationsJson(), + policy.getPolicyModel()))) + .collect(Collectors.toSet()); } @Override public boolean isExisting(String policyName) { - return repository.existsById(policyName); + return operationalPolicyRepository.existsById(policyName); } private OperationalPolicy setConfigurationJson(OperationalPolicy policy, JsonObject configurationsJson) { diff --git a/src/main/java/org/onap/clamp/util/SemanticVersioning.java b/src/main/java/org/onap/clamp/util/SemanticVersioning.java index 102284494..8852e2a4f 100644 --- a/src/main/java/org/onap/clamp/util/SemanticVersioning.java +++ b/src/main/java/org/onap/clamp/util/SemanticVersioning.java @@ -26,8 +26,6 @@ package org.onap.clamp.util; /** * This class is the base class for object that requires semantic versioning. * ... This class supports also a.b.c.d... etc ... as a version. - * - * */ public class SemanticVersioning { public static final int BEFORE = -1; @@ -41,7 +39,7 @@ public class SemanticVersioning { * @param arg0 A version in string for semantic versioning (a.b.c.d...) * @param arg1 A version in string for semantic versioning (a.b.c.d...) * @return objects (arg0, arg1) given as parameters. It returns the value: 0: if - * (arg0==arg1) -1: if (arg0 < arg1) 1: if (arg0 > arg1) + * (arg0==arg1) -1: if (arg0 < arg1) 1: if (arg0 > arg1) */ public static int compare(String arg0, String arg1) { @@ -60,12 +58,12 @@ public class SemanticVersioning { int smalestStringLength = Math.min(arg0Array.length, arg1Array.length); for (int currentVersionIndex = - 0; currentVersionIndex < smalestStringLength; ++currentVersionIndex) { + 0; currentVersionIndex < smalestStringLength; ++currentVersionIndex) { if (Integer.parseInt(arg0Array[currentVersionIndex]) < Integer - .parseInt(arg1Array[currentVersionIndex])) { + .parseInt(arg1Array[currentVersionIndex])) { return BEFORE; } else if (Integer.parseInt(arg0Array[currentVersionIndex]) > Integer - .parseInt(arg1Array[currentVersionIndex])) { + .parseInt(arg1Array[currentVersionIndex])) { return AFTER; } // equals, so do not return anything, continue @@ -88,6 +86,6 @@ public class SemanticVersioning { return DEFAULT_VERSION; } String[] versionArray = currentVersion.split("\\."); - return String.valueOf(Integer.parseInt(versionArray[0]) + 1)+".0.0"; + return String.valueOf(Integer.parseInt(versionArray[0]) + 1) + ".0.0"; } } diff --git a/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java b/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java index 65eb2696f..63209e9f9 100644 --- a/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java +++ b/src/test/java/org/onap/clamp/clds/util/drawing/ClampGraphBuilderTest.java @@ -26,12 +26,12 @@ package org.onap.clamp.clds.util.drawing; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import java.util.Arrays; -import java.util.List; - +import com.google.gson.JsonObject; +import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -39,7 +39,10 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; +import org.onap.clamp.loop.Loop; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.policy.operational.OperationalPolicy; @RunWith(MockitoJUnitRunner.class) public class ClampGraphBuilderTest { @@ -50,47 +53,52 @@ public class ClampGraphBuilderTest { private ArgumentCaptor collectorCaptor; @Captor - private ArgumentCaptor> microServicesCaptor; + private ArgumentCaptor> microServicesCaptor; @Captor - private ArgumentCaptor policyCaptor; + private ArgumentCaptor> policyCaptor; + /** + * Do a quick test of the graphBuilder chain. + */ @Test public void clampGraphBuilderCompleteChainTest() { String collector = "VES"; - BlueprintMicroService ms1 = new BlueprintMicroService("ms1", "", "", "1.0.0"); - BlueprintMicroService ms2 = new BlueprintMicroService("ms2", "", "", "1.0.0"); + MicroServicePolicy ms1 = new MicroServicePolicy("ms1", new PolicyModel("org.onap.ms1", "", "1.0.0"), false, + null); + MicroServicePolicy ms2 = new MicroServicePolicy("ms2", new PolicyModel("org.onap.ms2", "", "1.0.0"), false, + null); - String policy = "OperationalPolicy"; - final List microServices = Arrays.asList(ms1, ms2); + OperationalPolicy opPolicy = new OperationalPolicy("OperationalPolicy", new Loop(), new JsonObject(), + new PolicyModel("org.onap.opolicy", null, "1.0.0", "opolicy1")); + final Set opPolicies = Set.of(opPolicy); + final Set microServices = Set.of(ms1, ms2); ClampGraphBuilder clampGraphBuilder = new ClampGraphBuilder(mockPainter); - clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).policy(policy).build(); + clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).addPolicy(opPolicy).build(); verify(mockPainter, times(1)).doPaint(collectorCaptor.capture(), microServicesCaptor.capture(), policyCaptor.capture()); Assert.assertEquals(collector, collectorCaptor.getValue()); Assert.assertEquals(microServices, microServicesCaptor.getValue()); - Assert.assertEquals(policy, policyCaptor.getValue()); + Assert.assertEquals(opPolicies, policyCaptor.getValue()); } - @Test(expected = InvalidStateException.class) + /** + * Do a quick test of the graphBuilder chain when no policy is given. + */ + @Test public void clampGraphBuilderNoPolicyGivenTest() { String collector = "VES"; - BlueprintMicroService ms1 = new BlueprintMicroService("ms1", "", "", "1.0.0"); - BlueprintMicroService ms2 = new BlueprintMicroService("ms2", "", "", "1.0.0"); + MicroServicePolicy ms1 = + new MicroServicePolicy("ms1", new PolicyModel("org.onap.ms1", "", "1.0.0"), false, null); + MicroServicePolicy ms2 = + new MicroServicePolicy("ms2", new PolicyModel("org.onap.ms2", "", "1.0.0"), false, null); ClampGraphBuilder clampGraphBuilder = new ClampGraphBuilder(mockPainter); - clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).build(); - } + assertThat(clampGraphBuilder.collector(collector).addMicroService(ms1).addMicroService(ms2).build()) + .isNotNull(); - @Test(expected = InvalidStateException.class) - public void clampGraphBuilderNoMicroServiceGivenTest() { - String collector = "VES"; - String policy = "OperationalPolicy"; - - ClampGraphBuilder clampGraphBuilder = new ClampGraphBuilder(mockPainter); - clampGraphBuilder.collector(collector).policy(policy).build(); } } diff --git a/src/test/java/org/onap/clamp/clds/util/drawing/SvgLoopGeneratorTest.java b/src/test/java/org/onap/clamp/clds/util/drawing/SvgLoopGeneratorTest.java new file mode 100644 index 000000000..aad11adb2 --- /dev/null +++ b/src/test/java/org/onap/clamp/clds/util/drawing/SvgLoopGeneratorTest.java @@ -0,0 +1,77 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.util.drawing; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonObject; +import java.io.IOException; +import java.util.HashSet; +import javax.xml.parsers.ParserConfigurationException; +import org.junit.Test; +import org.onap.clamp.loop.Loop; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.policy.operational.OperationalPolicy; +import org.xml.sax.SAXException; + +public class SvgLoopGeneratorTest { + private Loop getLoop() { + MicroServicePolicy ms1 = + new MicroServicePolicy("ms1", new PolicyModel("org.onap.ms1", "", "1.0.0", "short.ms1"), + false, + new HashSet()); + MicroServicePolicy ms2 = + new MicroServicePolicy("ms2", new PolicyModel("org.onap.ms2", "", "1.0.0", "short.ms2"), + false, new HashSet()); + OperationalPolicy opPolicy = new OperationalPolicy("OperationalPolicy", new Loop(), new JsonObject(), + new PolicyModel("org.onap.opolicy", null, "1.0.0", "short.OperationalPolicy")); + Loop loop = new Loop(); + loop.addMicroServicePolicy(ms1); + loop.addMicroServicePolicy(ms2); + loop.addOperationalPolicy(opPolicy); + return loop; + } + + /** + * Test a Svg rendering with all objects. + * + * @throws IOException In case of isssues + * @throws ParserConfigurationException In case of isssues + * @throws SAXException In case of isssues + */ + @Test + public void getAsSvgTest() throws IOException, ParserConfigurationException, SAXException { + String xml = SvgLoopGenerator.getSvgImage(getLoop()); + assertThat(xml).contains("data-element-id=\"VES\""); + assertThat(xml).contains(">VES<"); + assertThat(xml).contains("data-element-id=\"ms1\""); + assertThat(xml).contains("data-element-id=\"ms2\""); + assertThat(xml).contains(">short.ms1<"); + assertThat(xml).contains(">short.ms2<"); + assertThat(xml).contains("data-element-id=\"OperationalPolicy\""); + assertThat(xml).contains(">short.OperationalPolicy<"); + + } +} diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java index fa9cc063a..57e99a3da 100644 --- a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java +++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java @@ -27,11 +27,9 @@ import static org.assertj.core.api.Assertions.assertThat; import com.google.gson.Gson; import com.google.gson.JsonObject; - import java.io.IOException; import java.util.HashSet; import java.util.List; - import org.apache.camel.Exchange; import org.apache.camel.Message; import org.json.simple.parser.ParseException; @@ -42,6 +40,7 @@ import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; import org.onap.clamp.loop.components.external.DcaeComponent; import org.onap.clamp.loop.components.external.ExternalComponentState; import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.microservice.MicroServicePolicy; public class DcaeComponentTest { @@ -54,8 +53,8 @@ public class DcaeComponentTest { loopTest.setDcaeDeploymentId("123456789"); loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085"); - MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, + MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", new PolicyModel("policy1", + "tosca_definitions_version: tosca_simple_yaml_1_0_0","1.0.0"), true, new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>()); microServicePolicy.setConfigurationsJson(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class)); @@ -67,6 +66,10 @@ public class DcaeComponentTest { return loopTest; } + /** + * Test the DcaeReponse roughly. + * @throws IOException In case of issues + */ @Test public void convertDcaeResponseTest() throws IOException { String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state'," @@ -99,6 +102,11 @@ public class DcaeComponentTest { assertThat(unDeploymentPayload).isEqualTo(expectedPayload); } + /** + * Test the computeState method of the DcaeComponent roughly. + * + * @throws IOException In case of issues + */ @Test public void computeStateTest() throws IOException { Exchange exchange = Mockito.mock(Exchange.class); @@ -157,6 +165,11 @@ public class DcaeComponentTest { assertThat(state9.getStateName()).isEqualTo("IN_ERROR"); } + /** + * Test the Converter to DcaeInventoryResponse method. + * @throws IOException In case of failure + * @throws ParseException In case of failure + */ @Test public void convertToDcaeInventoryResponseTest() throws IOException, ParseException { String dcaeFakeResponse = "{\n" + " \"links\": {\n" + " \"previousLink\": {\n" diff --git a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java index c85d5a57c..4fd78d18a 100644 --- a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java @@ -28,13 +28,10 @@ import static org.assertj.core.api.Assertions.assertThat; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; - import java.io.IOException; import java.util.HashSet; import java.util.Set; - import javax.transaction.Transactional; - import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.builder.ExchangeBuilder; @@ -42,6 +39,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelsService; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -55,12 +54,21 @@ public class DeployFlowTestItCase { @Autowired CamelContext camelContext; + @Autowired + PolicyModelsService policyModelsService; + @Autowired LoopService loopService; @Autowired LoopsRepository loopsRepository; + /** + * This method tests a deployment a single blueprint. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ @Test @Transactional public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { @@ -85,6 +93,12 @@ public class DeployFlowTestItCase { assertThat(loopAfterTest.getDcaeDeploymentId()).isNotNull(); } + /** + * This method tests the deployment of multiple separated blueprints. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ @Test @Transactional public void deployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { @@ -117,6 +131,12 @@ public class DeployFlowTestItCase { assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); } + /** + * This method tests the undeployment of a single blueprint. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ @Test @Transactional public void undeployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { @@ -142,6 +162,12 @@ public class DeployFlowTestItCase { assertThat(loopAfterTest.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue(); } + /** + * This method tests the undeployment of multiple separated blueprints. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ @Test @Transactional public void undeployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { @@ -175,7 +201,12 @@ public class DeployFlowTestItCase { assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); } - + /** + * This method tests the DCAE get status for a single blueprint. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ @Test @Transactional public void getStatusWithSingleBlueprintTest() throws JsonSyntaxException, IOException { @@ -206,6 +237,12 @@ public class DeployFlowTestItCase { assertThat(loopAfterTest.getComponent("POLICY")).isNotNull(); } + /** + * This method tests the dcae get status for multiple blueprints. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ @Test @Transactional public void getStatusWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { @@ -256,8 +293,13 @@ public class DeployFlowTestItCase { private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, String policyTosca, String jsonProperties, boolean shared) { - MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, + + PolicyModel policyModel = new PolicyModel(modelType, policyTosca,"1.0.0"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy microService = new MicroServicePolicy(name, policyModel, + shared, gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); + microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); return microService; } diff --git a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java index f1e5c0927..714cbd592 100644 --- a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java @@ -30,16 +30,15 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; - import java.util.Set; - import javax.transaction.Transactional; - import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelsService; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -63,6 +62,9 @@ public class LoopControllerTestItCase { @Autowired MicroServicePolicyService microServicePolicyService; + @Autowired + PolicyModelsService policyModelsService; + @Autowired LoopController loopController; @@ -129,8 +131,10 @@ public class LoopControllerTestItCase { @Transactional public void testUpdateMicroservicePolicy() { saveTestLoopToDb(); - MicroServicePolicy policy = new MicroServicePolicy("policyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, + PolicyModel policyModel = new PolicyModel("", + "tosca_definitions_version: tosca_simple_yaml_1_0_0","1.0.0"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy policy = new MicroServicePolicy("policyName", policyModel, false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopController.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, policy); assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); diff --git a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java index 62b25605e..e6c477b44 100644 --- a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java @@ -30,10 +30,8 @@ import static org.assertj.core.api.Assertions.assertThat; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; - import java.time.Instant; import java.util.HashSet; - import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; @@ -92,32 +90,33 @@ public class LoopRepositoriesItCase { return new Service(serviceDetails, resourceDetails); } - private OperationalPolicy getOperationalPolicy(String configJson, String name) { - return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class)); + private OperationalPolicy getOperationalPolicy(String configJson, String name, PolicyModel policyModel) { + return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class), policyModel); } private LoopElementModel getLoopElementModel(String yaml, String name, String policyType, String createdBy, - PolicyModel policyModel) { + PolicyModel policyModel) { LoopElementModel model = new LoopElementModel(name, policyType, yaml); model.addPolicyModel(policyModel); return model; } - private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, - String policyVariant, String createdBy) { + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, + String policyAcronym) { return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); } private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, String createdBy, - Integer maxInstancesAllowed) { + Integer maxInstancesAllowed) { LoopTemplate template = new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "org.onap.policy.drools", createdBy, - getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1", createdBy))); + getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools"))); + loopTemplateRepository.save(template); return template; } private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, - String dcaeId, String dcaeUrl, String dcaeBlueprintId) { + String dcaeId, String dcaeUrl, String dcaeBlueprintId) { Loop loop = new Loop(); loop.setName(name); loop.setSvgRepresentation(svgRepresentation); @@ -129,9 +128,9 @@ public class LoopRepositoriesItCase { return loop; } - private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, - String policyTosca, String jsonProperties, boolean shared) { - MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, + private MicroServicePolicy getMicroServicePolicy(String name, String jsonRepresentation, String jsonProperties, + boolean shared, PolicyModel policyModel) { + MicroServicePolicy microService = new MicroServicePolicy(name, policyModel, shared, gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); return microService; @@ -141,17 +140,20 @@ public class LoopRepositoriesItCase { return new LoopLog(message, type, "CLAMP", loop); } + /** + * This method does a crud test and save a loop template and a loop object in db. + */ @Test @Transactional public void crudTest() { // Setup Loop loopTest = getLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", "123456789", "https://dcaetest.org", "UUID-blueprint"); - OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest"); + OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest", + getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools")); loopTest.addOperationalPolicy(opPolicy); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "{\"configtype\":\"json\"}", + "{\"param1\":\"value1\"}", true, getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools")); loopTest.addMicroServicePolicy(microServicePolicy); LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest); loopTest.addLog(loopLog); @@ -182,7 +184,7 @@ public class LoopRepositoriesItCase { assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); assertThat(microServiceModelsRepository.existsById( loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) - .isEqualTo(true); + .isEqualTo(true); assertThat(policyModelsRepository.existsById(new PolicyModelId( loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() .first().getPolicyModelType(), @@ -238,7 +240,7 @@ public class LoopRepositoriesItCase { assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); assertThat(microServiceModelsRepository.existsById( loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) - .isEqualTo(true); + .isEqualTo(true); assertThat(policyModelsRepository.existsById(new PolicyModelId( loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index 8089bf1a8..152648712 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -26,12 +26,9 @@ package org.onap.clamp.loop; import static org.assertj.core.api.Assertions.assertThat; import com.google.gson.JsonObject; - import java.util.Set; import java.util.stream.Collectors; - import javax.transaction.Transactional; - import org.assertj.core.util.Lists; import org.junit.Test; import org.junit.runner.RunWith; @@ -41,6 +38,8 @@ import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.log.LoopLogService; import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelsService; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -71,6 +70,9 @@ public class LoopServiceTestItCase { @Autowired LoopLogService loopLogService; + @Autowired + PolicyModelsService policyModelsService; + @Test @Transactional public void shouldCreateEmptyLoop() { @@ -99,7 +101,7 @@ public class LoopServiceTestItCase { // given saveTestLoopToDb(); OperationalPolicy operationalPolicy = new OperationalPolicy("policyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); // when Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, @@ -123,9 +125,11 @@ public class LoopServiceTestItCase { public void shouldAddMicroservicePolicyToLoop() { // given saveTestLoopToDb(); - MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + PolicyModel policyModel = new PolicyModel("org.policies.policyModel1", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "policyModel1"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", policyModel, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); // when Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, @@ -147,13 +151,18 @@ public class LoopServiceTestItCase { public void shouldCreateNewMicroservicePolicyAndUpdateJsonRepresentationOfOldOne() { // given saveTestLoopToDb(); - - MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "", "", false, + PolicyModel policyModel1 = new PolicyModel("org.policies.firstPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "firstPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = new PolicyModel("org.policies.secondPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "secondPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", policyModel1, false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); - MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, - JsonUtils.GSON.fromJson("{}", JsonObject.class), null); + MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", policyModel2, false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); // when firstMicroServicePolicy @@ -170,13 +179,12 @@ public class LoopServiceTestItCase { assertThat(savedPolicies).contains(secondMicroServicePolicy); assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", "createdBy", "updatedBy").containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy); - } private void saveTestLoopToDb() { Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation"); testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); - LoopTemplate template = new LoopTemplate(); + LoopTemplate template = new LoopTemplate(); template.setName("testTemplate"); testLoop.setLoopTemplate(template); loopService.saveOrUpdateLoop(testLoop); @@ -187,14 +195,18 @@ public class LoopServiceTestItCase { public void shouldRemoveOldMicroservicePolicyIfNotInUpdatedList() { // given saveTestLoopToDb(); - - MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "", - "\"tosca_definitions_version: tosca_simple_yaml_1_0_0\"", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + PolicyModel policyModel1 = new PolicyModel("org.policies.firstPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "firstPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = new PolicyModel("org.policies.secondPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "secondPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", policyModel1, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); - MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("policyName", "", "secondPolicyTosca", - true, JsonUtils.GSON.fromJson("{}", JsonObject.class), null); + MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", policyModel2, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); // when Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, @@ -219,11 +231,11 @@ public class LoopServiceTestItCase { JsonObject newJsonConfiguration = JsonUtils.GSON.fromJson("{}", JsonObject.class); OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); OperationalPolicy secondOperationalPolicy = new OperationalPolicy("secondPolicyName", null, - newJsonConfiguration); + newJsonConfiguration, null); // when firstOperationalPolicy.setConfigurationsJson(newJsonConfiguration); @@ -250,11 +262,11 @@ public class LoopServiceTestItCase { saveTestLoopToDb(); OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); OperationalPolicy secondOperationalPolicy = new OperationalPolicy("policyName", null, - JsonUtils.GSON.fromJson("{}", JsonObject.class)); + JsonUtils.GSON.fromJson("{}", JsonObject.class), null); // when Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, @@ -300,19 +312,21 @@ public class LoopServiceTestItCase { // Add log Loop loop = loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null); loop.addLog(new LoopLog("test", LogType.INFO, "CLAMP", loop)); - LoopTemplate template = new LoopTemplate(); + LoopTemplate template = new LoopTemplate(); template.setName("testTemplate"); loop.setLoopTemplate(template); loop = loopService.saveOrUpdateLoop(loop); // Add op policy OperationalPolicy operationalPolicy = new OperationalPolicy("opPolicy", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(operationalPolicy)); + PolicyModel policyModel = new PolicyModel("org.policies.microPolicy", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "microPolicy"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); // Add Micro service policy - MicroServicePolicy microServicePolicy = new MicroServicePolicy("microPolicy", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + MicroServicePolicy microServicePolicy = new MicroServicePolicy("microPolicy", policyModel, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(microServicePolicy)); // Verify it's there @@ -352,9 +366,11 @@ public class LoopServiceTestItCase { public void testUpdateMicroservicePolicy() { saveTestLoopToDb(); assertThat(microServicePolicyService.isExisting("policyName")).isFalse(); - MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); + PolicyModel policyModel = new PolicyModel("org.policies.policyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "policyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", policyModel, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null); loopService.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, microServicePolicy); assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); } diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index ae4b2564e..a2a4536ff 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -32,11 +32,9 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; - import java.io.IOException; import java.util.HashSet; import java.util.Random; - import org.junit.Test; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.ResourceFileUtil; @@ -56,11 +54,13 @@ public class LoopToJsonTest { private Gson gson = new Gson(); private OperationalPolicy getOperationalPolicy(String configJson, String name) { - return new OperationalPolicy(name, null, gson.fromJson(configJson, JsonObject.class)); + return new OperationalPolicy(name, null, gson.fromJson(configJson, JsonObject.class), + getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1")); } private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, - String dcaeId, String dcaeUrl, String dcaeBlueprintId) throws JsonSyntaxException, IOException { + String dcaeId, String dcaeUrl, String dcaeBlueprintId) + throws JsonSyntaxException, IOException { Loop loop = new Loop(name, svgRepresentation); loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); loop.setLastComputedState(LoopState.DESIGN); @@ -70,8 +70,9 @@ public class LoopToJsonTest { } private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, - String policyTosca, String jsonProperties, boolean shared) { - MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared, + String policyTosca, String jsonProperties, boolean shared) { + MicroServicePolicy microService = new MicroServicePolicy(name, new PolicyModel(modelType, policyTosca, "1.0.0"), + shared, gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>()); microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); return microService; @@ -87,12 +88,12 @@ public class LoopToJsonTest { } private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, String policyAcronym, - String policyVariant) { + String policyVariant) { return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); } private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, - Integer maxInstancesAllowed) { + Integer maxInstancesAllowed) { LoopTemplate template = new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); template.addLoopElementModel(getLoopElementModel("yaml", "microService1", getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1"))); diff --git a/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java b/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java index 7762111b0..b42e15367 100644 --- a/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java +++ b/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java @@ -25,13 +25,10 @@ package org.onap.clamp.policy.downloader; import static org.assertj.core.api.Assertions.assertThat; import com.google.gson.JsonSyntaxException; - import java.io.IOException; import java.time.Instant; import java.util.List; - import javax.transaction.Transactional; - import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; @@ -53,12 +50,19 @@ public class PolicyEngineControllerTestItCase { @Autowired PolicyModelsRepository policyModelsRepository; + /** + * This method tests a fake synchronization with the emulator. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + * @throws InterruptedException In case of issues + */ @Test @Transactional public void synchronizeAllPoliciesTest() throws JsonSyntaxException, IOException, InterruptedException { policyController.synchronizeAllPolicies(); Instant firstExecution = policyController.getLastInstantExecuted(); - assertThat (firstExecution).isNotNull(); + assertThat(firstExecution).isNotNull(); List policyModelsList = policyModelsRepository.findAll(); assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(8); assertThat(policyModelsList).contains(new PolicyModel("onap.policies.Monitoring", null, "1.0.0")); @@ -67,7 +71,7 @@ public class PolicyEngineControllerTestItCase { // Re-do it to check that there is no issue with duplicate key policyController.synchronizeAllPolicies(); Instant secondExecution = policyController.getLastInstantExecuted(); - assertThat (secondExecution).isNotNull(); + assertThat(secondExecution).isNotNull(); assertThat(firstExecution).isBefore(secondExecution); } diff --git a/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java b/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java index 1556ac6d3..3911494f4 100644 --- a/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java +++ b/src/test/java/org/onap/clamp/policy/microservice/MicroServicePayloadTest.java @@ -24,21 +24,21 @@ package org.onap.clamp.policy.microservice; import com.google.gson.JsonObject; - import java.io.IOException; import java.util.HashSet; - import org.junit.Test; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.loop.template.PolicyModel; import org.skyscreamer.jsonassert.JSONAssert; public class MicroServicePayloadTest { @Test public void testPayloadConstruction() throws IOException { - MicroServicePolicy policy = new MicroServicePolicy("testPolicy", "onap.policies.monitoring.cdap.tca.hi.lo.app", - ResourceFileUtil.getResourceAsString("tosca/tosca_example.yaml"), false, new HashSet<>()); + MicroServicePolicy policy = new MicroServicePolicy("testPolicy", new PolicyModel( + "onap.policies.monitoring.cdap.tca.hi.lo.app", + ResourceFileUtil.getResourceAsString("tosca/tosca_example.yaml"),"1.0.0"), false, new HashSet<>()); policy.setConfigurationsJson(JsonUtils.GSON.fromJson( ResourceFileUtil.getResourceAsString("tosca/micro-service-policy-properties.json"), JsonObject.class)); JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/micro-service-policy-payload.json"), diff --git a/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java index 728b61cc9..f42bbc1c0 100644 --- a/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java +++ b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java @@ -27,10 +27,8 @@ import static org.assertj.core.api.Assertions.assertThat; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; - import java.io.IOException; import java.util.Map; - import org.junit.Test; import org.onap.clamp.clds.util.ResourceFileUtil; import org.onap.clamp.policy.operational.LegacyOperationalPolicy; @@ -43,7 +41,7 @@ public class OperationalPolicyPayloadTest { public void testOperationalPolicyPayloadConstruction() throws IOException { JsonObject jsonConfig = new GsonBuilder().create().fromJson( ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); - OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); + OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig, null); assertThat(policy.createPolicyPayloadYaml()) .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.yaml")); @@ -65,7 +63,7 @@ public class OperationalPolicyPayloadTest { JsonObject jsonConfig = new GsonBuilder().create().fromJson( ResourceFileUtil.getResourceAsString("tosca/operational-policy-no-guard-properties.json"), JsonObject.class); - OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); + OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig, null); Map guardsMap = policy.createGuardPolicyPayloads(); assertThat(guardsMap).isEmpty(); assertThat(guardsMap.entrySet()).isEmpty(); @@ -75,7 +73,7 @@ public class OperationalPolicyPayloadTest { public void testGuardPolicyPayloadConstruction() throws IOException { JsonObject jsonConfig = new GsonBuilder().create().fromJson( ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); - OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig); + OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig, null); Map guardsMap = policy.createGuardPolicyPayloads(); -- cgit 1.2.3-korg From 3a26471260e56f7a87533f0147fc63530d6ea08c Mon Sep 17 00:00:00 2001 From: xuegao Date: Tue, 18 Feb 2020 14:20:23 +0100 Subject: Create get Pdp Groups flow Create a camel flow to get the list of Pdp Groups info from Policy. Create a scheduler to trigger the camel flow regularly and store the Pdp Groups info into DB. Issue-ID: CLAMP-644, CLAMP-649 Change-Id: I6427202cc0186cd85428d5d25b28a8622e4d7ca4 Signed-off-by: xuegao --- docs/swagger/swagger.json | 286 +- docs/swagger/swagger.pdf | 3774 ++++++++++---------- extra/sql/bulkload/create-tables.sql | 3 + .../clamp/clds/client/PolicyEngineServices.java | 55 +- .../org/onap/clamp/loop/template/PolicyModel.java | 29 + .../clamp/loop/template/PolicyModelsService.java | 49 +- src/main/java/org/onap/clamp/policy/Policy.java | 22 + .../policy/downloader/PolicyEngineController.java | 6 +- .../org/onap/clamp/policy/pdpgroup/PdpGroup.java | 93 + .../onap/clamp/policy/pdpgroup/PdpSubgroup.java | 56 + .../onap/clamp/policy/pdpgroup/PolicyModelKey.java | 126 + src/main/resources/META-INF/resources/swagger.html | 92 +- .../resources/clds/camel/routes/policy-flows.xml | 36 +- .../org/onap/clamp/loop/LoopServiceTestItCase.java | 2 + .../onap/clamp/loop/PolicyModelServiceItCase.java | 74 + .../PolicyEngineControllerTestItCase.java | 30 + .../onap/clamp/policy/pdpgroup/PdpGroupTest.java | 88 + .../v1/pdps?connectionTimeToLive=5000/.file | 76 + .../v1/pdps?connectionTimeToLive=5000/.header | 1 + src/test/resources/http-cache/third_party_proxy.py | 2 + 20 files changed, 2808 insertions(+), 2092 deletions(-) create mode 100644 src/main/java/org/onap/clamp/policy/pdpgroup/PdpGroup.java create mode 100644 src/main/java/org/onap/clamp/policy/pdpgroup/PdpSubgroup.java create mode 100644 src/main/java/org/onap/clamp/policy/pdpgroup/PolicyModelKey.java create mode 100644 src/test/java/org/onap/clamp/policy/pdpgroup/PdpGroupTest.java create mode 100644 src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.file create mode 100644 src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.header (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 5307c1545..a52fe8c10 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -4,13 +4,13 @@ "version" : "5.0.0-SNAPSHOT", "title" : "Clamp Rest API" }, - "host" : "localhost:32977", + "host" : "localhost:33631", "basePath" : "/restservices/clds/", "schemes" : [ "http" ], "paths" : { "/v2/dictionary" : { "get" : { - "operationId" : "route111", + "operationId" : "route80", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -20,11 +20,11 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route111" + "x-camelContextId" : "camel-3", + "x-routeId" : "route80" }, "put" : { - "operationId" : "route113", + "operationId" : "route82", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -43,8 +43,8 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route113" + "x-camelContextId" : "camel-3", + "x-routeId" : "route82" } }, "/v2/dictionary/{dictionaryName}" : { @@ -64,7 +64,7 @@ } } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null } }, @@ -93,11 +93,11 @@ } } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null }, "delete" : { - "operationId" : "route115", + "operationId" : "route84", "produces" : [ "application/json" ], "parameters" : [ { "name" : "name", @@ -108,8 +108,8 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route115" + "x-camelContextId" : "camel-3", + "x-routeId" : "route84" } }, "/v2/dictionary/{name}/elements/{shortName}" : { @@ -129,7 +129,7 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null } }, @@ -147,13 +147,13 @@ } } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null } }, "/v2/loop/{loopName}" : { "get" : { - "operationId" : "route96", + "operationId" : "route65", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -169,13 +169,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route96" + "x-camelContextId" : "camel-3", + "x-routeId" : "route65" } }, "/v2/loop/delete/{loopName}" : { "put" : { - "operationId" : "route107", + "operationId" : "route76", "parameters" : [ { "name" : "loopName", "in" : "path", @@ -185,13 +185,13 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route107" + "x-camelContextId" : "camel-3", + "x-routeId" : "route76" } }, "/v2/loop/deploy/{loopName}" : { "put" : { - "operationId" : "route101", + "operationId" : "route70", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -207,13 +207,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route101" + "x-camelContextId" : "camel-3", + "x-routeId" : "route70" } }, "/v2/loop/getAllNames" : { "get" : { - "operationId" : "route95", + "operationId" : "route64", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -226,13 +226,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route95" + "x-camelContextId" : "camel-3", + "x-routeId" : "route64" } }, "/v2/loop/getstatus/{loopName}" : { "get" : { - "operationId" : "route108", + "operationId" : "route77", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -248,13 +248,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route108" + "x-camelContextId" : "camel-3", + "x-routeId" : "route77" } }, "/v2/loop/refreshOpPolicyJsonSchema/{loopName}" : { "put" : { - "operationId" : "route102", + "operationId" : "route71", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -270,13 +270,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route102" + "x-camelContextId" : "camel-3", + "x-routeId" : "route71" } }, "/v2/loop/restart/{loopName}" : { "put" : { - "operationId" : "route105", + "operationId" : "route74", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -292,13 +292,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route105" + "x-camelContextId" : "camel-3", + "x-routeId" : "route74" } }, "/v2/loop/stop/{loopName}" : { "put" : { - "operationId" : "route104", + "operationId" : "route73", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -314,13 +314,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route104" + "x-camelContextId" : "camel-3", + "x-routeId" : "route73" } }, "/v2/loop/submit/{loopName}" : { "put" : { - "operationId" : "route106", + "operationId" : "route75", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -336,13 +336,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route106" + "x-camelContextId" : "camel-3", + "x-routeId" : "route75" } }, "/v2/loop/svgRepresentation/{loopName}" : { "get" : { - "operationId" : "route97", + "operationId" : "route66", "produces" : [ "application/xml" ], "parameters" : [ { "name" : "loopName", @@ -358,13 +358,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route97" + "x-camelContextId" : "camel-3", + "x-routeId" : "route66" } }, "/v2/loop/undeploy/{loopName}" : { "put" : { - "operationId" : "route103", + "operationId" : "route72", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -380,13 +380,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route103" + "x-camelContextId" : "camel-3", + "x-routeId" : "route72" } }, "/v2/loop/updateGlobalProperties/{loopName}" : { "post" : { - "operationId" : "route98", + "operationId" : "route67", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -410,13 +410,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route98" + "x-camelContextId" : "camel-3", + "x-routeId" : "route67" } }, "/v2/loop/updateMicroservicePolicy/{loopName}" : { "post" : { - "operationId" : "route100", + "operationId" : "route69", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -440,13 +440,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route100" + "x-camelContextId" : "camel-3", + "x-routeId" : "route69" } }, "/v2/loop/updateOperationalPolicies/{loopName}" : { "post" : { - "operationId" : "route99", + "operationId" : "route68", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -470,13 +470,13 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route99" + "x-camelContextId" : "camel-3", + "x-routeId" : "route68" } }, "/v2/policyToscaModels" : { "get" : { - "operationId" : "route118", + "operationId" : "route87", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -486,8 +486,8 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route118" + "x-camelContextId" : "camel-3", + "x-routeId" : "route87" } }, "/v2/policyToscaModels/{policyModelType}" : { @@ -507,11 +507,11 @@ } } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null }, "put" : { - "operationId" : "route119", + "operationId" : "route88", "consumes" : [ "plain/text" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -535,8 +535,8 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route119" + "x-camelContextId" : "camel-3", + "x-routeId" : "route88" } }, "/v2/policyToscaModels/yaml/{policyModelType}" : { @@ -556,13 +556,13 @@ } } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null } }, "/v2/templates" : { "get" : { - "operationId" : "route122", + "operationId" : "route91", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -572,8 +572,8 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route122" + "x-camelContextId" : "camel-3", + "x-routeId" : "route91" } }, "/v2/templates/{templateName}" : { @@ -593,7 +593,7 @@ } } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null } }, @@ -611,13 +611,13 @@ } } }, - "x-camelContextId" : "camel-4", + "x-camelContextId" : "camel-3", "x-routeId" : null } }, "/v1/healthcheck" : { "get" : { - "operationId" : "route123", + "operationId" : "route92", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -627,19 +627,19 @@ } } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route123" + "x-camelContextId" : "camel-3", + "x-routeId" : "route92" } }, "/v1/user/getUser" : { "get" : { - "operationId" : "route124", + "operationId" : "route93", "produces" : [ "text/plain" ], "responses" : { "200" : { } }, - "x-camelContextId" : "camel-4", - "x-routeId" : "route124" + "x-camelContextId" : "camel-3", + "x-routeId" : "route93" } } }, @@ -809,20 +809,19 @@ "number" : { "type" : "boolean" }, + "string" : { + "type" : "boolean" + }, + "boolean" : { + "type" : "boolean" + }, "asString" : { "type" : "string" }, - "asNumber" : { - "$ref" : "#/definitions/Number" - }, "asDouble" : { "type" : "number", "format" : "double" }, - "asFloat" : { - "type" : "number", - "format" : "float" - }, "asLong" : { "type" : "integer", "format" : "int64" @@ -831,6 +830,13 @@ "type" : "integer", "format" : "int32" }, + "asNumber" : { + "$ref" : "#/definitions/Number" + }, + "asFloat" : { + "type" : "number", + "format" : "float" + }, "asByte" : { "type" : "string", "format" : "byte" @@ -848,21 +854,9 @@ "type" : "integer", "format" : "int32" }, - "boolean" : { - "type" : "boolean" - }, - "string" : { - "type" : "boolean" - }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, "asJsonObject" : { "$ref" : "#/definitions/JsonObject" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" - }, "jsonArray" : { "type" : "boolean" }, @@ -875,6 +869,12 @@ "jsonNull" : { "type" : "boolean" }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" + }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" } @@ -952,17 +952,23 @@ "asBoolean" : { "type" : "boolean" }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" }, "asString" : { "type" : "string" }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" + "asDouble" : { + "type" : "number", + "format" : "double" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "asLong" : { + "type" : "integer", + "format" : "int64" + }, + "asInt" : { + "type" : "integer", + "format" : "int32" }, "jsonArray" : { "type" : "boolean" @@ -976,28 +982,22 @@ "jsonNull" : { "type" : "boolean" }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" + }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" }, "asNumber" : { "$ref" : "#/definitions/Number" }, - "asDouble" : { - "type" : "number", - "format" : "double" - }, "asFloat" : { "type" : "number", "format" : "float" }, - "asLong" : { - "type" : "integer", - "format" : "int64" - }, - "asInt" : { - "type" : "integer", - "format" : "int32" - }, "asByte" : { "type" : "string", "format" : "byte" @@ -1144,17 +1144,23 @@ "asBoolean" : { "type" : "boolean" }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" }, "asString" : { "type" : "string" }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" + "asDouble" : { + "type" : "number", + "format" : "double" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "asLong" : { + "type" : "integer", + "format" : "int64" + }, + "asInt" : { + "type" : "integer", + "format" : "int32" }, "jsonArray" : { "type" : "boolean" @@ -1168,28 +1174,22 @@ "jsonNull" : { "type" : "boolean" }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" + }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" }, "asNumber" : { "$ref" : "#/definitions/Number" }, - "asDouble" : { - "type" : "number", - "format" : "double" - }, "asFloat" : { "type" : "number", "format" : "float" }, - "asLong" : { - "type" : "integer", - "format" : "int64" - }, - "asInt" : { - "type" : "integer", - "format" : "int32" - }, "asByte" : { "type" : "string", "format" : "byte" @@ -1218,17 +1218,10 @@ "asString" : { "type" : "string" }, - "asNumber" : { - "$ref" : "#/definitions/Number" - }, "asDouble" : { "type" : "number", "format" : "double" }, - "asFloat" : { - "type" : "number", - "format" : "float" - }, "asLong" : { "type" : "integer", "format" : "int64" @@ -1237,6 +1230,13 @@ "type" : "integer", "format" : "int32" }, + "asNumber" : { + "$ref" : "#/definitions/Number" + }, + "asFloat" : { + "type" : "number", + "format" : "float" + }, "asByte" : { "type" : "string", "format" : "byte" @@ -1254,15 +1254,9 @@ "type" : "integer", "format" : "int32" }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, "asJsonObject" : { "$ref" : "#/definitions/JsonObject" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" - }, "jsonArray" : { "type" : "boolean" }, @@ -1275,6 +1269,12 @@ "jsonNull" : { "type" : "boolean" }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" + }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" } diff --git a/docs/swagger/swagger.pdf b/docs/swagger/swagger.pdf index 692034cee..d9acf9d7e 100644 --- a/docs/swagger/swagger.pdf +++ b/docs/swagger/swagger.pdf @@ -4,16 +4,16 @@ << /Title (Clamp Rest API) /Creator (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) /Producer (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) -/CreationDate (D:20200225132217-08'00') -/ModDate (D:20200225132217-08'00') +/CreationDate (D:20200226131758+01'00') +/ModDate (D:20200226131758+01'00') >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R /Names 20 0 R -/Outlines 589 0 R -/PageLabels 733 0 R +/Outlines 588 0 R +/PageLabels 732 0 R /PageMode /UseOutlines /OpenAction [7 0 R /FitH 793.0] /ViewerPreferences << /DisplayDocTitle true @@ -23,7 +23,7 @@ endobj 3 0 obj << /Type /Pages /Count 33 -/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 27 0 R 43 0 R 58 0 R 72 0 R 84 0 R 97 0 R 110 0 R 124 0 R 137 0 R 151 0 R 165 0 R 178 0 R 193 0 R 208 0 R 215 0 R 221 0 R 229 0 R 235 0 R 240 0 R 249 0 R 256 0 R 266 0 R 272 0 R 278 0 R 286 0 R 297 0 R 303 0 R] +/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 27 0 R 43 0 R 58 0 R 72 0 R 84 0 R 97 0 R 110 0 R 124 0 R 137 0 R 151 0 R 165 0 R 178 0 R 192 0 R 207 0 R 214 0 R 220 0 R 228 0 R 234 0 R 239 0 R 248 0 R 255 0 R 265 0 R 271 0 R 277 0 R 285 0 R 296 0 R 302 0 R] >> endobj 4 0 obj @@ -80,11 +80,11 @@ endobj << /Type /Font /BaseFont /AAAAAA+NotoSerif /Subtype /TrueType -/FontDescriptor 735 0 R +/FontDescriptor 734 0 R /FirstChar 32 /LastChar 255 -/Widths 737 0 R -/ToUnicode 736 0 R +/Widths 736 0 R +/ToUnicode 735 0 R >> endobj 9 0 obj @@ -1559,7 +1559,7 @@ endobj /F1.0 8 0 R >> >> -/Annots [306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R] +/Annots [305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R] >> endobj 11 0 obj @@ -3102,7 +3102,7 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R] +/Annots [377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R] >> endobj 13 0 obj @@ -4645,7 +4645,7 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R] +/Annots [453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R] >> endobj 15 0 obj @@ -5828,7 +5828,7 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R] +/Annots [529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R] >> endobj 17 0 obj @@ -5910,7 +5910,7 @@ ET BT 71.30850000000001 592.176 Td /F1.0 10.5 Tf -<203a206c6f63616c686f73743a3332393737> Tj +<203a206c6f63616c686f73743a3333363331> Tj ET 0.000 0.000 0.000 SCN @@ -6011,7 +6011,7 @@ endobj /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> >> @@ -6025,18 +6025,18 @@ endobj >> endobj 21 0 obj -<< /Kids [53 0 R 247 0 R 160 0 R 87 0 R 130 0 R 198 0 R 54 0 R 188 0 R 119 0 R 82 0 R 185 0 R] +<< /Kids [53 0 R 246 0 R 160 0 R 87 0 R 130 0 R 197 0 R 54 0 R 187 0 R 116 0 R 82 0 R] >> endobj 22 0 obj << /Type /Font /BaseFont /AAAAAB+NotoSerif-Bold /Subtype /TrueType -/FontDescriptor 739 0 R +/FontDescriptor 738 0 R /FirstChar 32 /LastChar 255 -/Widths 741 0 R -/ToUnicode 740 0 R +/Widths 740 0 R +/ToUnicode 739 0 R >> endobj 23 0 obj @@ -6046,11 +6046,11 @@ endobj << /Type /Font /BaseFont /AAAAAC+NotoSerif-Italic /Subtype /TrueType -/FontDescriptor 743 0 R +/FontDescriptor 742 0 R /FirstChar 32 /LastChar 255 -/Widths 745 0 R -/ToUnicode 744 0 R +/Widths 744 0 R +/ToUnicode 743 0 R >> endobj 25 0 obj @@ -6950,7 +6950,7 @@ endobj /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [31 0 R 39 0 R] @@ -6980,11 +6980,11 @@ endobj << /Type /Font /BaseFont /AAAAAD+mplus1mn-regular /Subtype /TrueType -/FontDescriptor 747 0 R +/FontDescriptor 746 0 R /FirstChar 32 /LastChar 255 -/Widths 749 0 R -/ToUnicode 748 0 R +/Widths 748 0 R +/ToUnicode 747 0 R >> endobj 34 0 obj @@ -8225,7 +8225,7 @@ endobj /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [45 0 R 47 0 R] @@ -8270,7 +8270,7 @@ endobj endobj 53 0 obj << /Limits [(_cldshealthcheck) (_dictionaryelement)] -/Names [(_cldshealthcheck) 210 0 R (_consumes) 48 0 R (_consumes_2) 67 0 R (_consumes_3) 143 0 R (_consumes_4) 152 0 R (_consumes_5) 159 0 R (_consumes_6) 190 0 R (_definitions) 209 0 R (_dictionary) 211 0 R (_dictionaryelement) 213 0 R] +/Names [(_cldshealthcheck) 209 0 R (_consumes) 48 0 R (_consumes_2) 67 0 R (_consumes_3) 143 0 R (_consumes_4) 152 0 R (_consumes_5) 159 0 R (_consumes_6) 189 0 R (_definitions) 208 0 R (_dictionary) 210 0 R (_dictionaryelement) 212 0 R] >> endobj 54 0 obj @@ -9630,7 +9630,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [60 0 R 64 0 R 66 0 R] @@ -10824,7 +10824,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> >> @@ -10857,8 +10857,8 @@ endobj [72 0 R /XYZ 0 108.12000000000052 null] endobj 82 0 obj -<< /Limits [(_route108) (_route96)] -/Names [(_route108) 94 0 R (_route111) 37 0 R (_route113) 41 0 R (_route115) 69 0 R (_route118) 169 0 R (_route119) 184 0 R (_route122) 194 0 R (_route123) 29 0 R (_route124) 34 0 R (_route95) 91 0 R (_route96) 162 0 R] +<< /Limits [(_route77) (_version_information)] +/Names [(_route77) 94 0 R (_route80) 37 0 R (_route82) 41 0 R (_route84) 69 0 R (_route87) 169 0 R (_route88) 184 0 R (_route91) 193 0 R (_route92) 29 0 R (_route93) 34 0 R (_service) 300 0 R (_uri_scheme) 25 0 R (_v2_dictionary_dictionaryname_get) 55 0 R (_v2_dictionary_name_elements_shortname_delete) 75 0 R (_v2_dictionary_name_put) 62 0 R (_v2_dictionary_secondary_names_get) 50 0 R (_v2_policytoscamodels_policymodeltype_get) 179 0 R (_v2_policytoscamodels_yaml_policymodeltype_get) 173 0 R (_v2_templates_names_get) 198 0 R (_v2_templates_templatename_get) 201 0 R (_version_information) 23 0 R] >> endobj 83 0 obj @@ -12192,7 +12192,7 @@ endobj /F3.0 24 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [89 0 R] @@ -12206,7 +12206,7 @@ endobj endobj 87 0 obj << /Limits [(_parameters_8) (_produces_15)] -/Names [(_parameters_8) 95 0 R (_parameters_9) 102 0 R (_paths) 28 0 R (_policymodel) 299 0 R (_produces) 32 0 R (_produces_10) 90 0 R (_produces_11) 93 0 R (_produces_12) 100 0 R (_produces_13) 105 0 R (_produces_14) 112 0 R (_produces_15) 117 0 R] +/Names [(_parameters_8) 95 0 R (_parameters_9) 102 0 R (_paths) 28 0 R (_policymodel) 298 0 R (_produces) 32 0 R (_produces_10) 90 0 R (_produces_11) 93 0 R (_produces_12) 100 0 R (_produces_13) 105 0 R (_produces_14) 112 0 R (_produces_15) 118 0 R] >> endobj 88 0 obj @@ -13432,7 +13432,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [99 0 R 104 0 R] @@ -14902,10 +14902,10 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [111 0 R 116 0 R 122 0 R] +/Annots [111 0 R 117 0 R 122 0 R] >> endobj 111 0 obj @@ -14929,6 +14929,11 @@ endobj [110 0 R /XYZ 0 481.68000000000046 null] endobj 116 0 obj +<< /Limits [(_responses_5) (_route76)] +/Names [(_responses_5) 51 0 R (_responses_6) 59 0 R (_responses_7) 65 0 R (_responses_8) 73 0 R (_responses_9) 77 0 R (_route64) 91 0 R (_route65) 162 0 R (_route66) 126 0 R (_route67) 138 0 R (_route68) 154 0 R (_route69) 145 0 R (_route70) 85 0 R (_route71) 101 0 R (_route72) 131 0 R (_route73) 113 0 R (_route74) 106 0 R (_route75) 119 0 R (_route76) 79 0 R] +>> +endobj +117 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -14936,16 +14941,11 @@ endobj /Type /Annot >> endobj -117 0 obj -[110 0 R /XYZ 0 376.5600000000004 null] -endobj 118 0 obj -[110 0 R /XYZ 0 320.28000000000037 null] +[110 0 R /XYZ 0 376.5600000000004 null] endobj 119 0 obj -<< /Limits [(_responses_5) (_route107)] -/Names [(_responses_5) 51 0 R (_responses_6) 59 0 R (_responses_7) 65 0 R (_responses_8) 73 0 R (_responses_9) 77 0 R (_route100) 145 0 R (_route101) 85 0 R (_route102) 101 0 R (_route103) 131 0 R (_route104) 113 0 R (_route105) 106 0 R (_route106) 118 0 R (_route107) 79 0 R] ->> +[110 0 R /XYZ 0 320.28000000000037 null] endobj 120 0 obj [110 0 R /XYZ 0 280.20000000000033 null] @@ -16162,7 +16162,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [134 0 R] @@ -17665,7 +17665,7 @@ endobj /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [140 0 R 142 0 R 147 0 R 149 0 R] @@ -18861,7 +18861,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [156 0 R 158 0 R] @@ -18903,7 +18903,7 @@ endobj endobj 160 0 obj << /Limits [(_parameters_13) (_parameters_7)] -/Names [(_parameters_13) 127 0 R (_parameters_14) 132 0 R (_parameters_15) 139 0 R (_parameters_16) 146 0 R (_parameters_17) 155 0 R (_parameters_18) 163 0 R (_parameters_19) 174 0 R (_parameters_2) 56 0 R (_parameters_20) 180 0 R (_parameters_21) 186 0 R (_parameters_22) 203 0 R (_parameters_3) 63 0 R (_parameters_4) 70 0 R (_parameters_5) 76 0 R (_parameters_6) 80 0 R (_parameters_7) 86 0 R] +/Names [(_parameters_13) 127 0 R (_parameters_14) 132 0 R (_parameters_15) 139 0 R (_parameters_16) 146 0 R (_parameters_17) 155 0 R (_parameters_18) 163 0 R (_parameters_19) 174 0 R (_parameters_2) 56 0 R (_parameters_20) 180 0 R (_parameters_21) 185 0 R (_parameters_22) 202 0 R (_parameters_3) 63 0 R (_parameters_4) 70 0 R (_parameters_5) 76 0 R (_parameters_6) 80 0 R (_parameters_7) 86 0 R] >> endobj 161 0 obj @@ -20130,7 +20130,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> /Annots [167 0 R 171 0 R] @@ -21517,10 +21517,10 @@ endobj /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [182 0 R 189 0 R] +/Annots [182 0 R 188 0 R] >> endobj 179 0 obj @@ -21547,22 +21547,17 @@ endobj [178 0 R /XYZ 0 451.80000000000035 null] endobj 185 0 obj -<< /Limits [(_route97) (_version_information)] -/Names [(_route97) 126 0 R (_route98) 138 0 R (_route99) 154 0 R (_service) 301 0 R (_uri_scheme) 25 0 R (_v2_dictionary_dictionaryname_get) 55 0 R (_v2_dictionary_name_elements_shortname_delete) 75 0 R (_v2_dictionary_name_put) 62 0 R (_v2_dictionary_secondary_names_get) 50 0 R (_v2_policytoscamodels_policymodeltype_get) 179 0 R (_v2_policytoscamodels_yaml_policymodeltype_get) 173 0 R (_v2_templates_names_get) 199 0 R (_v2_templates_templatename_get) 202 0 R (_version_information) 23 0 R] ->> -endobj -186 0 obj [178 0 R /XYZ 0 411.7200000000003 null] endobj -187 0 obj +186 0 obj [178 0 R /XYZ 0 269.04000000000025 null] endobj -188 0 obj +187 0 obj << /Limits [(_responses_2) (_responses_4)] -/Names [(_responses_2) 35 0 R (_responses_20) 141 0 R (_responses_21) 148 0 R (_responses_22) 157 0 R (_responses_23) 166 0 R (_responses_24) 170 0 R (_responses_25) 175 0 R (_responses_26) 181 0 R (_responses_27) 187 0 R (_responses_28) 195 0 R (_responses_29) 200 0 R (_responses_3) 38 0 R (_responses_30) 204 0 R (_responses_4) 46 0 R] +/Names [(_responses_2) 35 0 R (_responses_20) 141 0 R (_responses_21) 148 0 R (_responses_22) 157 0 R (_responses_23) 166 0 R (_responses_24) 170 0 R (_responses_25) 175 0 R (_responses_26) 181 0 R (_responses_27) 186 0 R (_responses_28) 194 0 R (_responses_29) 199 0 R (_responses_3) 38 0 R (_responses_30) 203 0 R (_responses_4) 46 0 R] >> endobj -189 0 obj +188 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -21570,13 +21565,13 @@ endobj /Type /Annot >> endobj -190 0 obj +189 0 obj [178 0 R /XYZ 0 163.92000000000024 null] endobj -191 0 obj +190 0 obj [178 0 R /XYZ 0 107.64000000000021 null] endobj -192 0 obj +191 0 obj << /Length 16516 >> stream @@ -22780,30 +22775,30 @@ Q endstream endobj -193 0 obj +192 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 192 0 R +/Contents 191 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F1.0 8 0 R /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [196 0 R 205 0 R] +/Annots [195 0 R 204 0 R] >> endobj +193 0 obj +[192 0 R /XYZ 0 792.0 null] +endobj 194 0 obj -[193 0 R /XYZ 0 792.0 null] +[192 0 R /XYZ 0 718.32 null] endobj 195 0 obj -[193 0 R /XYZ 0 718.32 null] -endobj -196 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -22811,33 +22806,33 @@ endobj /Type /Annot >> endobj -197 0 obj -[193 0 R /XYZ 0 613.2000000000003 null] +196 0 obj +[192 0 R /XYZ 0 613.2000000000003 null] endobj -198 0 obj +197 0 obj << /Limits [(_produces_25) (_responses)] -/Names [(_produces_25) 183 0 R (_produces_26) 191 0 R (_produces_27) 197 0 R (_produces_28) 201 0 R (_produces_29) 206 0 R (_produces_3) 40 0 R (_produces_4) 49 0 R (_produces_5) 52 0 R (_produces_6) 61 0 R (_produces_7) 68 0 R (_produces_8) 74 0 R (_produces_9) 78 0 R (_responses) 30 0 R] +/Names [(_produces_25) 183 0 R (_produces_26) 190 0 R (_produces_27) 196 0 R (_produces_28) 200 0 R (_produces_29) 205 0 R (_produces_3) 40 0 R (_produces_4) 49 0 R (_produces_5) 52 0 R (_produces_6) 61 0 R (_produces_7) 68 0 R (_produces_8) 74 0 R (_produces_9) 78 0 R (_responses) 30 0 R] >> endobj +198 0 obj +[192 0 R /XYZ 0 556.9200000000004 null] +endobj 199 0 obj -[193 0 R /XYZ 0 556.9200000000004 null] +[192 0 R /XYZ 0 516.8400000000005 null] endobj 200 0 obj -[193 0 R /XYZ 0 516.8400000000005 null] +[192 0 R /XYZ 0 411.7200000000005 null] endobj 201 0 obj -[193 0 R /XYZ 0 411.7200000000005 null] +[192 0 R /XYZ 0 355.44000000000045 null] endobj 202 0 obj -[193 0 R /XYZ 0 355.44000000000045 null] +[192 0 R /XYZ 0 315.3600000000004 null] endobj 203 0 obj -[193 0 R /XYZ 0 315.3600000000004 null] +[192 0 R /XYZ 0 210.2400000000004 null] endobj 204 0 obj -[193 0 R /XYZ 0 210.2400000000004 null] -endobj -205 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -22845,10 +22840,10 @@ endobj /Type /Annot >> endobj -206 0 obj -[193 0 R /XYZ 0 105.12000000000037 null] +205 0 obj +[192 0 R /XYZ 0 105.12000000000037 null] endobj -207 0 obj +206 0 obj << /Length 16082 >> stream @@ -24091,32 +24086,32 @@ Q endstream endobj -208 0 obj +207 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 207 0 R +/Contents 206 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [212 0 R] +/Annots [211 0 R] >> endobj +208 0 obj +[207 0 R /XYZ 0 792.0 null] +endobj 209 0 obj -[208 0 R /XYZ 0 792.0 null] +[207 0 R /XYZ 0 712.0799999999999 null] endobj 210 0 obj -[208 0 R /XYZ 0 712.0799999999999 null] +[207 0 R /XYZ 0 524.04 null] endobj 211 0 obj -[208 0 R /XYZ 0 524.04 null] -endobj -212 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link @@ -24124,10 +24119,10 @@ endobj /Type /Annot >> endobj -213 0 obj -[208 0 R /XYZ 0 148.19999999999993 null] +212 0 obj +[207 0 R /XYZ 0 148.19999999999993 null] endobj -214 0 obj +213 0 obj << /Length 20298 >> stream @@ -25704,23 +25699,23 @@ Q endstream endobj -215 0 obj +214 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 214 0 R +/Contents 213 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [216 0 R 218 0 R] +/Annots [215 0 R 217 0 R] >> endobj -216 0 obj +215 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link @@ -25728,10 +25723,10 @@ endobj /Type /Annot >> endobj -217 0 obj -[215 0 R /XYZ 0 345.11999999999995 null] +216 0 obj +[214 0 R /XYZ 0 345.11999999999995 null] endobj -218 0 obj +217 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -25739,10 +25734,10 @@ endobj /Type /Annot >> endobj -219 0 obj -[215 0 R /XYZ 0 194.6399999999999 null] +218 0 obj +[214 0 R /XYZ 0 194.6399999999999 null] endobj -220 0 obj +219 0 obj << /Length 21931 >> stream @@ -27420,26 +27415,26 @@ Q endstream endobj -221 0 obj +220 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 220 0 R +/Contents 219 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [223 0 R 224 0 R 225 0 R 226 0 R 227 0 R] +/Annots [222 0 R 223 0 R 224 0 R 225 0 R 226 0 R] >> endobj -222 0 obj -[221 0 R /XYZ 0 683.1600000000001 null] +221 0 obj +[220 0 R /XYZ 0 683.1600000000001 null] endobj -223 0 obj +222 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -27447,7 +27442,7 @@ endobj /Type /Annot >> endobj -224 0 obj +223 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -27455,7 +27450,7 @@ endobj /Type /Annot >> endobj -225 0 obj +224 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -27463,7 +27458,7 @@ endobj /Type /Annot >> endobj -226 0 obj +225 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -27471,7 +27466,7 @@ endobj /Type /Annot >> endobj -227 0 obj +226 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -27479,7 +27474,7 @@ endobj /Type /Annot >> endobj -228 0 obj +227 0 obj << /Length 21512 >> stream @@ -29141,26 +29136,26 @@ Q endstream endobj -229 0 obj +228 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 228 0 R +/Contents 227 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [231 0 R 232 0 R 233 0 R] +/Annots [230 0 R 231 0 R 232 0 R] >> endobj -230 0 obj -[229 0 R /XYZ 0 532.9200000000003 null] +229 0 obj +[228 0 R /XYZ 0 532.9200000000003 null] endobj -231 0 obj +230 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -29168,7 +29163,7 @@ endobj /Type /Annot >> endobj -232 0 obj +231 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -29176,7 +29171,7 @@ endobj /Type /Annot >> endobj -233 0 obj +232 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -29184,7 +29179,7 @@ endobj /Type /Annot >> endobj -234 0 obj +233 0 obj << /Length 21163 >> stream @@ -30838,23 +30833,23 @@ Q endstream endobj -235 0 obj +234 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 234 0 R +/Contents 233 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [236 0 R 237 0 R] +/Annots [235 0 R 236 0 R] >> endobj -236 0 obj +235 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -30862,7 +30857,7 @@ endobj /Type /Annot >> endobj -237 0 obj +236 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -30870,10 +30865,10 @@ endobj /Type /Annot >> endobj -238 0 obj -[235 0 R /XYZ 0 382.68000000000023 null] +237 0 obj +[234 0 R /XYZ 0 382.68000000000023 null] endobj -239 0 obj +238 0 obj << /Length 21656 >> stream @@ -32551,23 +32546,23 @@ Q endstream endobj -240 0 obj +239 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 239 0 R +/Contents 238 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [241 0 R 242 0 R 243 0 R 244 0 R 245 0 R] +/Annots [240 0 R 241 0 R 242 0 R 243 0 R 244 0 R] >> endobj -241 0 obj +240 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -32575,7 +32570,7 @@ endobj /Type /Annot >> endobj -242 0 obj +241 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -32583,7 +32578,7 @@ endobj /Type /Annot >> endobj -243 0 obj +242 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -32591,7 +32586,7 @@ endobj /Type /Annot >> endobj -244 0 obj +243 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -32599,7 +32594,7 @@ endobj /Type /Annot >> endobj -245 0 obj +244 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -32607,15 +32602,15 @@ endobj /Type /Annot >> endobj -246 0 obj -[240 0 R /XYZ 0 232.44000000000023 null] +245 0 obj +[239 0 R /XYZ 0 232.44000000000023 null] endobj -247 0 obj +246 0 obj << /Limits [(_externalcomponent) (_parameters_12)] -/Names [(_externalcomponent) 217 0 R (_externalcomponentstate) 219 0 R (_jsonarray) 222 0 R (_jsonnull) 230 0 R (_jsonobject) 238 0 R (_jsonprimitive) 246 0 R (_loop) 257 0 R (_loopelementmodel) 267 0 R (_looplog) 270 0 R (_looptemplate) 274 0 R (_looptemplateloopelementmodel) 279 0 R (_microservicepolicy) 282 0 R (_number) 290 0 R (_operationalpolicy) 291 0 R (_overview) 19 0 R (_parameters) 44 0 R (_parameters_10) 107 0 R (_parameters_11) 114 0 R (_parameters_12) 120 0 R] +/Names [(_externalcomponent) 216 0 R (_externalcomponentstate) 218 0 R (_jsonarray) 221 0 R (_jsonnull) 229 0 R (_jsonobject) 237 0 R (_jsonprimitive) 245 0 R (_loop) 256 0 R (_loopelementmodel) 266 0 R (_looplog) 269 0 R (_looptemplate) 273 0 R (_looptemplateloopelementmodel) 278 0 R (_microservicepolicy) 281 0 R (_number) 289 0 R (_operationalpolicy) 290 0 R (_overview) 19 0 R (_parameters) 44 0 R (_parameters_10) 107 0 R (_parameters_11) 114 0 R (_parameters_12) 120 0 R] >> endobj -248 0 obj +247 0 obj << /Length 22690 >> stream @@ -34384,23 +34379,23 @@ Q endstream endobj -249 0 obj +248 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 248 0 R +/Contents 247 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [250 0 R 251 0 R 252 0 R 253 0 R 254 0 R] +/Annots [249 0 R 250 0 R 251 0 R 252 0 R 253 0 R] >> endobj -250 0 obj +249 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -34408,7 +34403,7 @@ endobj /Type /Annot >> endobj -251 0 obj +250 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -34416,7 +34411,7 @@ endobj /Type /Annot >> endobj -252 0 obj +251 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -34424,7 +34419,7 @@ endobj /Type /Annot >> endobj -253 0 obj +252 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -34432,7 +34427,7 @@ endobj /Type /Annot >> endobj -254 0 obj +253 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -34440,7 +34435,7 @@ endobj /Type /Annot >> endobj -255 0 obj +254 0 obj << /Length 23337 >> stream @@ -36197,26 +36192,26 @@ Q endstream endobj -256 0 obj +255 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 255 0 R +/Contents 254 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R] +/Annots [257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R] >> endobj -257 0 obj -[256 0 R /XYZ 0 645.6000000000001 null] +256 0 obj +[255 0 R /XYZ 0 645.6000000000001 null] endobj -258 0 obj +257 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -36224,7 +36219,7 @@ endobj /Type /Annot >> endobj -259 0 obj +258 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -36232,7 +36227,7 @@ endobj /Type /Annot >> endobj -260 0 obj +259 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -36240,7 +36235,7 @@ endobj /Type /Annot >> endobj -261 0 obj +260 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -36248,7 +36243,7 @@ endobj /Type /Annot >> endobj -262 0 obj +261 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link @@ -36256,7 +36251,7 @@ endobj /Type /Annot >> endobj -263 0 obj +262 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -36264,7 +36259,7 @@ endobj /Type /Annot >> endobj -264 0 obj +263 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link @@ -36272,7 +36267,7 @@ endobj /Type /Annot >> endobj -265 0 obj +264 0 obj << /Length 20640 >> stream @@ -37863,26 +37858,26 @@ Q endstream endobj -266 0 obj +265 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 265 0 R +/Contents 264 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [268 0 R 269 0 R] +/Annots [267 0 R 268 0 R] >> endobj -267 0 obj -[266 0 R /XYZ 0 645.6000000000001 null] +266 0 obj +[265 0 R /XYZ 0 645.6000000000001 null] endobj -268 0 obj +267 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -37890,7 +37885,7 @@ endobj /Type /Annot >> endobj -269 0 obj +268 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -37898,10 +37893,10 @@ endobj /Type /Annot >> endobj -270 0 obj -[266 0 R /XYZ 0 157.08000000000015 null] +269 0 obj +[265 0 R /XYZ 0 157.08000000000015 null] endobj -271 0 obj +270 0 obj << /Length 21650 >> stream @@ -39577,23 +39572,23 @@ Q endstream endobj -272 0 obj +271 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 271 0 R +/Contents 270 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [273 0 R 275 0 R 276 0 R] +/Annots [272 0 R 274 0 R 275 0 R] >> endobj -273 0 obj +272 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -39601,10 +39596,10 @@ endobj /Type /Annot >> endobj -274 0 obj -[272 0 R /XYZ 0 532.9200000000001 null] +273 0 obj +[271 0 R /XYZ 0 532.9200000000001 null] endobj -275 0 obj +274 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -39612,7 +39607,7 @@ endobj /Type /Annot >> endobj -276 0 obj +275 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -39620,7 +39615,7 @@ endobj /Type /Annot >> endobj -277 0 obj +276 0 obj << /Length 20753 >> stream @@ -41199,26 +41194,26 @@ Q endstream endobj -278 0 obj +277 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 277 0 R +/Contents 276 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [280 0 R 281 0 R 283 0 R 284 0 R] +/Annots [279 0 R 280 0 R 282 0 R 283 0 R] >> endobj -279 0 obj -[278 0 R /XYZ 0 645.6000000000001 null] +278 0 obj +[277 0 R /XYZ 0 645.6000000000001 null] endobj -280 0 obj +279 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -41226,7 +41221,7 @@ endobj /Type /Annot >> endobj -281 0 obj +280 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -41234,10 +41229,10 @@ endobj /Type /Annot >> endobj -282 0 obj -[278 0 R /XYZ 0 457.56000000000023 null] +281 0 obj +[277 0 R /XYZ 0 457.56000000000023 null] endobj -283 0 obj +282 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -41245,7 +41240,7 @@ endobj /Type /Annot >> endobj -284 0 obj +283 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -41253,7 +41248,7 @@ endobj /Type /Annot >> endobj -285 0 obj +284 0 obj << /Length 20603 >> stream @@ -42814,23 +42809,23 @@ Q endstream endobj -286 0 obj +285 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 285 0 R +/Contents 284 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [287 0 R 288 0 R 289 0 R 292 0 R 293 0 R 294 0 R 295 0 R] +/Annots [286 0 R 287 0 R 288 0 R 291 0 R 292 0 R 293 0 R 294 0 R] >> endobj -287 0 obj +286 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -42838,7 +42833,7 @@ endobj /Type /Annot >> endobj -288 0 obj +287 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -42846,7 +42841,7 @@ endobj /Type /Annot >> endobj -289 0 obj +288 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -42854,13 +42849,13 @@ endobj /Type /Annot >> endobj +289 0 obj +[285 0 R /XYZ 0 420.2400000000002 null] +endobj 290 0 obj -[286 0 R /XYZ 0 420.2400000000002 null] +[285 0 R /XYZ 0 352.3800000000001 null] endobj 291 0 obj -[286 0 R /XYZ 0 352.3800000000001 null] -endobj -292 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -42868,7 +42863,7 @@ endobj /Type /Annot >> endobj -293 0 obj +292 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -42876,7 +42871,7 @@ endobj /Type /Annot >> endobj -294 0 obj +293 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -42884,7 +42879,7 @@ endobj /Type /Annot >> endobj -295 0 obj +294 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -42892,7 +42887,7 @@ endobj /Type /Annot >> endobj -296 0 obj +295 0 obj << /Length 19359 >> stream @@ -44391,23 +44386,23 @@ Q endstream endobj -297 0 obj +296 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 296 0 R +/Contents 295 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [298 0 R 300 0 R] +/Annots [297 0 R 299 0 R] >> endobj -298 0 obj +297 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -44415,10 +44410,10 @@ endobj /Type /Annot >> endobj -299 0 obj -[297 0 R /XYZ 0 532.9200000000001 null] +298 0 obj +[296 0 R /XYZ 0 532.9200000000001 null] endobj -300 0 obj +299 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -44426,10 +44421,10 @@ endobj /Type /Annot >> endobj -301 0 obj -[297 0 R /XYZ 0 119.52000000000004 null] +300 0 obj +[296 0 R /XYZ 0 119.52000000000004 null] endobj -302 0 obj +301 0 obj << /Length 7264 >> stream @@ -45004,23 +44999,23 @@ Q endstream endobj -303 0 obj +302 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 302 0 R +/Contents 301 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 588 0 R +/XObject << /Stamp1 587 0 R >> >> -/Annots [304 0 R 305 0 R] +/Annots [303 0 R 304 0 R] >> endobj -304 0 obj +303 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -45028,7 +45023,7 @@ endobj /Type /Annot >> endobj -305 0 obj +304 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -45036,7 +45031,7 @@ endobj /Type /Annot >> endobj -306 0 obj +305 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -45044,7 +45039,7 @@ endobj /Type /Annot >> endobj -307 0 obj +306 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -45052,7 +45047,7 @@ endobj /Type /Annot >> endobj -308 0 obj +307 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -45060,7 +45055,7 @@ endobj /Type /Annot >> endobj -309 0 obj +308 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -45068,7 +45063,7 @@ endobj /Type /Annot >> endobj -310 0 obj +309 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -45076,7 +45071,7 @@ endobj /Type /Annot >> endobj -311 0 obj +310 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -45084,7 +45079,7 @@ endobj /Type /Annot >> endobj -312 0 obj +311 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -45092,7 +45087,7 @@ endobj /Type /Annot >> endobj -313 0 obj +312 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -45100,23 +45095,23 @@ endobj /Type /Annot >> endobj -314 0 obj +313 0 obj << /Border [0 0 0] -/Dest (_route123) +/Dest (_route92) /Subtype /Link /Rect [60.24000000000001 621.7799999999997 181.64100000000002 636.0599999999998] /Type /Annot >> endobj -315 0 obj +314 0 obj << /Border [0 0 0] -/Dest (_route123) +/Dest (_route92) /Subtype /Link /Rect [557.8905 621.7799999999997 563.76 636.0599999999998] /Type /Annot >> endobj -316 0 obj +315 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -45124,7 +45119,7 @@ endobj /Type /Annot >> endobj -317 0 obj +316 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -45132,7 +45127,7 @@ endobj /Type /Annot >> endobj -318 0 obj +317 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -45140,7 +45135,7 @@ endobj /Type /Annot >> endobj -319 0 obj +318 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -45148,23 +45143,23 @@ endobj /Type /Annot >> endobj -320 0 obj +319 0 obj << /Border [0 0 0] -/Dest (_route124) +/Dest (_route93) /Subtype /Link /Rect [60.24000000000001 566.3399999999997 183.8775 580.6199999999998] /Type /Annot >> endobj -321 0 obj +320 0 obj << /Border [0 0 0] -/Dest (_route124) +/Dest (_route93) /Subtype /Link /Rect [557.8905 566.3399999999997 563.76 580.6199999999998] /Type /Annot >> endobj -322 0 obj +321 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -45172,7 +45167,7 @@ endobj /Type /Annot >> endobj -323 0 obj +322 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -45180,7 +45175,7 @@ endobj /Type /Annot >> endobj -324 0 obj +323 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -45188,7 +45183,7 @@ endobj /Type /Annot >> endobj -325 0 obj +324 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -45196,23 +45191,23 @@ endobj /Type /Annot >> endobj -326 0 obj +325 0 obj << /Border [0 0 0] -/Dest (_route111) +/Dest (_route80) /Subtype /Link /Rect [60.24000000000001 510.89999999999975 172.716 525.1799999999997] /Type /Annot >> endobj -327 0 obj +326 0 obj << /Border [0 0 0] -/Dest (_route111) +/Dest (_route80) /Subtype /Link /Rect [557.8905 510.89999999999975 563.76 525.1799999999997] /Type /Annot >> endobj -328 0 obj +327 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -45220,7 +45215,7 @@ endobj /Type /Annot >> endobj -329 0 obj +328 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -45228,7 +45223,7 @@ endobj /Type /Annot >> endobj -330 0 obj +329 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -45236,7 +45231,7 @@ endobj /Type /Annot >> endobj -331 0 obj +330 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -45244,23 +45239,23 @@ endobj /Type /Annot >> endobj -332 0 obj +331 0 obj << /Border [0 0 0] -/Dest (_route113) +/Dest (_route82) /Subtype /Link /Rect [60.24000000000001 455.4599999999997 172.548 469.73999999999967] /Type /Annot >> endobj -333 0 obj +332 0 obj << /Border [0 0 0] -/Dest (_route113) +/Dest (_route82) /Subtype /Link /Rect [557.8905 455.4599999999997 563.76 469.73999999999967] /Type /Annot >> endobj -334 0 obj +333 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -45268,7 +45263,7 @@ endobj /Type /Annot >> endobj -335 0 obj +334 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -45276,7 +45271,7 @@ endobj /Type /Annot >> endobj -336 0 obj +335 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -45284,7 +45279,7 @@ endobj /Type /Annot >> endobj -337 0 obj +336 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -45292,7 +45287,7 @@ endobj /Type /Annot >> endobj -338 0 obj +337 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -45300,7 +45295,7 @@ endobj /Type /Annot >> endobj -339 0 obj +338 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -45308,7 +45303,7 @@ endobj /Type /Annot >> endobj -340 0 obj +339 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -45316,7 +45311,7 @@ endobj /Type /Annot >> endobj -341 0 obj +340 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -45324,7 +45319,7 @@ endobj /Type /Annot >> endobj -342 0 obj +341 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_secondary_names_get) /Subtype /Link @@ -45332,7 +45327,7 @@ endobj /Type /Annot >> endobj -343 0 obj +342 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_secondary_names_get) /Subtype /Link @@ -45340,7 +45335,7 @@ endobj /Type /Annot >> endobj -344 0 obj +343 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -45348,7 +45343,7 @@ endobj /Type /Annot >> endobj -345 0 obj +344 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -45356,7 +45351,7 @@ endobj /Type /Annot >> endobj -346 0 obj +345 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -45364,7 +45359,7 @@ endobj /Type /Annot >> endobj -347 0 obj +346 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -45372,7 +45367,7 @@ endobj /Type /Annot >> endobj -348 0 obj +347 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_dictionaryname_get) /Subtype /Link @@ -45380,7 +45375,7 @@ endobj /Type /Annot >> endobj -349 0 obj +348 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_dictionaryname_get) /Subtype /Link @@ -45388,7 +45383,7 @@ endobj /Type /Annot >> endobj -350 0 obj +349 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -45396,7 +45391,7 @@ endobj /Type /Annot >> endobj -351 0 obj +350 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -45404,7 +45399,7 @@ endobj /Type /Annot >> endobj -352 0 obj +351 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -45412,7 +45407,7 @@ endobj /Type /Annot >> endobj -353 0 obj +352 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -45420,7 +45415,7 @@ endobj /Type /Annot >> endobj -354 0 obj +353 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -45428,7 +45423,7 @@ endobj /Type /Annot >> endobj -355 0 obj +354 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -45436,7 +45431,7 @@ endobj /Type /Annot >> endobj -356 0 obj +355 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_put) /Subtype /Link @@ -45444,7 +45439,7 @@ endobj /Type /Annot >> endobj -357 0 obj +356 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_put) /Subtype /Link @@ -45452,7 +45447,7 @@ endobj /Type /Annot >> endobj -358 0 obj +357 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -45460,7 +45455,7 @@ endobj /Type /Annot >> endobj -359 0 obj +358 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -45468,7 +45463,7 @@ endobj /Type /Annot >> endobj -360 0 obj +359 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -45476,7 +45471,7 @@ endobj /Type /Annot >> endobj -361 0 obj +360 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -45484,7 +45479,7 @@ endobj /Type /Annot >> endobj -362 0 obj +361 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -45492,7 +45487,7 @@ endobj /Type /Annot >> endobj -363 0 obj +362 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -45500,7 +45495,7 @@ endobj /Type /Annot >> endobj -364 0 obj +363 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -45508,7 +45503,7 @@ endobj /Type /Annot >> endobj -365 0 obj +364 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -45516,23 +45511,23 @@ endobj /Type /Annot >> endobj -366 0 obj +365 0 obj << /Border [0 0 0] -/Dest (_route115) +/Dest (_route84) /Subtype /Link /Rect [60.24000000000001 141.29999999999953 232.70250000000001 155.57999999999953] /Type /Annot >> endobj -367 0 obj +366 0 obj << /Border [0 0 0] -/Dest (_route115) +/Dest (_route84) /Subtype /Link /Rect [557.8905 141.29999999999953 563.76 155.57999999999953] /Type /Annot >> endobj -368 0 obj +367 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -45540,7 +45535,7 @@ endobj /Type /Annot >> endobj -369 0 obj +368 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -45548,7 +45543,7 @@ endobj /Type /Annot >> endobj -370 0 obj +369 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -45556,7 +45551,7 @@ endobj /Type /Annot >> endobj -371 0 obj +370 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -45564,7 +45559,7 @@ endobj /Type /Annot >> endobj -372 0 obj +371 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -45572,7 +45567,7 @@ endobj /Type /Annot >> endobj -373 0 obj +372 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -45580,7 +45575,7 @@ endobj /Type /Annot >> endobj -374 0 obj +373 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_elements_shortname_delete) /Subtype /Link @@ -45588,7 +45583,7 @@ endobj /Type /Annot >> endobj -375 0 obj +374 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_elements_shortname_delete) /Subtype /Link @@ -45596,7 +45591,7 @@ endobj /Type /Annot >> endobj -376 0 obj +375 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -45604,7 +45599,7 @@ endobj /Type /Annot >> endobj -377 0 obj +376 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -45612,7 +45607,7 @@ endobj /Type /Annot >> endobj -378 0 obj +377 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -45620,7 +45615,7 @@ endobj /Type /Annot >> endobj -379 0 obj +378 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -45628,7 +45623,7 @@ endobj /Type /Annot >> endobj -380 0 obj +379 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -45636,7 +45631,7 @@ endobj /Type /Annot >> endobj -381 0 obj +380 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -45644,23 +45639,23 @@ endobj /Type /Annot >> endobj -382 0 obj +381 0 obj << /Border [0 0 0] -/Dest (_route107) +/Dest (_route76) /Subtype /Link /Rect [60.24000000000001 704.7599999999999 245.15550000000002 719.04] /Type /Annot >> endobj -383 0 obj +382 0 obj << /Border [0 0 0] -/Dest (_route107) +/Dest (_route76) /Subtype /Link /Rect [557.8905 704.7599999999999 563.76 719.04] /Type /Annot >> endobj -384 0 obj +383 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -45668,7 +45663,7 @@ endobj /Type /Annot >> endobj -385 0 obj +384 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -45676,7 +45671,7 @@ endobj /Type /Annot >> endobj -386 0 obj +385 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -45684,7 +45679,7 @@ endobj /Type /Annot >> endobj -387 0 obj +386 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -45692,23 +45687,23 @@ endobj /Type /Annot >> endobj -388 0 obj +387 0 obj << /Border [0 0 0] -/Dest (_route101) +/Dest (_route70) /Subtype /Link /Rect [60.24000000000001 649.3199999999998 248.431294921875 663.5999999999999] /Type /Annot >> endobj -389 0 obj +388 0 obj << /Border [0 0 0] -/Dest (_route101) +/Dest (_route70) /Subtype /Link /Rect [557.8905 649.3199999999998 563.76 663.5999999999999] /Type /Annot >> endobj -390 0 obj +389 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -45716,7 +45711,7 @@ endobj /Type /Annot >> endobj -391 0 obj +390 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -45724,7 +45719,7 @@ endobj /Type /Annot >> endobj -392 0 obj +391 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -45732,7 +45727,7 @@ endobj /Type /Annot >> endobj -393 0 obj +392 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -45740,7 +45735,7 @@ endobj /Type /Annot >> endobj -394 0 obj +393 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -45748,7 +45743,7 @@ endobj /Type /Annot >> endobj -395 0 obj +394 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -45756,23 +45751,23 @@ endobj /Type /Annot >> endobj -396 0 obj +395 0 obj << /Border [0 0 0] -/Dest (_route95) +/Dest (_route64) /Subtype /Link /Rect [60.24000000000001 575.3999999999997 214.8735 589.6799999999998] /Type /Annot >> endobj -397 0 obj +396 0 obj << /Border [0 0 0] -/Dest (_route95) +/Dest (_route64) /Subtype /Link /Rect [557.8905 575.3999999999997 563.76 589.6799999999998] /Type /Annot >> endobj -398 0 obj +397 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -45780,7 +45775,7 @@ endobj /Type /Annot >> endobj -399 0 obj +398 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -45788,7 +45783,7 @@ endobj /Type /Annot >> endobj -400 0 obj +399 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -45796,7 +45791,7 @@ endobj /Type /Annot >> endobj -401 0 obj +400 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -45804,23 +45799,23 @@ endobj /Type /Annot >> endobj -402 0 obj +401 0 obj << /Border [0 0 0] -/Dest (_route108) +/Dest (_route77) /Subtype /Link /Rect [60.24000000000001 519.9599999999998 259.467 534.2399999999998] /Type /Annot >> endobj -403 0 obj +402 0 obj << /Border [0 0 0] -/Dest (_route108) +/Dest (_route77) /Subtype /Link /Rect [557.8905 519.9599999999998 563.76 534.2399999999998] /Type /Annot >> endobj -404 0 obj +403 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -45828,7 +45823,7 @@ endobj /Type /Annot >> endobj -405 0 obj +404 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -45836,7 +45831,7 @@ endobj /Type /Annot >> endobj -406 0 obj +405 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -45844,7 +45839,7 @@ endobj /Type /Annot >> endobj -407 0 obj +406 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -45852,7 +45847,7 @@ endobj /Type /Annot >> endobj -408 0 obj +407 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -45860,7 +45855,7 @@ endobj /Type /Annot >> endobj -409 0 obj +408 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -45868,23 +45863,23 @@ endobj /Type /Annot >> endobj -410 0 obj +409 0 obj << /Border [0 0 0] -/Dest (_route102) +/Dest (_route71) /Subtype /Link /Rect [60.24000000000001 446.03999999999974 355.8885 460.3199999999997] /Type /Annot >> endobj -411 0 obj +410 0 obj << /Border [0 0 0] -/Dest (_route102) +/Dest (_route71) /Subtype /Link /Rect [557.8905 446.03999999999974 563.76 460.3199999999997] /Type /Annot >> endobj -412 0 obj +411 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -45892,7 +45887,7 @@ endobj /Type /Annot >> endobj -413 0 obj +412 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -45900,7 +45895,7 @@ endobj /Type /Annot >> endobj -414 0 obj +413 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -45908,7 +45903,7 @@ endobj /Type /Annot >> endobj -415 0 obj +414 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -45916,7 +45911,7 @@ endobj /Type /Annot >> endobj -416 0 obj +415 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -45924,7 +45919,7 @@ endobj /Type /Annot >> endobj -417 0 obj +416 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -45932,23 +45927,23 @@ endobj /Type /Annot >> endobj -418 0 obj +417 0 obj << /Border [0 0 0] -/Dest (_route105) +/Dest (_route74) /Subtype /Link /Rect [60.24000000000001 372.11999999999966 248.45250000000001 386.39999999999964] /Type /Annot >> endobj -419 0 obj +418 0 obj << /Border [0 0 0] -/Dest (_route105) +/Dest (_route74) /Subtype /Link /Rect [557.8905 372.11999999999966 563.76 386.39999999999964] /Type /Annot >> endobj -420 0 obj +419 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -45956,7 +45951,7 @@ endobj /Type /Annot >> endobj -421 0 obj +420 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -45964,7 +45959,7 @@ endobj /Type /Annot >> endobj -422 0 obj +421 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -45972,7 +45967,7 @@ endobj /Type /Annot >> endobj -423 0 obj +422 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -45980,7 +45975,7 @@ endobj /Type /Annot >> endobj -424 0 obj +423 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -45988,7 +45983,7 @@ endobj /Type /Annot >> endobj -425 0 obj +424 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -45996,23 +45991,23 @@ endobj /Type /Annot >> endobj -426 0 obj +425 0 obj << /Border [0 0 0] -/Dest (_route104) +/Dest (_route73) /Subtype /Link /Rect [60.24000000000001 298.1999999999996 235.842 312.47999999999956] /Type /Annot >> endobj -427 0 obj +426 0 obj << /Border [0 0 0] -/Dest (_route104) +/Dest (_route73) /Subtype /Link /Rect [557.8905 298.1999999999996 563.76 312.47999999999956] /Type /Annot >> endobj -428 0 obj +427 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -46020,7 +46015,7 @@ endobj /Type /Annot >> endobj -429 0 obj +428 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -46028,7 +46023,7 @@ endobj /Type /Annot >> endobj -430 0 obj +429 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -46036,7 +46031,7 @@ endobj /Type /Annot >> endobj -431 0 obj +430 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -46044,7 +46039,7 @@ endobj /Type /Annot >> endobj -432 0 obj +431 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -46052,7 +46047,7 @@ endobj /Type /Annot >> endobj -433 0 obj +432 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -46060,23 +46055,23 @@ endobj /Type /Annot >> endobj -434 0 obj +433 0 obj << /Border [0 0 0] -/Dest (_route106) +/Dest (_route75) /Subtype /Link /Rect [60.24000000000001 224.27999999999952 249.70200000000003 238.55999999999952] /Type /Annot >> endobj -435 0 obj +434 0 obj << /Border [0 0 0] -/Dest (_route106) +/Dest (_route75) /Subtype /Link /Rect [557.8905 224.27999999999952 563.76 238.55999999999952] /Type /Annot >> endobj -436 0 obj +435 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -46084,7 +46079,7 @@ endobj /Type /Annot >> endobj -437 0 obj +436 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -46092,7 +46087,7 @@ endobj /Type /Annot >> endobj -438 0 obj +437 0 obj << /Border [0 0 0] /Dest (_responses_17) /Subtype /Link @@ -46100,7 +46095,7 @@ endobj /Type /Annot >> endobj -439 0 obj +438 0 obj << /Border [0 0 0] /Dest (_responses_17) /Subtype /Link @@ -46108,7 +46103,7 @@ endobj /Type /Annot >> endobj -440 0 obj +439 0 obj << /Border [0 0 0] /Dest (_produces_16) /Subtype /Link @@ -46116,7 +46111,7 @@ endobj /Type /Annot >> endobj -441 0 obj +440 0 obj << /Border [0 0 0] /Dest (_produces_16) /Subtype /Link @@ -46124,23 +46119,23 @@ endobj /Type /Annot >> endobj -442 0 obj +441 0 obj << /Border [0 0 0] -/Dest (_route97) +/Dest (_route66) /Subtype /Link /Rect [60.24000000000001 150.35999999999956 307.641 164.63999999999956] /Type /Annot >> endobj -443 0 obj +442 0 obj << /Border [0 0 0] -/Dest (_route97) +/Dest (_route66) /Subtype /Link /Rect [557.8905 150.35999999999956 563.76 164.63999999999956] /Type /Annot >> endobj -444 0 obj +443 0 obj << /Border [0 0 0] /Dest (_parameters_13) /Subtype /Link @@ -46148,7 +46143,7 @@ endobj /Type /Annot >> endobj -445 0 obj +444 0 obj << /Border [0 0 0] /Dest (_parameters_13) /Subtype /Link @@ -46156,7 +46151,7 @@ endobj /Type /Annot >> endobj -446 0 obj +445 0 obj << /Border [0 0 0] /Dest (_responses_18) /Subtype /Link @@ -46164,7 +46159,7 @@ endobj /Type /Annot >> endobj -447 0 obj +446 0 obj << /Border [0 0 0] /Dest (_responses_18) /Subtype /Link @@ -46172,7 +46167,7 @@ endobj /Type /Annot >> endobj -448 0 obj +447 0 obj << /Border [0 0 0] /Dest (_produces_17) /Subtype /Link @@ -46180,7 +46175,7 @@ endobj /Type /Annot >> endobj -449 0 obj +448 0 obj << /Border [0 0 0] /Dest (_produces_17) /Subtype /Link @@ -46188,23 +46183,23 @@ endobj /Type /Annot >> endobj -450 0 obj +449 0 obj << /Border [0 0 0] -/Dest (_route103) +/Dest (_route72) /Subtype /Link /Rect [60.24000000000001 76.4399999999996 261.860794921875 90.7199999999996] /Type /Annot >> endobj -451 0 obj +450 0 obj << /Border [0 0 0] -/Dest (_route103) +/Dest (_route72) /Subtype /Link /Rect [557.8905 76.4399999999996 563.76 90.7199999999996] /Type /Annot >> endobj -452 0 obj +451 0 obj << /Border [0 0 0] /Dest (_parameters_14) /Subtype /Link @@ -46212,7 +46207,7 @@ endobj /Type /Annot >> endobj -453 0 obj +452 0 obj << /Border [0 0 0] /Dest (_parameters_14) /Subtype /Link @@ -46220,7 +46215,7 @@ endobj /Type /Annot >> endobj -454 0 obj +453 0 obj << /Border [0 0 0] /Dest (_responses_19) /Subtype /Link @@ -46228,7 +46223,7 @@ endobj /Type /Annot >> endobj -455 0 obj +454 0 obj << /Border [0 0 0] /Dest (_responses_19) /Subtype /Link @@ -46236,7 +46231,7 @@ endobj /Type /Annot >> endobj -456 0 obj +455 0 obj << /Border [0 0 0] /Dest (_produces_18) /Subtype /Link @@ -46244,7 +46239,7 @@ endobj /Type /Annot >> endobj -457 0 obj +456 0 obj << /Border [0 0 0] /Dest (_produces_18) /Subtype /Link @@ -46252,23 +46247,23 @@ endobj /Type /Annot >> endobj -458 0 obj +457 0 obj << /Border [0 0 0] -/Dest (_route98) +/Dest (_route67) /Subtype /Link /Rect [60.24000000000001 704.7599999999999 339.560794921875 719.04] /Type /Annot >> endobj -459 0 obj +458 0 obj << /Border [0 0 0] -/Dest (_route98) +/Dest (_route67) /Subtype /Link /Rect [552.021 704.7599999999999 563.76 719.04] /Type /Annot >> endobj -460 0 obj +459 0 obj << /Border [0 0 0] /Dest (_parameters_15) /Subtype /Link @@ -46276,7 +46271,7 @@ endobj /Type /Annot >> endobj -461 0 obj +460 0 obj << /Border [0 0 0] /Dest (_parameters_15) /Subtype /Link @@ -46284,7 +46279,7 @@ endobj /Type /Annot >> endobj -462 0 obj +461 0 obj << /Border [0 0 0] /Dest (_responses_20) /Subtype /Link @@ -46292,7 +46287,7 @@ endobj /Type /Annot >> endobj -463 0 obj +462 0 obj << /Border [0 0 0] /Dest (_responses_20) /Subtype /Link @@ -46300,7 +46295,7 @@ endobj /Type /Annot >> endobj -464 0 obj +463 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -46308,7 +46303,7 @@ endobj /Type /Annot >> endobj -465 0 obj +464 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -46316,7 +46311,7 @@ endobj /Type /Annot >> endobj -466 0 obj +465 0 obj << /Border [0 0 0] /Dest (_produces_19) /Subtype /Link @@ -46324,7 +46319,7 @@ endobj /Type /Annot >> endobj -467 0 obj +466 0 obj << /Border [0 0 0] /Dest (_produces_19) /Subtype /Link @@ -46332,23 +46327,23 @@ endobj /Type /Annot >> endobj -468 0 obj +467 0 obj << /Border [0 0 0] -/Dest (_route100) +/Dest (_route69) /Subtype /Link /Rect [60.24000000000001 612.3599999999998 350.38629492187505 626.6399999999999] /Type /Annot >> endobj -469 0 obj +468 0 obj << /Border [0 0 0] -/Dest (_route100) +/Dest (_route69) /Subtype /Link /Rect [552.021 612.3599999999998 563.76 626.6399999999999] /Type /Annot >> endobj -470 0 obj +469 0 obj << /Border [0 0 0] /Dest (_parameters_16) /Subtype /Link @@ -46356,7 +46351,7 @@ endobj /Type /Annot >> endobj -471 0 obj +470 0 obj << /Border [0 0 0] /Dest (_parameters_16) /Subtype /Link @@ -46364,7 +46359,7 @@ endobj /Type /Annot >> endobj -472 0 obj +471 0 obj << /Border [0 0 0] /Dest (_responses_21) /Subtype /Link @@ -46372,7 +46367,7 @@ endobj /Type /Annot >> endobj -473 0 obj +472 0 obj << /Border [0 0 0] /Dest (_responses_21) /Subtype /Link @@ -46380,7 +46375,7 @@ endobj /Type /Annot >> endobj -474 0 obj +473 0 obj << /Border [0 0 0] /Dest (_consumes_4) /Subtype /Link @@ -46388,7 +46383,7 @@ endobj /Type /Annot >> endobj -475 0 obj +474 0 obj << /Border [0 0 0] /Dest (_consumes_4) /Subtype /Link @@ -46396,7 +46391,7 @@ endobj /Type /Annot >> endobj -476 0 obj +475 0 obj << /Border [0 0 0] /Dest (_produces_20) /Subtype /Link @@ -46404,7 +46399,7 @@ endobj /Type /Annot >> endobj -477 0 obj +476 0 obj << /Border [0 0 0] /Dest (_produces_20) /Subtype /Link @@ -46412,23 +46407,23 @@ endobj /Type /Annot >> endobj -478 0 obj +477 0 obj << /Border [0 0 0] -/Dest (_route99) +/Dest (_route68) /Subtype /Link /Rect [60.24000000000001 519.9599999999998 352.81158984375 534.2399999999998] /Type /Annot >> endobj -479 0 obj +478 0 obj << /Border [0 0 0] -/Dest (_route99) +/Dest (_route68) /Subtype /Link /Rect [552.021 519.9599999999998 563.76 534.2399999999998] /Type /Annot >> endobj -480 0 obj +479 0 obj << /Border [0 0 0] /Dest (_parameters_17) /Subtype /Link @@ -46436,7 +46431,7 @@ endobj /Type /Annot >> endobj -481 0 obj +480 0 obj << /Border [0 0 0] /Dest (_parameters_17) /Subtype /Link @@ -46444,7 +46439,7 @@ endobj /Type /Annot >> endobj -482 0 obj +481 0 obj << /Border [0 0 0] /Dest (_responses_22) /Subtype /Link @@ -46452,7 +46447,7 @@ endobj /Type /Annot >> endobj -483 0 obj +482 0 obj << /Border [0 0 0] /Dest (_responses_22) /Subtype /Link @@ -46460,7 +46455,7 @@ endobj /Type /Annot >> endobj -484 0 obj +483 0 obj << /Border [0 0 0] /Dest (_consumes_5) /Subtype /Link @@ -46468,7 +46463,7 @@ endobj /Type /Annot >> endobj -485 0 obj +484 0 obj << /Border [0 0 0] /Dest (_consumes_5) /Subtype /Link @@ -46476,7 +46471,7 @@ endobj /Type /Annot >> endobj -486 0 obj +485 0 obj << /Border [0 0 0] /Dest (_produces_21) /Subtype /Link @@ -46484,7 +46479,7 @@ endobj /Type /Annot >> endobj -487 0 obj +486 0 obj << /Border [0 0 0] /Dest (_produces_21) /Subtype /Link @@ -46492,23 +46487,23 @@ endobj /Type /Annot >> endobj -488 0 obj +487 0 obj << /Border [0 0 0] -/Dest (_route96) +/Dest (_route65) /Subtype /Link /Rect [60.24000000000001 427.5599999999997 212.0595 441.8399999999997] /Type /Annot >> endobj -489 0 obj +488 0 obj << /Border [0 0 0] -/Dest (_route96) +/Dest (_route65) /Subtype /Link /Rect [552.021 427.5599999999997 563.76 441.8399999999997] /Type /Annot >> endobj -490 0 obj +489 0 obj << /Border [0 0 0] /Dest (_parameters_18) /Subtype /Link @@ -46516,7 +46511,7 @@ endobj /Type /Annot >> endobj -491 0 obj +490 0 obj << /Border [0 0 0] /Dest (_parameters_18) /Subtype /Link @@ -46524,7 +46519,7 @@ endobj /Type /Annot >> endobj -492 0 obj +491 0 obj << /Border [0 0 0] /Dest (_responses_23) /Subtype /Link @@ -46532,7 +46527,7 @@ endobj /Type /Annot >> endobj -493 0 obj +492 0 obj << /Border [0 0 0] /Dest (_responses_23) /Subtype /Link @@ -46540,7 +46535,7 @@ endobj /Type /Annot >> endobj -494 0 obj +493 0 obj << /Border [0 0 0] /Dest (_produces_22) /Subtype /Link @@ -46548,7 +46543,7 @@ endobj /Type /Annot >> endobj -495 0 obj +494 0 obj << /Border [0 0 0] /Dest (_produces_22) /Subtype /Link @@ -46556,23 +46551,23 @@ endobj /Type /Annot >> endobj -496 0 obj +495 0 obj << /Border [0 0 0] -/Dest (_route118) +/Dest (_route87) /Subtype /Link /Rect [60.24000000000001 353.63999999999965 221.091755859375 367.9199999999996] /Type /Annot >> endobj -497 0 obj +496 0 obj << /Border [0 0 0] -/Dest (_route118) +/Dest (_route87) /Subtype /Link /Rect [552.021 353.63999999999965 563.76 367.9199999999996] /Type /Annot >> endobj -498 0 obj +497 0 obj << /Border [0 0 0] /Dest (_responses_24) /Subtype /Link @@ -46580,7 +46575,7 @@ endobj /Type /Annot >> endobj -499 0 obj +498 0 obj << /Border [0 0 0] /Dest (_responses_24) /Subtype /Link @@ -46588,7 +46583,7 @@ endobj /Type /Annot >> endobj -500 0 obj +499 0 obj << /Border [0 0 0] /Dest (_produces_23) /Subtype /Link @@ -46596,7 +46591,7 @@ endobj /Type /Annot >> endobj -501 0 obj +500 0 obj << /Border [0 0 0] /Dest (_produces_23) /Subtype /Link @@ -46604,7 +46599,7 @@ endobj /Type /Annot >> endobj -502 0 obj +501 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_yaml_policymodeltype_get) /Subtype /Link @@ -46612,7 +46607,7 @@ endobj /Type /Annot >> endobj -503 0 obj +502 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_yaml_policymodeltype_get) /Subtype /Link @@ -46620,7 +46615,7 @@ endobj /Type /Annot >> endobj -504 0 obj +503 0 obj << /Border [0 0 0] /Dest (_parameters_19) /Subtype /Link @@ -46628,7 +46623,7 @@ endobj /Type /Annot >> endobj -505 0 obj +504 0 obj << /Border [0 0 0] /Dest (_parameters_19) /Subtype /Link @@ -46636,7 +46631,7 @@ endobj /Type /Annot >> endobj -506 0 obj +505 0 obj << /Border [0 0 0] /Dest (_responses_25) /Subtype /Link @@ -46644,7 +46639,7 @@ endobj /Type /Annot >> endobj -507 0 obj +506 0 obj << /Border [0 0 0] /Dest (_responses_25) /Subtype /Link @@ -46652,7 +46647,7 @@ endobj /Type /Annot >> endobj -508 0 obj +507 0 obj << /Border [0 0 0] /Dest (_produces_24) /Subtype /Link @@ -46660,7 +46655,7 @@ endobj /Type /Annot >> endobj -509 0 obj +508 0 obj << /Border [0 0 0] /Dest (_produces_24) /Subtype /Link @@ -46668,7 +46663,7 @@ endobj /Type /Annot >> endobj -510 0 obj +509 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_policymodeltype_get) /Subtype /Link @@ -46676,7 +46671,7 @@ endobj /Type /Annot >> endobj -511 0 obj +510 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_policymodeltype_get) /Subtype /Link @@ -46684,7 +46679,7 @@ endobj /Type /Annot >> endobj -512 0 obj +511 0 obj << /Border [0 0 0] /Dest (_parameters_20) /Subtype /Link @@ -46692,7 +46687,7 @@ endobj /Type /Annot >> endobj -513 0 obj +512 0 obj << /Border [0 0 0] /Dest (_parameters_20) /Subtype /Link @@ -46700,7 +46695,7 @@ endobj /Type /Annot >> endobj -514 0 obj +513 0 obj << /Border [0 0 0] /Dest (_responses_26) /Subtype /Link @@ -46708,7 +46703,7 @@ endobj /Type /Annot >> endobj -515 0 obj +514 0 obj << /Border [0 0 0] /Dest (_responses_26) /Subtype /Link @@ -46716,7 +46711,7 @@ endobj /Type /Annot >> endobj -516 0 obj +515 0 obj << /Border [0 0 0] /Dest (_produces_25) /Subtype /Link @@ -46724,7 +46719,7 @@ endobj /Type /Annot >> endobj -517 0 obj +516 0 obj << /Border [0 0 0] /Dest (_produces_25) /Subtype /Link @@ -46732,23 +46727,23 @@ endobj /Type /Annot >> endobj -518 0 obj +517 0 obj << /Border [0 0 0] -/Dest (_route119) +/Dest (_route88) /Subtype /Link /Rect [60.24000000000001 150.35999999999956 318.73125585937504 164.63999999999956] /Type /Annot >> endobj -519 0 obj +518 0 obj << /Border [0 0 0] -/Dest (_route119) +/Dest (_route88) /Subtype /Link /Rect [552.021 150.35999999999956 563.76 164.63999999999956] /Type /Annot >> endobj -520 0 obj +519 0 obj << /Border [0 0 0] /Dest (_parameters_21) /Subtype /Link @@ -46756,7 +46751,7 @@ endobj /Type /Annot >> endobj -521 0 obj +520 0 obj << /Border [0 0 0] /Dest (_parameters_21) /Subtype /Link @@ -46764,7 +46759,7 @@ endobj /Type /Annot >> endobj -522 0 obj +521 0 obj << /Border [0 0 0] /Dest (_responses_27) /Subtype /Link @@ -46772,7 +46767,7 @@ endobj /Type /Annot >> endobj -523 0 obj +522 0 obj << /Border [0 0 0] /Dest (_responses_27) /Subtype /Link @@ -46780,7 +46775,7 @@ endobj /Type /Annot >> endobj -524 0 obj +523 0 obj << /Border [0 0 0] /Dest (_consumes_6) /Subtype /Link @@ -46788,7 +46783,7 @@ endobj /Type /Annot >> endobj -525 0 obj +524 0 obj << /Border [0 0 0] /Dest (_consumes_6) /Subtype /Link @@ -46796,7 +46791,7 @@ endobj /Type /Annot >> endobj -526 0 obj +525 0 obj << /Border [0 0 0] /Dest (_produces_26) /Subtype /Link @@ -46804,7 +46799,7 @@ endobj /Type /Annot >> endobj -527 0 obj +526 0 obj << /Border [0 0 0] /Dest (_produces_26) /Subtype /Link @@ -46812,23 +46807,23 @@ endobj /Type /Annot >> endobj -528 0 obj +527 0 obj << /Border [0 0 0] -/Dest (_route122) +/Dest (_route91) /Subtype /Link /Rect [60.24000000000001 57.95999999999961 175.8555 72.23999999999961] /Type /Annot >> endobj -529 0 obj +528 0 obj << /Border [0 0 0] -/Dest (_route122) +/Dest (_route91) /Subtype /Link /Rect [552.021 57.95999999999961 563.76 72.23999999999961] /Type /Annot >> endobj -530 0 obj +529 0 obj << /Border [0 0 0] /Dest (_responses_28) /Subtype /Link @@ -46836,7 +46831,7 @@ endobj /Type /Annot >> endobj -531 0 obj +530 0 obj << /Border [0 0 0] /Dest (_responses_28) /Subtype /Link @@ -46844,7 +46839,7 @@ endobj /Type /Annot >> endobj -532 0 obj +531 0 obj << /Border [0 0 0] /Dest (_produces_27) /Subtype /Link @@ -46852,7 +46847,7 @@ endobj /Type /Annot >> endobj -533 0 obj +532 0 obj << /Border [0 0 0] /Dest (_produces_27) /Subtype /Link @@ -46860,7 +46855,7 @@ endobj /Type /Annot >> endobj -534 0 obj +533 0 obj << /Border [0 0 0] /Dest (_v2_templates_names_get) /Subtype /Link @@ -46868,7 +46863,7 @@ endobj /Type /Annot >> endobj -535 0 obj +534 0 obj << /Border [0 0 0] /Dest (_v2_templates_names_get) /Subtype /Link @@ -46876,7 +46871,7 @@ endobj /Type /Annot >> endobj -536 0 obj +535 0 obj << /Border [0 0 0] /Dest (_responses_29) /Subtype /Link @@ -46884,7 +46879,7 @@ endobj /Type /Annot >> endobj -537 0 obj +536 0 obj << /Border [0 0 0] /Dest (_responses_29) /Subtype /Link @@ -46892,7 +46887,7 @@ endobj /Type /Annot >> endobj -538 0 obj +537 0 obj << /Border [0 0 0] /Dest (_produces_28) /Subtype /Link @@ -46900,7 +46895,7 @@ endobj /Type /Annot >> endobj -539 0 obj +538 0 obj << /Border [0 0 0] /Dest (_produces_28) /Subtype /Link @@ -46908,7 +46903,7 @@ endobj /Type /Annot >> endobj -540 0 obj +539 0 obj << /Border [0 0 0] /Dest (_v2_templates_templatename_get) /Subtype /Link @@ -46916,7 +46911,7 @@ endobj /Type /Annot >> endobj -541 0 obj +540 0 obj << /Border [0 0 0] /Dest (_v2_templates_templatename_get) /Subtype /Link @@ -46924,7 +46919,7 @@ endobj /Type /Annot >> endobj -542 0 obj +541 0 obj << /Border [0 0 0] /Dest (_parameters_22) /Subtype /Link @@ -46932,7 +46927,7 @@ endobj /Type /Annot >> endobj -543 0 obj +542 0 obj << /Border [0 0 0] /Dest (_parameters_22) /Subtype /Link @@ -46940,7 +46935,7 @@ endobj /Type /Annot >> endobj -544 0 obj +543 0 obj << /Border [0 0 0] /Dest (_responses_30) /Subtype /Link @@ -46948,7 +46943,7 @@ endobj /Type /Annot >> endobj -545 0 obj +544 0 obj << /Border [0 0 0] /Dest (_responses_30) /Subtype /Link @@ -46956,7 +46951,7 @@ endobj /Type /Annot >> endobj -546 0 obj +545 0 obj << /Border [0 0 0] /Dest (_produces_29) /Subtype /Link @@ -46964,7 +46959,7 @@ endobj /Type /Annot >> endobj -547 0 obj +546 0 obj << /Border [0 0 0] /Dest (_produces_29) /Subtype /Link @@ -46972,7 +46967,7 @@ endobj /Type /Annot >> endobj -548 0 obj +547 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link @@ -46980,7 +46975,7 @@ endobj /Type /Annot >> endobj -549 0 obj +548 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link @@ -46988,7 +46983,7 @@ endobj /Type /Annot >> endobj -550 0 obj +549 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link @@ -46996,7 +46991,7 @@ endobj /Type /Annot >> endobj -551 0 obj +550 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link @@ -47004,7 +46999,7 @@ endobj /Type /Annot >> endobj -552 0 obj +551 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link @@ -47012,7 +47007,7 @@ endobj /Type /Annot >> endobj -553 0 obj +552 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link @@ -47020,7 +47015,7 @@ endobj /Type /Annot >> endobj -554 0 obj +553 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link @@ -47028,7 +47023,7 @@ endobj /Type /Annot >> endobj -555 0 obj +554 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link @@ -47036,7 +47031,7 @@ endobj /Type /Annot >> endobj -556 0 obj +555 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -47044,7 +47039,7 @@ endobj /Type /Annot >> endobj -557 0 obj +556 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -47052,7 +47047,7 @@ endobj /Type /Annot >> endobj -558 0 obj +557 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -47060,7 +47055,7 @@ endobj /Type /Annot >> endobj -559 0 obj +558 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -47068,7 +47063,7 @@ endobj /Type /Annot >> endobj -560 0 obj +559 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -47076,7 +47071,7 @@ endobj /Type /Annot >> endobj -561 0 obj +560 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -47084,7 +47079,7 @@ endobj /Type /Annot >> endobj -562 0 obj +561 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -47092,7 +47087,7 @@ endobj /Type /Annot >> endobj -563 0 obj +562 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -47100,7 +47095,7 @@ endobj /Type /Annot >> endobj -564 0 obj +563 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -47108,7 +47103,7 @@ endobj /Type /Annot >> endobj -565 0 obj +564 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -47116,7 +47111,7 @@ endobj /Type /Annot >> endobj -566 0 obj +565 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -47124,7 +47119,7 @@ endobj /Type /Annot >> endobj -567 0 obj +566 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -47132,7 +47127,7 @@ endobj /Type /Annot >> endobj -568 0 obj +567 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -47140,7 +47135,7 @@ endobj /Type /Annot >> endobj -569 0 obj +568 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -47148,7 +47143,7 @@ endobj /Type /Annot >> endobj -570 0 obj +569 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -47156,7 +47151,7 @@ endobj /Type /Annot >> endobj -571 0 obj +570 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -47164,7 +47159,7 @@ endobj /Type /Annot >> endobj -572 0 obj +571 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -47172,7 +47167,7 @@ endobj /Type /Annot >> endobj -573 0 obj +572 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -47180,7 +47175,7 @@ endobj /Type /Annot >> endobj -574 0 obj +573 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -47188,7 +47183,7 @@ endobj /Type /Annot >> endobj -575 0 obj +574 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -47196,7 +47191,7 @@ endobj /Type /Annot >> endobj -576 0 obj +575 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -47204,7 +47199,7 @@ endobj /Type /Annot >> endobj -577 0 obj +576 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -47212,7 +47207,7 @@ endobj /Type /Annot >> endobj -578 0 obj +577 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link @@ -47220,7 +47215,7 @@ endobj /Type /Annot >> endobj -579 0 obj +578 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link @@ -47228,7 +47223,7 @@ endobj /Type /Annot >> endobj -580 0 obj +579 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -47236,7 +47231,7 @@ endobj /Type /Annot >> endobj -581 0 obj +580 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -47244,7 +47239,7 @@ endobj /Type /Annot >> endobj -582 0 obj +581 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link @@ -47252,7 +47247,7 @@ endobj /Type /Annot >> endobj -583 0 obj +582 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link @@ -47260,7 +47255,7 @@ endobj /Type /Annot >> endobj -584 0 obj +583 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -47268,7 +47263,7 @@ endobj /Type /Annot >> endobj -585 0 obj +584 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -47276,7 +47271,7 @@ endobj /Type /Annot >> endobj -586 0 obj +585 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -47284,7 +47279,7 @@ endobj /Type /Annot >> endobj -587 0 obj +586 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -47292,7 +47287,7 @@ endobj /Type /Annot >> endobj -588 0 obj +587 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 612.0 792.0] @@ -47320,1299 +47315,1299 @@ Q endstream endobj -589 0 obj +588 0 obj << /Type /Outlines /Count 143 -/First 590 0 R -/Last 713 0 R +/First 589 0 R +/Last 712 0 R >> endobj -590 0 obj +589 0 obj << /Title -/Parent 589 0 R +/Parent 588 0 R /Count 0 -/Next 591 0 R +/Next 590 0 R /Dest [7 0 R /XYZ 0 792.0 null] >> endobj -591 0 obj +590 0 obj << /Title -/Parent 589 0 R +/Parent 588 0 R /Count 0 -/Next 592 0 R -/Prev 590 0 R +/Next 591 0 R +/Prev 589 0 R /Dest [10 0 R /XYZ 0 792.0 null] >> endobj -592 0 obj +591 0 obj << /Title -/Parent 589 0 R +/Parent 588 0 R /Count 2 -/First 593 0 R -/Last 594 0 R -/Next 595 0 R -/Prev 591 0 R +/First 592 0 R +/Last 593 0 R +/Next 594 0 R +/Prev 590 0 R /Dest [18 0 R /XYZ 0 792.0 null] >> endobj -593 0 obj +592 0 obj << /Title -/Parent 592 0 R +/Parent 591 0 R /Count 0 -/Next 594 0 R +/Next 593 0 R /Dest [18 0 R /XYZ 0 712.0799999999999 null] >> endobj -594 0 obj +593 0 obj << /Title -/Parent 592 0 R +/Parent 591 0 R /Count 0 -/Prev 593 0 R +/Prev 592 0 R /Dest [18 0 R /XYZ 0 644.22 null] >> endobj -595 0 obj +594 0 obj << /Title -/Parent 589 0 R +/Parent 588 0 R /Count 117 -/First 596 0 R -/Last 709 0 R -/Next 713 0 R -/Prev 592 0 R +/First 595 0 R +/Last 708 0 R +/Next 712 0 R +/Prev 591 0 R /Dest [27 0 R /XYZ 0 792.0 null] >> endobj -596 0 obj +595 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 597 0 R -/Last 598 0 R -/Next 599 0 R +/First 596 0 R +/Last 597 0 R +/Next 598 0 R /Dest [27 0 R /XYZ 0 712.0799999999999 null] >> endobj -597 0 obj +596 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 0 -/Next 598 0 R +/Next 597 0 R /Dest [27 0 R /XYZ 0 672.0 null] >> endobj -598 0 obj +597 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 0 -/Prev 597 0 R +/Prev 596 0 R /Dest [27 0 R /XYZ 0 566.8800000000001 null] >> endobj -599 0 obj +598 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 600 0 R -/Last 601 0 R -/Next 602 0 R -/Prev 596 0 R +/First 599 0 R +/Last 600 0 R +/Next 601 0 R +/Prev 595 0 R /Dest [27 0 R /XYZ 0 510.60000000000025 null] >> endobj -600 0 obj +599 0 obj << /Title -/Parent 599 0 R +/Parent 598 0 R /Count 0 -/Next 601 0 R +/Next 600 0 R /Dest [27 0 R /XYZ 0 470.5200000000002 null] >> endobj -601 0 obj +600 0 obj << /Title -/Parent 599 0 R +/Parent 598 0 R /Count 0 -/Prev 600 0 R +/Prev 599 0 R /Dest [27 0 R /XYZ 0 379.6800000000002 null] >> endobj -602 0 obj +601 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 603 0 R -/Last 604 0 R -/Next 605 0 R -/Prev 599 0 R +/First 602 0 R +/Last 603 0 R +/Next 604 0 R +/Prev 598 0 R /Dest [27 0 R /XYZ 0 323.40000000000015 null] >> endobj -603 0 obj +602 0 obj << /Title -/Parent 602 0 R +/Parent 601 0 R /Count 0 -/Next 604 0 R +/Next 603 0 R /Dest [27 0 R /XYZ 0 283.3200000000001 null] >> endobj -604 0 obj +603 0 obj << /Title -/Parent 602 0 R +/Parent 601 0 R /Count 0 -/Prev 603 0 R +/Prev 602 0 R /Dest [27 0 R /XYZ 0 178.2000000000001 null] >> endobj -605 0 obj +604 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 4 -/First 606 0 R -/Last 609 0 R -/Next 610 0 R -/Prev 602 0 R +/First 605 0 R +/Last 608 0 R +/Next 609 0 R +/Prev 601 0 R /Dest [27 0 R /XYZ 0 121.92000000000007 null] >> endobj -606 0 obj +605 0 obj << /Title -/Parent 605 0 R +/Parent 604 0 R /Count 0 -/Next 607 0 R +/Next 606 0 R /Dest [43 0 R /XYZ 0 792.0 null] >> endobj -607 0 obj +606 0 obj << /Title -/Parent 605 0 R +/Parent 604 0 R /Count 0 -/Next 608 0 R -/Prev 606 0 R +/Next 607 0 R +/Prev 605 0 R /Dest [43 0 R /XYZ 0 653.2800000000002 null] >> endobj -608 0 obj +607 0 obj << /Title -/Parent 605 0 R +/Parent 604 0 R /Count 0 -/Next 609 0 R -/Prev 607 0 R +/Next 608 0 R +/Prev 606 0 R /Dest [43 0 R /XYZ 0 548.1600000000003 null] >> endobj -609 0 obj +608 0 obj << /Title -/Parent 605 0 R +/Parent 604 0 R /Count 0 -/Prev 608 0 R +/Prev 607 0 R /Dest [43 0 R /XYZ 0 491.88000000000045 null] >> endobj -610 0 obj +609 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 611 0 R -/Last 612 0 R -/Next 613 0 R -/Prev 605 0 R +/First 610 0 R +/Last 611 0 R +/Next 612 0 R +/Prev 604 0 R /Dest [43 0 R /XYZ 0 435.6000000000004 null] >> endobj -611 0 obj +610 0 obj << /Title -/Parent 610 0 R +/Parent 609 0 R /Count 0 -/Next 612 0 R +/Next 611 0 R /Dest [43 0 R /XYZ 0 395.5200000000004 null] >> endobj -612 0 obj +611 0 obj << /Title -/Parent 610 0 R +/Parent 609 0 R /Count 0 -/Prev 611 0 R +/Prev 610 0 R /Dest [43 0 R /XYZ 0 290.4000000000003 null] >> endobj -613 0 obj +612 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 614 0 R -/Last 616 0 R -/Next 617 0 R -/Prev 610 0 R +/First 613 0 R +/Last 615 0 R +/Next 616 0 R +/Prev 609 0 R /Dest [43 0 R /XYZ 0 234.1200000000003 null] >> endobj -614 0 obj +613 0 obj << /Title -/Parent 613 0 R +/Parent 612 0 R /Count 0 -/Next 615 0 R +/Next 614 0 R /Dest [43 0 R /XYZ 0 194.04000000000028 null] >> endobj -615 0 obj +614 0 obj << /Title -/Parent 613 0 R +/Parent 612 0 R /Count 0 -/Next 616 0 R -/Prev 614 0 R +/Next 615 0 R +/Prev 613 0 R /Dest [58 0 R /XYZ 0 792.0 null] >> endobj -616 0 obj +615 0 obj << /Title -/Parent 613 0 R +/Parent 612 0 R /Count 0 -/Prev 615 0 R +/Prev 614 0 R /Dest [58 0 R /XYZ 0 653.2800000000002 null] >> endobj -617 0 obj +616 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 4 -/First 618 0 R -/Last 621 0 R -/Next 622 0 R -/Prev 613 0 R +/First 617 0 R +/Last 620 0 R +/Next 621 0 R +/Prev 612 0 R /Dest [58 0 R /XYZ 0 597.0000000000003 null] >> endobj -618 0 obj +617 0 obj << /Title -/Parent 617 0 R +/Parent 616 0 R /Count 0 -/Next 619 0 R +/Next 618 0 R /Dest [58 0 R /XYZ 0 556.9200000000004 null] >> endobj -619 0 obj +618 0 obj << /Title -/Parent 617 0 R +/Parent 616 0 R /Count 0 -/Next 620 0 R -/Prev 618 0 R +/Next 619 0 R +/Prev 617 0 R /Dest [58 0 R /XYZ 0 414.2400000000005 null] >> endobj -620 0 obj +619 0 obj << /Title -/Parent 617 0 R +/Parent 616 0 R /Count 0 -/Next 621 0 R -/Prev 619 0 R +/Next 620 0 R +/Prev 618 0 R /Dest [58 0 R /XYZ 0 309.12000000000046 null] >> endobj -621 0 obj +620 0 obj << /Title -/Parent 617 0 R +/Parent 616 0 R /Count 0 -/Prev 620 0 R +/Prev 619 0 R /Dest [58 0 R /XYZ 0 252.84000000000043 null] >> endobj -622 0 obj +621 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 623 0 R -/Last 625 0 R -/Next 626 0 R -/Prev 617 0 R +/First 622 0 R +/Last 624 0 R +/Next 625 0 R +/Prev 616 0 R /Dest [58 0 R /XYZ 0 196.5600000000004 null] >> endobj -623 0 obj +622 0 obj << /Title -/Parent 622 0 R +/Parent 621 0 R /Count 0 -/Next 624 0 R +/Next 623 0 R /Dest [58 0 R /XYZ 0 156.4800000000004 null] >> endobj -624 0 obj +623 0 obj << /Title -/Parent 622 0 R +/Parent 621 0 R /Count 0 -/Next 625 0 R -/Prev 623 0 R +/Next 624 0 R +/Prev 622 0 R /Dest [72 0 R /XYZ 0 792.0 null] >> endobj -625 0 obj +624 0 obj << /Title -/Parent 622 0 R +/Parent 621 0 R /Count 0 -/Prev 624 0 R +/Prev 623 0 R /Dest [72 0 R /XYZ 0 667.5600000000002 null] >> endobj -626 0 obj +625 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 627 0 R -/Last 629 0 R -/Next 630 0 R -/Prev 622 0 R +/First 626 0 R +/Last 628 0 R +/Next 629 0 R +/Prev 621 0 R /Dest [72 0 R /XYZ 0 611.2800000000003 null] >> endobj -627 0 obj +626 0 obj << /Title -/Parent 626 0 R +/Parent 625 0 R /Count 0 -/Next 628 0 R +/Next 627 0 R /Dest [72 0 R /XYZ 0 543.1200000000005 null] >> endobj -628 0 obj +627 0 obj << /Title -/Parent 626 0 R +/Parent 625 0 R /Count 0 -/Next 629 0 R -/Prev 627 0 R +/Next 628 0 R +/Prev 626 0 R /Dest [72 0 R /XYZ 0 400.44000000000057 null] >> endobj -629 0 obj +628 0 obj << /Title -/Parent 626 0 R +/Parent 625 0 R /Count 0 -/Prev 628 0 R +/Prev 627 0 R /Dest [72 0 R /XYZ 0 309.6000000000006 null] >> endobj -630 0 obj +629 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 631 0 R -/Last 632 0 R -/Next 633 0 R -/Prev 626 0 R +/First 630 0 R +/Last 631 0 R +/Next 632 0 R +/Prev 625 0 R /Dest [72 0 R /XYZ 0 253.32000000000056 null] >> endobj -631 0 obj +630 0 obj << /Title -/Parent 630 0 R +/Parent 629 0 R /Count 0 -/Next 632 0 R +/Next 631 0 R /Dest [72 0 R /XYZ 0 213.24000000000055 null] >> endobj -632 0 obj +631 0 obj << /Title -/Parent 630 0 R +/Parent 629 0 R /Count 0 -/Prev 631 0 R +/Prev 630 0 R /Dest [72 0 R /XYZ 0 108.12000000000052 null] >> endobj -633 0 obj +632 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 634 0 R -/Last 636 0 R -/Next 637 0 R -/Prev 630 0 R +/First 633 0 R +/Last 635 0 R +/Next 636 0 R +/Prev 629 0 R /Dest [84 0 R /XYZ 0 697.44 null] >> endobj -634 0 obj +633 0 obj << /Title -/Parent 633 0 R +/Parent 632 0 R /Count 0 -/Next 635 0 R +/Next 634 0 R /Dest [84 0 R /XYZ 0 657.3600000000001 null] >> endobj -635 0 obj +634 0 obj << /Title -/Parent 633 0 R +/Parent 632 0 R /Count 0 -/Next 636 0 R -/Prev 634 0 R +/Next 635 0 R +/Prev 633 0 R /Dest [84 0 R /XYZ 0 552.2400000000002 null] >> endobj -636 0 obj +635 0 obj << /Title -/Parent 633 0 R +/Parent 632 0 R /Count 0 -/Prev 635 0 R +/Prev 634 0 R /Dest [84 0 R /XYZ 0 447.12000000000035 null] >> endobj -637 0 obj +636 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 638 0 R -/Last 639 0 R -/Next 640 0 R -/Prev 633 0 R +/First 637 0 R +/Last 638 0 R +/Next 639 0 R +/Prev 632 0 R /Dest [84 0 R /XYZ 0 390.8400000000003 null] >> endobj -638 0 obj +637 0 obj << /Title -/Parent 637 0 R +/Parent 636 0 R /Count 0 -/Next 639 0 R +/Next 638 0 R /Dest [84 0 R /XYZ 0 350.7600000000003 null] >> endobj -639 0 obj +638 0 obj << /Title -/Parent 637 0 R +/Parent 636 0 R /Count 0 -/Prev 638 0 R +/Prev 637 0 R /Dest [84 0 R /XYZ 0 245.6400000000002 null] >> endobj -640 0 obj +639 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 641 0 R -/Last 643 0 R -/Next 644 0 R -/Prev 637 0 R +/First 640 0 R +/Last 642 0 R +/Next 643 0 R +/Prev 636 0 R /Dest [84 0 R /XYZ 0 189.36000000000018 null] >> endobj -641 0 obj +640 0 obj << /Title -/Parent 640 0 R +/Parent 639 0 R /Count 0 -/Next 642 0 R +/Next 641 0 R /Dest [84 0 R /XYZ 0 149.28000000000017 null] >> endobj -642 0 obj +641 0 obj << /Title -/Parent 640 0 R +/Parent 639 0 R /Count 0 -/Next 643 0 R -/Prev 641 0 R +/Next 642 0 R +/Prev 640 0 R /Dest [97 0 R /XYZ 0 792.0 null] >> endobj -643 0 obj +642 0 obj << /Title -/Parent 640 0 R +/Parent 639 0 R /Count 0 -/Prev 642 0 R +/Prev 641 0 R /Dest [97 0 R /XYZ 0 653.2800000000002 null] >> endobj -644 0 obj +643 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 645 0 R -/Last 647 0 R -/Next 648 0 R -/Prev 640 0 R +/First 644 0 R +/Last 646 0 R +/Next 647 0 R +/Prev 639 0 R /Dest [97 0 R /XYZ 0 597.0000000000003 null] >> endobj -645 0 obj +644 0 obj << /Title -/Parent 644 0 R +/Parent 643 0 R /Count 0 -/Next 646 0 R +/Next 645 0 R /Dest [97 0 R /XYZ 0 528.8400000000005 null] >> endobj -646 0 obj +645 0 obj << /Title -/Parent 644 0 R +/Parent 643 0 R /Count 0 -/Next 647 0 R -/Prev 645 0 R +/Next 646 0 R +/Prev 644 0 R /Dest [97 0 R /XYZ 0 423.72000000000054 null] >> endobj -647 0 obj +646 0 obj << /Title -/Parent 644 0 R +/Parent 643 0 R /Count 0 -/Prev 646 0 R +/Prev 645 0 R /Dest [97 0 R /XYZ 0 318.6000000000005 null] >> endobj -648 0 obj +647 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 649 0 R -/Last 651 0 R -/Next 652 0 R -/Prev 644 0 R +/First 648 0 R +/Last 650 0 R +/Next 651 0 R +/Prev 643 0 R /Dest [97 0 R /XYZ 0 262.32000000000045 null] >> endobj -649 0 obj +648 0 obj << /Title -/Parent 648 0 R +/Parent 647 0 R /Count 0 -/Next 650 0 R +/Next 649 0 R /Dest [97 0 R /XYZ 0 222.24000000000046 null] >> endobj -650 0 obj +649 0 obj << /Title -/Parent 648 0 R +/Parent 647 0 R /Count 0 -/Next 651 0 R -/Prev 649 0 R +/Next 650 0 R +/Prev 648 0 R /Dest [97 0 R /XYZ 0 117.12000000000043 null] >> endobj -651 0 obj +650 0 obj << /Title -/Parent 648 0 R +/Parent 647 0 R /Count 0 -/Prev 650 0 R +/Prev 649 0 R /Dest [110 0 R /XYZ 0 683.1600000000001 null] >> endobj -652 0 obj +651 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 653 0 R -/Last 655 0 R -/Next 656 0 R -/Prev 648 0 R +/First 652 0 R +/Last 654 0 R +/Next 655 0 R +/Prev 647 0 R /Dest [110 0 R /XYZ 0 626.8800000000002 null] >> endobj -653 0 obj +652 0 obj << /Title -/Parent 652 0 R +/Parent 651 0 R /Count 0 -/Next 654 0 R +/Next 653 0 R /Dest [110 0 R /XYZ 0 586.8000000000003 null] >> endobj -654 0 obj +653 0 obj << /Title -/Parent 652 0 R +/Parent 651 0 R /Count 0 -/Next 655 0 R -/Prev 653 0 R +/Next 654 0 R +/Prev 652 0 R /Dest [110 0 R /XYZ 0 481.68000000000046 null] >> endobj -655 0 obj +654 0 obj << /Title -/Parent 652 0 R +/Parent 651 0 R /Count 0 -/Prev 654 0 R +/Prev 653 0 R /Dest [110 0 R /XYZ 0 376.5600000000004 null] >> endobj -656 0 obj +655 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 657 0 R -/Last 659 0 R -/Next 660 0 R -/Prev 652 0 R +/First 656 0 R +/Last 658 0 R +/Next 659 0 R +/Prev 651 0 R /Dest [110 0 R /XYZ 0 320.28000000000037 null] >> endobj -657 0 obj +656 0 obj << /Title -/Parent 656 0 R +/Parent 655 0 R /Count 0 -/Next 658 0 R +/Next 657 0 R /Dest [110 0 R /XYZ 0 280.20000000000033 null] >> endobj -658 0 obj +657 0 obj << /Title -/Parent 656 0 R +/Parent 655 0 R /Count 0 -/Next 659 0 R -/Prev 657 0 R +/Next 658 0 R +/Prev 656 0 R /Dest [110 0 R /XYZ 0 175.08000000000033 null] >> endobj -659 0 obj +658 0 obj << /Title -/Parent 656 0 R +/Parent 655 0 R /Count 0 -/Prev 658 0 R +/Prev 657 0 R /Dest [124 0 R /XYZ 0 792.0 null] >> endobj -660 0 obj +659 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 661 0 R -/Last 663 0 R -/Next 664 0 R -/Prev 656 0 R +/First 660 0 R +/Last 662 0 R +/Next 663 0 R +/Prev 655 0 R /Dest [124 0 R /XYZ 0 702.1200000000001 null] >> endobj -661 0 obj +660 0 obj << /Title -/Parent 660 0 R +/Parent 659 0 R /Count 0 -/Next 662 0 R +/Next 661 0 R /Dest [124 0 R /XYZ 0 662.0400000000002 null] >> endobj -662 0 obj +661 0 obj << /Title -/Parent 660 0 R +/Parent 659 0 R /Count 0 -/Next 663 0 R -/Prev 661 0 R +/Next 662 0 R +/Prev 660 0 R /Dest [124 0 R /XYZ 0 556.9200000000003 null] >> endobj -663 0 obj +662 0 obj << /Title -/Parent 660 0 R +/Parent 659 0 R /Count 0 -/Prev 662 0 R +/Prev 661 0 R /Dest [124 0 R /XYZ 0 451.8000000000004 null] >> endobj -664 0 obj +663 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 665 0 R -/Last 667 0 R -/Next 668 0 R -/Prev 660 0 R +/First 664 0 R +/Last 666 0 R +/Next 667 0 R +/Prev 659 0 R /Dest [124 0 R /XYZ 0 395.5200000000004 null] >> endobj -665 0 obj +664 0 obj << /Title -/Parent 664 0 R +/Parent 663 0 R /Count 0 -/Next 666 0 R +/Next 665 0 R /Dest [124 0 R /XYZ 0 355.44000000000034 null] >> endobj -666 0 obj +665 0 obj << /Title -/Parent 664 0 R +/Parent 663 0 R /Count 0 -/Next 667 0 R -/Prev 665 0 R +/Next 666 0 R +/Prev 664 0 R /Dest [124 0 R /XYZ 0 250.32000000000033 null] >> endobj -667 0 obj +666 0 obj << /Title -/Parent 664 0 R +/Parent 663 0 R /Count 0 -/Prev 666 0 R +/Prev 665 0 R /Dest [124 0 R /XYZ 0 145.2000000000003 null] >> endobj -668 0 obj +667 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 4 -/First 669 0 R -/Last 672 0 R -/Next 673 0 R -/Prev 664 0 R +/First 668 0 R +/Last 671 0 R +/Next 672 0 R +/Prev 663 0 R /Dest [137 0 R /XYZ 0 792.0 null] >> endobj -669 0 obj +668 0 obj << /Title -/Parent 668 0 R +/Parent 667 0 R /Count 0 -/Next 670 0 R +/Next 669 0 R /Dest [137 0 R /XYZ 0 718.32 null] >> endobj -670 0 obj +669 0 obj << /Title -/Parent 668 0 R +/Parent 667 0 R /Count 0 -/Next 671 0 R -/Prev 669 0 R +/Next 670 0 R +/Prev 668 0 R /Dest [137 0 R /XYZ 0 575.6400000000001 null] >> endobj -671 0 obj +670 0 obj << /Title -/Parent 668 0 R +/Parent 667 0 R /Count 0 -/Next 672 0 R -/Prev 670 0 R +/Next 671 0 R +/Prev 669 0 R /Dest [137 0 R /XYZ 0 470.5200000000002 null] >> endobj -672 0 obj +671 0 obj << /Title -/Parent 668 0 R +/Parent 667 0 R /Count 0 -/Prev 671 0 R +/Prev 670 0 R /Dest [137 0 R /XYZ 0 414.2400000000002 null] >> endobj -673 0 obj +672 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 4 -/First 674 0 R -/Last 677 0 R -/Next 678 0 R -/Prev 668 0 R +/First 673 0 R +/Last 676 0 R +/Next 677 0 R +/Prev 667 0 R /Dest [137 0 R /XYZ 0 357.96000000000015 null] >> endobj -674 0 obj +673 0 obj << /Title -/Parent 673 0 R +/Parent 672 0 R /Count 0 -/Next 675 0 R +/Next 674 0 R /Dest [137 0 R /XYZ 0 289.8000000000001 null] >> endobj -675 0 obj +674 0 obj << /Title -/Parent 673 0 R +/Parent 672 0 R /Count 0 -/Next 676 0 R -/Prev 674 0 R +/Next 675 0 R +/Prev 673 0 R /Dest [137 0 R /XYZ 0 147.1200000000001 null] >> endobj -676 0 obj +675 0 obj << /Title -/Parent 673 0 R +/Parent 672 0 R /Count 0 -/Next 677 0 R -/Prev 675 0 R +/Next 676 0 R +/Prev 674 0 R /Dest [151 0 R /XYZ 0 792.0 null] >> endobj -677 0 obj +676 0 obj << /Title -/Parent 673 0 R +/Parent 672 0 R /Count 0 -/Prev 676 0 R +/Prev 675 0 R /Dest [151 0 R /XYZ 0 702.1200000000001 null] >> endobj -678 0 obj +677 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 4 -/First 679 0 R -/Last 682 0 R -/Next 683 0 R -/Prev 673 0 R +/First 678 0 R +/Last 681 0 R +/Next 682 0 R +/Prev 672 0 R /Dest [151 0 R /XYZ 0 645.8400000000003 null] >> endobj -679 0 obj +678 0 obj << /Title -/Parent 678 0 R +/Parent 677 0 R /Count 0 -/Next 680 0 R +/Next 679 0 R /Dest [151 0 R /XYZ 0 577.6800000000004 null] >> endobj -680 0 obj +679 0 obj << /Title -/Parent 678 0 R +/Parent 677 0 R /Count 0 -/Next 681 0 R -/Prev 679 0 R +/Next 680 0 R +/Prev 678 0 R /Dest [151 0 R /XYZ 0 435.0000000000005 null] >> endobj -681 0 obj +680 0 obj << /Title -/Parent 678 0 R +/Parent 677 0 R /Count 0 -/Next 682 0 R -/Prev 680 0 R +/Next 681 0 R +/Prev 679 0 R /Dest [151 0 R /XYZ 0 329.88000000000045 null] >> endobj -682 0 obj +681 0 obj << /Title -/Parent 678 0 R +/Parent 677 0 R /Count 0 -/Prev 681 0 R +/Prev 680 0 R /Dest [151 0 R /XYZ 0 273.6000000000004 null] >> endobj -683 0 obj +682 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 684 0 R -/Last 686 0 R -/Next 687 0 R -/Prev 678 0 R +/First 683 0 R +/Last 685 0 R +/Next 686 0 R +/Prev 677 0 R /Dest [151 0 R /XYZ 0 217.32000000000042 null] >> endobj -684 0 obj +683 0 obj << /Title -/Parent 683 0 R +/Parent 682 0 R /Count 0 -/Next 685 0 R +/Next 684 0 R /Dest [151 0 R /XYZ 0 177.2400000000004 null] >> endobj -685 0 obj +684 0 obj << /Title -/Parent 683 0 R +/Parent 682 0 R /Count 0 -/Next 686 0 R -/Prev 684 0 R +/Next 685 0 R +/Prev 683 0 R /Dest [165 0 R /XYZ 0 792.0 null] >> endobj -686 0 obj +685 0 obj << /Title -/Parent 683 0 R +/Parent 682 0 R /Count 0 -/Prev 685 0 R +/Prev 684 0 R /Dest [165 0 R /XYZ 0 653.2800000000002 null] >> endobj -687 0 obj +686 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 688 0 R -/Last 689 0 R -/Next 690 0 R -/Prev 683 0 R +/First 687 0 R +/Last 688 0 R +/Next 689 0 R +/Prev 682 0 R /Dest [165 0 R /XYZ 0 597.0000000000003 null] >> endobj -688 0 obj +687 0 obj << /Title -/Parent 687 0 R +/Parent 686 0 R /Count 0 -/Next 689 0 R +/Next 688 0 R /Dest [165 0 R /XYZ 0 556.9200000000004 null] >> endobj -689 0 obj +688 0 obj << /Title -/Parent 687 0 R +/Parent 686 0 R /Count 0 -/Prev 688 0 R +/Prev 687 0 R /Dest [165 0 R /XYZ 0 451.8000000000005 null] >> endobj -690 0 obj +689 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 691 0 R -/Last 693 0 R -/Next 694 0 R -/Prev 687 0 R +/First 690 0 R +/Last 692 0 R +/Next 693 0 R +/Prev 686 0 R /Dest [165 0 R /XYZ 0 395.5200000000005 null] >> endobj -691 0 obj +690 0 obj << /Title -/Parent 690 0 R +/Parent 689 0 R /Count 0 -/Next 692 0 R +/Next 691 0 R /Dest [165 0 R /XYZ 0 327.36000000000047 null] >> endobj -692 0 obj +691 0 obj << /Title -/Parent 690 0 R +/Parent 689 0 R /Count 0 -/Next 693 0 R -/Prev 691 0 R +/Next 692 0 R +/Prev 690 0 R /Dest [165 0 R /XYZ 0 222.2400000000004 null] >> endobj -693 0 obj +692 0 obj << /Title -/Parent 690 0 R +/Parent 689 0 R /Count 0 -/Prev 692 0 R +/Prev 691 0 R /Dest [165 0 R /XYZ 0 117.12000000000037 null] >> endobj -694 0 obj +693 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 695 0 R -/Last 697 0 R -/Next 698 0 R -/Prev 690 0 R +/First 694 0 R +/Last 696 0 R +/Next 697 0 R +/Prev 689 0 R /Dest [178 0 R /XYZ 0 792.0 null] >> endobj -695 0 obj +694 0 obj << /Title -/Parent 694 0 R +/Parent 693 0 R /Count 0 -/Next 696 0 R +/Next 695 0 R /Dest [178 0 R /XYZ 0 718.32 null] >> endobj -696 0 obj +695 0 obj << /Title -/Parent 694 0 R +/Parent 693 0 R /Count 0 -/Next 697 0 R -/Prev 695 0 R +/Next 696 0 R +/Prev 694 0 R /Dest [178 0 R /XYZ 0 613.2000000000003 null] >> endobj -697 0 obj +696 0 obj << /Title -/Parent 694 0 R +/Parent 693 0 R /Count 0 -/Prev 696 0 R +/Prev 695 0 R /Dest [178 0 R /XYZ 0 508.0800000000004 null] >> endobj -698 0 obj +697 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 4 -/First 699 0 R -/Last 702 0 R -/Next 703 0 R -/Prev 694 0 R +/First 698 0 R +/Last 701 0 R +/Next 702 0 R +/Prev 693 0 R /Dest [178 0 R /XYZ 0 451.80000000000035 null] >> endobj -699 0 obj +698 0 obj << /Title -/Parent 698 0 R +/Parent 697 0 R /Count 0 -/Next 700 0 R +/Next 699 0 R /Dest [178 0 R /XYZ 0 411.7200000000003 null] >> endobj -700 0 obj +699 0 obj << /Title -/Parent 698 0 R +/Parent 697 0 R /Count 0 -/Next 701 0 R -/Prev 699 0 R +/Next 700 0 R +/Prev 698 0 R /Dest [178 0 R /XYZ 0 269.04000000000025 null] >> endobj -701 0 obj +700 0 obj << /Title -/Parent 698 0 R +/Parent 697 0 R /Count 0 -/Next 702 0 R -/Prev 700 0 R +/Next 701 0 R +/Prev 699 0 R /Dest [178 0 R /XYZ 0 163.92000000000024 null] >> endobj -702 0 obj +701 0 obj << /Title -/Parent 698 0 R +/Parent 697 0 R /Count 0 -/Prev 701 0 R +/Prev 700 0 R /Dest [178 0 R /XYZ 0 107.64000000000021 null] >> endobj -703 0 obj +702 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 704 0 R -/Last 705 0 R -/Next 706 0 R -/Prev 698 0 R -/Dest [193 0 R /XYZ 0 792.0 null] +/First 703 0 R +/Last 704 0 R +/Next 705 0 R +/Prev 697 0 R +/Dest [192 0 R /XYZ 0 792.0 null] >> endobj -704 0 obj +703 0 obj << /Title -/Parent 703 0 R +/Parent 702 0 R /Count 0 -/Next 705 0 R -/Dest [193 0 R /XYZ 0 718.32 null] +/Next 704 0 R +/Dest [192 0 R /XYZ 0 718.32 null] >> endobj -705 0 obj +704 0 obj << /Title -/Parent 703 0 R +/Parent 702 0 R /Count 0 -/Prev 704 0 R -/Dest [193 0 R /XYZ 0 613.2000000000003 null] +/Prev 703 0 R +/Dest [192 0 R /XYZ 0 613.2000000000003 null] >> endobj -706 0 obj +705 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 2 -/First 707 0 R -/Last 708 0 R -/Next 709 0 R -/Prev 703 0 R -/Dest [193 0 R /XYZ 0 556.9200000000004 null] +/First 706 0 R +/Last 707 0 R +/Next 708 0 R +/Prev 702 0 R +/Dest [192 0 R /XYZ 0 556.9200000000004 null] >> endobj -707 0 obj +706 0 obj << /Title -/Parent 706 0 R +/Parent 705 0 R /Count 0 -/Next 708 0 R -/Dest [193 0 R /XYZ 0 516.8400000000005 null] +/Next 707 0 R +/Dest [192 0 R /XYZ 0 516.8400000000005 null] >> endobj -708 0 obj +707 0 obj << /Title -/Parent 706 0 R +/Parent 705 0 R /Count 0 -/Prev 707 0 R -/Dest [193 0 R /XYZ 0 411.7200000000005 null] +/Prev 706 0 R +/Dest [192 0 R /XYZ 0 411.7200000000005 null] >> endobj -709 0 obj +708 0 obj << /Title -/Parent 595 0 R +/Parent 594 0 R /Count 3 -/First 710 0 R -/Last 712 0 R -/Prev 706 0 R -/Dest [193 0 R /XYZ 0 355.44000000000045 null] +/First 709 0 R +/Last 711 0 R +/Prev 705 0 R +/Dest [192 0 R /XYZ 0 355.44000000000045 null] >> endobj -710 0 obj +709 0 obj << /Title -/Parent 709 0 R +/Parent 708 0 R /Count 0 -/Next 711 0 R -/Dest [193 0 R /XYZ 0 315.3600000000004 null] +/Next 710 0 R +/Dest [192 0 R /XYZ 0 315.3600000000004 null] >> endobj -711 0 obj +710 0 obj << /Title -/Parent 709 0 R +/Parent 708 0 R /Count 0 -/Next 712 0 R -/Prev 710 0 R -/Dest [193 0 R /XYZ 0 210.2400000000004 null] +/Next 711 0 R +/Prev 709 0 R +/Dest [192 0 R /XYZ 0 210.2400000000004 null] >> endobj -712 0 obj +711 0 obj << /Title -/Parent 709 0 R +/Parent 708 0 R /Count 0 -/Prev 711 0 R -/Dest [193 0 R /XYZ 0 105.12000000000037 null] +/Prev 710 0 R +/Dest [192 0 R /XYZ 0 105.12000000000037 null] >> endobj -713 0 obj +712 0 obj << /Title -/Parent 589 0 R +/Parent 588 0 R /Count 19 -/First 714 0 R -/Last 732 0 R -/Prev 595 0 R -/Dest [208 0 R /XYZ 0 792.0 null] +/First 713 0 R +/Last 731 0 R +/Prev 594 0 R +/Dest [207 0 R /XYZ 0 792.0 null] >> endobj -714 0 obj +713 0 obj << /Title -/Parent 713 0 R +/Parent 712 0 R +/Count 0 +/Next 714 0 R +/Dest [207 0 R /XYZ 0 712.0799999999999 null] +>> +endobj +714 0 obj +<< /Title +/Parent 712 0 R /Count 0 /Next 715 0 R -/Dest [208 0 R /XYZ 0 712.0799999999999 null] +/Prev 713 0 R +/Dest [207 0 R /XYZ 0 524.04 null] >> endobj 715 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 716 0 R /Prev 714 0 R -/Dest [208 0 R /XYZ 0 524.04 null] +/Dest [207 0 R /XYZ 0 148.19999999999993 null] >> endobj 716 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 717 0 R /Prev 715 0 R -/Dest [208 0 R /XYZ 0 148.19999999999993 null] +/Dest [214 0 R /XYZ 0 345.11999999999995 null] >> endobj 717 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 718 0 R /Prev 716 0 R -/Dest [215 0 R /XYZ 0 345.11999999999995 null] +/Dest [214 0 R /XYZ 0 194.6399999999999 null] >> endobj 718 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 719 0 R /Prev 717 0 R -/Dest [215 0 R /XYZ 0 194.6399999999999 null] +/Dest [220 0 R /XYZ 0 683.1600000000001 null] >> endobj 719 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 720 0 R /Prev 718 0 R -/Dest [221 0 R /XYZ 0 683.1600000000001 null] +/Dest [228 0 R /XYZ 0 532.9200000000003 null] >> endobj 720 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 721 0 R /Prev 719 0 R -/Dest [229 0 R /XYZ 0 532.9200000000003 null] +/Dest [234 0 R /XYZ 0 382.68000000000023 null] >> endobj 721 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 722 0 R /Prev 720 0 R -/Dest [235 0 R /XYZ 0 382.68000000000023 null] +/Dest [239 0 R /XYZ 0 232.44000000000023 null] >> endobj 722 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 723 0 R /Prev 721 0 R -/Dest [240 0 R /XYZ 0 232.44000000000023 null] +/Dest [255 0 R /XYZ 0 645.6000000000001 null] >> endobj 723 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 724 0 R /Prev 722 0 R -/Dest [256 0 R /XYZ 0 645.6000000000001 null] +/Dest [265 0 R /XYZ 0 645.6000000000001 null] >> endobj 724 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 725 0 R /Prev 723 0 R -/Dest [266 0 R /XYZ 0 645.6000000000001 null] +/Dest [265 0 R /XYZ 0 157.08000000000015 null] >> endobj 725 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 726 0 R /Prev 724 0 R -/Dest [266 0 R /XYZ 0 157.08000000000015 null] +/Dest [271 0 R /XYZ 0 532.9200000000001 null] >> endobj 726 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 727 0 R /Prev 725 0 R -/Dest [272 0 R /XYZ 0 532.9200000000001 null] +/Dest [277 0 R /XYZ 0 645.6000000000001 null] >> endobj 727 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 728 0 R /Prev 726 0 R -/Dest [278 0 R /XYZ 0 645.6000000000001 null] +/Dest [277 0 R /XYZ 0 457.56000000000023 null] >> endobj 728 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 729 0 R /Prev 727 0 R -/Dest [278 0 R /XYZ 0 457.56000000000023 null] +/Dest [285 0 R /XYZ 0 420.2400000000002 null] >> endobj 729 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 730 0 R /Prev 728 0 R -/Dest [286 0 R /XYZ 0 420.2400000000002 null] +/Dest [285 0 R /XYZ 0 352.3800000000001 null] >> endobj 730 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 /Next 731 0 R /Prev 729 0 R -/Dest [286 0 R /XYZ 0 352.3800000000001 null] +/Dest [296 0 R /XYZ 0 532.9200000000001 null] >> endobj 731 0 obj -<< /Title -/Parent 713 0 R +<< /Title +/Parent 712 0 R /Count 0 -/Next 732 0 R /Prev 730 0 R -/Dest [297 0 R /XYZ 0 532.9200000000001 null] +/Dest [296 0 R /XYZ 0 119.52000000000004 null] >> endobj 732 0 obj -<< /Title -/Parent 713 0 R -/Count 0 -/Prev 731 0 R -/Dest [297 0 R /XYZ 0 119.52000000000004 null] ->> -endobj -733 0 obj << /Nums [0 << /P (i) >> 1 << /P (ii) >> 2 << /P (iii) @@ -48647,7 +48642,7 @@ endobj >>] >> endobj -734 0 obj +733 0 obj << /Length1 12112 /Length 7776 /Filter [/FlateDecode] @@ -48680,10 +48675,10 @@ G)Dz adç4ft#ːe=<'cìpN/(i$V(.>t`jxp\5=ۥXwګ rWΪV-/Ms6C,CTī6ӿ|?`dUl'of]q \LcM&>'sNXpZ,a:;?p)̀tᾁ)xjzh@%x'CY& Da2|b$!V;n;>p,r<@1eTRVTfdPl<_oTpAҧRW٢Y,JVz "wn_is[ a\!ox(P/ endstream endobj -735 0 obj +734 0 obj << /Type /FontDescriptor /FontName /AAAAAA+NotoSerif -/FontFile2 734 0 R +/FontFile2 733 0 R /FontBBox [-212 -250 1246 1047] /Flags 6 /StemV 0 @@ -48694,7 +48689,7 @@ endobj /XHeight 1098 >> endobj -736 0 obj +735 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -48704,10 +48699,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -737 0 obj +736 0 obj [259 1000 1000 1000 1000 1000 1000 1000 346 346 1000 1000 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 1000 559 1000 559 1000 1000 705 653 613 727 623 589 713 792 367 356 1000 623 937 763 742 604 1000 655 543 612 716 674 1046 1000 625 1000 1000 1000 1000 1000 458 1000 562 613 492 613 535 369 538 634 319 299 584 310 944 645 577 613 1000 471 451 352 634 579 861 578 564 1000 428 1000 428 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -738 0 obj +737 0 obj << /Length1 11308 /Length 7514 /Filter [/FlateDecode] @@ -48738,10 +48733,10 @@ f \LBCXd0j s؀֑݌#Xc19=Q8*; [oTp:A+jG3\,+fXȦW-}BE>K(\( endstream endobj -739 0 obj +738 0 obj << /Type /FontDescriptor /FontName /AAAAAB+NotoSerif-Bold -/FontFile2 738 0 R +/FontFile2 737 0 R /FontBBox [-212 -250 1306 1058] /Flags 6 /StemV 0 @@ -48752,7 +48747,7 @@ endobj /XHeight 1098 >> endobj -740 0 obj +739 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -48762,10 +48757,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -741 0 obj +740 0 obj [259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 293 288 559 559 559 559 559 559 559 559 559 559 1000 1000 1000 1000 1000 1000 1000 752 671 667 767 652 621 769 818 400 368 1000 653 952 788 787 638 1000 707 585 652 747 698 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 345 636 352 985 666 612 645 647 522 487 404 666 605 855 645 579 1000 441 1000 441 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -742 0 obj +741 0 obj << /Length1 5116 /Length 3170 /Filter [/FlateDecode] @@ -48785,10 +48780,10 @@ a :2]^5w,º*Ӌ58mgnk7cB4aD[NaU> endobj -744 0 obj +743 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -48809,10 +48804,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -745 0 obj +744 0 obj [1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 653 1000 1000 1000 1000 1000 792 1000 1000 1000 1000 1000 1000 1000 620 1000 1000 543 612 1000 674 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 579 1000 486 579 493 1000 1000 599 304 1000 1000 304 895 599 574 577 560 467 463 368 599 1000 1000 1000 527 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -746 0 obj +745 0 obj << /Length1 3280 /Length 2112 /Filter [/FlateDecode] @@ -48827,10 +48822,10 @@ x $W"k8 Vi<!N..Ͷ&W+uX:j Z;cO-/UFN6][)%r*ffRT6e|Q!gɝE/iR~L z!RSzd3T2hʱ$5EeM"FJh@|f #DA΄-VQˎAOqXG٧΄Y(YSBF-!c^vua[0CaaE—c]GZD>&Vk}[DR]hߑz?+w_ endstream endobj -747 0 obj +746 0 obj << /Type /FontDescriptor /FontName /AAAAAD+mplus1mn-regular -/FontFile2 746 0 R +/FontFile2 745 0 R /FontBBox [0 -230 1000 860] /Flags 4 /StemV 0 @@ -48841,7 +48836,7 @@ endobj /XHeight 0 >> endobj -748 0 obj +747 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -48851,11 +48846,11 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -749 0 obj +748 0 obj [1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 1000 1000 1000 500 500 1000 500 500 500 500 500 1000 1000 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj xref -0 750 +0 749 0000000000 65535 f 0000000015 00000 n 0000000264 00000 n @@ -48878,739 +48873,738 @@ xref 0000127807 00000 n 0000127850 00000 n 0000127899 00000 n -0000128013 00000 n -0000128186 00000 n -0000128241 00000 n -0000128416 00000 n -0000128460 00000 n -0000140641 00000 n -0000140902 00000 n -0000140945 00000 n -0000141000 00000 n -0000141043 00000 n -0000141215 00000 n -0000141270 00000 n -0000141445 00000 n -0000141501 00000 n -0000141556 00000 n -0000141611 00000 n -0000141667 00000 n -0000141722 00000 n -0000141880 00000 n -0000141935 00000 n -0000141991 00000 n -0000158351 00000 n -0000158625 00000 n -0000158668 00000 n -0000158822 00000 n -0000158877 00000 n -0000159033 00000 n -0000159088 00000 n -0000159144 00000 n -0000159199 00000 n -0000159254 00000 n -0000159309 00000 n -0000159619 00000 n -0000159928 00000 n -0000159983 00000 n -0000160039 00000 n -0000178196 00000 n -0000178477 00000 n -0000178520 00000 n -0000178676 00000 n -0000178731 00000 n -0000178786 00000 n -0000178841 00000 n -0000178995 00000 n -0000179050 00000 n -0000179206 00000 n -0000179262 00000 n -0000179318 00000 n -0000179373 00000 n -0000179428 00000 n -0000194751 00000 n -0000195001 00000 n -0000195044 00000 n -0000195099 00000 n -0000195154 00000 n -0000195209 00000 n -0000195265 00000 n -0000195320 00000 n -0000195376 00000 n -0000195432 00000 n -0000195488 00000 n -0000195763 00000 n -0000213630 00000 n -0000213897 00000 n -0000213941 00000 n -0000213996 00000 n -0000214309 00000 n -0000214364 00000 n -0000214526 00000 n -0000214582 00000 n -0000214637 00000 n -0000214692 00000 n -0000214747 00000 n -0000214803 00000 n -0000214859 00000 n -0000231023 00000 n -0000231298 00000 n -0000231341 00000 n -0000231502 00000 n -0000231558 00000 n -0000231614 00000 n -0000231670 00000 n +0000128005 00000 n +0000128178 00000 n +0000128233 00000 n +0000128408 00000 n +0000128452 00000 n +0000140633 00000 n +0000140894 00000 n +0000140937 00000 n +0000140992 00000 n +0000141035 00000 n +0000141207 00000 n +0000141262 00000 n +0000141437 00000 n +0000141493 00000 n +0000141548 00000 n +0000141603 00000 n +0000141659 00000 n +0000141714 00000 n +0000141872 00000 n +0000141927 00000 n +0000141983 00000 n +0000158343 00000 n +0000158617 00000 n +0000158660 00000 n +0000158814 00000 n +0000158869 00000 n +0000159025 00000 n +0000159080 00000 n +0000159136 00000 n +0000159191 00000 n +0000159246 00000 n +0000159301 00000 n +0000159611 00000 n +0000159920 00000 n +0000159975 00000 n +0000160031 00000 n +0000178188 00000 n +0000178469 00000 n +0000178512 00000 n +0000178668 00000 n +0000178723 00000 n +0000178778 00000 n +0000178833 00000 n +0000178987 00000 n +0000179042 00000 n +0000179198 00000 n +0000179254 00000 n +0000179310 00000 n +0000179365 00000 n +0000179420 00000 n +0000194743 00000 n +0000194993 00000 n +0000195036 00000 n +0000195091 00000 n +0000195146 00000 n +0000195201 00000 n +0000195257 00000 n +0000195312 00000 n +0000195368 00000 n +0000195424 00000 n +0000195480 00000 n +0000196149 00000 n +0000214016 00000 n +0000214283 00000 n +0000214327 00000 n +0000214382 00000 n +0000214695 00000 n +0000214750 00000 n +0000214912 00000 n +0000214968 00000 n +0000215023 00000 n +0000215078 00000 n +0000215133 00000 n +0000215189 00000 n +0000215245 00000 n +0000231409 00000 n +0000231684 00000 n 0000231727 00000 n -0000231889 00000 n -0000231945 00000 n -0000232002 00000 n -0000232059 00000 n -0000232116 00000 n -0000251240 00000 n -0000251526 00000 n -0000251678 00000 n -0000251735 00000 n -0000251792 00000 n -0000251849 00000 n -0000251907 00000 n -0000252070 00000 n -0000252127 00000 n -0000252185 00000 n -0000252522 00000 n -0000252580 00000 n -0000252638 00000 n -0000252801 00000 n -0000269083 00000 n -0000269353 00000 n -0000269398 00000 n -0000269455 00000 n -0000269512 00000 n -0000269569 00000 n -0000269626 00000 n +0000231888 00000 n +0000231944 00000 n +0000232000 00000 n +0000232056 00000 n +0000232113 00000 n +0000232275 00000 n +0000232331 00000 n +0000232388 00000 n +0000232445 00000 n +0000232502 00000 n +0000251626 00000 n +0000251912 00000 n +0000252064 00000 n +0000252121 00000 n +0000252178 00000 n +0000252235 00000 n +0000252293 00000 n +0000252715 00000 n +0000252878 00000 n +0000252935 00000 n +0000252993 00000 n +0000253051 00000 n +0000253109 00000 n +0000253272 00000 n +0000269554 00000 n +0000269824 00000 n +0000269869 00000 n 0000269926 00000 n 0000269983 00000 n -0000270041 00000 n -0000270099 00000 n -0000270263 00000 n -0000270320 00000 n -0000290017 00000 n -0000290311 00000 n -0000290356 00000 n -0000290402 00000 n -0000290557 00000 n -0000290614 00000 n -0000290777 00000 n -0000290834 00000 n -0000290891 00000 n -0000290949 00000 n -0000291006 00000 n -0000291171 00000 n -0000291228 00000 n -0000291405 00000 n -0000306915 00000 n -0000307193 00000 n -0000307238 00000 n -0000307295 00000 n -0000307352 00000 n -0000307409 00000 n -0000307567 00000 n -0000307624 00000 n -0000307787 00000 n -0000307845 00000 n -0000308308 00000 n -0000308365 00000 n -0000308423 00000 n -0000308480 00000 n -0000324954 00000 n -0000325232 00000 n -0000325277 00000 n -0000325439 00000 n -0000325496 00000 n -0000325553 00000 n -0000325610 00000 n -0000325771 00000 n -0000325828 00000 n -0000325885 00000 n -0000325943 00000 n -0000326000 00000 n -0000326058 00000 n -0000344169 00000 n -0000344447 00000 n -0000344492 00000 n -0000344538 00000 n -0000344595 00000 n -0000344754 00000 n -0000344811 00000 n -0000344869 00000 n -0000345431 00000 n -0000345488 00000 n -0000345546 00000 n -0000345948 00000 n -0000346109 00000 n -0000346167 00000 n -0000346225 00000 n -0000362796 00000 n +0000270040 00000 n +0000270097 00000 n +0000270397 00000 n +0000270454 00000 n +0000270512 00000 n +0000270570 00000 n +0000270734 00000 n +0000270791 00000 n +0000290488 00000 n +0000290782 00000 n +0000290827 00000 n +0000290873 00000 n +0000291028 00000 n +0000291085 00000 n +0000291248 00000 n +0000291305 00000 n +0000291362 00000 n +0000291420 00000 n +0000291477 00000 n +0000291642 00000 n +0000291699 00000 n +0000291876 00000 n +0000307386 00000 n +0000307664 00000 n +0000307709 00000 n +0000307766 00000 n +0000307823 00000 n +0000307880 00000 n +0000308038 00000 n +0000308095 00000 n +0000308258 00000 n +0000308316 00000 n +0000308779 00000 n +0000308836 00000 n +0000308894 00000 n +0000308951 00000 n +0000325425 00000 n +0000325703 00000 n +0000325748 00000 n +0000325910 00000 n +0000325967 00000 n +0000326024 00000 n +0000326081 00000 n +0000326242 00000 n +0000326299 00000 n +0000326356 00000 n +0000326414 00000 n +0000326471 00000 n +0000326529 00000 n +0000344640 00000 n +0000344918 00000 n +0000344963 00000 n +0000345009 00000 n +0000345066 00000 n +0000345225 00000 n +0000345282 00000 n +0000345340 00000 n +0000345397 00000 n +0000345455 00000 n +0000345857 00000 n +0000346018 00000 n +0000346076 00000 n +0000346134 00000 n +0000362705 00000 n +0000362983 00000 n +0000363028 00000 n 0000363074 00000 n -0000363119 00000 n -0000363165 00000 n -0000363335 00000 n -0000363392 00000 n -0000363744 00000 n -0000363801 00000 n -0000363858 00000 n -0000363915 00000 n -0000363973 00000 n -0000364030 00000 n -0000364087 00000 n -0000364258 00000 n -0000364316 00000 n -0000380453 00000 n -0000380710 00000 n -0000380755 00000 n -0000380812 00000 n -0000380858 00000 n -0000381035 00000 n -0000381093 00000 n -0000401446 00000 n -0000401711 00000 n -0000401875 00000 n -0000401933 00000 n -0000402116 00000 n -0000402173 00000 n -0000424159 00000 n -0000424448 00000 n -0000424505 00000 n -0000424673 00000 n -0000424840 00000 n -0000425010 00000 n -0000425182 00000 n -0000425342 00000 n -0000446909 00000 n -0000447182 00000 n -0000447239 00000 n -0000447408 00000 n -0000447577 00000 n -0000447746 00000 n -0000468964 00000 n -0000469229 00000 n -0000469380 00000 n -0000469519 00000 n -0000469577 00000 n -0000491288 00000 n -0000491577 00000 n -0000491745 00000 n -0000491892 00000 n -0000492041 00000 n -0000492192 00000 n -0000492331 00000 n -0000492389 00000 n -0000492939 00000 n -0000515684 00000 n -0000515973 00000 n -0000516141 00000 n -0000516288 00000 n -0000516437 00000 n -0000516588 00000 n -0000516727 00000 n -0000540119 00000 n -0000540424 00000 n -0000540481 00000 n -0000540651 00000 n -0000540822 00000 n -0000540990 00000 n -0000541163 00000 n -0000541342 00000 n -0000541504 00000 n -0000541682 00000 n -0000562377 00000 n -0000562642 00000 n -0000562699 00000 n -0000562868 00000 n -0000563057 00000 n -0000563115 00000 n -0000584820 00000 n -0000585093 00000 n -0000585256 00000 n -0000585313 00000 n -0000585500 00000 n -0000585662 00000 n -0000606470 00000 n -0000606751 00000 n -0000606808 00000 n -0000606983 00000 n -0000607155 00000 n -0000607213 00000 n -0000607383 00000 n -0000607552 00000 n -0000628210 00000 n -0000628515 00000 n -0000628690 00000 n -0000628854 00000 n -0000629018 00000 n -0000629075 00000 n -0000629132 00000 n -0000629302 00000 n -0000629472 00000 n -0000629637 00000 n -0000629812 00000 n -0000649226 00000 n -0000649491 00000 n -0000649655 00000 n -0000649712 00000 n -0000649889 00000 n -0000649947 00000 n -0000657265 00000 n -0000657530 00000 n -0000657679 00000 n -0000657828 00000 n -0000657972 00000 n -0000658117 00000 n -0000658282 00000 n -0000658438 00000 n -0000658596 00000 n -0000658743 00000 n -0000658905 00000 n -0000659047 00000 n -0000659213 00000 n -0000659358 00000 n -0000659515 00000 n -0000659661 00000 n -0000659817 00000 n -0000659962 00000 n -0000660118 00000 n -0000660263 00000 n -0000660422 00000 n -0000660570 00000 n -0000660728 00000 n -0000660875 00000 n -0000661031 00000 n -0000661177 00000 n -0000661337 00000 n -0000661486 00000 n -0000661644 00000 n -0000661791 00000 n -0000661947 00000 n -0000662093 00000 n -0000662262 00000 n -0000662410 00000 n -0000662571 00000 n -0000662721 00000 n -0000662877 00000 n -0000663023 00000 n -0000663181 00000 n -0000663328 00000 n -0000663519 00000 n -0000663689 00000 n -0000663849 00000 n -0000663998 00000 n -0000664158 00000 n -0000664307 00000 n -0000664498 00000 n -0000664668 00000 n -0000664839 00000 n -0000664989 00000 n -0000665148 00000 n -0000665296 00000 n -0000665456 00000 n -0000665605 00000 n -0000665776 00000 n -0000665937 00000 n -0000666107 00000 n -0000666256 00000 n -0000666415 00000 n -0000666563 00000 n -0000666720 00000 n -0000666867 00000 n -0000667027 00000 n -0000667176 00000 n -0000667344 00000 n -0000667491 00000 n -0000667663 00000 n -0000667814 00000 n -0000667975 00000 n -0000668125 00000 n -0000668284 00000 n -0000668432 00000 n -0000668624 00000 n -0000668805 00000 n -0000668975 00000 n -0000669124 00000 n -0000669271 00000 n -0000669407 00000 n -0000669554 00000 n -0000669690 00000 n -0000669845 00000 n -0000669979 00000 n -0000670138 00000 n -0000670276 00000 n -0000670435 00000 n -0000670584 00000 n -0000670748 00000 n -0000670893 00000 n -0000671063 00000 n -0000671212 00000 n -0000671371 00000 n -0000671520 00000 n -0000671689 00000 n -0000671837 00000 n -0000671992 00000 n -0000672136 00000 n -0000672295 00000 n -0000672444 00000 n -0000672613 00000 n -0000672761 00000 n -0000672916 00000 n -0000673061 00000 n -0000673231 00000 n -0000673380 00000 n -0000673540 00000 n -0000673690 00000 n -0000673860 00000 n -0000674009 00000 n -0000674166 00000 n -0000674312 00000 n -0000674482 00000 n -0000674631 00000 n -0000674790 00000 n -0000674939 00000 n -0000675109 00000 n -0000675258 00000 n -0000675426 00000 n -0000675573 00000 n -0000675745 00000 n -0000675896 00000 n -0000676055 00000 n -0000676204 00000 n -0000676373 00000 n -0000676521 00000 n -0000676677 00000 n -0000676823 00000 n -0000676995 00000 n -0000677146 00000 n -0000677306 00000 n -0000677456 00000 n -0000677625 00000 n -0000677773 00000 n -0000677941 00000 n -0000678088 00000 n -0000678261 00000 n -0000678413 00000 n -0000678574 00000 n -0000678725 00000 n -0000678896 00000 n -0000679046 00000 n -0000679202 00000 n -0000679348 00000 n -0000679521 00000 n -0000679673 00000 n -0000679834 00000 n -0000679985 00000 n -0000680155 00000 n -0000680304 00000 n -0000680466 00000 n -0000680609 00000 n -0000680780 00000 n -0000680930 00000 n -0000681077 00000 n -0000681214 00000 n -0000681372 00000 n -0000681509 00000 n -0000681661 00000 n -0000681793 00000 n -0000681953 00000 n -0000682091 00000 n -0000682250 00000 n -0000682398 00000 n -0000682556 00000 n -0000682702 00000 n -0000682871 00000 n -0000683018 00000 n -0000683184 00000 n -0000683328 00000 n -0000683499 00000 n -0000683648 00000 n -0000683807 00000 n -0000683955 00000 n -0000684113 00000 n -0000684259 00000 n -0000684428 00000 n -0000684575 00000 n -0000684737 00000 n -0000684880 00000 n -0000685051 00000 n -0000685200 00000 n -0000685360 00000 n -0000685509 00000 n -0000685668 00000 n -0000685815 00000 n -0000685985 00000 n -0000686133 00000 n -0000686288 00000 n -0000686431 00000 n -0000686602 00000 n -0000686751 00000 n -0000686911 00000 n -0000687060 00000 n -0000687231 00000 n -0000687380 00000 n -0000687545 00000 n -0000687690 00000 n -0000687849 00000 n -0000687997 00000 n -0000688166 00000 n -0000688313 00000 n -0000688515 00000 n -0000688697 00000 n -0000688869 00000 n -0000689019 00000 n -0000689179 00000 n -0000689328 00000 n -0000689497 00000 n -0000689644 00000 n -0000689844 00000 n -0000690022 00000 n -0000690195 00000 n -0000690346 00000 n -0000690507 00000 n -0000690657 00000 n -0000690828 00000 n -0000690977 00000 n -0000691145 00000 n -0000691291 00000 n -0000691464 00000 n -0000691615 00000 n -0000691776 00000 n -0000691926 00000 n -0000692085 00000 n -0000692232 00000 n -0000692399 00000 n -0000692544 00000 n -0000692700 00000 n -0000692844 00000 n -0000692991 00000 n -0000693127 00000 n -0000693285 00000 n -0000693421 00000 n -0000693579 00000 n -0000693726 00000 n -0000693874 00000 n -0000694011 00000 n -0000694180 00000 n -0000694327 00000 n -0000694514 00000 n -0000694679 00000 n -0000694850 00000 n -0000694999 00000 n -0000695158 00000 n -0000695306 00000 n -0000695475 00000 n -0000695622 00000 n -0000695791 00000 n -0000695938 00000 n -0000696111 00000 n -0000696262 00000 n -0000696420 00000 n -0000696566 00000 n -0000696731 00000 n -0000696884 00000 n -0000697048 00000 n -0000697201 00000 n -0000697382 00000 n -0000697541 00000 n -0000697709 00000 n -0000697855 00000 n -0000698022 00000 n -0000698167 00000 n -0000698335 00000 n -0000698481 00000 n -0000698641 00000 n -0000698790 00000 n -0000698953 00000 n -0000699094 00000 n -0000699259 00000 n -0000699413 00000 n -0000699579 00000 n -0000699723 00000 n -0000699893 00000 n -0000700041 00000 n -0000700225 00000 n -0000700389 00000 n -0000700566 00000 n -0000700721 00000 n -0000700886 00000 n -0000701029 00000 n -0000701205 00000 n -0000701359 00000 n -0000701528 00000 n -0000701675 00000 n -0000701842 00000 n -0000701987 00000 n -0000702272 00000 n -0000702351 00000 n -0000702515 00000 n -0000702706 00000 n -0000702934 00000 n -0000703151 00000 n -0000703321 00000 n -0000703539 00000 n -0000703785 00000 n -0000703958 00000 n -0000704139 00000 n -0000704404 00000 n -0000704589 00000 n -0000704770 00000 n -0000705027 00000 n -0000705212 00000 n -0000705393 00000 n -0000705650 00000 n -0000705827 00000 n -0000706026 00000 n -0000706221 00000 n -0000706403 00000 n -0000706723 00000 n -0000706908 00000 n -0000707089 00000 n -0000707413 00000 n -0000707603 00000 n -0000707790 00000 n -0000707971 00000 n -0000708255 00000 n -0000708444 00000 n -0000708643 00000 n -0000708839 00000 n -0000709021 00000 n -0000709317 00000 n -0000709506 00000 n -0000709693 00000 n -0000709874 00000 n -0000710254 00000 n -0000710443 00000 n -0000710643 00000 n -0000710824 00000 n -0000711133 00000 n -0000711327 00000 n -0000711517 00000 n -0000711814 00000 n -0000712007 00000 n -0000712210 00000 n -0000712396 00000 n -0000712680 00000 n -0000712869 00000 n -0000713054 00000 n -0000713375 00000 n -0000713569 00000 n -0000713760 00000 n -0000713945 00000 n -0000714329 00000 n -0000714522 00000 n -0000714726 00000 n -0000714911 00000 n -0000715224 00000 n -0000715418 00000 n -0000715622 00000 n -0000715808 00000 n -0000716109 00000 n -0000716303 00000 n -0000716508 00000 n -0000716694 00000 n -0000717004 00000 n -0000717199 00000 n -0000717404 00000 n -0000717578 00000 n -0000717931 00000 n -0000718125 00000 n -0000718329 00000 n -0000718515 00000 n -0000718832 00000 n -0000719027 00000 n -0000719232 00000 n -0000719418 00000 n -0000719783 00000 n -0000719966 00000 n -0000720170 00000 n -0000720370 00000 n -0000720556 00000 n -0000720942 00000 n -0000721136 00000 n -0000721340 00000 n -0000721528 00000 n -0000721714 00000 n -0000722103 00000 n -0000722297 00000 n -0000722501 00000 n -0000722702 00000 n -0000722888 00000 n -0000723170 00000 n -0000723364 00000 n -0000723556 00000 n -0000723742 00000 n -0000724031 00000 n -0000724221 00000 n -0000724407 00000 n -0000724788 00000 n -0000724983 00000 n -0000725187 00000 n -0000725374 00000 n -0000725723 00000 n -0000725906 00000 n -0000726110 00000 n -0000726296 00000 n -0000726658 00000 n -0000726852 00000 n -0000727057 00000 n -0000727258 00000 n -0000727445 00000 n -0000727690 00000 n -0000727869 00000 n -0000728055 00000 n -0000728336 00000 n -0000728526 00000 n -0000728712 00000 n -0000729016 00000 n -0000729210 00000 n -0000729414 00000 n -0000729601 00000 n -0000729829 00000 n -0000730031 00000 n -0000730216 00000 n -0000730441 00000 n -0000730666 00000 n -0000730910 00000 n -0000731102 00000 n -0000731290 00000 n -0000731487 00000 n -0000731696 00000 n -0000731872 00000 n -0000732096 00000 n -0000732285 00000 n -0000732493 00000 n -0000732765 00000 n -0000732998 00000 n -0000733182 00000 n -0000733410 00000 n -0000733614 00000 n -0000733789 00000 n -0000734327 00000 n -0000742195 00000 n -0000742411 00000 n -0000743774 00000 n -0000744843 00000 n -0000752449 00000 n -0000752670 00000 n -0000754033 00000 n -0000755112 00000 n -0000758373 00000 n -0000758599 00000 n -0000759962 00000 n -0000761078 00000 n -0000763281 00000 n -0000763495 00000 n -0000764858 00000 n +0000363244 00000 n +0000363301 00000 n +0000363653 00000 n +0000363710 00000 n +0000363767 00000 n +0000363824 00000 n +0000363882 00000 n +0000363939 00000 n +0000363996 00000 n +0000364167 00000 n +0000364225 00000 n +0000380362 00000 n +0000380619 00000 n +0000380664 00000 n +0000380721 00000 n +0000380767 00000 n +0000380944 00000 n +0000381002 00000 n +0000401355 00000 n +0000401620 00000 n +0000401784 00000 n +0000401842 00000 n +0000402025 00000 n +0000402082 00000 n +0000424068 00000 n +0000424357 00000 n +0000424414 00000 n +0000424582 00000 n +0000424749 00000 n +0000424919 00000 n +0000425091 00000 n +0000425251 00000 n +0000446818 00000 n +0000447091 00000 n +0000447148 00000 n +0000447317 00000 n +0000447486 00000 n +0000447655 00000 n +0000468873 00000 n +0000469138 00000 n +0000469289 00000 n +0000469428 00000 n +0000469486 00000 n +0000491197 00000 n +0000491486 00000 n +0000491654 00000 n +0000491801 00000 n +0000491950 00000 n +0000492101 00000 n +0000492240 00000 n +0000492298 00000 n +0000492848 00000 n +0000515593 00000 n +0000515882 00000 n +0000516050 00000 n +0000516197 00000 n +0000516346 00000 n +0000516497 00000 n +0000516636 00000 n +0000540028 00000 n +0000540333 00000 n +0000540390 00000 n +0000540560 00000 n +0000540731 00000 n +0000540899 00000 n +0000541072 00000 n +0000541251 00000 n +0000541413 00000 n +0000541591 00000 n +0000562286 00000 n +0000562551 00000 n +0000562608 00000 n +0000562777 00000 n +0000562966 00000 n +0000563024 00000 n +0000584729 00000 n +0000585002 00000 n +0000585165 00000 n +0000585222 00000 n +0000585409 00000 n +0000585571 00000 n +0000606379 00000 n +0000606660 00000 n +0000606717 00000 n +0000606892 00000 n +0000607064 00000 n +0000607122 00000 n +0000607292 00000 n +0000607461 00000 n +0000628119 00000 n +0000628424 00000 n +0000628599 00000 n +0000628763 00000 n +0000628927 00000 n +0000628984 00000 n +0000629041 00000 n +0000629211 00000 n +0000629381 00000 n +0000629546 00000 n +0000629721 00000 n +0000649135 00000 n +0000649400 00000 n +0000649564 00000 n +0000649621 00000 n +0000649798 00000 n +0000649856 00000 n +0000657174 00000 n +0000657439 00000 n +0000657588 00000 n +0000657737 00000 n +0000657881 00000 n +0000658026 00000 n +0000658191 00000 n +0000658347 00000 n +0000658505 00000 n +0000658652 00000 n +0000658814 00000 n +0000658956 00000 n +0000659121 00000 n +0000659265 00000 n +0000659422 00000 n +0000659568 00000 n +0000659724 00000 n +0000659869 00000 n +0000660024 00000 n +0000660168 00000 n +0000660327 00000 n +0000660475 00000 n +0000660633 00000 n +0000660780 00000 n +0000660935 00000 n +0000661080 00000 n +0000661240 00000 n +0000661389 00000 n +0000661547 00000 n +0000661694 00000 n +0000661849 00000 n +0000661994 00000 n +0000662163 00000 n +0000662311 00000 n +0000662472 00000 n +0000662622 00000 n +0000662778 00000 n +0000662924 00000 n +0000663082 00000 n +0000663229 00000 n +0000663420 00000 n +0000663590 00000 n +0000663750 00000 n +0000663899 00000 n +0000664059 00000 n +0000664208 00000 n +0000664399 00000 n +0000664569 00000 n +0000664740 00000 n +0000664890 00000 n +0000665049 00000 n +0000665197 00000 n +0000665357 00000 n +0000665506 00000 n +0000665677 00000 n +0000665838 00000 n +0000666008 00000 n +0000666157 00000 n +0000666316 00000 n +0000666464 00000 n +0000666621 00000 n +0000666768 00000 n +0000666928 00000 n +0000667077 00000 n +0000667244 00000 n +0000667390 00000 n +0000667562 00000 n +0000667713 00000 n +0000667874 00000 n +0000668024 00000 n +0000668183 00000 n +0000668331 00000 n +0000668523 00000 n +0000668704 00000 n +0000668874 00000 n +0000669023 00000 n +0000669170 00000 n +0000669306 00000 n +0000669453 00000 n +0000669589 00000 n +0000669743 00000 n +0000669876 00000 n +0000670035 00000 n +0000670173 00000 n +0000670332 00000 n +0000670481 00000 n +0000670644 00000 n +0000670788 00000 n +0000670958 00000 n +0000671107 00000 n +0000671266 00000 n +0000671415 00000 n +0000671584 00000 n +0000671732 00000 n +0000671887 00000 n +0000672031 00000 n +0000672190 00000 n +0000672339 00000 n +0000672508 00000 n +0000672656 00000 n +0000672810 00000 n +0000672954 00000 n +0000673124 00000 n +0000673273 00000 n +0000673433 00000 n +0000673583 00000 n +0000673753 00000 n +0000673902 00000 n +0000674058 00000 n +0000674203 00000 n +0000674373 00000 n +0000674522 00000 n +0000674681 00000 n +0000674830 00000 n +0000675000 00000 n +0000675149 00000 n +0000675316 00000 n +0000675462 00000 n +0000675634 00000 n +0000675785 00000 n +0000675944 00000 n +0000676093 00000 n +0000676262 00000 n +0000676410 00000 n +0000676565 00000 n +0000676710 00000 n +0000676882 00000 n +0000677033 00000 n +0000677193 00000 n +0000677343 00000 n +0000677512 00000 n +0000677660 00000 n +0000677827 00000 n +0000677973 00000 n +0000678146 00000 n +0000678298 00000 n +0000678459 00000 n +0000678610 00000 n +0000678781 00000 n +0000678931 00000 n +0000679087 00000 n +0000679233 00000 n +0000679406 00000 n +0000679558 00000 n +0000679719 00000 n +0000679870 00000 n +0000680040 00000 n +0000680189 00000 n +0000680350 00000 n +0000680492 00000 n +0000680663 00000 n +0000680813 00000 n +0000680960 00000 n +0000681097 00000 n +0000681255 00000 n +0000681392 00000 n +0000681544 00000 n +0000681676 00000 n +0000681836 00000 n +0000681974 00000 n +0000682133 00000 n +0000682281 00000 n +0000682439 00000 n +0000682585 00000 n +0000682754 00000 n +0000682901 00000 n +0000683066 00000 n +0000683209 00000 n +0000683380 00000 n +0000683529 00000 n +0000683688 00000 n +0000683836 00000 n +0000683994 00000 n +0000684140 00000 n +0000684309 00000 n +0000684456 00000 n +0000684618 00000 n +0000684761 00000 n +0000684932 00000 n +0000685081 00000 n +0000685241 00000 n +0000685390 00000 n +0000685549 00000 n +0000685696 00000 n +0000685866 00000 n +0000686014 00000 n +0000686169 00000 n +0000686312 00000 n +0000686483 00000 n +0000686632 00000 n +0000686792 00000 n +0000686941 00000 n +0000687112 00000 n +0000687261 00000 n +0000687425 00000 n +0000687569 00000 n +0000687728 00000 n +0000687876 00000 n +0000688045 00000 n +0000688192 00000 n +0000688394 00000 n +0000688576 00000 n +0000688748 00000 n +0000688898 00000 n +0000689058 00000 n +0000689207 00000 n +0000689376 00000 n +0000689523 00000 n +0000689723 00000 n +0000689901 00000 n +0000690074 00000 n +0000690225 00000 n +0000690386 00000 n +0000690536 00000 n +0000690707 00000 n +0000690856 00000 n +0000691023 00000 n +0000691168 00000 n +0000691341 00000 n +0000691492 00000 n +0000691653 00000 n +0000691803 00000 n +0000691962 00000 n +0000692109 00000 n +0000692276 00000 n +0000692421 00000 n +0000692576 00000 n +0000692719 00000 n +0000692866 00000 n +0000693002 00000 n +0000693160 00000 n +0000693296 00000 n +0000693454 00000 n +0000693601 00000 n +0000693749 00000 n +0000693886 00000 n +0000694055 00000 n +0000694202 00000 n +0000694389 00000 n +0000694554 00000 n +0000694725 00000 n +0000694874 00000 n +0000695033 00000 n +0000695181 00000 n +0000695350 00000 n +0000695497 00000 n +0000695666 00000 n +0000695813 00000 n +0000695986 00000 n +0000696137 00000 n +0000696295 00000 n +0000696441 00000 n +0000696606 00000 n +0000696759 00000 n +0000696923 00000 n +0000697076 00000 n +0000697257 00000 n +0000697416 00000 n +0000697584 00000 n +0000697730 00000 n +0000697897 00000 n +0000698042 00000 n +0000698210 00000 n +0000698356 00000 n +0000698516 00000 n +0000698665 00000 n +0000698828 00000 n +0000698969 00000 n +0000699134 00000 n +0000699288 00000 n +0000699454 00000 n +0000699598 00000 n +0000699768 00000 n +0000699916 00000 n +0000700100 00000 n +0000700264 00000 n +0000700441 00000 n +0000700596 00000 n +0000700761 00000 n +0000700904 00000 n +0000701080 00000 n +0000701234 00000 n +0000701403 00000 n +0000701550 00000 n +0000701717 00000 n +0000701862 00000 n +0000702147 00000 n +0000702226 00000 n +0000702390 00000 n +0000702581 00000 n +0000702809 00000 n +0000703026 00000 n +0000703196 00000 n +0000703414 00000 n +0000703660 00000 n +0000703833 00000 n +0000704014 00000 n +0000704279 00000 n +0000704464 00000 n +0000704645 00000 n +0000704902 00000 n +0000705087 00000 n +0000705268 00000 n +0000705525 00000 n +0000705702 00000 n +0000705901 00000 n +0000706096 00000 n +0000706278 00000 n +0000706598 00000 n +0000706783 00000 n +0000706964 00000 n +0000707288 00000 n +0000707478 00000 n +0000707665 00000 n +0000707846 00000 n +0000708130 00000 n +0000708319 00000 n +0000708518 00000 n +0000708714 00000 n +0000708896 00000 n +0000709192 00000 n +0000709381 00000 n +0000709568 00000 n +0000709749 00000 n +0000710129 00000 n +0000710318 00000 n +0000710518 00000 n +0000710699 00000 n +0000711008 00000 n +0000711202 00000 n +0000711392 00000 n +0000711689 00000 n +0000711882 00000 n +0000712085 00000 n +0000712271 00000 n +0000712555 00000 n +0000712744 00000 n +0000712929 00000 n +0000713250 00000 n +0000713444 00000 n +0000713635 00000 n +0000713820 00000 n +0000714204 00000 n +0000714397 00000 n +0000714601 00000 n +0000714786 00000 n +0000715099 00000 n +0000715293 00000 n +0000715497 00000 n +0000715683 00000 n +0000715984 00000 n +0000716178 00000 n +0000716383 00000 n +0000716569 00000 n +0000716879 00000 n +0000717074 00000 n +0000717279 00000 n +0000717453 00000 n +0000717806 00000 n +0000718000 00000 n +0000718204 00000 n +0000718390 00000 n +0000718707 00000 n +0000718902 00000 n +0000719107 00000 n +0000719293 00000 n +0000719658 00000 n +0000719841 00000 n +0000720045 00000 n +0000720245 00000 n +0000720431 00000 n +0000720817 00000 n +0000721011 00000 n +0000721215 00000 n +0000721403 00000 n +0000721589 00000 n +0000721978 00000 n +0000722172 00000 n +0000722376 00000 n +0000722577 00000 n +0000722763 00000 n +0000723045 00000 n +0000723239 00000 n +0000723431 00000 n +0000723617 00000 n +0000723906 00000 n +0000724096 00000 n +0000724282 00000 n +0000724663 00000 n +0000724858 00000 n +0000725062 00000 n +0000725249 00000 n +0000725598 00000 n +0000725781 00000 n +0000725985 00000 n +0000726171 00000 n +0000726533 00000 n +0000726727 00000 n +0000726932 00000 n +0000727133 00000 n +0000727320 00000 n +0000727565 00000 n +0000727744 00000 n +0000727930 00000 n +0000728211 00000 n +0000728401 00000 n +0000728587 00000 n +0000728891 00000 n +0000729085 00000 n +0000729289 00000 n +0000729476 00000 n +0000729704 00000 n +0000729906 00000 n +0000730091 00000 n +0000730316 00000 n +0000730541 00000 n +0000730785 00000 n +0000730977 00000 n +0000731165 00000 n +0000731362 00000 n +0000731571 00000 n +0000731747 00000 n +0000731971 00000 n +0000732160 00000 n +0000732368 00000 n +0000732640 00000 n +0000732873 00000 n +0000733057 00000 n +0000733285 00000 n +0000733489 00000 n +0000733664 00000 n +0000734202 00000 n +0000742070 00000 n +0000742286 00000 n +0000743649 00000 n +0000744718 00000 n +0000752324 00000 n +0000752545 00000 n +0000753908 00000 n +0000754987 00000 n +0000758248 00000 n +0000758474 00000 n +0000759837 00000 n +0000760953 00000 n +0000763156 00000 n +0000763370 00000 n +0000764733 00000 n trailer -<< /Size 750 +<< /Size 749 /Root 2 0 R /Info 1 0 R >> startxref -765983 +765858 %%EOF diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 522086c93..2a7f4c1cc 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -119,6 +119,7 @@ configurations_json json, json_representation json not null, pdp_group varchar(255), + pdp_sub_group varchar(255), context varchar(255), dcae_blueprint_id varchar(255), dcae_deployment_id varchar(255), @@ -140,6 +141,7 @@ configurations_json json, json_representation json not null, pdp_group varchar(255), + pdp_sub_group varchar(255), loop_element_model_id varchar(255), loop_id varchar(255) not null, policy_model_type varchar(255), @@ -156,6 +158,7 @@ updated_timestamp datetime(6) not null, policy_acronym varchar(255), policy_tosca MEDIUMTEXT, + policy_pdp_group json, primary key (policy_model_type, version) ) engine=InnoDB; diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java b/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java index 02e2dd0b6..b3fcb6f18 100644 --- a/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java +++ b/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java @@ -25,17 +25,28 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + import java.util.ArrayList; +import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.builder.ExchangeBuilder; +import org.json.simple.parser.ParseException; import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; +import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelId; import org.onap.clamp.loop.template.PolicyModelsService; +import org.onap.clamp.policy.pdpgroup.PdpGroup; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; @@ -53,11 +64,9 @@ import org.yaml.snakeyaml.Yaml; public class PolicyEngineServices { private final CamelContext camelContext; - private final PolicyModelsService policyModelsSService; + private final PolicyModelsService policyModelsService; private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyEngineServices.class); - private static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); private static int retryInterval = 0; private static int retryLimit = 1; @@ -70,12 +79,13 @@ public class PolicyEngineServices { * @param camelContext Camel context bean * @param clampProperties ClampProperties bean * @param policyModelsSService policyModel repository bean + * @param policyModelsService policyModel service */ @Autowired public PolicyEngineServices(CamelContext camelContext, ClampProperties clampProperties, PolicyModelsService policyModelsSService) { this.camelContext = camelContext; - this.policyModelsSService = policyModelsSService; + this.policyModelsService = policyModelsSService; if (clampProperties.getStringValue(POLICY_RETRY_LIMIT) != null) { retryLimit = Integer.parseInt(clampProperties.getStringValue(POLICY_RETRY_LIMIT)); } @@ -122,7 +132,7 @@ public class PolicyEngineServices { policyTypesList.parallelStream().forEach(policyType -> { Map.Entry policyTypeEntry = (Map.Entry) new ArrayList(policyType.entrySet()).get(0); - policyModelsSService.createPolicyInDbIfNeeded( + policyModelsService.createPolicyInDbIfNeeded( createPolicyModelFromPolicyEngine(policyTypeEntry.getKey(), ((String) ((LinkedHashMap) policyTypeEntry.getValue()).get("version")))); }); @@ -135,7 +145,7 @@ public class PolicyEngineServices { * @return A yaml containing all policy Types and all data types */ public String downloadAllPolicies() { - return callCamelRoute(ExchangeBuilder.anExchange(camelContext).build(), "direct:get-all-policy-models"); + return callCamelRoute(ExchangeBuilder.anExchange(camelContext).build(), "direct:get-all-policy-models", "Get all policies"); } /** @@ -147,16 +157,43 @@ public class PolicyEngineServices { */ public String downloadOnePolicy(String policyType, String policyVersion) { return callCamelRoute(ExchangeBuilder.anExchange(camelContext).withProperty("policyModelName", policyType) - .withProperty("policyModelVersion", policyVersion).build(), "direct:get-policy-model"); + .withProperty("policyModelVersion", policyVersion).build(), "direct:get-policy-model", "Get one policy"); + } + + /** + * This method can be used to download all Pdp Groups data from policy engine. + * + */ + public void downloadPdpGroups() { + String responseBody = callCamelRoute(ExchangeBuilder.anExchange(camelContext).build(), "direct:get-all-pdp-groups", "Get Pdp Groups"); + + if (responseBody == null || responseBody.isEmpty()) { + logger.warn("getPdpGroups returned by policy engine could not be decoded, as it's null or empty"); + return; + } + + JsonObject jsonObj = JsonUtils.GSON.fromJson(responseBody, JsonObject.class); + + List pdpGroupList = new LinkedList<>(); + JsonArray itemsArray = (JsonArray) jsonObj.get("groups"); + + Iterator it = itemsArray.iterator(); + while (it.hasNext()) { + JsonObject item = (JsonObject) it.next(); + PdpGroup pdpGroup = JsonUtils.GSON.fromJson(item.toString(), PdpGroup.class); + pdpGroupList.add(pdpGroup); + } + + policyModelsService.updatePdpGroupInfo(pdpGroupList); } - private String callCamelRoute(Exchange exchange, String camelFlow) { + private String callCamelRoute(Exchange exchange, String camelFlow, String logMsg) { for (int i = 0; i < retryLimit; i++) { Exchange exchangeResponse = camelContext.createProducerTemplate().send(camelFlow, exchange); if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) { return (String) exchangeResponse.getIn().getBody(); } else { - logger.info("Policy query " + retryInterval + "ms before retrying ..."); + logger.info(logMsg + " query " + retryInterval + "ms before retrying ..."); // wait for a while and try to connect to DCAE again try { Thread.sleep(retryInterval); diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java index fd0110c79..7334eceb8 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java @@ -23,6 +23,7 @@ package org.onap.clamp.loop.template; +import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import java.io.Serializable; import java.util.HashSet; @@ -34,6 +35,11 @@ import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.ManyToMany; import javax.persistence.Table; + +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; +import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.util.SemanticVersioning; @@ -44,6 +50,7 @@ import org.onap.clamp.util.SemanticVersioning; @Entity @Table(name = "policy_models") @IdClass(PolicyModelId.class) +@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) public class PolicyModel extends AuditEntity implements Serializable, Comparable { /** @@ -78,6 +85,10 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable @ManyToMany(mappedBy = "policyModels", fetch = FetchType.EAGER) private Set usedByElementModels = new HashSet<>(); + @Type(type = "json") + @Column(columnDefinition = "json", name = "policy_pdp_group") + private JsonObject policyPdpGroup; + /** * usedByElementModels getter. * @@ -87,6 +98,24 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable return usedByElementModels; } + /** + * policyPdpGroup getter. + * + * @return the policyPdpGroup + */ + public JsonObject getPolicyPdpGroup() { + return policyPdpGroup; + } + + /** + * policyPdpGroup setter. + * + * @param policyPdpGroup the policyPdpGroup to set + */ + public void setPolicyPdpGroup(JsonObject policyPdpGroup) { + this.policyPdpGroup = policyPdpGroup; + } + /** * policyModelTosca getter. * diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java index eb83c6608..b38be942e 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java @@ -23,12 +23,14 @@ package org.onap.clamp.loop.template; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.onap.clamp.clds.tosca.ToscaSchemaConstants; import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; +import org.onap.clamp.policy.pdpgroup.PdpGroup; import org.onap.clamp.util.SemanticVersioning; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -47,13 +49,30 @@ public class PolicyModelsService { toscaYamlToJsonConvertor = convertor; } + /** + * Save or Update Policy Model. + * + * @param policyModel + * The policyModel + * @return The Policy Model + */ public PolicyModel saveOrUpdatePolicyModel(PolicyModel policyModel) { return policyModelsRepository.save(policyModel); } /** - * Creates the Tosca Policy Model from a policy tosca file, - * if the same type already exists in database, it increases the version automatically. + * Verify whether Policy Model exist by ID. + * + * @param policyModelId + * The policyModel Id + * @return The flag indicates whether Policy Model exist + */ + public boolean existsById(PolicyModelId policyModelId) { + return policyModelsRepository.existsById(policyModelId); + } + + /** + * Creates or updates the Tosca Policy Model. * * @param policyModelType The policyModeltype in Tosca yaml * @param policyModelTosca The Policymodel object @@ -137,4 +156,30 @@ public class PolicyModelsService { policyModelsRepository.save(policyModel); } } + + /** + * Update the Pdp Group info in Policy Model DB. + * + * @param pdpGroupList The list of Pdp Group info received from Policy Engine + */ + public void updatePdpGroupInfo(List pdpGroupList) { + List policyModelList = policyModelsRepository.findAll(); + for (PolicyModel policyModel : policyModelList) { + JsonArray supportedPdpGroups = new JsonArray(); + for (PdpGroup pdpGroup : pdpGroupList) { + JsonObject supportedPdpGroup = pdpGroup.getSupportedSubgroups(policyModel.getPolicyModelType(), + policyModel.getVersion()); + if (supportedPdpGroup != null) { + supportedPdpGroups.add(supportedPdpGroup); + } + } + + if (supportedPdpGroups.size() > 0) { + JsonObject supportedPdpJson = new JsonObject (); + supportedPdpJson.add("supportedPdpGroups", supportedPdpGroups); + policyModel.setPolicyPdpGroup(supportedPdpJson); + policyModelsRepository.save(policyModel); + } + } + } } diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java index e1c08eeaa..cce9e567f 100644 --- a/src/main/java/org/onap/clamp/policy/Policy.java +++ b/src/main/java/org/onap/clamp/policy/Policy.java @@ -68,6 +68,10 @@ public abstract class Policy extends AuditEntity { @Column(name = "pdp_group") private String pdpGroup; + @Expose + @Column(name = "pdp_sub_group") + private String pdpSubGroup; + public abstract String createPolicyPayload() throws UnsupportedEncodingException; /** @@ -154,6 +158,24 @@ public abstract class Policy extends AuditEntity { this.pdpGroup = pdpGroup; } + /** + * pdpSubGroup getter. + * + * @return the pdpSubGroup + */ + public String getPdpSubGroup() { + return pdpSubGroup; + } + + /** + * pdpSubGroup setter. + * + * @param pdpSubGroup the pdpSubGroup to set + */ + public void setPdpSubGroup(String pdpSubGroup) { + this.pdpSubGroup = pdpSubGroup; + } + /** * Generate the policy name. * diff --git a/src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java b/src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java index bd20eccb6..ac054d8af 100644 --- a/src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java +++ b/src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java @@ -28,6 +28,7 @@ import com.att.eelf.configuration.EELFManager; import java.time.Instant; +import org.json.simple.parser.ParseException; import org.onap.clamp.clds.client.PolicyEngineServices; import org.onap.clamp.loop.template.PolicyModelsRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -70,5 +71,8 @@ public class PolicyEngineController { return lastInstantExecuted; } - + @Scheduled(fixedRate = 300000) + public synchronized void downloadPdpGroups() throws ParseException { + policyEngineServices.downloadPdpGroups(); + } } diff --git a/src/main/java/org/onap/clamp/policy/pdpgroup/PdpGroup.java b/src/main/java/org/onap/clamp/policy/pdpgroup/PdpGroup.java new file mode 100644 index 000000000..a3cf4e053 --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/pdpgroup/PdpGroup.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.pdpgroup; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.annotations.Expose; + +import java.util.List; + +/** + * This class maps the get Pdp Group response to a nice pojo. + */ +public class PdpGroup { + + @Expose + private String name; + + @Expose + private String pdpGroupState; + + @Expose + private List pdpSubgroups; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPdpGroupState() { + return pdpGroupState; + } + + public void setPdpGroupState(String pdpGroupState) { + this.pdpGroupState = pdpGroupState; + } + + public List getPdpSubgroups() { + return pdpSubgroups; + } + + public void setPdpSubgroups(List pdpSubgroups) { + this.pdpSubgroups = pdpSubgroups; + } + + /** + * Get supported subGroups based on the defined policy type and version. + * @param policyType The policy type + * @param version The version + * @return The supported subGroup list in Json format + */ + public JsonObject getSupportedSubgroups(String policyType, String version) { + if (!pdpGroupState.equalsIgnoreCase("ACTIVE")) { + return null; + } + JsonArray supportedSubgroups = new JsonArray(); + for (PdpSubgroup subGroup : pdpSubgroups) { + if (subGroup.getSupportedPolicyTypes().contains(new PolicyModelKey(policyType, version))) { + supportedSubgroups.add(subGroup.getPdpType()); + } + } + if (supportedSubgroups.size() > 0) { + JsonObject supportedPdpGroup = new JsonObject(); + supportedPdpGroup.add(this.name, supportedSubgroups); + return supportedPdpGroup; + } + return null; + } +} diff --git a/src/main/java/org/onap/clamp/policy/pdpgroup/PdpSubgroup.java b/src/main/java/org/onap/clamp/policy/pdpgroup/PdpSubgroup.java new file mode 100644 index 000000000..28de79abf --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/pdpgroup/PdpSubgroup.java @@ -0,0 +1,56 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.pdpgroup; + +import com.google.gson.annotations.Expose; +import java.util.List; + +/** + * This class maps the Policy get PDP Group response to a nice pojo. + */ +public class PdpSubgroup { + + @Expose + private String pdpType; + + @Expose + private List supportedPolicyTypes; + + public String getPdpType() { + return pdpType; + } + + public void setPdpType(String pdpType) { + this.pdpType = pdpType; + } + + public List getSupportedPolicyTypes() { + return supportedPolicyTypes; + } + + public void setSupportedPolicyTypes(List supportedPolicyTypes) { + this.supportedPolicyTypes = supportedPolicyTypes; + } + +} diff --git a/src/main/java/org/onap/clamp/policy/pdpgroup/PolicyModelKey.java b/src/main/java/org/onap/clamp/policy/pdpgroup/PolicyModelKey.java new file mode 100644 index 000000000..707b3bd2f --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/pdpgroup/PolicyModelKey.java @@ -0,0 +1,126 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.pdpgroup; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +public class PolicyModelKey implements Serializable { + + /** + * The serial version ID. + */ + private static final long serialVersionUID = 3307410842013230886L; + + @Expose + private String name; + + @Expose + private String version; + + /** + * Constructor. + */ + public PolicyModelKey(String name, String version) { + this.name = name; + this.version = version; + } + + /** + * name getter. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * name setter. + * + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * version getter. + * + * @return the version + */ + public String getVersion() { + return version; + } + + /** + * version setter. + * + * @param version the version to set + */ + public void setVersion(String version) { + this.version = version; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((version == null) ? 0 : version.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + PolicyModelKey other = (PolicyModelKey) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + if (!name.matches(other.name)) { + return false; + } + } + if (version == null) { + if (other.version != null) { + return false; + } + } else if (!version.equals(other.version)) { + return false; + } + return true; + } +} diff --git a/src/main/resources/META-INF/resources/swagger.html b/src/main/resources/META-INF/resources/swagger.html index 16938529b..0138d9a30 100644 --- a/src/main/resources/META-INF/resources/swagger.html +++ b/src/main/resources/META-INF/resources/swagger.html @@ -444,25 +444,25 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

  • 2. Paths
      -
    • 2.1. GET /v1/healthcheck +
    • 2.1. GET /v1/healthcheck
    • -
    • 2.2. GET /v1/user/getUser +
    • 2.2. GET /v1/user/getUser
    • -
    • 2.3. GET /v2/dictionary +
    • 2.3. GET /v2/dictionary
    • -
    • 2.4. PUT /v2/dictionary +
    • 2.4. PUT /v2/dictionary
    • -
    • 2.8. DELETE /v2/dictionary/{name} +
    • 2.8. DELETE /v2/dictionary/{name}
    • -
    • 2.10. PUT /v2/loop/delete/{loopName} +
    • 2.10. PUT /v2/loop/delete/{loopName}
    • -
    • 2.11. PUT /v2/loop/deploy/{loopName} +
    • 2.11. PUT /v2/loop/deploy/{loopName}
    • -
    • 2.12. GET /v2/loop/getAllNames +
    • 2.12. GET /v2/loop/getAllNames
    • -
    • 2.13. GET /v2/loop/getstatus/{loopName} +
    • 2.13. GET /v2/loop/getstatus/{loopName}
    • -
    • 2.14. PUT /v2/loop/refreshOpPolicyJsonSchema/{loopName} +
    • 2.14. PUT /v2/loop/refreshOpPolicyJsonSchema/{loopName}
    • -
    • 2.15. PUT /v2/loop/restart/{loopName} +
    • 2.15. PUT /v2/loop/restart/{loopName}
    • -
    • 2.16. PUT /v2/loop/stop/{loopName} +
    • 2.16. PUT /v2/loop/stop/{loopName}
    • -
    • 2.17. PUT /v2/loop/submit/{loopName} +
    • 2.17. PUT /v2/loop/submit/{loopName}
    • -
    • 2.18. GET /v2/loop/svgRepresentation/{loopName} +
    • 2.18. GET /v2/loop/svgRepresentation/{loopName}
    • -
    • 2.19. PUT /v2/loop/undeploy/{loopName} +
    • 2.19. PUT /v2/loop/undeploy/{loopName}
    • -
    • 2.20. POST /v2/loop/updateGlobalProperties/{loopName} +
    • 2.20. POST /v2/loop/updateGlobalProperties/{loopName}
    • -
    • 2.21. POST /v2/loop/updateMicroservicePolicy/{loopName} +
    • 2.21. POST /v2/loop/updateMicroservicePolicy/{loopName}
    • -
    • 2.22. POST /v2/loop/updateOperationalPolicies/{loopName} +
    • 2.22. POST /v2/loop/updateOperationalPolicies/{loopName}
    • -
    • 2.23. GET /v2/loop/{loopName} +
    • 2.23. GET /v2/loop/{loopName}
    • -
    • 2.24. GET /v2/policyToscaModels +
    • 2.24. GET /v2/policyToscaModels
    • -
    • 2.27. PUT /v2/policyToscaModels/{policyModelType} +
    • 2.27. PUT /v2/policyToscaModels/{policyModelType}
    • -
    • 2.28. GET /v2/templates +
    • 2.28. GET /v2/templates
      • 2.28.1. Responses
      • 2.28.2. Produces
      • @@ -692,7 +692,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

        1.2. URI scheme

        -

        Host : localhost:32977
        +

        Host : localhost:33631
        BasePath : /restservices/clds/
        Schemes : HTTP

        @@ -703,7 +703,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

        2. Paths

        -

        2.1. GET /v1/healthcheck

        +

        2.1. GET /v1/healthcheck

        2.1.1. Responses

        @@ -740,7 +740,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -774,7 +774,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -811,7 +811,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1060,7 +1060,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1184,7 +1184,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1233,7 +1233,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1295,7 +1295,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1332,7 +1332,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1394,7 +1394,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1456,7 +1456,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1518,7 +1518,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1580,7 +1580,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1642,7 +1642,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1704,7 +1704,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1766,7 +1766,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1844,7 +1844,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1922,7 +1922,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2000,7 +2000,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2062,7 +2062,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2223,7 +2223,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2301,7 +2301,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -3758,7 +3758,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml index c28e45435..ce37fe1d6 100644 --- a/src/main/resources/clds/camel/routes/policy-flows.xml +++ b/src/main/resources/clds/camel/routes/policy-flows.xml @@ -175,7 +175,7 @@ message="Endpoint to get policy model: {{clamp.config.policy.pap.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelName]}/versions/${exchangeProperty[policyModelVersion]}"> - + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java index 152648712..5eca90c7f 100644 --- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java @@ -46,6 +46,7 @@ import org.onap.clamp.policy.operational.OperationalPolicy; import org.onap.clamp.policy.operational.OperationalPolicyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Commit; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @@ -148,6 +149,7 @@ public class LoopServiceTestItCase { @Test @Transactional + //@Commit public void shouldCreateNewMicroservicePolicyAndUpdateJsonRepresentationOfOldOne() { // given saveTestLoopToDb(); diff --git a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java index abeecd1b2..f8aadbad5 100644 --- a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java +++ b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java @@ -25,6 +25,7 @@ package org.onap.clamp.loop; import static org.assertj.core.api.Assertions.assertThat; +import java.util.LinkedList; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; @@ -33,14 +34,20 @@ import javax.transaction.Transactional; import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; +import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.loop.template.PolicyModelId; import org.onap.clamp.loop.template.PolicyModelsRepository; import org.onap.clamp.loop.template.PolicyModelsService; +import org.onap.clamp.policy.pdpgroup.PdpGroup; +import org.onap.clamp.policy.pdpgroup.PdpSubgroup; +import org.onap.clamp.policy.pdpgroup.PolicyModelKey; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; +import com.google.gson.JsonObject; + @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class PolicyModelServiceItCase { @@ -167,4 +174,71 @@ public class PolicyModelServiceItCase { assertThat(listToCheck.get(1)).isEqualByComparingTo(policyModel1); assertThat(listToCheck.get(2)).isEqualByComparingTo(policyModel3); } + + @Test + @Transactional + public void shouldAddPdpGroupInfo() { + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", POLICY_MODEL_TYPE_1_VERSION_1, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", POLICY_MODEL_TYPE_2_VERSION_2, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + PolicyModel policyModel3 = getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", POLICY_MODEL_TYPE_3_VERSION_1, "TEST", + "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel3); + + + PolicyModelKey type1 = new PolicyModelKey("org.onap.testos", "1.0.0"); + PolicyModelKey type2 = new PolicyModelKey("org.onap.testos2", "2.0.0"); + + PdpSubgroup pdpSubgroup1 = new PdpSubgroup(); + pdpSubgroup1.setPdpType("subGroup1"); + List pdpTypeList = new LinkedList(); + pdpTypeList.add(type1); + pdpTypeList.add(type2); + pdpSubgroup1.setSupportedPolicyTypes(pdpTypeList); + + PolicyModelKey type3 = new PolicyModelKey("org.onap.testos3", "2.0.0"); + PdpSubgroup pdpSubgroup2 = new PdpSubgroup(); + pdpSubgroup2.setPdpType("subGroup2"); + List pdpTypeList2 = new LinkedList(); + pdpTypeList2.add(type2); + pdpTypeList2.add(type3); + pdpSubgroup2.setSupportedPolicyTypes(pdpTypeList2); + + List pdpSubgroupList = new LinkedList(); + pdpSubgroupList.add(pdpSubgroup1); + + PdpGroup pdpGroup1 = new PdpGroup(); + pdpGroup1.setName("pdpGroup1"); + pdpGroup1.setPdpGroupState("ACTIVE"); + pdpGroup1.setPdpSubgroups(pdpSubgroupList); + + List pdpSubgroupList2 = new LinkedList(); + pdpSubgroupList2.add(pdpSubgroup1); + pdpSubgroupList2.add(pdpSubgroup2); + PdpGroup pdpGroup2 = new PdpGroup(); + pdpGroup2.setName("pdpGroup2"); + pdpGroup2.setPdpGroupState("ACTIVE"); + pdpGroup2.setPdpSubgroups(pdpSubgroupList2); + + List pdpGroupList = new LinkedList(); + pdpGroupList.add(pdpGroup1); + pdpGroupList.add(pdpGroup2); + policyModelsService.updatePdpGroupInfo(pdpGroupList); + + JsonObject res1 = policyModelsService.getPolicyModel("org.onap.testos", "1.0.0").getPolicyPdpGroup(); + String expectedRes1 = "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]},{\"pdpGroup2\":[\"subGroup1\"]}]}"; + JsonObject expectedJson1 = JsonUtils.GSON.fromJson(expectedRes1, JsonObject.class); + assertThat(res1).isEqualTo(expectedJson1); + + JsonObject res2 = policyModelsService.getPolicyModel("org.onap.testos2", "2.0.0").getPolicyPdpGroup(); + String expectedRes2 = "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]},{\"pdpGroup2\":[\"subGroup1\",\"subGroup2\"]}]}"; + JsonObject expectedJson2 = JsonUtils.GSON.fromJson(expectedRes2, JsonObject.class); + assertThat(res2).isEqualTo(expectedJson2); + + JsonObject res3 = policyModelsService.getPolicyModel("org.onap.testos3", "1.0.0").getPolicyPdpGroup(); + assertThat(res3).isNull(); + } } diff --git a/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java b/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java index b42e15367..3f502ff78 100644 --- a/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java +++ b/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java @@ -24,15 +24,19 @@ package org.onap.clamp.policy.downloader; import static org.assertj.core.api.Assertions.assertThat; +import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; import java.io.IOException; import java.time.Instant; import java.util.List; import javax.transaction.Transactional; +import org.json.simple.parser.ParseException; import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.Application; +import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelId; import org.onap.clamp.loop.template.PolicyModelsRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -76,4 +80,30 @@ public class PolicyEngineControllerTestItCase { assertThat(firstExecution).isBefore(secondExecution); } + @Test + @Transactional + public void downloadPdpGroupsTest() throws JsonSyntaxException, IOException, InterruptedException, ParseException { + PolicyModel policyModel1 = new PolicyModel("onap.policies.monitoring.test", null, "1.0.0"); + policyModelsRepository.saveAndFlush(policyModel1); + PolicyModel policyModel2 = new PolicyModel("onap.policies.controlloop.Operational", null, "1.0.0"); + policyModelsRepository.saveAndFlush(policyModel2); + + policyController.downloadPdpGroups(); + + List policyModelsList = policyModelsRepository.findAll(); + assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(2); + + PolicyModel policy1 = policyModelsRepository + .getOne(new PolicyModelId("onap.policies.monitoring.test", "1.0.0")); + PolicyModel policy2 = policyModelsRepository + .getOne(new PolicyModelId("onap.policies.controlloop.Operational", "1.0.0")); + + String expectedRes1 = "{\"supportedPdpGroups\":[{\"monitoring\":[\"xacml\"]}]}"; + JsonObject expectedJson1 = JsonUtils.GSON.fromJson(expectedRes1, JsonObject.class); + assertThat(policy1.getPolicyPdpGroup()).isEqualTo(expectedJson1); + String expectedRes2 = "{\"supportedPdpGroups\":[{\"controlloop\":[\"apex\",\"drools\"]}]}"; + JsonObject expectedJson2 = JsonUtils.GSON.fromJson(expectedRes2, JsonObject.class); + assertThat(policy2.getPolicyPdpGroup()).isEqualTo(expectedJson2); + + } } diff --git a/src/test/java/org/onap/clamp/policy/pdpgroup/PdpGroupTest.java b/src/test/java/org/onap/clamp/policy/pdpgroup/PdpGroupTest.java new file mode 100644 index 000000000..b6f7c5491 --- /dev/null +++ b/src/test/java/org/onap/clamp/policy/pdpgroup/PdpGroupTest.java @@ -0,0 +1,88 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.policy.pdpgroup; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; + +import org.junit.Test; + +public class PdpGroupTest { + + + @Test + public void testGetSupportedSubgroups() throws IOException { + PdpGroup pdpGroup1 = new PdpGroup(); + pdpGroup1.setName("pdpGroup1"); + pdpGroup1.setPdpGroupState("INACTIVE"); + assertThat(pdpGroup1.getSupportedSubgroups("test", "1.0.0")).isNull(); + + PdpGroup pdpGroup2 = new PdpGroup(); + pdpGroup2.setName("pdpGroup2"); + pdpGroup2.setPdpGroupState("ACTIVE"); + + PolicyModelKey type1 = new PolicyModelKey("type1", "1.0.0"); + PolicyModelKey type2 = new PolicyModelKey("type2", "2.0.0"); + + PdpSubgroup pdpSubgroup1 = new PdpSubgroup(); + pdpSubgroup1.setPdpType("subGroup1"); + List pdpTypeList = new LinkedList(); + pdpTypeList.add(type1); + pdpTypeList.add(type2); + pdpSubgroup1.setSupportedPolicyTypes(pdpTypeList); + + PolicyModelKey type3 = new PolicyModelKey("type3", "1.0.0"); + PdpSubgroup pdpSubgroup2 = new PdpSubgroup(); + pdpSubgroup2.setPdpType("subGroup2"); + List pdpTypeList2 = new LinkedList(); + pdpTypeList2.add(type2); + pdpTypeList2.add(type3); + pdpSubgroup2.setSupportedPolicyTypes(pdpTypeList2); + + List pdpSubgroupList = new LinkedList(); + pdpSubgroupList.add(pdpSubgroup1); + pdpSubgroupList.add(pdpSubgroup2); + pdpGroup2.setPdpSubgroups(pdpSubgroupList); + + JsonObject res1 = pdpGroup2.getSupportedSubgroups("type2", "2.0.0"); + assertThat(res1.get("pdpGroup2")).isNotNull(); + JsonArray resSubList = res1.getAsJsonArray("pdpGroup2"); + assertThat(resSubList.size()).isEqualTo(2); + assertThat(resSubList.toString().contains("subGroup1")).isTrue(); + assertThat(resSubList.toString().contains("subGroup2")).isTrue(); + + JsonObject res2 = pdpGroup2.getSupportedSubgroups("type1", "1.0.0"); + assertThat(res2.get("pdpGroup2")).isNotNull(); + JsonArray resSubList2 = res2.getAsJsonArray("pdpGroup2"); + assertThat(resSubList2.size()).isEqualTo(1); + + assertThat(pdpGroup2.getSupportedSubgroups("type3", "1.0.1")).isNull(); + } +} diff --git a/src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.file new file mode 100644 index 000000000..6b6b372cf --- /dev/null +++ b/src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.file @@ -0,0 +1,76 @@ +{ + "groups": [ + { + "description": "This group should be used for managing all control loop related policies and pdps", + "name": "controlloop", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "pdpInstances": [], + "pdpType": "apex", + "policies": [], + "properties": {}, + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.Operational", + "version": "1.0.0" + } + ] + }, + { + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "pdpInstances": [], + "pdpType": "drools", + "policies": [], + "properties": {}, + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.Operational", + "version": "1.0.0" + } + ] + }, + { + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "pdpInstances": [], + "pdpType": "xacml", + "policies": [], + "properties": {}, + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.Guard", + "version": "1.0.0" + } + ] + } + ], + "properties": {} + }, + { + "description": "This group should be used for managing all monitoring related policies and pdps", + "name": "monitoring", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "pdpInstances": [], + "pdpType": "xacml", + "policies": [], + "properties": {}, + "supportedPolicyTypes": [ + { + "name": "onap.policies.monitoring.*", + "version": "1.0.0" + } + ] + } + ], + "properties": {} + } + ] +} diff --git a/src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.header b/src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.header new file mode 100644 index 000000000..6a280d972 --- /dev/null +++ b/src/test/resources/http-cache/example/policy/pap/v1/pdps?connectionTimeToLive=5000/.header @@ -0,0 +1 @@ +{"Transfer-Encoding": "chunked", "Set-Cookie": "JSESSIONID=158qxkdtdobkd1umr3ikkgrmlx;Path=/", "Expires": "Thu, 01 Jan 1970 00:00:00 GMT", "Server": "Jetty(9.3.21.v20170918)", "Content-Type": "application/json", "X-ECOMP-RequestID": "e2ddb3c8-994f-47df-b4dc-097d4fb55c08"} \ No newline at end of file diff --git a/src/test/resources/http-cache/third_party_proxy.py b/src/test/resources/http-cache/third_party_proxy.py index 32f7faf4e..79e152ebb 100755 --- a/src/test/resources/http-cache/third_party_proxy.py +++ b/src/test/resources/http-cache/third_party_proxy.py @@ -297,6 +297,7 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): self.send_response(404) self.end_headers() self.wfile.write('404 Not found, no remote HOST specified on the emulator !!!') + print("HOST value is: %s " % (options.proxy)) return "404 Not found, no remote HOST specified on the emulator !!!" url = '%s%s' % (HOST, self.path) @@ -315,6 +316,7 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): return response.content else: print("Request for data currently present in cache: %s" % (cached_file_folder,)) + print("HOST value is: %s " % (HOST)) self._send_content(cached_file_header, cached_file_content) -- cgit 1.2.3-korg From 897a3e004a858ef68d989dad15dde91a69e151a5 Mon Sep 17 00:00:00 2001 From: sebdet Date: Fri, 28 Feb 2020 06:03:51 -0800 Subject: Change json representation in op policy Change the json generation for an operational policy instance and update all emulator response for all policy types Issue-ID: CLAMP-653 Change-Id: I68525be3d5bfbf5dd7a4bcf6d59853df07fd4dd9 Signed-off-by: sebdet --- docs/swagger/swagger.json | 397 +- docs/swagger/swagger.pdf | 4970 ++++++++++---------- extra/sql/bulkload/create-tables.sql | 12 +- extra/sql/dump/test-data.sql | 32 +- .../onap/clamp/clds/config/ClampProperties.java | 36 - .../clamp/clds/config/LegacyOperationalPolicy.java | 48 + src/main/java/org/onap/clamp/loop/Loop.java | 14 +- .../java/org/onap/clamp/loop/LoopController.java | 6 +- src/main/java/org/onap/clamp/policy/Policy.java | 100 +- .../policy/microservice/MicroServicePolicy.java | 81 +- .../policy/operational/OperationalPolicy.java | 81 +- src/main/resources/META-INF/resources/swagger.html | 95 +- src/main/resources/application-noaaf.properties | 41 +- src/main/resources/application.properties | 35 +- .../resources/clds/camel/rest/clamp-api-v2.xml | 55 +- .../resources/clds/camel/routes/policy-flows.xml | 96 + .../it/config/CldsReferencePropertiesItCase.java | 48 +- .../org/onap/clamp/loop/CsarInstallerItCase.java | 12 +- .../onap/clamp/loop/LoopRepositoriesItCase.java | 13 +- .../java/org/onap/clamp/loop/LoopToJsonTest.java | 4 +- .../org/onap/clamp/loop/PolicyComponentTest.java | 76 +- .../onap/clamp/loop/PolicyModelServiceItCase.java | 4 +- .../PolicyEngineControllerTestItCase.java | 9 +- .../microservice/OperationalPolicyPayloadTest.java | 6 +- src/test/resources/application.properties | 34 - .../.file | 29 +- .../1.0.0?connectionTimeToLive=5000/.file | 158 - .../1.0.0?connectionTimeToLive=5000/.header | 1 - .../1.0.0?connectionTimeToLive=5000/.file | 158 - .../1.0.0?connectionTimeToLive=5000/.header | 1 - .../1.0.0?connectionTimeToLive=5000/.file | 192 +- .../1.0.0?connectionTimeToLive=5000/.file | 202 +- .../1.0.0?connectionTimeToLive=5000/.file | 196 +- .../1.0.0?connectionTimeToLive=5000/.file | 158 - .../1.0.0?connectionTimeToLive=5000/.header | 1 - .../1.0.0?connectionTimeToLive=5000/.file | 158 - .../1.0.0?connectionTimeToLive=5000/.header | 1 - .../1.0.0?connectionTimeToLive=5000/.file | 311 +- .../tosca/operational-policy-payload.json | 2 +- .../tosca/operational-policy-payload.yaml | 4 +- .../loop_viewer/svg/LoopComponentConverter.js | 6 +- 41 files changed, 3495 insertions(+), 4388 deletions(-) create mode 100644 src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicy.java delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.file delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.header delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.file delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.header delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.file delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.header delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.file delete mode 100644 src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.header (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 64b43ab8c..d9a0b8279 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -4,13 +4,13 @@ "version" : "5.0.0-SNAPSHOT", "title" : "Clamp Rest API" }, - "host" : "localhost:37295", + "host" : "localhost:39099", "basePath" : "/restservices/clds/", "schemes" : [ "http" ], "paths" : { "/v2/dictionary" : { "get" : { - "operationId" : "route18", + "operationId" : "route49", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -20,11 +20,11 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route18" + "x-camelContextId" : "camel-2", + "x-routeId" : "route49" }, "put" : { - "operationId" : "route20", + "operationId" : "route51", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -43,8 +43,8 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route20" + "x-camelContextId" : "camel-2", + "x-routeId" : "route51" } }, "/v2/dictionary/{dictionaryName}" : { @@ -64,7 +64,7 @@ } } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null } }, @@ -93,11 +93,11 @@ } } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null }, "delete" : { - "operationId" : "route22", + "operationId" : "route53", "produces" : [ "application/json" ], "parameters" : [ { "name" : "name", @@ -108,8 +108,8 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route22" + "x-camelContextId" : "camel-2", + "x-routeId" : "route53" } }, "/v2/dictionary/{name}/elements/{shortName}" : { @@ -129,7 +129,7 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null } }, @@ -147,13 +147,13 @@ } } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null } }, "/v2/loop/{loopName}" : { "get" : { - "operationId" : "route3", + "operationId" : "route34", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -169,13 +169,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route3" + "x-camelContextId" : "camel-2", + "x-routeId" : "route34" } }, "/v2/loop/delete/{loopName}" : { "put" : { - "operationId" : "route14", + "operationId" : "route45", "parameters" : [ { "name" : "loopName", "in" : "path", @@ -185,13 +185,13 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route14" + "x-camelContextId" : "camel-2", + "x-routeId" : "route45" } }, "/v2/loop/deploy/{loopName}" : { "put" : { - "operationId" : "route8", + "operationId" : "route39", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -207,13 +207,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route8" + "x-camelContextId" : "camel-2", + "x-routeId" : "route39" } }, "/v2/loop/getAllNames" : { "get" : { - "operationId" : "route2", + "operationId" : "route33", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -226,13 +226,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route2" + "x-camelContextId" : "camel-2", + "x-routeId" : "route33" } }, "/v2/loop/getstatus/{loopName}" : { "get" : { - "operationId" : "route15", + "operationId" : "route46", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -248,13 +248,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route15" + "x-camelContextId" : "camel-2", + "x-routeId" : "route46" } }, "/v2/loop/refreshOpPolicyJsonSchema/{loopName}" : { "put" : { - "operationId" : "route9", + "operationId" : "route40", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -270,13 +270,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route9" + "x-camelContextId" : "camel-2", + "x-routeId" : "route40" } }, "/v2/loop/restart/{loopName}" : { "put" : { - "operationId" : "route12", + "operationId" : "route43", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -292,13 +292,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route12" + "x-camelContextId" : "camel-2", + "x-routeId" : "route43" } }, "/v2/loop/stop/{loopName}" : { "put" : { - "operationId" : "route11", + "operationId" : "route42", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -314,13 +314,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route11" + "x-camelContextId" : "camel-2", + "x-routeId" : "route42" } }, "/v2/loop/submit/{loopName}" : { "put" : { - "operationId" : "route13", + "operationId" : "route44", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -336,13 +336,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route13" + "x-camelContextId" : "camel-2", + "x-routeId" : "route44" } }, "/v2/loop/svgRepresentation/{loopName}" : { "get" : { - "operationId" : "route4", + "operationId" : "route35", "produces" : [ "application/xml" ], "parameters" : [ { "name" : "loopName", @@ -358,13 +358,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route4" + "x-camelContextId" : "camel-2", + "x-routeId" : "route35" } }, "/v2/loop/undeploy/{loopName}" : { "put" : { - "operationId" : "route10", + "operationId" : "route41", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -380,13 +380,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route10" + "x-camelContextId" : "camel-2", + "x-routeId" : "route41" } }, "/v2/loop/updateGlobalProperties/{loopName}" : { "post" : { - "operationId" : "route5", + "operationId" : "route36", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -410,13 +410,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route5" + "x-camelContextId" : "camel-2", + "x-routeId" : "route36" } }, "/v2/loop/updateMicroservicePolicy/{loopName}" : { "post" : { - "operationId" : "route7", + "operationId" : "route38", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -440,13 +440,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route7" + "x-camelContextId" : "camel-2", + "x-routeId" : "route38" } }, "/v2/loop/updateOperationalPolicies/{loopName}" : { "post" : { - "operationId" : "route6", + "operationId" : "route37", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -470,13 +470,13 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route6" + "x-camelContextId" : "camel-2", + "x-routeId" : "route37" } }, "/v2/policyToscaModels" : { "get" : { - "operationId" : "route25", + "operationId" : "route56", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -486,8 +486,8 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route25" + "x-camelContextId" : "camel-2", + "x-routeId" : "route56" } }, "/v2/policyToscaModels/{policyModelType}" : { @@ -507,11 +507,11 @@ } } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null }, "put" : { - "operationId" : "route26", + "operationId" : "route57", "consumes" : [ "plain/text" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -535,8 +535,8 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route26" + "x-camelContextId" : "camel-2", + "x-routeId" : "route57" } }, "/v2/policyToscaModels/yaml/{policyModelType}" : { @@ -556,13 +556,13 @@ } } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null } }, "/v2/templates" : { "get" : { - "operationId" : "route29", + "operationId" : "route60", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -572,8 +572,8 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route29" + "x-camelContextId" : "camel-2", + "x-routeId" : "route60" } }, "/v2/templates/{templateName}" : { @@ -593,7 +593,7 @@ } } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null } }, @@ -611,13 +611,13 @@ } } }, - "x-camelContextId" : "camel-1", + "x-camelContextId" : "camel-2", "x-routeId" : null } }, "/v1/healthcheck" : { "get" : { - "operationId" : "route30", + "operationId" : "route61", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -627,19 +627,19 @@ } } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route30" + "x-camelContextId" : "camel-2", + "x-routeId" : "route61" } }, "/v1/user/getUser" : { "get" : { - "operationId" : "route31", + "operationId" : "route62", "produces" : [ "text/plain" ], "responses" : { "200" : { } }, - "x-camelContextId" : "camel-1", - "x-routeId" : "route31" + "x-camelContextId" : "camel-2", + "x-routeId" : "route62" } } }, @@ -803,34 +803,31 @@ "JsonPrimitive" : { "type" : "object", "properties" : { - "asBoolean" : { - "type" : "boolean" + "asInt" : { + "type" : "integer", + "format" : "int32" }, - "number" : { + "asDouble" : { + "type" : "number", + "format" : "double" + }, + "asLong" : { + "type" : "integer", + "format" : "int64" + }, + "boolean" : { "type" : "boolean" }, - "asString" : { - "type" : "string" + "asBoolean" : { + "type" : "boolean" }, "asNumber" : { "$ref" : "#/definitions/Number" }, - "asDouble" : { - "type" : "number", - "format" : "double" - }, "asFloat" : { "type" : "number", "format" : "float" }, - "asLong" : { - "type" : "integer", - "format" : "int64" - }, - "asInt" : { - "type" : "integer", - "format" : "int32" - }, "asByte" : { "type" : "string", "format" : "byte" @@ -848,22 +845,28 @@ "type" : "integer", "format" : "int32" }, - "boolean" : { + "number" : { "type" : "boolean" }, + "asString" : { + "type" : "string" + }, "string" : { "type" : "boolean" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" + }, + "jsonObject" : { + "type" : "boolean" }, "asJsonObject" : { "$ref" : "#/definitions/JsonObject" }, - "jsonArray" : { - "type" : "boolean" + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" }, - "jsonObject" : { + "jsonArray" : { "type" : "boolean" }, "jsonPrimitive" : { @@ -874,9 +877,6 @@ }, "asJsonPrimitive" : { "$ref" : "#/definitions/JsonPrimitive" - }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" } } }, @@ -912,6 +912,9 @@ "pdpSubGroup" : { "type" : "string" }, + "policyModel" : { + "$ref" : "#/definitions/PolicyModel" + }, "name" : { "type" : "string" }, @@ -939,9 +942,6 @@ }, "dcaeBlueprintId" : { "type" : "string" - }, - "policyModel" : { - "$ref" : "#/definitions/PolicyModel" } }, "x-className" : { @@ -952,55 +952,31 @@ "JsonObject" : { "type" : "object", "properties" : { - "asBoolean" : { - "type" : "boolean" - }, - "asString" : { - "type" : "string" - }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" - }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" - }, - "jsonArray" : { - "type" : "boolean" + "asInt" : { + "type" : "integer", + "format" : "int32" }, - "jsonObject" : { - "type" : "boolean" + "asDouble" : { + "type" : "number", + "format" : "double" }, - "jsonPrimitive" : { - "type" : "boolean" + "asLong" : { + "type" : "integer", + "format" : "int64" }, - "jsonNull" : { + "asBoolean" : { "type" : "boolean" }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" }, "asNumber" : { "$ref" : "#/definitions/Number" }, - "asDouble" : { - "type" : "number", - "format" : "double" - }, "asFloat" : { "type" : "number", "format" : "float" }, - "asLong" : { - "type" : "integer", - "format" : "int64" - }, - "asInt" : { - "type" : "integer", - "format" : "int32" - }, "asByte" : { "type" : "string", "format" : "byte" @@ -1017,6 +993,30 @@ "asShort" : { "type" : "integer", "format" : "int32" + }, + "jsonObject" : { + "type" : "boolean" + }, + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" + }, + "asString" : { + "type" : "string" + }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "jsonArray" : { + "type" : "boolean" + }, + "jsonPrimitive" : { + "type" : "boolean" + }, + "jsonNull" : { + "type" : "boolean" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" } }, "x-className" : { @@ -1136,69 +1136,48 @@ "pdpSubGroup" : { "type" : "string" }, + "policyModel" : { + "$ref" : "#/definitions/PolicyModel" + }, "name" : { "type" : "string" }, "loop" : { "$ref" : "#/definitions/Loop" }, - "policyModel" : { - "$ref" : "#/definitions/PolicyModel" + "legacy" : { + "type" : "boolean" } } }, "JsonNull" : { "type" : "object", "properties" : { - "asBoolean" : { - "type" : "boolean" - }, - "asString" : { - "type" : "string" - }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" - }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" - }, - "jsonArray" : { - "type" : "boolean" + "asInt" : { + "type" : "integer", + "format" : "int32" }, - "jsonObject" : { - "type" : "boolean" + "asDouble" : { + "type" : "number", + "format" : "double" }, - "jsonPrimitive" : { - "type" : "boolean" + "asLong" : { + "type" : "integer", + "format" : "int64" }, - "jsonNull" : { + "asBoolean" : { "type" : "boolean" }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" }, "asNumber" : { "$ref" : "#/definitions/Number" }, - "asDouble" : { - "type" : "number", - "format" : "double" - }, "asFloat" : { "type" : "number", "format" : "float" }, - "asLong" : { - "type" : "integer", - "format" : "int64" - }, - "asInt" : { - "type" : "integer", - "format" : "int32" - }, "asByte" : { "type" : "string", "format" : "byte" @@ -1215,36 +1194,57 @@ "asShort" : { "type" : "integer", "format" : "int32" + }, + "jsonObject" : { + "type" : "boolean" + }, + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" + }, + "asString" : { + "type" : "string" + }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" + }, + "jsonArray" : { + "type" : "boolean" + }, + "jsonPrimitive" : { + "type" : "boolean" + }, + "jsonNull" : { + "type" : "boolean" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" } } }, "JsonArray" : { "type" : "object", "properties" : { - "asBoolean" : { - "type" : "boolean" - }, - "asString" : { - "type" : "string" - }, - "asNumber" : { - "$ref" : "#/definitions/Number" + "asInt" : { + "type" : "integer", + "format" : "int32" }, "asDouble" : { "type" : "number", "format" : "double" }, - "asFloat" : { - "type" : "number", - "format" : "float" - }, "asLong" : { "type" : "integer", "format" : "int64" }, - "asInt" : { - "type" : "integer", - "format" : "int32" + "asBoolean" : { + "type" : "boolean" + }, + "asNumber" : { + "$ref" : "#/definitions/Number" + }, + "asFloat" : { + "type" : "number", + "format" : "float" }, "asByte" : { "type" : "string", @@ -1263,16 +1263,22 @@ "type" : "integer", "format" : "int32" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "asString" : { + "type" : "string" + }, + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" + }, + "jsonObject" : { + "type" : "boolean" }, "asJsonObject" : { "$ref" : "#/definitions/JsonObject" }, - "jsonArray" : { - "type" : "boolean" + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" }, - "jsonObject" : { + "jsonArray" : { "type" : "boolean" }, "jsonPrimitive" : { @@ -1283,9 +1289,6 @@ }, "asJsonPrimitive" : { "$ref" : "#/definitions/JsonPrimitive" - }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" } }, "x-className" : { diff --git a/docs/swagger/swagger.pdf b/docs/swagger/swagger.pdf index 394b7c625..d992107ee 100644 --- a/docs/swagger/swagger.pdf +++ b/docs/swagger/swagger.pdf @@ -4,16 +4,16 @@ << /Title (Clamp Rest API) /Creator (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) /Producer (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) -/CreationDate (D:20200227150954-08'00') -/ModDate (D:20200227150954-08'00') +/CreationDate (D:20200302132601-08'00') +/ModDate (D:20200302132601-08'00') >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R /Names 20 0 R -/Outlines 590 0 R -/PageLabels 734 0 R +/Outlines 589 0 R +/PageLabels 733 0 R /PageMode /UseOutlines /OpenAction [7 0 R /FitH 793.0] /ViewerPreferences << /DisplayDocTitle true @@ -23,7 +23,7 @@ endobj 3 0 obj << /Type /Pages /Count 33 -/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 27 0 R 43 0 R 58 0 R 72 0 R 84 0 R 97 0 R 110 0 R 123 0 R 137 0 R 151 0 R 165 0 R 179 0 R 192 0 R 208 0 R 215 0 R 221 0 R 229 0 R 235 0 R 240 0 R 249 0 R 256 0 R 266 0 R 272 0 R 278 0 R 286 0 R 296 0 R 303 0 R] +/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 27 0 R 43 0 R 58 0 R 72 0 R 84 0 R 97 0 R 110 0 R 124 0 R 137 0 R 151 0 R 165 0 R 178 0 R 192 0 R 207 0 R 214 0 R 220 0 R 228 0 R 234 0 R 239 0 R 248 0 R 255 0 R 265 0 R 271 0 R 277 0 R 285 0 R 294 0 R 301 0 R] >> endobj 4 0 obj @@ -80,11 +80,11 @@ endobj << /Type /Font /BaseFont /AAAAAA+NotoSerif /Subtype /TrueType -/FontDescriptor 736 0 R +/FontDescriptor 735 0 R /FirstChar 32 /LastChar 255 -/Widths 738 0 R -/ToUnicode 737 0 R +/Widths 737 0 R +/ToUnicode 736 0 R >> endobj 9 0 obj @@ -1559,7 +1559,7 @@ endobj /F1.0 8 0 R >> >> -/Annots [307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R] +/Annots [306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R] >> endobj 11 0 obj @@ -3102,7 +3102,7 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R] +/Annots [378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R] >> endobj 13 0 obj @@ -4645,7 +4645,7 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R] +/Annots [454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R] >> endobj 15 0 obj @@ -5828,7 +5828,7 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R] +/Annots [530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R] >> endobj 17 0 obj @@ -5910,7 +5910,7 @@ ET BT 71.30850000000001 592.176 Td /F1.0 10.5 Tf -<203a206c6f63616c686f73743a3337323935> Tj +<203a206c6f63616c686f73743a3339303939> Tj ET 0.000 0.000 0.000 SCN @@ -6011,7 +6011,7 @@ endobj /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> >> @@ -6025,18 +6025,18 @@ endobj >> endobj 21 0 obj -<< /Kids [53 0 R 247 0 R 160 0 R 87 0 R 130 0 R 198 0 R 54 0 R 128 0 R 195 0 R 82 0 R 170 0 R] +<< /Kids [53 0 R 246 0 R 160 0 R 87 0 R 130 0 R 197 0 R 54 0 R 187 0 R 116 0 R 82 0 R] >> endobj 22 0 obj << /Type /Font /BaseFont /AAAAAB+NotoSerif-Bold /Subtype /TrueType -/FontDescriptor 740 0 R +/FontDescriptor 739 0 R /FirstChar 32 /LastChar 255 -/Widths 742 0 R -/ToUnicode 741 0 R +/Widths 741 0 R +/ToUnicode 740 0 R >> endobj 23 0 obj @@ -6046,11 +6046,11 @@ endobj << /Type /Font /BaseFont /AAAAAC+NotoSerif-Italic /Subtype /TrueType -/FontDescriptor 744 0 R +/FontDescriptor 743 0 R /FirstChar 32 /LastChar 255 -/Widths 746 0 R -/ToUnicode 745 0 R +/Widths 745 0 R +/ToUnicode 744 0 R >> endobj 25 0 obj @@ -6950,7 +6950,7 @@ endobj /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [31 0 R 39 0 R] @@ -6980,11 +6980,11 @@ endobj << /Type /Font /BaseFont /AAAAAD+mplus1mn-regular /Subtype /TrueType -/FontDescriptor 748 0 R +/FontDescriptor 747 0 R /FirstChar 32 /LastChar 255 -/Widths 750 0 R -/ToUnicode 749 0 R +/Widths 749 0 R +/ToUnicode 748 0 R >> endobj 34 0 obj @@ -8225,7 +8225,7 @@ endobj /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [45 0 R 47 0 R] @@ -8270,12 +8270,12 @@ endobj endobj 53 0 obj << /Limits [(_cldshealthcheck) (_dictionaryelement)] -/Names [(_cldshealthcheck) 210 0 R (_consumes) 48 0 R (_consumes_2) 67 0 R (_consumes_3) 143 0 R (_consumes_4) 152 0 R (_consumes_5) 159 0 R (_consumes_6) 189 0 R (_definitions) 209 0 R (_dictionary) 211 0 R (_dictionaryelement) 213 0 R] +/Names [(_cldshealthcheck) 209 0 R (_consumes) 48 0 R (_consumes_2) 67 0 R (_consumes_3) 143 0 R (_consumes_4) 152 0 R (_consumes_5) 159 0 R (_consumes_6) 189 0 R (_definitions) 208 0 R (_dictionary) 210 0 R (_dictionaryelement) 212 0 R] >> endobj 54 0 obj -<< /Limits [(_responses_10) (_responses_2)] -/Names [(_responses_10) 81 0 R (_responses_11) 88 0 R (_responses_12) 92 0 R (_responses_13) 98 0 R (_responses_14) 103 0 R (_responses_15) 108 0 R (_responses_16) 115 0 R (_responses_17) 120 0 R (_responses_18) 127 0 R (_responses_19) 133 0 R (_responses_2) 35 0 R] +<< /Limits [(_responses_10) (_responses_19)] +/Names [(_responses_10) 81 0 R (_responses_11) 88 0 R (_responses_12) 92 0 R (_responses_13) 98 0 R (_responses_14) 103 0 R (_responses_15) 108 0 R (_responses_16) 115 0 R (_responses_17) 121 0 R (_responses_18) 128 0 R (_responses_19) 133 0 R] >> endobj 55 0 obj @@ -9630,7 +9630,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [60 0 R 64 0 R 66 0 R] @@ -10824,7 +10824,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> >> @@ -10857,8 +10857,8 @@ endobj [72 0 R /XYZ 0 108.12000000000052 null] endobj 82 0 obj -<< /Limits [(_route15) (_route4)] -/Names [(_route15) 94 0 R (_route18) 37 0 R (_route2) 91 0 R (_route20) 41 0 R (_route22) 69 0 R (_route25) 169 0 R (_route26) 185 0 R (_route29) 193 0 R (_route3) 162 0 R (_route30) 29 0 R (_route31) 34 0 R (_route4) 125 0 R] +<< /Limits [(_route46) (_version_information)] +/Names [(_route46) 94 0 R (_route49) 37 0 R (_route51) 41 0 R (_route53) 69 0 R (_route56) 169 0 R (_route57) 184 0 R (_route60) 193 0 R (_route61) 29 0 R (_route62) 34 0 R (_service) 303 0 R (_uri_scheme) 25 0 R (_v2_dictionary_dictionaryname_get) 55 0 R (_v2_dictionary_name_elements_shortname_delete) 75 0 R (_v2_dictionary_name_put) 62 0 R (_v2_dictionary_secondary_names_get) 50 0 R (_v2_policytoscamodels_policymodeltype_get) 179 0 R (_v2_policytoscamodels_yaml_policymodeltype_get) 173 0 R (_v2_templates_names_get) 198 0 R (_v2_templates_templatename_get) 201 0 R (_version_information) 23 0 R] >> endobj 83 0 obj @@ -12192,7 +12192,7 @@ endobj /F3.0 24 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [89 0 R] @@ -12206,7 +12206,7 @@ endobj endobj 87 0 obj << /Limits [(_parameters_8) (_produces_15)] -/Names [(_parameters_8) 95 0 R (_parameters_9) 102 0 R (_paths) 28 0 R (_policymodel) 299 0 R (_produces) 32 0 R (_produces_10) 90 0 R (_produces_11) 93 0 R (_produces_12) 100 0 R (_produces_13) 105 0 R (_produces_14) 112 0 R (_produces_15) 117 0 R] +/Names [(_parameters_8) 95 0 R (_parameters_9) 102 0 R (_paths) 28 0 R (_policymodel) 298 0 R (_produces) 32 0 R (_produces_10) 90 0 R (_produces_11) 93 0 R (_produces_12) 100 0 R (_produces_13) 105 0 R (_produces_14) 112 0 R (_produces_15) 118 0 R] >> endobj 88 0 obj @@ -13432,7 +13432,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [99 0 R 104 0 R] @@ -14902,10 +14902,10 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [111 0 R 116 0 R 121 0 R] +/Annots [111 0 R 117 0 R 122 0 R] >> endobj 111 0 obj @@ -14929,6 +14929,11 @@ endobj [110 0 R /XYZ 0 481.68000000000046 null] endobj 116 0 obj +<< /Limits [(_responses_5) (_route45)] +/Names [(_responses_5) 51 0 R (_responses_6) 59 0 R (_responses_7) 65 0 R (_responses_8) 73 0 R (_responses_9) 77 0 R (_route33) 91 0 R (_route34) 162 0 R (_route35) 126 0 R (_route36) 138 0 R (_route37) 154 0 R (_route38) 145 0 R (_route39) 85 0 R (_route40) 101 0 R (_route41) 131 0 R (_route42) 113 0 R (_route43) 106 0 R (_route44) 119 0 R (_route45) 79 0 R] +>> +endobj +117 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -14936,19 +14941,19 @@ endobj /Type /Annot >> endobj -117 0 obj +118 0 obj [110 0 R /XYZ 0 376.5600000000004 null] endobj -118 0 obj +119 0 obj [110 0 R /XYZ 0 320.28000000000037 null] endobj -119 0 obj +120 0 obj [110 0 R /XYZ 0 280.20000000000033 null] endobj -120 0 obj +121 0 obj [110 0 R /XYZ 0 175.08000000000033 null] endobj -121 0 obj +122 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -14956,7 +14961,7 @@ endobj /Type /Annot >> endobj -122 0 obj +123 0 obj << /Length 16227 >> stream @@ -16146,56 +16151,51 @@ Q endstream endobj -123 0 obj +124 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 122 0 R +/Contents 123 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F1.0 8 0 R /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [134 0 R] >> endobj -124 0 obj -[123 0 R /XYZ 0 792.0 null] -endobj 125 0 obj -[123 0 R /XYZ 0 702.1200000000001 null] +[124 0 R /XYZ 0 792.0 null] endobj 126 0 obj -[123 0 R /XYZ 0 662.0400000000002 null] +[124 0 R /XYZ 0 702.1200000000001 null] endobj 127 0 obj -[123 0 R /XYZ 0 556.9200000000003 null] +[124 0 R /XYZ 0 662.0400000000002 null] endobj 128 0 obj -<< /Limits [(_responses_20) (_responses_3)] -/Names [(_responses_20) 141 0 R (_responses_21) 148 0 R (_responses_22) 157 0 R (_responses_23) 166 0 R (_responses_24) 171 0 R (_responses_25) 176 0 R (_responses_26) 182 0 R (_responses_27) 187 0 R (_responses_28) 194 0 R (_responses_29) 200 0 R (_responses_3) 38 0 R] ->> +[124 0 R /XYZ 0 556.9200000000003 null] endobj 129 0 obj -[123 0 R /XYZ 0 451.8000000000004 null] +[124 0 R /XYZ 0 451.8000000000004 null] endobj 130 0 obj << /Limits [(_produces_16) (_produces_24)] -/Names [(_produces_16) 124 0 R (_produces_17) 129 0 R (_produces_18) 135 0 R (_produces_19) 144 0 R (_produces_2) 36 0 R (_produces_20) 153 0 R (_produces_21) 161 0 R (_produces_22) 168 0 R (_produces_23) 173 0 R (_produces_24) 177 0 R] +/Names [(_produces_16) 125 0 R (_produces_17) 129 0 R (_produces_18) 135 0 R (_produces_19) 144 0 R (_produces_2) 36 0 R (_produces_20) 153 0 R (_produces_21) 161 0 R (_produces_22) 168 0 R (_produces_23) 172 0 R (_produces_24) 176 0 R] >> endobj 131 0 obj -[123 0 R /XYZ 0 395.5200000000004 null] +[124 0 R /XYZ 0 395.5200000000004 null] endobj 132 0 obj -[123 0 R /XYZ 0 355.44000000000034 null] +[124 0 R /XYZ 0 355.44000000000034 null] endobj 133 0 obj -[123 0 R /XYZ 0 250.32000000000033 null] +[124 0 R /XYZ 0 250.32000000000033 null] endobj 134 0 obj << /Border [0 0 0] @@ -16206,7 +16206,7 @@ endobj >> endobj 135 0 obj -[123 0 R /XYZ 0 145.2000000000003 null] +[124 0 R /XYZ 0 145.2000000000003 null] endobj 136 0 obj << /Length 19642 @@ -17665,7 +17665,7 @@ endobj /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [140 0 R 142 0 R 147 0 R 149 0 R] @@ -18861,7 +18861,7 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> /Annots [156 0 R 158 0 R] @@ -18903,7 +18903,7 @@ endobj endobj 160 0 obj << /Limits [(_parameters_13) (_parameters_7)] -/Names [(_parameters_13) 126 0 R (_parameters_14) 132 0 R (_parameters_15) 139 0 R (_parameters_16) 146 0 R (_parameters_17) 155 0 R (_parameters_18) 163 0 R (_parameters_19) 175 0 R (_parameters_2) 56 0 R (_parameters_20) 181 0 R (_parameters_21) 186 0 R (_parameters_22) 203 0 R (_parameters_3) 63 0 R (_parameters_4) 70 0 R (_parameters_5) 76 0 R (_parameters_6) 80 0 R (_parameters_7) 86 0 R] +/Names [(_parameters_13) 127 0 R (_parameters_14) 132 0 R (_parameters_15) 139 0 R (_parameters_16) 146 0 R (_parameters_17) 155 0 R (_parameters_18) 163 0 R (_parameters_19) 174 0 R (_parameters_2) 56 0 R (_parameters_20) 180 0 R (_parameters_21) 185 0 R (_parameters_22) 202 0 R (_parameters_3) 63 0 R (_parameters_4) 70 0 R (_parameters_5) 76 0 R (_parameters_6) 80 0 R (_parameters_7) 86 0 R] >> endobj 161 0 obj @@ -20130,10 +20130,10 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [167 0 R 172 0 R] +/Annots [167 0 R 171 0 R] >> endobj 166 0 obj @@ -20154,14 +20154,9 @@ endobj [165 0 R /XYZ 0 597.0000000000003 null] endobj 170 0 obj -<< /Limits [(_route5) (_version_information)] -/Names [(_route5) 138 0 R (_route6) 154 0 R (_route7) 145 0 R (_route8) 85 0 R (_route9) 101 0 R (_service) 304 0 R (_uri_scheme) 25 0 R (_v2_dictionary_dictionaryname_get) 55 0 R (_v2_dictionary_name_elements_shortname_delete) 75 0 R (_v2_dictionary_name_put) 62 0 R (_v2_dictionary_secondary_names_get) 50 0 R (_v2_policytoscamodels_policymodeltype_get) 180 0 R (_v2_policytoscamodels_yaml_policymodeltype_get) 174 0 R (_v2_templates_names_get) 199 0 R (_v2_templates_templatename_get) 202 0 R (_version_information) 23 0 R] ->> -endobj -171 0 obj [165 0 R /XYZ 0 556.9200000000004 null] endobj -172 0 obj +171 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -20169,22 +20164,22 @@ endobj /Type /Annot >> endobj -173 0 obj +172 0 obj [165 0 R /XYZ 0 451.8000000000005 null] endobj -174 0 obj +173 0 obj [165 0 R /XYZ 0 395.5200000000005 null] endobj -175 0 obj +174 0 obj [165 0 R /XYZ 0 327.36000000000047 null] endobj -176 0 obj +175 0 obj [165 0 R /XYZ 0 222.2400000000004 null] endobj -177 0 obj +176 0 obj [165 0 R /XYZ 0 117.12000000000037 null] endobj -178 0 obj +177 0 obj << /Length 18056 >> stream @@ -21511,33 +21506,33 @@ Q endstream endobj -179 0 obj +178 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 178 0 R +/Contents 177 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R /F4.0 33 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [183 0 R 188 0 R] +/Annots [182 0 R 188 0 R] >> endobj +179 0 obj +[178 0 R /XYZ 0 792.0 null] +endobj 180 0 obj -[179 0 R /XYZ 0 792.0 null] +[178 0 R /XYZ 0 718.32 null] endobj 181 0 obj -[179 0 R /XYZ 0 718.32 null] +[178 0 R /XYZ 0 613.2000000000003 null] endobj 182 0 obj -[179 0 R /XYZ 0 613.2000000000003 null] -endobj -183 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -21545,17 +21540,22 @@ endobj /Type /Annot >> endobj +183 0 obj +[178 0 R /XYZ 0 508.0800000000004 null] +endobj 184 0 obj -[179 0 R /XYZ 0 508.0800000000004 null] +[178 0 R /XYZ 0 451.80000000000035 null] endobj 185 0 obj -[179 0 R /XYZ 0 451.80000000000035 null] +[178 0 R /XYZ 0 411.7200000000003 null] endobj 186 0 obj -[179 0 R /XYZ 0 411.7200000000003 null] +[178 0 R /XYZ 0 269.04000000000025 null] endobj 187 0 obj -[179 0 R /XYZ 0 269.04000000000025 null] +<< /Limits [(_responses_2) (_responses_4)] +/Names [(_responses_2) 35 0 R (_responses_20) 141 0 R (_responses_21) 148 0 R (_responses_22) 157 0 R (_responses_23) 166 0 R (_responses_24) 170 0 R (_responses_25) 175 0 R (_responses_26) 181 0 R (_responses_27) 186 0 R (_responses_28) 194 0 R (_responses_29) 199 0 R (_responses_3) 38 0 R (_responses_30) 203 0 R (_responses_4) 46 0 R] +>> endobj 188 0 obj << /Border [0 0 0] @@ -21566,10 +21566,10 @@ endobj >> endobj 189 0 obj -[179 0 R /XYZ 0 163.92000000000024 null] +[178 0 R /XYZ 0 163.92000000000024 null] endobj 190 0 obj -[179 0 R /XYZ 0 107.64000000000021 null] +[178 0 R /XYZ 0 107.64000000000021 null] endobj 191 0 obj << /Length 16516 @@ -22786,10 +22786,10 @@ endobj /F4.0 33 0 R /F3.0 24 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [196 0 R 205 0 R] +/Annots [195 0 R 204 0 R] >> endobj 193 0 obj @@ -22799,11 +22799,6 @@ endobj [192 0 R /XYZ 0 718.32 null] endobj 195 0 obj -<< /Limits [(_responses_30) (_route14)] -/Names [(_responses_30) 204 0 R (_responses_4) 46 0 R (_responses_5) 51 0 R (_responses_6) 59 0 R (_responses_7) 65 0 R (_responses_8) 73 0 R (_responses_9) 77 0 R (_route10) 131 0 R (_route11) 113 0 R (_route12) 106 0 R (_route13) 118 0 R (_route14) 79 0 R] ->> -endobj -196 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -22811,33 +22806,33 @@ endobj /Type /Annot >> endobj -197 0 obj +196 0 obj [192 0 R /XYZ 0 613.2000000000003 null] endobj -198 0 obj +197 0 obj << /Limits [(_produces_25) (_responses)] -/Names [(_produces_25) 184 0 R (_produces_26) 190 0 R (_produces_27) 197 0 R (_produces_28) 201 0 R (_produces_29) 206 0 R (_produces_3) 40 0 R (_produces_4) 49 0 R (_produces_5) 52 0 R (_produces_6) 61 0 R (_produces_7) 68 0 R (_produces_8) 74 0 R (_produces_9) 78 0 R (_responses) 30 0 R] +/Names [(_produces_25) 183 0 R (_produces_26) 190 0 R (_produces_27) 196 0 R (_produces_28) 200 0 R (_produces_29) 205 0 R (_produces_3) 40 0 R (_produces_4) 49 0 R (_produces_5) 52 0 R (_produces_6) 61 0 R (_produces_7) 68 0 R (_produces_8) 74 0 R (_produces_9) 78 0 R (_responses) 30 0 R] >> endobj -199 0 obj +198 0 obj [192 0 R /XYZ 0 556.9200000000004 null] endobj -200 0 obj +199 0 obj [192 0 R /XYZ 0 516.8400000000005 null] endobj -201 0 obj +200 0 obj [192 0 R /XYZ 0 411.7200000000005 null] endobj -202 0 obj +201 0 obj [192 0 R /XYZ 0 355.44000000000045 null] endobj -203 0 obj +202 0 obj [192 0 R /XYZ 0 315.3600000000004 null] endobj -204 0 obj +203 0 obj [192 0 R /XYZ 0 210.2400000000004 null] endobj -205 0 obj +204 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -22845,10 +22840,10 @@ endobj /Type /Annot >> endobj -206 0 obj +205 0 obj [192 0 R /XYZ 0 105.12000000000037 null] endobj -207 0 obj +206 0 obj << /Length 16082 >> stream @@ -24091,32 +24086,32 @@ Q endstream endobj -208 0 obj +207 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 207 0 R +/Contents 206 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [212 0 R] +/Annots [211 0 R] >> endobj +208 0 obj +[207 0 R /XYZ 0 792.0 null] +endobj 209 0 obj -[208 0 R /XYZ 0 792.0 null] +[207 0 R /XYZ 0 712.0799999999999 null] endobj 210 0 obj -[208 0 R /XYZ 0 712.0799999999999 null] +[207 0 R /XYZ 0 524.04 null] endobj 211 0 obj -[208 0 R /XYZ 0 524.04 null] -endobj -212 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link @@ -24124,10 +24119,10 @@ endobj /Type /Annot >> endobj -213 0 obj -[208 0 R /XYZ 0 148.19999999999993 null] +212 0 obj +[207 0 R /XYZ 0 148.19999999999993 null] endobj -214 0 obj +213 0 obj << /Length 20298 >> stream @@ -25704,23 +25699,23 @@ Q endstream endobj -215 0 obj +214 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 214 0 R +/Contents 213 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [216 0 R 218 0 R] +/Annots [215 0 R 217 0 R] >> endobj -216 0 obj +215 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link @@ -25728,10 +25723,10 @@ endobj /Type /Annot >> endobj -217 0 obj -[215 0 R /XYZ 0 345.11999999999995 null] +216 0 obj +[214 0 R /XYZ 0 345.11999999999995 null] endobj -218 0 obj +217 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -25739,10 +25734,10 @@ endobj /Type /Annot >> endobj -219 0 obj -[215 0 R /XYZ 0 194.6399999999999 null] +218 0 obj +[214 0 R /XYZ 0 194.6399999999999 null] endobj -220 0 obj +219 0 obj << /Length 21931 >> stream @@ -27420,26 +27415,26 @@ Q endstream endobj -221 0 obj +220 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 220 0 R +/Contents 219 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [223 0 R 224 0 R 225 0 R 226 0 R 227 0 R] +/Annots [222 0 R 223 0 R 224 0 R 225 0 R 226 0 R] >> endobj -222 0 obj -[221 0 R /XYZ 0 683.1600000000001 null] +221 0 obj +[220 0 R /XYZ 0 683.1600000000001 null] endobj -223 0 obj +222 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -27447,7 +27442,7 @@ endobj /Type /Annot >> endobj -224 0 obj +223 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -27455,7 +27450,7 @@ endobj /Type /Annot >> endobj -225 0 obj +224 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -27463,7 +27458,7 @@ endobj /Type /Annot >> endobj -226 0 obj +225 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -27471,7 +27466,7 @@ endobj /Type /Annot >> endobj -227 0 obj +226 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -27479,7 +27474,7 @@ endobj /Type /Annot >> endobj -228 0 obj +227 0 obj << /Length 21512 >> stream @@ -29141,26 +29136,26 @@ Q endstream endobj -229 0 obj +228 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 228 0 R +/Contents 227 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [231 0 R 232 0 R 233 0 R] +/Annots [230 0 R 231 0 R 232 0 R] >> endobj -230 0 obj -[229 0 R /XYZ 0 532.9200000000003 null] +229 0 obj +[228 0 R /XYZ 0 532.9200000000003 null] endobj -231 0 obj +230 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -29168,7 +29163,7 @@ endobj /Type /Annot >> endobj -232 0 obj +231 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -29176,7 +29171,7 @@ endobj /Type /Annot >> endobj -233 0 obj +232 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -29184,7 +29179,7 @@ endobj /Type /Annot >> endobj -234 0 obj +233 0 obj << /Length 21163 >> stream @@ -30838,23 +30833,23 @@ Q endstream endobj -235 0 obj +234 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 234 0 R +/Contents 233 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [236 0 R 237 0 R] +/Annots [235 0 R 236 0 R] >> endobj -236 0 obj +235 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -30862,7 +30857,7 @@ endobj /Type /Annot >> endobj -237 0 obj +236 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -30870,10 +30865,10 @@ endobj /Type /Annot >> endobj -238 0 obj -[235 0 R /XYZ 0 382.68000000000023 null] +237 0 obj +[234 0 R /XYZ 0 382.68000000000023 null] endobj -239 0 obj +238 0 obj << /Length 21656 >> stream @@ -32551,23 +32546,23 @@ Q endstream endobj -240 0 obj +239 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 239 0 R +/Contents 238 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [241 0 R 242 0 R 243 0 R 244 0 R 245 0 R] +/Annots [240 0 R 241 0 R 242 0 R 243 0 R 244 0 R] >> endobj -241 0 obj +240 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -32575,7 +32570,7 @@ endobj /Type /Annot >> endobj -242 0 obj +241 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -32583,7 +32578,7 @@ endobj /Type /Annot >> endobj -243 0 obj +242 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -32591,7 +32586,7 @@ endobj /Type /Annot >> endobj -244 0 obj +243 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -32599,7 +32594,7 @@ endobj /Type /Annot >> endobj -245 0 obj +244 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -32607,15 +32602,15 @@ endobj /Type /Annot >> endobj -246 0 obj -[240 0 R /XYZ 0 232.44000000000023 null] +245 0 obj +[239 0 R /XYZ 0 232.44000000000023 null] endobj -247 0 obj +246 0 obj << /Limits [(_externalcomponent) (_parameters_12)] -/Names [(_externalcomponent) 217 0 R (_externalcomponentstate) 219 0 R (_jsonarray) 222 0 R (_jsonnull) 230 0 R (_jsonobject) 238 0 R (_jsonprimitive) 246 0 R (_loop) 257 0 R (_loopelementmodel) 267 0 R (_looplog) 270 0 R (_looptemplate) 274 0 R (_looptemplateloopelementmodel) 279 0 R (_microservicepolicy) 282 0 R (_number) 290 0 R (_operationalpolicy) 291 0 R (_overview) 19 0 R (_parameters) 44 0 R (_parameters_10) 107 0 R (_parameters_11) 114 0 R (_parameters_12) 119 0 R] +/Names [(_externalcomponent) 216 0 R (_externalcomponentstate) 218 0 R (_jsonarray) 221 0 R (_jsonnull) 229 0 R (_jsonobject) 237 0 R (_jsonprimitive) 245 0 R (_loop) 256 0 R (_loopelementmodel) 266 0 R (_looplog) 269 0 R (_looptemplate) 273 0 R (_looptemplateloopelementmodel) 278 0 R (_microservicepolicy) 281 0 R (_number) 289 0 R (_operationalpolicy) 290 0 R (_overview) 19 0 R (_parameters) 44 0 R (_parameters_10) 107 0 R (_parameters_11) 114 0 R (_parameters_12) 120 0 R] >> endobj -248 0 obj +247 0 obj << /Length 22690 >> stream @@ -34384,23 +34379,23 @@ Q endstream endobj -249 0 obj +248 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 248 0 R +/Contents 247 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [250 0 R 251 0 R 252 0 R 253 0 R 254 0 R] +/Annots [249 0 R 250 0 R 251 0 R 252 0 R 253 0 R] >> endobj -250 0 obj +249 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -34408,7 +34403,7 @@ endobj /Type /Annot >> endobj -251 0 obj +250 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -34416,7 +34411,7 @@ endobj /Type /Annot >> endobj -252 0 obj +251 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -34424,7 +34419,7 @@ endobj /Type /Annot >> endobj -253 0 obj +252 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -34432,7 +34427,7 @@ endobj /Type /Annot >> endobj -254 0 obj +253 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -34440,7 +34435,7 @@ endobj /Type /Annot >> endobj -255 0 obj +254 0 obj << /Length 23337 >> stream @@ -36197,26 +36192,26 @@ Q endstream endobj -256 0 obj +255 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 255 0 R +/Contents 254 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R] +/Annots [257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R] >> endobj -257 0 obj -[256 0 R /XYZ 0 645.6000000000001 null] +256 0 obj +[255 0 R /XYZ 0 645.6000000000001 null] endobj -258 0 obj +257 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -36224,7 +36219,7 @@ endobj /Type /Annot >> endobj -259 0 obj +258 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -36232,7 +36227,7 @@ endobj /Type /Annot >> endobj -260 0 obj +259 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -36240,7 +36235,7 @@ endobj /Type /Annot >> endobj -261 0 obj +260 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -36248,7 +36243,7 @@ endobj /Type /Annot >> endobj -262 0 obj +261 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link @@ -36256,7 +36251,7 @@ endobj /Type /Annot >> endobj -263 0 obj +262 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -36264,7 +36259,7 @@ endobj /Type /Annot >> endobj -264 0 obj +263 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link @@ -36272,7 +36267,7 @@ endobj /Type /Annot >> endobj -265 0 obj +264 0 obj << /Length 20640 >> stream @@ -37863,26 +37858,26 @@ Q endstream endobj -266 0 obj +265 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 265 0 R +/Contents 264 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [268 0 R 269 0 R] +/Annots [267 0 R 268 0 R] >> endobj -267 0 obj -[266 0 R /XYZ 0 645.6000000000001 null] +266 0 obj +[265 0 R /XYZ 0 645.6000000000001 null] endobj -268 0 obj +267 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -37890,7 +37885,7 @@ endobj /Type /Annot >> endobj -269 0 obj +268 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -37898,10 +37893,10 @@ endobj /Type /Annot >> endobj -270 0 obj -[266 0 R /XYZ 0 157.08000000000015 null] +269 0 obj +[265 0 R /XYZ 0 157.08000000000015 null] endobj -271 0 obj +270 0 obj << /Length 21650 >> stream @@ -39577,23 +39572,23 @@ Q endstream endobj -272 0 obj +271 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 271 0 R +/Contents 270 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [273 0 R 275 0 R 276 0 R] +/Annots [272 0 R 274 0 R 275 0 R] >> endobj -273 0 obj +272 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -39601,10 +39596,10 @@ endobj /Type /Annot >> endobj -274 0 obj -[272 0 R /XYZ 0 532.9200000000001 null] +273 0 obj +[271 0 R /XYZ 0 532.9200000000001 null] endobj -275 0 obj +274 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -39612,7 +39607,7 @@ endobj /Type /Annot >> endobj -276 0 obj +275 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -39620,7 +39615,7 @@ endobj /Type /Annot >> endobj -277 0 obj +276 0 obj << /Length 20753 >> stream @@ -41199,26 +41194,26 @@ Q endstream endobj -278 0 obj +277 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 277 0 R +/Contents 276 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [280 0 R 281 0 R 283 0 R 284 0 R] +/Annots [279 0 R 280 0 R 282 0 R 283 0 R] >> endobj -279 0 obj -[278 0 R /XYZ 0 645.6000000000001 null] +278 0 obj +[277 0 R /XYZ 0 645.6000000000001 null] endobj -280 0 obj +279 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -41226,7 +41221,7 @@ endobj /Type /Annot >> endobj -281 0 obj +280 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -41234,10 +41229,10 @@ endobj /Type /Annot >> endobj -282 0 obj -[278 0 R /XYZ 0 457.56000000000023 null] +281 0 obj +[277 0 R /XYZ 0 457.56000000000023 null] endobj -283 0 obj +282 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -41245,7 +41240,7 @@ endobj /Type /Annot >> endobj -284 0 obj +283 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -41253,8 +41248,8 @@ endobj /Type /Annot >> endobj -285 0 obj -<< /Length 20394 +284 0 obj +<< /Length 20228 >> stream q @@ -42723,7 +42718,7 @@ S BT 51.24 84.97300000000011 Td /F2.0 10.5 Tf -<6c6f6f70> Tj +<6c6567616379> Tj ET @@ -42766,21 +42761,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT 272.17692192000004 77.83300000000011 Td /F1.0 10.5 Tf -<4c6f6f70> Tj +<626f6f6c65616e> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn q 0.000 0.000 0.000 scn @@ -42806,23 +42793,23 @@ Q endstream endobj -286 0 obj +285 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 285 0 R +/Contents 284 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [287 0 R 288 0 R 289 0 R 292 0 R 293 0 R 294 0 R] +/Annots [286 0 R 287 0 R 288 0 R 291 0 R 292 0 R] >> endobj -287 0 obj +286 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -42830,7 +42817,7 @@ endobj /Type /Annot >> endobj -288 0 obj +287 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -42838,7 +42825,7 @@ endobj /Type /Annot >> endobj -289 0 obj +288 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -42846,13 +42833,13 @@ endobj /Type /Annot >> endobj +289 0 obj +[285 0 R /XYZ 0 382.68000000000023 null] +endobj 290 0 obj -[286 0 R /XYZ 0 382.68000000000023 null] +[285 0 R /XYZ 0 314.82000000000016 null] endobj 291 0 obj -[286 0 R /XYZ 0 314.82000000000016 null] -endobj -292 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -42860,7 +42847,7 @@ endobj /Type /Annot >> endobj -293 0 obj +292 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -42868,16 +42855,8 @@ endobj /Type /Annot >> endobj -294 0 obj -<< /Border [0 0 0] -/Dest (_loop) -/Subtype /Link -/Rect [272.17692192000004 74.76700000000011 297.27192192000007 89.04700000000011] -/Type /Annot ->> -endobj -295 0 obj -<< /Length 21773 +293 0 obj +<< /Length 21473 >> stream q @@ -42946,6 +42925,14 @@ f 269.177 469.800 294.583 37.560 re f 0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 432.240 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 432.240 294.583 37.560 re +f +0.000 0.000 0.000 scn 0.5 w /DeviceRGB CS 0.867 0.867 0.867 SCN @@ -43048,7 +43035,7 @@ S BT 51.24 716.473 Td /F2.0 10.5 Tf -<6c6f6f70456c656d656e744d6f64656c> Tj +<6c6f6f70> Tj ET @@ -43101,7 +43088,7 @@ S BT 272.17692192000004 709.333 Td /F1.0 10.5 Tf -<4c6f6f70456c656d656e744d6f64656c> Tj +<4c6f6f70> Tj ET 0.000 0.000 0.000 SCN @@ -43138,7 +43125,7 @@ S BT 51.24 678.913 Td /F2.0 10.5 Tf -<6e616d65> Tj +<6c6f6f70456c656d656e744d6f64656c> Tj ET @@ -43181,13 +43168,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 272.17692192000004 671.773 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4c6f6f70456c656d656e744d6f64656c> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -43220,7 +43215,7 @@ S BT 51.24 641.3530000000001 Td /F2.0 10.5 Tf -<70647047726f7570> Tj +<6e616d65> Tj ET @@ -43302,7 +43297,7 @@ S BT 51.24 603.7929999999999 Td /F2.0 10.5 Tf -<70647053756247726f7570> Tj +<70647047726f7570> Tj ET @@ -43384,7 +43379,7 @@ S BT 51.24 566.233 Td /F2.0 10.5 Tf -<706f6c6963794d6f64656c> Tj +<70647053756247726f7570> Tj ET @@ -43427,21 +43422,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT 272.17692192000004 559.093 Td /F1.0 10.5 Tf -<506f6c6963794d6f64656c> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -43474,7 +43461,7 @@ S BT 51.24 528.673 Td /F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ +<706f6c6963794d6f64656c> Tj ET @@ -43517,13 +43504,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 272.17692192000004 521.533 Td /F1.0 10.5 Tf -<737472696e67> Tj +<506f6c6963794d6f64656c> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -43556,7 +43551,7 @@ S BT 51.24 491.113 Td /F2.0 10.5 Tf -<7570646174656444617465> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET @@ -43603,6 +43598,88 @@ S BT 272.17692192000004 483.973 Td /F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 469.800 m +269.177 469.800 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.240 m +269.177 432.240 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 470.050 m +48.240 431.990 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 470.050 m +269.177 431.990 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 453.553 Td +/F2.0 10.5 Tf +<7570646174656444617465> Tj +ET + + +BT +51.24 439.273 Td +ET + + +BT +51.24 439.273 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 469.800 m +563.760 469.800 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.240 m +563.760 432.240 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 470.050 m +269.177 431.990 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 470.050 m +563.760 431.990 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 446.413 Td +/F1.0 10.5 Tf <696e74656765722028696e74363429> Tj ET @@ -43611,7 +43688,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 434.37600000000003 Td +48.24 396.81600000000003 Td /F2.0 18 Tf <332e31382e20506f6c6963794d6f64656c> Tj ET @@ -43619,177 +43696,99 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 394.440 220.937 23.280 re +48.240 356.880 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 394.440 294.583 23.280 re +269.177 356.880 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 356.880 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 356.880 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn 48.240 319.320 220.937 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn +1.000 1.000 1.000 scn 269.177 319.320 294.583 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 48.240 281.760 220.937 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 269.177 281.760 294.583 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn +1.000 1.000 1.000 scn 48.240 244.200 220.937 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn +1.000 1.000 1.000 scn 269.177 244.200 294.583 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 48.240 206.640 220.937 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 269.177 206.640 294.583 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn +1.000 1.000 1.000 scn 48.240 169.080 220.937 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn +1.000 1.000 1.000 scn 269.177 169.080 294.583 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 48.240 131.520 220.937 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 269.177 131.520 294.583 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn +1.000 1.000 1.000 scn 48.240 93.960 220.937 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn +1.000 1.000 1.000 scn 269.177 93.960 294.583 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 48.240 56.400 220.937 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn +0.976 0.976 0.976 scn 269.177 56.400 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 417.720 m -269.177 417.720 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 417.970 m -48.240 393.690 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 417.970 m -269.177 393.690 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 401.97299999999996 Td -/F2.0 10.5 Tf -<4e616d65> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 417.720 m -563.760 417.720 l +48.240 380.160 m +269.177 380.160 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 417.970 m -269.177 393.690 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 417.970 m -563.760 393.690 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 401.97299999999996 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN 48.240 356.880 m 269.177 356.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 394.690 m -48.240 356.630 l +48.240 380.410 m +48.240 356.130 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 380.410 m +269.177 356.130 l S [ ] 0 d 1 w @@ -43797,31 +43796,19 @@ S 0.200 0.200 0.200 scn BT -51.24 378.1929999999999 Td +51.24 364.41299999999995 Td /F2.0 10.5 Tf -[<6372656174656442> 20.01953125 <79>] TJ -ET - - -BT -51.24 363.9129999999999 Td -ET - - -BT -51.24 363.9129999999999 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 380.160 m +563.760 380.160 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN 269.177 356.880 m 563.760 356.880 l @@ -43829,14 +43816,14 @@ S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 380.410 m +269.177 356.130 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 394.690 m -563.760 356.630 l +563.760 380.410 m +563.760 356.130 l S [ ] 0 d 1 w @@ -43844,9 +43831,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 371.05299999999994 Td -/F1.0 10.5 Tf -<737472696e67> Tj +272.17692192000004 364.41299999999995 Td +/F2.0 10.5 Tf +<536368656d61> Tj ET 0.000 0.000 0.000 scn @@ -43881,7 +43868,7 @@ S BT 51.24 340.633 Td /F2.0 10.5 Tf -<6372656174656444617465> Tj +[<6372656174656442> 20.01953125 <79>] TJ ET @@ -43928,7 +43915,7 @@ S BT 272.17692192000004 333.493 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -43963,7 +43950,7 @@ S BT 51.24 303.0729999999999 Td /F2.0 10.5 Tf -[<706f6c69637941> 20.01953125 <63726f6e> 20.01953125 <796d>] TJ +<6372656174656444617465> Tj ET @@ -44010,7 +43997,7 @@ S BT 272.17692192000004 295.93299999999994 Td /F1.0 10.5 Tf -<737472696e67> Tj +<696e74656765722028696e74363429> Tj ET 0.000 0.000 0.000 scn @@ -44045,7 +44032,7 @@ S BT 51.24 265.513 Td /F2.0 10.5 Tf -[<706f6c6963794d6f64656c54> 29.78515625 <6f736361>] TJ +[<706f6c69637941> 20.01953125 <63726f6e> 20.01953125 <796d>] TJ ET @@ -44127,7 +44114,7 @@ S BT 51.24 227.95299999999997 Td /F2.0 10.5 Tf -<706f6c6963794d6f64656c54797065> Tj +[<706f6c6963794d6f64656c54> 29.78515625 <6f736361>] TJ ET @@ -44209,7 +44196,7 @@ S BT 51.24 190.39299999999997 Td /F2.0 10.5 Tf -<706f6c69637950647047726f7570> Tj +<706f6c6963794d6f64656c54797065> Tj ET @@ -44252,21 +44239,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT 272.17692192000004 183.25299999999996 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -44299,7 +44278,7 @@ S BT 51.24 152.83299999999997 Td /F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ +<706f6c69637950647047726f7570> Tj ET @@ -44342,13 +44321,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 272.17692192000004 145.69299999999996 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4a736f6e4f626a656374> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -44379,19 +44366,19 @@ S 0.200 0.200 0.200 scn BT -51.24 115.27299999999993 Td +51.24 115.27299999999995 Td /F2.0 10.5 Tf -<7570646174656444617465> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET BT -51.24 100.99299999999992 Td +51.24 100.99299999999995 Td ET BT -51.24 100.99299999999992 Td +51.24 100.99299999999995 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44426,9 +44413,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 108.13299999999992 Td +272.17692192000004 108.13299999999995 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -44463,7 +44450,7 @@ S BT 51.24 77.71299999999992 Td /F2.0 10.5 Tf -[<7573656442> 20.01953125 <79456c656d656e744d6f64656c73>] TJ +<7570646174656444617465> Tj ET @@ -44506,13 +44493,271 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn + +BT +272.17692192000004 70.57299999999992 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + +0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.698 14.388 Td +/F1.0 9 Tf +<3237> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +294 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 293 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 22 0 R +/F3.0 24 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 588 0 R +>> +>> +/Annots [295 0 R 296 0 R 297 0 R 299 0 R] +>> +endobj +295 0 obj +<< /Border [0 0 0] +/Dest (_loop) +/Subtype /Link +/Rect [272.17692192000004 706.267 297.27192192000007 720.547] +/Type /Annot +>> +endobj +296 0 obj +<< /Border [0 0 0] +/Dest (_loopelementmodel) +/Subtype /Link +/Rect [272.17692192000004 668.7070000000001 369.88992192000006 682.9870000000001] +/Type /Annot +>> +endobj +297 0 obj +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [272.17692192000004 518.4670000000001 333.47592192 532.7470000000001] +/Type /Annot +>> +endobj +298 0 obj +[294 0 R /XYZ 0 420.24 null] +endobj +299 0 obj +<< /Border [0 0 0] +/Dest (_jsonobject) +/Subtype /Link +/Rect [272.17692192000004 142.62699999999998 325.32792192000005 156.90699999999998] +/Type /Annot +>> +endobj +300 0 obj +<< /Length 11146 +>> +stream +q +/DeviceRGB cs +1.000 1.000 1.000 scn +48.240 732.720 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 732.720 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 695.160 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 695.160 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 657.600 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 657.600 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.5 w +/DeviceRGB CS +0.867 0.867 0.867 SCN +48.240 756.000 m +269.177 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 756.250 m +48.240 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 740.2529999999999 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 756.000 m +563.760 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 756.250 m +269.177 731.970 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 756.250 m +563.760 731.970 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 740.2529999999999 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 732.720 m +269.177 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +269.177 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 732.970 m +48.240 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 716.473 Td +/F2.0 10.5 Tf +[<7573656442> 20.01953125 <79456c656d656e744d6f64656c73>] TJ +ET + + +BT +51.24 702.193 Td +ET + + +BT +51.24 702.193 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 732.720 m +563.760 732.720 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 732.970 m +269.177 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 732.970 m +563.760 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.259 0.545 0.792 scn 0.259 0.545 0.792 SCN 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn BT -272.17692192000004 70.57299999999992 Td +272.17692192000004 709.333 Td /F1.0 10.5 Tf <3c20> Tj ET @@ -44521,7 +44766,7 @@ ET 0.259 0.545 0.792 SCN BT -280.76592192000004 70.57299999999992 Td +280.76592192000004 709.333 Td /F1.0 10.5 Tf <4c6f6f70456c656d656e744d6f64656c> Tj ET @@ -44530,202 +44775,34 @@ ET 0.200 0.200 0.200 scn BT -378.47892192000006 70.57299999999992 Td +378.47892192000006 709.333 Td /F1.0 10.5 Tf [<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET -0.000 0.000 0.000 scn -q -0.000 0.000 0.000 scn -0.000 0.000 0.000 SCN -1 w -0 J -0 j -[ ] 0 d -/Stamp1 Do -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -552.698 14.388 Td -/F1.0 9 Tf -<3237> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -Q -Q - -endstream -endobj -296 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 295 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F2.0 22 0 R -/F3.0 24 0 R -/F1.0 8 0 R ->> -/XObject << /Stamp1 589 0 R ->> ->> -/Annots [297 0 R 298 0 R 300 0 R 301 0 R] ->> -endobj -297 0 obj -<< /Border [0 0 0] -/Dest (_loopelementmodel) -/Subtype /Link -/Rect [272.17692192000004 706.267 369.88992192000006 720.547] -/Type /Annot ->> -endobj -298 0 obj -<< /Border [0 0 0] -/Dest (_policymodel) -/Subtype /Link -/Rect [272.17692192000004 556.027 333.47592192 570.307] -/Type /Annot ->> -endobj -299 0 obj -[296 0 R /XYZ 0 457.8 null] -endobj -300 0 obj -<< /Border [0 0 0] -/Dest (_jsonobject) -/Subtype /Link -/Rect [272.17692192000004 180.18699999999998 325.32792192000005 194.46699999999998] -/Type /Annot ->> -endobj -301 0 obj -<< /Border [0 0 0] -/Dest (_loopelementmodel) -/Subtype /Link -/Rect [280.76592192000004 67.50699999999992 378.47892192000006 81.78699999999992] -/Type /Annot ->> -endobj -302 0 obj -<< /Length 9726 ->> -stream -q -/DeviceRGB cs -1.000 1.000 1.000 scn -48.240 732.720 220.937 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 732.720 294.583 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 695.160 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 695.160 294.583 37.560 re -f 0.000 0.000 0.000 scn 0.5 w -/DeviceRGB CS 0.867 0.867 0.867 SCN -48.240 756.000 m -269.177 756.000 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 732.720 m -269.177 732.720 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 756.250 m -48.240 731.970 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 756.250 m -269.177 731.970 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 740.2529999999999 Td -/F2.0 10.5 Tf -<4e616d65> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 756.000 m -563.760 756.000 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -269.177 732.720 m -563.760 732.720 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 756.250 m -269.177 731.970 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 756.250 m -563.760 731.970 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 740.2529999999999 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 732.720 m -269.177 732.720 l +48.240 695.160 m +269.177 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 695.160 m -269.177 695.160 l +48.240 657.600 m +269.177 657.600 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 732.970 m -48.240 694.910 l +48.240 695.410 m +48.240 657.350 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 732.970 m -269.177 694.910 l +269.177 695.410 m +269.177 657.350 l S [ ] 0 d 1 w @@ -44733,19 +44810,19 @@ S 0.200 0.200 0.200 scn BT -51.24 716.4730000000002 Td +51.24 678.913 Td /F2.0 10.5 Tf <76657273696f6e> Tj ET BT -51.24 702.1930000000001 Td +51.24 664.6329999999999 Td ET BT -51.24 702.1930000000001 Td +51.24 664.6329999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44753,26 +44830,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 732.720 m -563.760 732.720 l +269.177 695.160 m +563.760 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 695.160 m -563.760 695.160 l +269.177 657.600 m +563.760 657.600 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 732.970 m -269.177 694.910 l +269.177 695.410 m +269.177 657.350 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 732.970 m -563.760 694.910 l +563.760 695.410 m +563.760 657.350 l S [ ] 0 d 1 w @@ -44780,7 +44857,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 709.3330000000001 Td +272.17692192000004 671.7729999999999 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -44790,7 +44867,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 659.7360000000001 Td +48.24 622.1759999999999 Td /F2.0 18 Tf <332e31392e2053657276696365> Tj ET @@ -44798,145 +44875,75 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 619.800 220.937 23.280 re +48.240 582.240 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 619.800 294.583 23.280 re +269.177 582.240 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 582.240 220.937 37.560 re +48.240 544.680 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 582.240 294.583 37.560 re +269.177 544.680 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 544.680 220.937 37.560 re +48.240 507.120 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 544.680 294.583 37.560 re +269.177 507.120 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 507.120 220.937 37.560 re +48.240 469.560 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 507.120 294.583 37.560 re +269.177 469.560 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 469.560 220.937 37.560 re +48.240 432.000 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 469.560 294.583 37.560 re +269.177 432.000 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 432.000 220.937 37.560 re +48.240 394.440 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 432.000 294.583 37.560 re +269.177 394.440 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 643.080 m -269.177 643.080 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 619.800 m -269.177 619.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 643.330 m -48.240 619.050 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 643.330 m -269.177 619.050 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 627.3330000000001 Td -/F2.0 10.5 Tf -<4e616d65> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 643.080 m -563.760 643.080 l +48.240 605.520 m +269.177 605.520 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 619.800 m -563.760 619.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 643.330 m -269.177 619.050 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 643.330 m -563.760 619.050 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 627.3330000000001 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 619.800 m -269.177 619.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN 48.240 582.240 m 269.177 582.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 620.050 m -48.240 581.990 l +48.240 605.770 m +48.240 581.490 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 620.050 m -269.177 581.990 l +269.177 605.770 m +269.177 581.490 l S [ ] 0 d 1 w @@ -44944,31 +44951,19 @@ S 0.200 0.200 0.200 scn BT -51.24 603.5530000000001 Td +51.24 589.7729999999999 Td /F2.0 10.5 Tf -<6e616d65> Tj -ET - - -BT -51.24 589.2730000000001 Td -ET - - -BT -51.24 589.2730000000001 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 619.800 m -563.760 619.800 l +269.177 605.520 m +563.760 605.520 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN 269.177 582.240 m 563.760 582.240 l @@ -44976,14 +44971,14 @@ S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 620.050 m -269.177 581.990 l +269.177 605.770 m +269.177 581.490 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 620.050 m -563.760 581.990 l +563.760 605.770 m +563.760 581.490 l S [ ] 0 d 1 w @@ -44991,9 +44986,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 596.4130000000001 Td -/F1.0 10.5 Tf -<737472696e67> Tj +272.17692192000004 589.7729999999999 Td +/F2.0 10.5 Tf +<536368656d61> Tj ET 0.000 0.000 0.000 scn @@ -45026,19 +45021,19 @@ S 0.200 0.200 0.200 scn BT -51.24 565.9930000000002 Td +51.24 565.9929999999999 Td /F2.0 10.5 Tf -<7265736f7572636544657461696c73> Tj +<6e616d65> Tj ET BT -51.24 551.7130000000001 Td +51.24 551.713 Td ET BT -51.24 551.7130000000001 Td +51.24 551.713 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45071,21 +45066,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 558.8530000000001 Td +272.17692192000004 558.853 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -45116,19 +45103,19 @@ S 0.200 0.200 0.200 scn BT -51.24 528.4330000000002 Td +51.24 528.433 Td /F2.0 10.5 Tf -<7365727669636544657461696c73> Tj +<7265736f7572636544657461696c73> Tj ET BT -51.24 514.1530000000001 Td +51.24 514.1529999999999 Td ET BT -51.24 514.1530000000001 Td +51.24 514.1529999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45169,7 +45156,7 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 521.2930000000001 Td +272.17692192000004 521.2929999999999 Td /F1.0 10.5 Tf <4a736f6e4f626a656374> Tj ET @@ -45206,19 +45193,19 @@ S 0.200 0.200 0.200 scn BT -51.24 490.8730000000001 Td +51.24 490.873 Td /F2.0 10.5 Tf -<7365727669636555756964> Tj +<7365727669636544657461696c73> Tj ET BT -51.24 476.5930000000001 Td +51.24 476.59299999999996 Td ET BT -51.24 476.5930000000001 Td +51.24 476.59299999999996 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45251,13 +45238,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -272.17692192000004 483.7330000000001 Td +272.17692192000004 483.733 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4a736f6e4f626a656374> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -45288,19 +45283,19 @@ S 0.200 0.200 0.200 scn BT -51.24 453.31300000000016 Td +51.24 453.31299999999993 Td /F2.0 10.5 Tf -<76657273696f6e> Tj +<7365727669636555756964> Tj ET BT -51.24 439.03300000000013 Td +51.24 439.0329999999999 Td ET BT -51.24 439.03300000000013 Td +51.24 439.0329999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45335,7 +45330,89 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 446.1730000000002 Td +272.17692192000004 446.17299999999994 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 432.000 m +269.177 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 394.440 m +269.177 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.250 m +48.240 394.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.250 m +269.177 394.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 415.753 Td +/F2.0 10.5 Tf +<76657273696f6e> Tj +ET + + +BT +51.24 401.47299999999996 Td +ET + + +BT +51.24 401.47299999999996 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 432.000 m +563.760 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 394.440 m +563.760 394.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.250 m +269.177 394.190 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 432.250 m +563.760 394.190 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 408.613 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -45365,42 +45442,50 @@ Q endstream endobj -303 0 obj +301 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 302 0 R +/Contents 300 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 22 0 R /F3.0 24 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 589 0 R +/XObject << /Stamp1 588 0 R >> >> -/Annots [305 0 R 306 0 R] +/Annots [302 0 R 304 0 R 305 0 R] >> endobj -304 0 obj -[303 0 R /XYZ 0 683.1600000000001 null] +302 0 obj +<< /Border [0 0 0] +/Dest (_loopelementmodel) +/Subtype /Link +/Rect [280.76592192000004 706.267 378.47892192000006 720.547] +/Type /Annot +>> endobj -305 0 obj +303 0 obj +[301 0 R /XYZ 0 645.5999999999999 null] +endobj +304 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 555.7870000000001 325.32792192000005 570.0670000000001] +/Rect [272.17692192000004 518.227 325.32792192000005 532.507] /Type /Annot >> endobj -306 0 obj +305 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 518.2270000000002 325.32792192000005 532.5070000000002] +/Rect [272.17692192000004 480.667 325.32792192000005 494.947] /Type /Annot >> endobj -307 0 obj +306 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -45408,7 +45493,7 @@ endobj /Type /Annot >> endobj -308 0 obj +307 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -45416,7 +45501,7 @@ endobj /Type /Annot >> endobj -309 0 obj +308 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -45424,7 +45509,7 @@ endobj /Type /Annot >> endobj -310 0 obj +309 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -45432,7 +45517,7 @@ endobj /Type /Annot >> endobj -311 0 obj +310 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -45440,7 +45525,7 @@ endobj /Type /Annot >> endobj -312 0 obj +311 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -45448,7 +45533,7 @@ endobj /Type /Annot >> endobj -313 0 obj +312 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -45456,7 +45541,7 @@ endobj /Type /Annot >> endobj -314 0 obj +313 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -45464,23 +45549,23 @@ endobj /Type /Annot >> endobj -315 0 obj +314 0 obj << /Border [0 0 0] -/Dest (_route30) +/Dest (_route61) /Subtype /Link /Rect [60.24000000000001 621.7799999999997 181.64100000000002 636.0599999999998] /Type /Annot >> endobj -316 0 obj +315 0 obj << /Border [0 0 0] -/Dest (_route30) +/Dest (_route61) /Subtype /Link /Rect [557.8905 621.7799999999997 563.76 636.0599999999998] /Type /Annot >> endobj -317 0 obj +316 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -45488,7 +45573,7 @@ endobj /Type /Annot >> endobj -318 0 obj +317 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -45496,7 +45581,7 @@ endobj /Type /Annot >> endobj -319 0 obj +318 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -45504,7 +45589,7 @@ endobj /Type /Annot >> endobj -320 0 obj +319 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -45512,23 +45597,23 @@ endobj /Type /Annot >> endobj -321 0 obj +320 0 obj << /Border [0 0 0] -/Dest (_route31) +/Dest (_route62) /Subtype /Link /Rect [60.24000000000001 566.3399999999997 183.8775 580.6199999999998] /Type /Annot >> endobj -322 0 obj +321 0 obj << /Border [0 0 0] -/Dest (_route31) +/Dest (_route62) /Subtype /Link /Rect [557.8905 566.3399999999997 563.76 580.6199999999998] /Type /Annot >> endobj -323 0 obj +322 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -45536,7 +45621,7 @@ endobj /Type /Annot >> endobj -324 0 obj +323 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -45544,7 +45629,7 @@ endobj /Type /Annot >> endobj -325 0 obj +324 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -45552,7 +45637,7 @@ endobj /Type /Annot >> endobj -326 0 obj +325 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -45560,23 +45645,23 @@ endobj /Type /Annot >> endobj -327 0 obj +326 0 obj << /Border [0 0 0] -/Dest (_route18) +/Dest (_route49) /Subtype /Link /Rect [60.24000000000001 510.89999999999975 172.716 525.1799999999997] /Type /Annot >> endobj -328 0 obj +327 0 obj << /Border [0 0 0] -/Dest (_route18) +/Dest (_route49) /Subtype /Link /Rect [557.8905 510.89999999999975 563.76 525.1799999999997] /Type /Annot >> endobj -329 0 obj +328 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -45584,7 +45669,7 @@ endobj /Type /Annot >> endobj -330 0 obj +329 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -45592,7 +45677,7 @@ endobj /Type /Annot >> endobj -331 0 obj +330 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -45600,7 +45685,7 @@ endobj /Type /Annot >> endobj -332 0 obj +331 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -45608,23 +45693,23 @@ endobj /Type /Annot >> endobj -333 0 obj +332 0 obj << /Border [0 0 0] -/Dest (_route20) +/Dest (_route51) /Subtype /Link /Rect [60.24000000000001 455.4599999999997 172.548 469.73999999999967] /Type /Annot >> endobj -334 0 obj +333 0 obj << /Border [0 0 0] -/Dest (_route20) +/Dest (_route51) /Subtype /Link /Rect [557.8905 455.4599999999997 563.76 469.73999999999967] /Type /Annot >> endobj -335 0 obj +334 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -45632,7 +45717,7 @@ endobj /Type /Annot >> endobj -336 0 obj +335 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -45640,7 +45725,7 @@ endobj /Type /Annot >> endobj -337 0 obj +336 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -45648,7 +45733,7 @@ endobj /Type /Annot >> endobj -338 0 obj +337 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -45656,7 +45741,7 @@ endobj /Type /Annot >> endobj -339 0 obj +338 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -45664,7 +45749,7 @@ endobj /Type /Annot >> endobj -340 0 obj +339 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -45672,7 +45757,7 @@ endobj /Type /Annot >> endobj -341 0 obj +340 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -45680,7 +45765,7 @@ endobj /Type /Annot >> endobj -342 0 obj +341 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -45688,7 +45773,7 @@ endobj /Type /Annot >> endobj -343 0 obj +342 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_secondary_names_get) /Subtype /Link @@ -45696,7 +45781,7 @@ endobj /Type /Annot >> endobj -344 0 obj +343 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_secondary_names_get) /Subtype /Link @@ -45704,7 +45789,7 @@ endobj /Type /Annot >> endobj -345 0 obj +344 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -45712,7 +45797,7 @@ endobj /Type /Annot >> endobj -346 0 obj +345 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -45720,7 +45805,7 @@ endobj /Type /Annot >> endobj -347 0 obj +346 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -45728,7 +45813,7 @@ endobj /Type /Annot >> endobj -348 0 obj +347 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -45736,7 +45821,7 @@ endobj /Type /Annot >> endobj -349 0 obj +348 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_dictionaryname_get) /Subtype /Link @@ -45744,7 +45829,7 @@ endobj /Type /Annot >> endobj -350 0 obj +349 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_dictionaryname_get) /Subtype /Link @@ -45752,7 +45837,7 @@ endobj /Type /Annot >> endobj -351 0 obj +350 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -45760,7 +45845,7 @@ endobj /Type /Annot >> endobj -352 0 obj +351 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -45768,7 +45853,7 @@ endobj /Type /Annot >> endobj -353 0 obj +352 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -45776,7 +45861,7 @@ endobj /Type /Annot >> endobj -354 0 obj +353 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -45784,7 +45869,7 @@ endobj /Type /Annot >> endobj -355 0 obj +354 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -45792,7 +45877,7 @@ endobj /Type /Annot >> endobj -356 0 obj +355 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -45800,7 +45885,7 @@ endobj /Type /Annot >> endobj -357 0 obj +356 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_put) /Subtype /Link @@ -45808,7 +45893,7 @@ endobj /Type /Annot >> endobj -358 0 obj +357 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_put) /Subtype /Link @@ -45816,7 +45901,7 @@ endobj /Type /Annot >> endobj -359 0 obj +358 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -45824,7 +45909,7 @@ endobj /Type /Annot >> endobj -360 0 obj +359 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -45832,7 +45917,7 @@ endobj /Type /Annot >> endobj -361 0 obj +360 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -45840,7 +45925,7 @@ endobj /Type /Annot >> endobj -362 0 obj +361 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -45848,7 +45933,7 @@ endobj /Type /Annot >> endobj -363 0 obj +362 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -45856,7 +45941,7 @@ endobj /Type /Annot >> endobj -364 0 obj +363 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -45864,7 +45949,7 @@ endobj /Type /Annot >> endobj -365 0 obj +364 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -45872,7 +45957,7 @@ endobj /Type /Annot >> endobj -366 0 obj +365 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -45880,23 +45965,23 @@ endobj /Type /Annot >> endobj -367 0 obj +366 0 obj << /Border [0 0 0] -/Dest (_route22) +/Dest (_route53) /Subtype /Link /Rect [60.24000000000001 141.29999999999953 232.70250000000001 155.57999999999953] /Type /Annot >> endobj -368 0 obj +367 0 obj << /Border [0 0 0] -/Dest (_route22) +/Dest (_route53) /Subtype /Link /Rect [557.8905 141.29999999999953 563.76 155.57999999999953] /Type /Annot >> endobj -369 0 obj +368 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -45904,7 +45989,7 @@ endobj /Type /Annot >> endobj -370 0 obj +369 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -45912,7 +45997,7 @@ endobj /Type /Annot >> endobj -371 0 obj +370 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -45920,7 +46005,7 @@ endobj /Type /Annot >> endobj -372 0 obj +371 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -45928,7 +46013,7 @@ endobj /Type /Annot >> endobj -373 0 obj +372 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -45936,7 +46021,7 @@ endobj /Type /Annot >> endobj -374 0 obj +373 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -45944,7 +46029,7 @@ endobj /Type /Annot >> endobj -375 0 obj +374 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_elements_shortname_delete) /Subtype /Link @@ -45952,7 +46037,7 @@ endobj /Type /Annot >> endobj -376 0 obj +375 0 obj << /Border [0 0 0] /Dest (_v2_dictionary_name_elements_shortname_delete) /Subtype /Link @@ -45960,7 +46045,7 @@ endobj /Type /Annot >> endobj -377 0 obj +376 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -45968,7 +46053,7 @@ endobj /Type /Annot >> endobj -378 0 obj +377 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -45976,7 +46061,7 @@ endobj /Type /Annot >> endobj -379 0 obj +378 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -45984,7 +46069,7 @@ endobj /Type /Annot >> endobj -380 0 obj +379 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -45992,7 +46077,7 @@ endobj /Type /Annot >> endobj -381 0 obj +380 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -46000,7 +46085,7 @@ endobj /Type /Annot >> endobj -382 0 obj +381 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -46008,23 +46093,23 @@ endobj /Type /Annot >> endobj -383 0 obj +382 0 obj << /Border [0 0 0] -/Dest (_route14) +/Dest (_route45) /Subtype /Link /Rect [60.24000000000001 704.7599999999999 245.15550000000002 719.04] /Type /Annot >> endobj -384 0 obj +383 0 obj << /Border [0 0 0] -/Dest (_route14) +/Dest (_route45) /Subtype /Link /Rect [557.8905 704.7599999999999 563.76 719.04] /Type /Annot >> endobj -385 0 obj +384 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -46032,7 +46117,7 @@ endobj /Type /Annot >> endobj -386 0 obj +385 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -46040,7 +46125,7 @@ endobj /Type /Annot >> endobj -387 0 obj +386 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -46048,7 +46133,7 @@ endobj /Type /Annot >> endobj -388 0 obj +387 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -46056,23 +46141,23 @@ endobj /Type /Annot >> endobj -389 0 obj +388 0 obj << /Border [0 0 0] -/Dest (_route8) +/Dest (_route39) /Subtype /Link /Rect [60.24000000000001 649.3199999999998 248.431294921875 663.5999999999999] /Type /Annot >> endobj -390 0 obj +389 0 obj << /Border [0 0 0] -/Dest (_route8) +/Dest (_route39) /Subtype /Link /Rect [557.8905 649.3199999999998 563.76 663.5999999999999] /Type /Annot >> endobj -391 0 obj +390 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -46080,7 +46165,7 @@ endobj /Type /Annot >> endobj -392 0 obj +391 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -46088,7 +46173,7 @@ endobj /Type /Annot >> endobj -393 0 obj +392 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -46096,7 +46181,7 @@ endobj /Type /Annot >> endobj -394 0 obj +393 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -46104,7 +46189,7 @@ endobj /Type /Annot >> endobj -395 0 obj +394 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -46112,7 +46197,7 @@ endobj /Type /Annot >> endobj -396 0 obj +395 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -46120,23 +46205,23 @@ endobj /Type /Annot >> endobj -397 0 obj +396 0 obj << /Border [0 0 0] -/Dest (_route2) +/Dest (_route33) /Subtype /Link /Rect [60.24000000000001 575.3999999999997 214.8735 589.6799999999998] /Type /Annot >> endobj -398 0 obj +397 0 obj << /Border [0 0 0] -/Dest (_route2) +/Dest (_route33) /Subtype /Link /Rect [557.8905 575.3999999999997 563.76 589.6799999999998] /Type /Annot >> endobj -399 0 obj +398 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -46144,7 +46229,7 @@ endobj /Type /Annot >> endobj -400 0 obj +399 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -46152,7 +46237,7 @@ endobj /Type /Annot >> endobj -401 0 obj +400 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -46160,7 +46245,7 @@ endobj /Type /Annot >> endobj -402 0 obj +401 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -46168,23 +46253,23 @@ endobj /Type /Annot >> endobj -403 0 obj +402 0 obj << /Border [0 0 0] -/Dest (_route15) +/Dest (_route46) /Subtype /Link /Rect [60.24000000000001 519.9599999999998 259.467 534.2399999999998] /Type /Annot >> endobj -404 0 obj +403 0 obj << /Border [0 0 0] -/Dest (_route15) +/Dest (_route46) /Subtype /Link /Rect [557.8905 519.9599999999998 563.76 534.2399999999998] /Type /Annot >> endobj -405 0 obj +404 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -46192,7 +46277,7 @@ endobj /Type /Annot >> endobj -406 0 obj +405 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -46200,7 +46285,7 @@ endobj /Type /Annot >> endobj -407 0 obj +406 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -46208,7 +46293,7 @@ endobj /Type /Annot >> endobj -408 0 obj +407 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -46216,7 +46301,7 @@ endobj /Type /Annot >> endobj -409 0 obj +408 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -46224,7 +46309,7 @@ endobj /Type /Annot >> endobj -410 0 obj +409 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -46232,23 +46317,23 @@ endobj /Type /Annot >> endobj -411 0 obj +410 0 obj << /Border [0 0 0] -/Dest (_route9) +/Dest (_route40) /Subtype /Link /Rect [60.24000000000001 446.03999999999974 355.8885 460.3199999999997] /Type /Annot >> endobj -412 0 obj +411 0 obj << /Border [0 0 0] -/Dest (_route9) +/Dest (_route40) /Subtype /Link /Rect [557.8905 446.03999999999974 563.76 460.3199999999997] /Type /Annot >> endobj -413 0 obj +412 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -46256,7 +46341,7 @@ endobj /Type /Annot >> endobj -414 0 obj +413 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -46264,7 +46349,7 @@ endobj /Type /Annot >> endobj -415 0 obj +414 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -46272,7 +46357,7 @@ endobj /Type /Annot >> endobj -416 0 obj +415 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -46280,7 +46365,7 @@ endobj /Type /Annot >> endobj -417 0 obj +416 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -46288,7 +46373,7 @@ endobj /Type /Annot >> endobj -418 0 obj +417 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -46296,23 +46381,23 @@ endobj /Type /Annot >> endobj -419 0 obj +418 0 obj << /Border [0 0 0] -/Dest (_route12) +/Dest (_route43) /Subtype /Link /Rect [60.24000000000001 372.11999999999966 248.45250000000001 386.39999999999964] /Type /Annot >> endobj -420 0 obj +419 0 obj << /Border [0 0 0] -/Dest (_route12) +/Dest (_route43) /Subtype /Link /Rect [557.8905 372.11999999999966 563.76 386.39999999999964] /Type /Annot >> endobj -421 0 obj +420 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -46320,7 +46405,7 @@ endobj /Type /Annot >> endobj -422 0 obj +421 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -46328,7 +46413,7 @@ endobj /Type /Annot >> endobj -423 0 obj +422 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -46336,7 +46421,7 @@ endobj /Type /Annot >> endobj -424 0 obj +423 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -46344,7 +46429,7 @@ endobj /Type /Annot >> endobj -425 0 obj +424 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -46352,7 +46437,7 @@ endobj /Type /Annot >> endobj -426 0 obj +425 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -46360,23 +46445,23 @@ endobj /Type /Annot >> endobj -427 0 obj +426 0 obj << /Border [0 0 0] -/Dest (_route11) +/Dest (_route42) /Subtype /Link /Rect [60.24000000000001 298.1999999999996 235.842 312.47999999999956] /Type /Annot >> endobj -428 0 obj +427 0 obj << /Border [0 0 0] -/Dest (_route11) +/Dest (_route42) /Subtype /Link /Rect [557.8905 298.1999999999996 563.76 312.47999999999956] /Type /Annot >> endobj -429 0 obj +428 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -46384,7 +46469,7 @@ endobj /Type /Annot >> endobj -430 0 obj +429 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -46392,7 +46477,7 @@ endobj /Type /Annot >> endobj -431 0 obj +430 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -46400,7 +46485,7 @@ endobj /Type /Annot >> endobj -432 0 obj +431 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -46408,7 +46493,7 @@ endobj /Type /Annot >> endobj -433 0 obj +432 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -46416,7 +46501,7 @@ endobj /Type /Annot >> endobj -434 0 obj +433 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -46424,23 +46509,23 @@ endobj /Type /Annot >> endobj -435 0 obj +434 0 obj << /Border [0 0 0] -/Dest (_route13) +/Dest (_route44) /Subtype /Link /Rect [60.24000000000001 224.27999999999952 249.70200000000003 238.55999999999952] /Type /Annot >> endobj -436 0 obj +435 0 obj << /Border [0 0 0] -/Dest (_route13) +/Dest (_route44) /Subtype /Link /Rect [557.8905 224.27999999999952 563.76 238.55999999999952] /Type /Annot >> endobj -437 0 obj +436 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -46448,7 +46533,7 @@ endobj /Type /Annot >> endobj -438 0 obj +437 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -46456,7 +46541,7 @@ endobj /Type /Annot >> endobj -439 0 obj +438 0 obj << /Border [0 0 0] /Dest (_responses_17) /Subtype /Link @@ -46464,7 +46549,7 @@ endobj /Type /Annot >> endobj -440 0 obj +439 0 obj << /Border [0 0 0] /Dest (_responses_17) /Subtype /Link @@ -46472,7 +46557,7 @@ endobj /Type /Annot >> endobj -441 0 obj +440 0 obj << /Border [0 0 0] /Dest (_produces_16) /Subtype /Link @@ -46480,7 +46565,7 @@ endobj /Type /Annot >> endobj -442 0 obj +441 0 obj << /Border [0 0 0] /Dest (_produces_16) /Subtype /Link @@ -46488,23 +46573,23 @@ endobj /Type /Annot >> endobj -443 0 obj +442 0 obj << /Border [0 0 0] -/Dest (_route4) +/Dest (_route35) /Subtype /Link /Rect [60.24000000000001 150.35999999999956 307.641 164.63999999999956] /Type /Annot >> endobj -444 0 obj +443 0 obj << /Border [0 0 0] -/Dest (_route4) +/Dest (_route35) /Subtype /Link /Rect [557.8905 150.35999999999956 563.76 164.63999999999956] /Type /Annot >> endobj -445 0 obj +444 0 obj << /Border [0 0 0] /Dest (_parameters_13) /Subtype /Link @@ -46512,7 +46597,7 @@ endobj /Type /Annot >> endobj -446 0 obj +445 0 obj << /Border [0 0 0] /Dest (_parameters_13) /Subtype /Link @@ -46520,7 +46605,7 @@ endobj /Type /Annot >> endobj -447 0 obj +446 0 obj << /Border [0 0 0] /Dest (_responses_18) /Subtype /Link @@ -46528,7 +46613,7 @@ endobj /Type /Annot >> endobj -448 0 obj +447 0 obj << /Border [0 0 0] /Dest (_responses_18) /Subtype /Link @@ -46536,7 +46621,7 @@ endobj /Type /Annot >> endobj -449 0 obj +448 0 obj << /Border [0 0 0] /Dest (_produces_17) /Subtype /Link @@ -46544,7 +46629,7 @@ endobj /Type /Annot >> endobj -450 0 obj +449 0 obj << /Border [0 0 0] /Dest (_produces_17) /Subtype /Link @@ -46552,23 +46637,23 @@ endobj /Type /Annot >> endobj -451 0 obj +450 0 obj << /Border [0 0 0] -/Dest (_route10) +/Dest (_route41) /Subtype /Link /Rect [60.24000000000001 76.4399999999996 261.860794921875 90.7199999999996] /Type /Annot >> endobj -452 0 obj +451 0 obj << /Border [0 0 0] -/Dest (_route10) +/Dest (_route41) /Subtype /Link /Rect [557.8905 76.4399999999996 563.76 90.7199999999996] /Type /Annot >> endobj -453 0 obj +452 0 obj << /Border [0 0 0] /Dest (_parameters_14) /Subtype /Link @@ -46576,7 +46661,7 @@ endobj /Type /Annot >> endobj -454 0 obj +453 0 obj << /Border [0 0 0] /Dest (_parameters_14) /Subtype /Link @@ -46584,7 +46669,7 @@ endobj /Type /Annot >> endobj -455 0 obj +454 0 obj << /Border [0 0 0] /Dest (_responses_19) /Subtype /Link @@ -46592,7 +46677,7 @@ endobj /Type /Annot >> endobj -456 0 obj +455 0 obj << /Border [0 0 0] /Dest (_responses_19) /Subtype /Link @@ -46600,7 +46685,7 @@ endobj /Type /Annot >> endobj -457 0 obj +456 0 obj << /Border [0 0 0] /Dest (_produces_18) /Subtype /Link @@ -46608,7 +46693,7 @@ endobj /Type /Annot >> endobj -458 0 obj +457 0 obj << /Border [0 0 0] /Dest (_produces_18) /Subtype /Link @@ -46616,23 +46701,23 @@ endobj /Type /Annot >> endobj -459 0 obj +458 0 obj << /Border [0 0 0] -/Dest (_route5) +/Dest (_route36) /Subtype /Link /Rect [60.24000000000001 704.7599999999999 339.560794921875 719.04] /Type /Annot >> endobj -460 0 obj +459 0 obj << /Border [0 0 0] -/Dest (_route5) +/Dest (_route36) /Subtype /Link /Rect [552.021 704.7599999999999 563.76 719.04] /Type /Annot >> endobj -461 0 obj +460 0 obj << /Border [0 0 0] /Dest (_parameters_15) /Subtype /Link @@ -46640,7 +46725,7 @@ endobj /Type /Annot >> endobj -462 0 obj +461 0 obj << /Border [0 0 0] /Dest (_parameters_15) /Subtype /Link @@ -46648,7 +46733,7 @@ endobj /Type /Annot >> endobj -463 0 obj +462 0 obj << /Border [0 0 0] /Dest (_responses_20) /Subtype /Link @@ -46656,7 +46741,7 @@ endobj /Type /Annot >> endobj -464 0 obj +463 0 obj << /Border [0 0 0] /Dest (_responses_20) /Subtype /Link @@ -46664,7 +46749,7 @@ endobj /Type /Annot >> endobj -465 0 obj +464 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -46672,7 +46757,7 @@ endobj /Type /Annot >> endobj -466 0 obj +465 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -46680,7 +46765,7 @@ endobj /Type /Annot >> endobj -467 0 obj +466 0 obj << /Border [0 0 0] /Dest (_produces_19) /Subtype /Link @@ -46688,7 +46773,7 @@ endobj /Type /Annot >> endobj -468 0 obj +467 0 obj << /Border [0 0 0] /Dest (_produces_19) /Subtype /Link @@ -46696,23 +46781,23 @@ endobj /Type /Annot >> endobj -469 0 obj +468 0 obj << /Border [0 0 0] -/Dest (_route7) +/Dest (_route38) /Subtype /Link /Rect [60.24000000000001 612.3599999999998 350.38629492187505 626.6399999999999] /Type /Annot >> endobj -470 0 obj +469 0 obj << /Border [0 0 0] -/Dest (_route7) +/Dest (_route38) /Subtype /Link /Rect [552.021 612.3599999999998 563.76 626.6399999999999] /Type /Annot >> endobj -471 0 obj +470 0 obj << /Border [0 0 0] /Dest (_parameters_16) /Subtype /Link @@ -46720,7 +46805,7 @@ endobj /Type /Annot >> endobj -472 0 obj +471 0 obj << /Border [0 0 0] /Dest (_parameters_16) /Subtype /Link @@ -46728,7 +46813,7 @@ endobj /Type /Annot >> endobj -473 0 obj +472 0 obj << /Border [0 0 0] /Dest (_responses_21) /Subtype /Link @@ -46736,7 +46821,7 @@ endobj /Type /Annot >> endobj -474 0 obj +473 0 obj << /Border [0 0 0] /Dest (_responses_21) /Subtype /Link @@ -46744,7 +46829,7 @@ endobj /Type /Annot >> endobj -475 0 obj +474 0 obj << /Border [0 0 0] /Dest (_consumes_4) /Subtype /Link @@ -46752,7 +46837,7 @@ endobj /Type /Annot >> endobj -476 0 obj +475 0 obj << /Border [0 0 0] /Dest (_consumes_4) /Subtype /Link @@ -46760,7 +46845,7 @@ endobj /Type /Annot >> endobj -477 0 obj +476 0 obj << /Border [0 0 0] /Dest (_produces_20) /Subtype /Link @@ -46768,7 +46853,7 @@ endobj /Type /Annot >> endobj -478 0 obj +477 0 obj << /Border [0 0 0] /Dest (_produces_20) /Subtype /Link @@ -46776,23 +46861,23 @@ endobj /Type /Annot >> endobj -479 0 obj +478 0 obj << /Border [0 0 0] -/Dest (_route6) +/Dest (_route37) /Subtype /Link /Rect [60.24000000000001 519.9599999999998 352.81158984375 534.2399999999998] /Type /Annot >> endobj -480 0 obj +479 0 obj << /Border [0 0 0] -/Dest (_route6) +/Dest (_route37) /Subtype /Link /Rect [552.021 519.9599999999998 563.76 534.2399999999998] /Type /Annot >> endobj -481 0 obj +480 0 obj << /Border [0 0 0] /Dest (_parameters_17) /Subtype /Link @@ -46800,7 +46885,7 @@ endobj /Type /Annot >> endobj -482 0 obj +481 0 obj << /Border [0 0 0] /Dest (_parameters_17) /Subtype /Link @@ -46808,7 +46893,7 @@ endobj /Type /Annot >> endobj -483 0 obj +482 0 obj << /Border [0 0 0] /Dest (_responses_22) /Subtype /Link @@ -46816,7 +46901,7 @@ endobj /Type /Annot >> endobj -484 0 obj +483 0 obj << /Border [0 0 0] /Dest (_responses_22) /Subtype /Link @@ -46824,7 +46909,7 @@ endobj /Type /Annot >> endobj -485 0 obj +484 0 obj << /Border [0 0 0] /Dest (_consumes_5) /Subtype /Link @@ -46832,7 +46917,7 @@ endobj /Type /Annot >> endobj -486 0 obj +485 0 obj << /Border [0 0 0] /Dest (_consumes_5) /Subtype /Link @@ -46840,7 +46925,7 @@ endobj /Type /Annot >> endobj -487 0 obj +486 0 obj << /Border [0 0 0] /Dest (_produces_21) /Subtype /Link @@ -46848,7 +46933,7 @@ endobj /Type /Annot >> endobj -488 0 obj +487 0 obj << /Border [0 0 0] /Dest (_produces_21) /Subtype /Link @@ -46856,23 +46941,23 @@ endobj /Type /Annot >> endobj -489 0 obj +488 0 obj << /Border [0 0 0] -/Dest (_route3) +/Dest (_route34) /Subtype /Link /Rect [60.24000000000001 427.5599999999997 212.0595 441.8399999999997] /Type /Annot >> endobj -490 0 obj +489 0 obj << /Border [0 0 0] -/Dest (_route3) +/Dest (_route34) /Subtype /Link /Rect [552.021 427.5599999999997 563.76 441.8399999999997] /Type /Annot >> endobj -491 0 obj +490 0 obj << /Border [0 0 0] /Dest (_parameters_18) /Subtype /Link @@ -46880,7 +46965,7 @@ endobj /Type /Annot >> endobj -492 0 obj +491 0 obj << /Border [0 0 0] /Dest (_parameters_18) /Subtype /Link @@ -46888,7 +46973,7 @@ endobj /Type /Annot >> endobj -493 0 obj +492 0 obj << /Border [0 0 0] /Dest (_responses_23) /Subtype /Link @@ -46896,7 +46981,7 @@ endobj /Type /Annot >> endobj -494 0 obj +493 0 obj << /Border [0 0 0] /Dest (_responses_23) /Subtype /Link @@ -46904,7 +46989,7 @@ endobj /Type /Annot >> endobj -495 0 obj +494 0 obj << /Border [0 0 0] /Dest (_produces_22) /Subtype /Link @@ -46912,7 +46997,7 @@ endobj /Type /Annot >> endobj -496 0 obj +495 0 obj << /Border [0 0 0] /Dest (_produces_22) /Subtype /Link @@ -46920,23 +47005,23 @@ endobj /Type /Annot >> endobj -497 0 obj +496 0 obj << /Border [0 0 0] -/Dest (_route25) +/Dest (_route56) /Subtype /Link /Rect [60.24000000000001 353.63999999999965 221.091755859375 367.9199999999996] /Type /Annot >> endobj -498 0 obj +497 0 obj << /Border [0 0 0] -/Dest (_route25) +/Dest (_route56) /Subtype /Link /Rect [552.021 353.63999999999965 563.76 367.9199999999996] /Type /Annot >> endobj -499 0 obj +498 0 obj << /Border [0 0 0] /Dest (_responses_24) /Subtype /Link @@ -46944,7 +47029,7 @@ endobj /Type /Annot >> endobj -500 0 obj +499 0 obj << /Border [0 0 0] /Dest (_responses_24) /Subtype /Link @@ -46952,7 +47037,7 @@ endobj /Type /Annot >> endobj -501 0 obj +500 0 obj << /Border [0 0 0] /Dest (_produces_23) /Subtype /Link @@ -46960,7 +47045,7 @@ endobj /Type /Annot >> endobj -502 0 obj +501 0 obj << /Border [0 0 0] /Dest (_produces_23) /Subtype /Link @@ -46968,7 +47053,7 @@ endobj /Type /Annot >> endobj -503 0 obj +502 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_yaml_policymodeltype_get) /Subtype /Link @@ -46976,7 +47061,7 @@ endobj /Type /Annot >> endobj -504 0 obj +503 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_yaml_policymodeltype_get) /Subtype /Link @@ -46984,7 +47069,7 @@ endobj /Type /Annot >> endobj -505 0 obj +504 0 obj << /Border [0 0 0] /Dest (_parameters_19) /Subtype /Link @@ -46992,7 +47077,7 @@ endobj /Type /Annot >> endobj -506 0 obj +505 0 obj << /Border [0 0 0] /Dest (_parameters_19) /Subtype /Link @@ -47000,7 +47085,7 @@ endobj /Type /Annot >> endobj -507 0 obj +506 0 obj << /Border [0 0 0] /Dest (_responses_25) /Subtype /Link @@ -47008,7 +47093,7 @@ endobj /Type /Annot >> endobj -508 0 obj +507 0 obj << /Border [0 0 0] /Dest (_responses_25) /Subtype /Link @@ -47016,7 +47101,7 @@ endobj /Type /Annot >> endobj -509 0 obj +508 0 obj << /Border [0 0 0] /Dest (_produces_24) /Subtype /Link @@ -47024,7 +47109,7 @@ endobj /Type /Annot >> endobj -510 0 obj +509 0 obj << /Border [0 0 0] /Dest (_produces_24) /Subtype /Link @@ -47032,7 +47117,7 @@ endobj /Type /Annot >> endobj -511 0 obj +510 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_policymodeltype_get) /Subtype /Link @@ -47040,7 +47125,7 @@ endobj /Type /Annot >> endobj -512 0 obj +511 0 obj << /Border [0 0 0] /Dest (_v2_policytoscamodels_policymodeltype_get) /Subtype /Link @@ -47048,7 +47133,7 @@ endobj /Type /Annot >> endobj -513 0 obj +512 0 obj << /Border [0 0 0] /Dest (_parameters_20) /Subtype /Link @@ -47056,7 +47141,7 @@ endobj /Type /Annot >> endobj -514 0 obj +513 0 obj << /Border [0 0 0] /Dest (_parameters_20) /Subtype /Link @@ -47064,7 +47149,7 @@ endobj /Type /Annot >> endobj -515 0 obj +514 0 obj << /Border [0 0 0] /Dest (_responses_26) /Subtype /Link @@ -47072,7 +47157,7 @@ endobj /Type /Annot >> endobj -516 0 obj +515 0 obj << /Border [0 0 0] /Dest (_responses_26) /Subtype /Link @@ -47080,7 +47165,7 @@ endobj /Type /Annot >> endobj -517 0 obj +516 0 obj << /Border [0 0 0] /Dest (_produces_25) /Subtype /Link @@ -47088,7 +47173,7 @@ endobj /Type /Annot >> endobj -518 0 obj +517 0 obj << /Border [0 0 0] /Dest (_produces_25) /Subtype /Link @@ -47096,23 +47181,23 @@ endobj /Type /Annot >> endobj -519 0 obj +518 0 obj << /Border [0 0 0] -/Dest (_route26) +/Dest (_route57) /Subtype /Link /Rect [60.24000000000001 150.35999999999956 318.73125585937504 164.63999999999956] /Type /Annot >> endobj -520 0 obj +519 0 obj << /Border [0 0 0] -/Dest (_route26) +/Dest (_route57) /Subtype /Link /Rect [552.021 150.35999999999956 563.76 164.63999999999956] /Type /Annot >> endobj -521 0 obj +520 0 obj << /Border [0 0 0] /Dest (_parameters_21) /Subtype /Link @@ -47120,7 +47205,7 @@ endobj /Type /Annot >> endobj -522 0 obj +521 0 obj << /Border [0 0 0] /Dest (_parameters_21) /Subtype /Link @@ -47128,7 +47213,7 @@ endobj /Type /Annot >> endobj -523 0 obj +522 0 obj << /Border [0 0 0] /Dest (_responses_27) /Subtype /Link @@ -47136,7 +47221,7 @@ endobj /Type /Annot >> endobj -524 0 obj +523 0 obj << /Border [0 0 0] /Dest (_responses_27) /Subtype /Link @@ -47144,7 +47229,7 @@ endobj /Type /Annot >> endobj -525 0 obj +524 0 obj << /Border [0 0 0] /Dest (_consumes_6) /Subtype /Link @@ -47152,7 +47237,7 @@ endobj /Type /Annot >> endobj -526 0 obj +525 0 obj << /Border [0 0 0] /Dest (_consumes_6) /Subtype /Link @@ -47160,7 +47245,7 @@ endobj /Type /Annot >> endobj -527 0 obj +526 0 obj << /Border [0 0 0] /Dest (_produces_26) /Subtype /Link @@ -47168,7 +47253,7 @@ endobj /Type /Annot >> endobj -528 0 obj +527 0 obj << /Border [0 0 0] /Dest (_produces_26) /Subtype /Link @@ -47176,23 +47261,23 @@ endobj /Type /Annot >> endobj -529 0 obj +528 0 obj << /Border [0 0 0] -/Dest (_route29) +/Dest (_route60) /Subtype /Link /Rect [60.24000000000001 57.95999999999961 175.8555 72.23999999999961] /Type /Annot >> endobj -530 0 obj +529 0 obj << /Border [0 0 0] -/Dest (_route29) +/Dest (_route60) /Subtype /Link /Rect [552.021 57.95999999999961 563.76 72.23999999999961] /Type /Annot >> endobj -531 0 obj +530 0 obj << /Border [0 0 0] /Dest (_responses_28) /Subtype /Link @@ -47200,7 +47285,7 @@ endobj /Type /Annot >> endobj -532 0 obj +531 0 obj << /Border [0 0 0] /Dest (_responses_28) /Subtype /Link @@ -47208,7 +47293,7 @@ endobj /Type /Annot >> endobj -533 0 obj +532 0 obj << /Border [0 0 0] /Dest (_produces_27) /Subtype /Link @@ -47216,7 +47301,7 @@ endobj /Type /Annot >> endobj -534 0 obj +533 0 obj << /Border [0 0 0] /Dest (_produces_27) /Subtype /Link @@ -47224,7 +47309,7 @@ endobj /Type /Annot >> endobj -535 0 obj +534 0 obj << /Border [0 0 0] /Dest (_v2_templates_names_get) /Subtype /Link @@ -47232,7 +47317,7 @@ endobj /Type /Annot >> endobj -536 0 obj +535 0 obj << /Border [0 0 0] /Dest (_v2_templates_names_get) /Subtype /Link @@ -47240,7 +47325,7 @@ endobj /Type /Annot >> endobj -537 0 obj +536 0 obj << /Border [0 0 0] /Dest (_responses_29) /Subtype /Link @@ -47248,7 +47333,7 @@ endobj /Type /Annot >> endobj -538 0 obj +537 0 obj << /Border [0 0 0] /Dest (_responses_29) /Subtype /Link @@ -47256,7 +47341,7 @@ endobj /Type /Annot >> endobj -539 0 obj +538 0 obj << /Border [0 0 0] /Dest (_produces_28) /Subtype /Link @@ -47264,7 +47349,7 @@ endobj /Type /Annot >> endobj -540 0 obj +539 0 obj << /Border [0 0 0] /Dest (_produces_28) /Subtype /Link @@ -47272,7 +47357,7 @@ endobj /Type /Annot >> endobj -541 0 obj +540 0 obj << /Border [0 0 0] /Dest (_v2_templates_templatename_get) /Subtype /Link @@ -47280,7 +47365,7 @@ endobj /Type /Annot >> endobj -542 0 obj +541 0 obj << /Border [0 0 0] /Dest (_v2_templates_templatename_get) /Subtype /Link @@ -47288,7 +47373,7 @@ endobj /Type /Annot >> endobj -543 0 obj +542 0 obj << /Border [0 0 0] /Dest (_parameters_22) /Subtype /Link @@ -47296,7 +47381,7 @@ endobj /Type /Annot >> endobj -544 0 obj +543 0 obj << /Border [0 0 0] /Dest (_parameters_22) /Subtype /Link @@ -47304,7 +47389,7 @@ endobj /Type /Annot >> endobj -545 0 obj +544 0 obj << /Border [0 0 0] /Dest (_responses_30) /Subtype /Link @@ -47312,7 +47397,7 @@ endobj /Type /Annot >> endobj -546 0 obj +545 0 obj << /Border [0 0 0] /Dest (_responses_30) /Subtype /Link @@ -47320,7 +47405,7 @@ endobj /Type /Annot >> endobj -547 0 obj +546 0 obj << /Border [0 0 0] /Dest (_produces_29) /Subtype /Link @@ -47328,7 +47413,7 @@ endobj /Type /Annot >> endobj -548 0 obj +547 0 obj << /Border [0 0 0] /Dest (_produces_29) /Subtype /Link @@ -47336,7 +47421,7 @@ endobj /Type /Annot >> endobj -549 0 obj +548 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link @@ -47344,7 +47429,7 @@ endobj /Type /Annot >> endobj -550 0 obj +549 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link @@ -47352,7 +47437,7 @@ endobj /Type /Annot >> endobj -551 0 obj +550 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link @@ -47360,7 +47445,7 @@ endobj /Type /Annot >> endobj -552 0 obj +551 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link @@ -47368,7 +47453,7 @@ endobj /Type /Annot >> endobj -553 0 obj +552 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link @@ -47376,7 +47461,7 @@ endobj /Type /Annot >> endobj -554 0 obj +553 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link @@ -47384,7 +47469,7 @@ endobj /Type /Annot >> endobj -555 0 obj +554 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link @@ -47392,7 +47477,7 @@ endobj /Type /Annot >> endobj -556 0 obj +555 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link @@ -47400,7 +47485,7 @@ endobj /Type /Annot >> endobj -557 0 obj +556 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -47408,7 +47493,7 @@ endobj /Type /Annot >> endobj -558 0 obj +557 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -47416,7 +47501,7 @@ endobj /Type /Annot >> endobj -559 0 obj +558 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -47424,7 +47509,7 @@ endobj /Type /Annot >> endobj -560 0 obj +559 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -47432,7 +47517,7 @@ endobj /Type /Annot >> endobj -561 0 obj +560 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -47440,7 +47525,7 @@ endobj /Type /Annot >> endobj -562 0 obj +561 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -47448,7 +47533,7 @@ endobj /Type /Annot >> endobj -563 0 obj +562 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -47456,7 +47541,7 @@ endobj /Type /Annot >> endobj -564 0 obj +563 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -47464,7 +47549,7 @@ endobj /Type /Annot >> endobj -565 0 obj +564 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -47472,7 +47557,7 @@ endobj /Type /Annot >> endobj -566 0 obj +565 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -47480,7 +47565,7 @@ endobj /Type /Annot >> endobj -567 0 obj +566 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -47488,7 +47573,7 @@ endobj /Type /Annot >> endobj -568 0 obj +567 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -47496,7 +47581,7 @@ endobj /Type /Annot >> endobj -569 0 obj +568 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -47504,7 +47589,7 @@ endobj /Type /Annot >> endobj -570 0 obj +569 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -47512,7 +47597,7 @@ endobj /Type /Annot >> endobj -571 0 obj +570 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -47520,7 +47605,7 @@ endobj /Type /Annot >> endobj -572 0 obj +571 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link @@ -47528,7 +47613,7 @@ endobj /Type /Annot >> endobj -573 0 obj +572 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -47536,7 +47621,7 @@ endobj /Type /Annot >> endobj -574 0 obj +573 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -47544,7 +47629,7 @@ endobj /Type /Annot >> endobj -575 0 obj +574 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -47552,7 +47637,7 @@ endobj /Type /Annot >> endobj -576 0 obj +575 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -47560,7 +47645,7 @@ endobj /Type /Annot >> endobj -577 0 obj +576 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -47568,7 +47653,7 @@ endobj /Type /Annot >> endobj -578 0 obj +577 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link @@ -47576,7 +47661,7 @@ endobj /Type /Annot >> endobj -579 0 obj +578 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link @@ -47584,7 +47669,7 @@ endobj /Type /Annot >> endobj -580 0 obj +579 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link @@ -47592,7 +47677,7 @@ endobj /Type /Annot >> endobj -581 0 obj +580 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -47600,7 +47685,7 @@ endobj /Type /Annot >> endobj -582 0 obj +581 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -47608,7 +47693,7 @@ endobj /Type /Annot >> endobj -583 0 obj +582 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link @@ -47616,7 +47701,7 @@ endobj /Type /Annot >> endobj -584 0 obj +583 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link @@ -47624,7 +47709,7 @@ endobj /Type /Annot >> endobj -585 0 obj +584 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -47632,7 +47717,7 @@ endobj /Type /Annot >> endobj -586 0 obj +585 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link @@ -47640,7 +47725,7 @@ endobj /Type /Annot >> endobj -587 0 obj +586 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -47648,7 +47733,7 @@ endobj /Type /Annot >> endobj -588 0 obj +587 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link @@ -47656,7 +47741,7 @@ endobj /Type /Annot >> endobj -589 0 obj +588 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 612.0 792.0] @@ -47684,1299 +47769,1299 @@ Q endstream endobj -590 0 obj +589 0 obj << /Type /Outlines /Count 143 -/First 591 0 R -/Last 714 0 R +/First 590 0 R +/Last 713 0 R >> endobj -591 0 obj +590 0 obj << /Title -/Parent 590 0 R +/Parent 589 0 R /Count 0 -/Next 592 0 R +/Next 591 0 R /Dest [7 0 R /XYZ 0 792.0 null] >> endobj -592 0 obj +591 0 obj << /Title -/Parent 590 0 R +/Parent 589 0 R /Count 0 -/Next 593 0 R -/Prev 591 0 R +/Next 592 0 R +/Prev 590 0 R /Dest [10 0 R /XYZ 0 792.0 null] >> endobj -593 0 obj +592 0 obj << /Title -/Parent 590 0 R +/Parent 589 0 R /Count 2 -/First 594 0 R -/Last 595 0 R -/Next 596 0 R -/Prev 592 0 R +/First 593 0 R +/Last 594 0 R +/Next 595 0 R +/Prev 591 0 R /Dest [18 0 R /XYZ 0 792.0 null] >> endobj -594 0 obj +593 0 obj << /Title -/Parent 593 0 R +/Parent 592 0 R /Count 0 -/Next 595 0 R +/Next 594 0 R /Dest [18 0 R /XYZ 0 712.0799999999999 null] >> endobj -595 0 obj +594 0 obj << /Title -/Parent 593 0 R +/Parent 592 0 R /Count 0 -/Prev 594 0 R +/Prev 593 0 R /Dest [18 0 R /XYZ 0 644.22 null] >> endobj -596 0 obj +595 0 obj << /Title -/Parent 590 0 R +/Parent 589 0 R /Count 117 -/First 597 0 R -/Last 710 0 R -/Next 714 0 R -/Prev 593 0 R +/First 596 0 R +/Last 709 0 R +/Next 713 0 R +/Prev 592 0 R /Dest [27 0 R /XYZ 0 792.0 null] >> endobj -597 0 obj +596 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 598 0 R -/Last 599 0 R -/Next 600 0 R +/First 597 0 R +/Last 598 0 R +/Next 599 0 R /Dest [27 0 R /XYZ 0 712.0799999999999 null] >> endobj -598 0 obj +597 0 obj << /Title -/Parent 597 0 R +/Parent 596 0 R /Count 0 -/Next 599 0 R +/Next 598 0 R /Dest [27 0 R /XYZ 0 672.0 null] >> endobj -599 0 obj +598 0 obj << /Title -/Parent 597 0 R +/Parent 596 0 R /Count 0 -/Prev 598 0 R +/Prev 597 0 R /Dest [27 0 R /XYZ 0 566.8800000000001 null] >> endobj -600 0 obj +599 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 601 0 R -/Last 602 0 R -/Next 603 0 R -/Prev 597 0 R +/First 600 0 R +/Last 601 0 R +/Next 602 0 R +/Prev 596 0 R /Dest [27 0 R /XYZ 0 510.60000000000025 null] >> endobj -601 0 obj +600 0 obj << /Title -/Parent 600 0 R +/Parent 599 0 R /Count 0 -/Next 602 0 R +/Next 601 0 R /Dest [27 0 R /XYZ 0 470.5200000000002 null] >> endobj -602 0 obj +601 0 obj << /Title -/Parent 600 0 R +/Parent 599 0 R /Count 0 -/Prev 601 0 R +/Prev 600 0 R /Dest [27 0 R /XYZ 0 379.6800000000002 null] >> endobj -603 0 obj +602 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 604 0 R -/Last 605 0 R -/Next 606 0 R -/Prev 600 0 R +/First 603 0 R +/Last 604 0 R +/Next 605 0 R +/Prev 599 0 R /Dest [27 0 R /XYZ 0 323.40000000000015 null] >> endobj -604 0 obj +603 0 obj << /Title -/Parent 603 0 R +/Parent 602 0 R /Count 0 -/Next 605 0 R +/Next 604 0 R /Dest [27 0 R /XYZ 0 283.3200000000001 null] >> endobj -605 0 obj +604 0 obj << /Title -/Parent 603 0 R +/Parent 602 0 R /Count 0 -/Prev 604 0 R +/Prev 603 0 R /Dest [27 0 R /XYZ 0 178.2000000000001 null] >> endobj -606 0 obj +605 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 4 -/First 607 0 R -/Last 610 0 R -/Next 611 0 R -/Prev 603 0 R +/First 606 0 R +/Last 609 0 R +/Next 610 0 R +/Prev 602 0 R /Dest [27 0 R /XYZ 0 121.92000000000007 null] >> endobj -607 0 obj +606 0 obj << /Title -/Parent 606 0 R +/Parent 605 0 R /Count 0 -/Next 608 0 R +/Next 607 0 R /Dest [43 0 R /XYZ 0 792.0 null] >> endobj -608 0 obj +607 0 obj << /Title -/Parent 606 0 R +/Parent 605 0 R /Count 0 -/Next 609 0 R -/Prev 607 0 R +/Next 608 0 R +/Prev 606 0 R /Dest [43 0 R /XYZ 0 653.2800000000002 null] >> endobj -609 0 obj +608 0 obj << /Title -/Parent 606 0 R +/Parent 605 0 R /Count 0 -/Next 610 0 R -/Prev 608 0 R +/Next 609 0 R +/Prev 607 0 R /Dest [43 0 R /XYZ 0 548.1600000000003 null] >> endobj -610 0 obj +609 0 obj << /Title -/Parent 606 0 R +/Parent 605 0 R /Count 0 -/Prev 609 0 R +/Prev 608 0 R /Dest [43 0 R /XYZ 0 491.88000000000045 null] >> endobj -611 0 obj +610 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 612 0 R -/Last 613 0 R -/Next 614 0 R -/Prev 606 0 R +/First 611 0 R +/Last 612 0 R +/Next 613 0 R +/Prev 605 0 R /Dest [43 0 R /XYZ 0 435.6000000000004 null] >> endobj -612 0 obj +611 0 obj << /Title -/Parent 611 0 R +/Parent 610 0 R /Count 0 -/Next 613 0 R +/Next 612 0 R /Dest [43 0 R /XYZ 0 395.5200000000004 null] >> endobj -613 0 obj +612 0 obj << /Title -/Parent 611 0 R +/Parent 610 0 R /Count 0 -/Prev 612 0 R +/Prev 611 0 R /Dest [43 0 R /XYZ 0 290.4000000000003 null] >> endobj -614 0 obj +613 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 615 0 R -/Last 617 0 R -/Next 618 0 R -/Prev 611 0 R +/First 614 0 R +/Last 616 0 R +/Next 617 0 R +/Prev 610 0 R /Dest [43 0 R /XYZ 0 234.1200000000003 null] >> endobj -615 0 obj +614 0 obj << /Title -/Parent 614 0 R +/Parent 613 0 R /Count 0 -/Next 616 0 R +/Next 615 0 R /Dest [43 0 R /XYZ 0 194.04000000000028 null] >> endobj -616 0 obj +615 0 obj << /Title -/Parent 614 0 R +/Parent 613 0 R /Count 0 -/Next 617 0 R -/Prev 615 0 R +/Next 616 0 R +/Prev 614 0 R /Dest [58 0 R /XYZ 0 792.0 null] >> endobj -617 0 obj +616 0 obj << /Title -/Parent 614 0 R +/Parent 613 0 R /Count 0 -/Prev 616 0 R +/Prev 615 0 R /Dest [58 0 R /XYZ 0 653.2800000000002 null] >> endobj -618 0 obj +617 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 4 -/First 619 0 R -/Last 622 0 R -/Next 623 0 R -/Prev 614 0 R +/First 618 0 R +/Last 621 0 R +/Next 622 0 R +/Prev 613 0 R /Dest [58 0 R /XYZ 0 597.0000000000003 null] >> endobj -619 0 obj +618 0 obj << /Title -/Parent 618 0 R +/Parent 617 0 R /Count 0 -/Next 620 0 R +/Next 619 0 R /Dest [58 0 R /XYZ 0 556.9200000000004 null] >> endobj -620 0 obj +619 0 obj << /Title -/Parent 618 0 R +/Parent 617 0 R /Count 0 -/Next 621 0 R -/Prev 619 0 R +/Next 620 0 R +/Prev 618 0 R /Dest [58 0 R /XYZ 0 414.2400000000005 null] >> endobj -621 0 obj +620 0 obj << /Title -/Parent 618 0 R +/Parent 617 0 R /Count 0 -/Next 622 0 R -/Prev 620 0 R +/Next 621 0 R +/Prev 619 0 R /Dest [58 0 R /XYZ 0 309.12000000000046 null] >> endobj -622 0 obj +621 0 obj << /Title -/Parent 618 0 R +/Parent 617 0 R /Count 0 -/Prev 621 0 R +/Prev 620 0 R /Dest [58 0 R /XYZ 0 252.84000000000043 null] >> endobj -623 0 obj +622 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 624 0 R -/Last 626 0 R -/Next 627 0 R -/Prev 618 0 R +/First 623 0 R +/Last 625 0 R +/Next 626 0 R +/Prev 617 0 R /Dest [58 0 R /XYZ 0 196.5600000000004 null] >> endobj -624 0 obj +623 0 obj << /Title -/Parent 623 0 R +/Parent 622 0 R /Count 0 -/Next 625 0 R +/Next 624 0 R /Dest [58 0 R /XYZ 0 156.4800000000004 null] >> endobj -625 0 obj +624 0 obj << /Title -/Parent 623 0 R +/Parent 622 0 R /Count 0 -/Next 626 0 R -/Prev 624 0 R +/Next 625 0 R +/Prev 623 0 R /Dest [72 0 R /XYZ 0 792.0 null] >> endobj -626 0 obj +625 0 obj << /Title -/Parent 623 0 R +/Parent 622 0 R /Count 0 -/Prev 625 0 R +/Prev 624 0 R /Dest [72 0 R /XYZ 0 667.5600000000002 null] >> endobj -627 0 obj +626 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 628 0 R -/Last 630 0 R -/Next 631 0 R -/Prev 623 0 R +/First 627 0 R +/Last 629 0 R +/Next 630 0 R +/Prev 622 0 R /Dest [72 0 R /XYZ 0 611.2800000000003 null] >> endobj -628 0 obj +627 0 obj << /Title -/Parent 627 0 R +/Parent 626 0 R /Count 0 -/Next 629 0 R +/Next 628 0 R /Dest [72 0 R /XYZ 0 543.1200000000005 null] >> endobj -629 0 obj +628 0 obj << /Title -/Parent 627 0 R +/Parent 626 0 R /Count 0 -/Next 630 0 R -/Prev 628 0 R +/Next 629 0 R +/Prev 627 0 R /Dest [72 0 R /XYZ 0 400.44000000000057 null] >> endobj -630 0 obj +629 0 obj << /Title -/Parent 627 0 R +/Parent 626 0 R /Count 0 -/Prev 629 0 R +/Prev 628 0 R /Dest [72 0 R /XYZ 0 309.6000000000006 null] >> endobj -631 0 obj +630 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 632 0 R -/Last 633 0 R -/Next 634 0 R -/Prev 627 0 R +/First 631 0 R +/Last 632 0 R +/Next 633 0 R +/Prev 626 0 R /Dest [72 0 R /XYZ 0 253.32000000000056 null] >> endobj -632 0 obj +631 0 obj << /Title -/Parent 631 0 R +/Parent 630 0 R /Count 0 -/Next 633 0 R +/Next 632 0 R /Dest [72 0 R /XYZ 0 213.24000000000055 null] >> endobj -633 0 obj +632 0 obj << /Title -/Parent 631 0 R +/Parent 630 0 R /Count 0 -/Prev 632 0 R +/Prev 631 0 R /Dest [72 0 R /XYZ 0 108.12000000000052 null] >> endobj -634 0 obj +633 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 635 0 R -/Last 637 0 R -/Next 638 0 R -/Prev 631 0 R +/First 634 0 R +/Last 636 0 R +/Next 637 0 R +/Prev 630 0 R /Dest [84 0 R /XYZ 0 697.44 null] >> endobj -635 0 obj +634 0 obj << /Title -/Parent 634 0 R +/Parent 633 0 R /Count 0 -/Next 636 0 R +/Next 635 0 R /Dest [84 0 R /XYZ 0 657.3600000000001 null] >> endobj -636 0 obj +635 0 obj << /Title -/Parent 634 0 R +/Parent 633 0 R /Count 0 -/Next 637 0 R -/Prev 635 0 R +/Next 636 0 R +/Prev 634 0 R /Dest [84 0 R /XYZ 0 552.2400000000002 null] >> endobj -637 0 obj +636 0 obj << /Title -/Parent 634 0 R +/Parent 633 0 R /Count 0 -/Prev 636 0 R +/Prev 635 0 R /Dest [84 0 R /XYZ 0 447.12000000000035 null] >> endobj -638 0 obj +637 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 639 0 R -/Last 640 0 R -/Next 641 0 R -/Prev 634 0 R +/First 638 0 R +/Last 639 0 R +/Next 640 0 R +/Prev 633 0 R /Dest [84 0 R /XYZ 0 390.8400000000003 null] >> endobj -639 0 obj +638 0 obj << /Title -/Parent 638 0 R +/Parent 637 0 R /Count 0 -/Next 640 0 R +/Next 639 0 R /Dest [84 0 R /XYZ 0 350.7600000000003 null] >> endobj -640 0 obj +639 0 obj << /Title -/Parent 638 0 R +/Parent 637 0 R /Count 0 -/Prev 639 0 R +/Prev 638 0 R /Dest [84 0 R /XYZ 0 245.6400000000002 null] >> endobj -641 0 obj +640 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 642 0 R -/Last 644 0 R -/Next 645 0 R -/Prev 638 0 R +/First 641 0 R +/Last 643 0 R +/Next 644 0 R +/Prev 637 0 R /Dest [84 0 R /XYZ 0 189.36000000000018 null] >> endobj -642 0 obj +641 0 obj << /Title -/Parent 641 0 R +/Parent 640 0 R /Count 0 -/Next 643 0 R +/Next 642 0 R /Dest [84 0 R /XYZ 0 149.28000000000017 null] >> endobj -643 0 obj +642 0 obj << /Title -/Parent 641 0 R +/Parent 640 0 R /Count 0 -/Next 644 0 R -/Prev 642 0 R +/Next 643 0 R +/Prev 641 0 R /Dest [97 0 R /XYZ 0 792.0 null] >> endobj -644 0 obj +643 0 obj << /Title -/Parent 641 0 R +/Parent 640 0 R /Count 0 -/Prev 643 0 R +/Prev 642 0 R /Dest [97 0 R /XYZ 0 653.2800000000002 null] >> endobj -645 0 obj +644 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 646 0 R -/Last 648 0 R -/Next 649 0 R -/Prev 641 0 R +/First 645 0 R +/Last 647 0 R +/Next 648 0 R +/Prev 640 0 R /Dest [97 0 R /XYZ 0 597.0000000000003 null] >> endobj -646 0 obj +645 0 obj << /Title -/Parent 645 0 R +/Parent 644 0 R /Count 0 -/Next 647 0 R +/Next 646 0 R /Dest [97 0 R /XYZ 0 528.8400000000005 null] >> endobj -647 0 obj +646 0 obj << /Title -/Parent 645 0 R +/Parent 644 0 R /Count 0 -/Next 648 0 R -/Prev 646 0 R +/Next 647 0 R +/Prev 645 0 R /Dest [97 0 R /XYZ 0 423.72000000000054 null] >> endobj -648 0 obj +647 0 obj << /Title -/Parent 645 0 R +/Parent 644 0 R /Count 0 -/Prev 647 0 R +/Prev 646 0 R /Dest [97 0 R /XYZ 0 318.6000000000005 null] >> endobj -649 0 obj +648 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 650 0 R -/Last 652 0 R -/Next 653 0 R -/Prev 645 0 R +/First 649 0 R +/Last 651 0 R +/Next 652 0 R +/Prev 644 0 R /Dest [97 0 R /XYZ 0 262.32000000000045 null] >> endobj -650 0 obj +649 0 obj << /Title -/Parent 649 0 R +/Parent 648 0 R /Count 0 -/Next 651 0 R +/Next 650 0 R /Dest [97 0 R /XYZ 0 222.24000000000046 null] >> endobj -651 0 obj +650 0 obj << /Title -/Parent 649 0 R +/Parent 648 0 R /Count 0 -/Next 652 0 R -/Prev 650 0 R +/Next 651 0 R +/Prev 649 0 R /Dest [97 0 R /XYZ 0 117.12000000000043 null] >> endobj -652 0 obj +651 0 obj << /Title -/Parent 649 0 R +/Parent 648 0 R /Count 0 -/Prev 651 0 R +/Prev 650 0 R /Dest [110 0 R /XYZ 0 683.1600000000001 null] >> endobj -653 0 obj +652 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 654 0 R -/Last 656 0 R -/Next 657 0 R -/Prev 649 0 R +/First 653 0 R +/Last 655 0 R +/Next 656 0 R +/Prev 648 0 R /Dest [110 0 R /XYZ 0 626.8800000000002 null] >> endobj -654 0 obj +653 0 obj << /Title -/Parent 653 0 R +/Parent 652 0 R /Count 0 -/Next 655 0 R +/Next 654 0 R /Dest [110 0 R /XYZ 0 586.8000000000003 null] >> endobj -655 0 obj +654 0 obj << /Title -/Parent 653 0 R +/Parent 652 0 R /Count 0 -/Next 656 0 R -/Prev 654 0 R +/Next 655 0 R +/Prev 653 0 R /Dest [110 0 R /XYZ 0 481.68000000000046 null] >> endobj -656 0 obj +655 0 obj << /Title -/Parent 653 0 R +/Parent 652 0 R /Count 0 -/Prev 655 0 R +/Prev 654 0 R /Dest [110 0 R /XYZ 0 376.5600000000004 null] >> endobj -657 0 obj +656 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 658 0 R -/Last 660 0 R -/Next 661 0 R -/Prev 653 0 R +/First 657 0 R +/Last 659 0 R +/Next 660 0 R +/Prev 652 0 R /Dest [110 0 R /XYZ 0 320.28000000000037 null] >> endobj -658 0 obj +657 0 obj << /Title -/Parent 657 0 R +/Parent 656 0 R /Count 0 -/Next 659 0 R +/Next 658 0 R /Dest [110 0 R /XYZ 0 280.20000000000033 null] >> endobj -659 0 obj +658 0 obj << /Title -/Parent 657 0 R +/Parent 656 0 R /Count 0 -/Next 660 0 R -/Prev 658 0 R +/Next 659 0 R +/Prev 657 0 R /Dest [110 0 R /XYZ 0 175.08000000000033 null] >> endobj -660 0 obj +659 0 obj << /Title -/Parent 657 0 R +/Parent 656 0 R /Count 0 -/Prev 659 0 R -/Dest [123 0 R /XYZ 0 792.0 null] +/Prev 658 0 R +/Dest [124 0 R /XYZ 0 792.0 null] >> endobj -661 0 obj +660 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 662 0 R -/Last 664 0 R -/Next 665 0 R -/Prev 657 0 R -/Dest [123 0 R /XYZ 0 702.1200000000001 null] +/First 661 0 R +/Last 663 0 R +/Next 664 0 R +/Prev 656 0 R +/Dest [124 0 R /XYZ 0 702.1200000000001 null] >> endobj -662 0 obj +661 0 obj << /Title -/Parent 661 0 R +/Parent 660 0 R /Count 0 -/Next 663 0 R -/Dest [123 0 R /XYZ 0 662.0400000000002 null] +/Next 662 0 R +/Dest [124 0 R /XYZ 0 662.0400000000002 null] >> endobj -663 0 obj +662 0 obj << /Title -/Parent 661 0 R +/Parent 660 0 R /Count 0 -/Next 664 0 R -/Prev 662 0 R -/Dest [123 0 R /XYZ 0 556.9200000000003 null] +/Next 663 0 R +/Prev 661 0 R +/Dest [124 0 R /XYZ 0 556.9200000000003 null] >> endobj -664 0 obj +663 0 obj << /Title -/Parent 661 0 R +/Parent 660 0 R /Count 0 -/Prev 663 0 R -/Dest [123 0 R /XYZ 0 451.8000000000004 null] +/Prev 662 0 R +/Dest [124 0 R /XYZ 0 451.8000000000004 null] >> endobj -665 0 obj +664 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 666 0 R -/Last 668 0 R -/Next 669 0 R -/Prev 661 0 R -/Dest [123 0 R /XYZ 0 395.5200000000004 null] +/First 665 0 R +/Last 667 0 R +/Next 668 0 R +/Prev 660 0 R +/Dest [124 0 R /XYZ 0 395.5200000000004 null] >> endobj -666 0 obj +665 0 obj << /Title -/Parent 665 0 R +/Parent 664 0 R /Count 0 -/Next 667 0 R -/Dest [123 0 R /XYZ 0 355.44000000000034 null] +/Next 666 0 R +/Dest [124 0 R /XYZ 0 355.44000000000034 null] >> endobj -667 0 obj +666 0 obj << /Title -/Parent 665 0 R +/Parent 664 0 R /Count 0 -/Next 668 0 R -/Prev 666 0 R -/Dest [123 0 R /XYZ 0 250.32000000000033 null] +/Next 667 0 R +/Prev 665 0 R +/Dest [124 0 R /XYZ 0 250.32000000000033 null] >> endobj -668 0 obj +667 0 obj << /Title -/Parent 665 0 R +/Parent 664 0 R /Count 0 -/Prev 667 0 R -/Dest [123 0 R /XYZ 0 145.2000000000003 null] +/Prev 666 0 R +/Dest [124 0 R /XYZ 0 145.2000000000003 null] >> endobj -669 0 obj +668 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 4 -/First 670 0 R -/Last 673 0 R -/Next 674 0 R -/Prev 665 0 R +/First 669 0 R +/Last 672 0 R +/Next 673 0 R +/Prev 664 0 R /Dest [137 0 R /XYZ 0 792.0 null] >> endobj -670 0 obj +669 0 obj << /Title -/Parent 669 0 R +/Parent 668 0 R /Count 0 -/Next 671 0 R +/Next 670 0 R /Dest [137 0 R /XYZ 0 718.32 null] >> endobj -671 0 obj +670 0 obj << /Title -/Parent 669 0 R +/Parent 668 0 R /Count 0 -/Next 672 0 R -/Prev 670 0 R +/Next 671 0 R +/Prev 669 0 R /Dest [137 0 R /XYZ 0 575.6400000000001 null] >> endobj -672 0 obj +671 0 obj << /Title -/Parent 669 0 R +/Parent 668 0 R /Count 0 -/Next 673 0 R -/Prev 671 0 R +/Next 672 0 R +/Prev 670 0 R /Dest [137 0 R /XYZ 0 470.5200000000002 null] >> endobj -673 0 obj +672 0 obj << /Title -/Parent 669 0 R +/Parent 668 0 R /Count 0 -/Prev 672 0 R +/Prev 671 0 R /Dest [137 0 R /XYZ 0 414.2400000000002 null] >> endobj -674 0 obj +673 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 4 -/First 675 0 R -/Last 678 0 R -/Next 679 0 R -/Prev 669 0 R +/First 674 0 R +/Last 677 0 R +/Next 678 0 R +/Prev 668 0 R /Dest [137 0 R /XYZ 0 357.96000000000015 null] >> endobj -675 0 obj +674 0 obj << /Title -/Parent 674 0 R +/Parent 673 0 R /Count 0 -/Next 676 0 R +/Next 675 0 R /Dest [137 0 R /XYZ 0 289.8000000000001 null] >> endobj -676 0 obj +675 0 obj << /Title -/Parent 674 0 R +/Parent 673 0 R /Count 0 -/Next 677 0 R -/Prev 675 0 R +/Next 676 0 R +/Prev 674 0 R /Dest [137 0 R /XYZ 0 147.1200000000001 null] >> endobj -677 0 obj +676 0 obj << /Title -/Parent 674 0 R +/Parent 673 0 R /Count 0 -/Next 678 0 R -/Prev 676 0 R +/Next 677 0 R +/Prev 675 0 R /Dest [151 0 R /XYZ 0 792.0 null] >> endobj -678 0 obj +677 0 obj << /Title -/Parent 674 0 R +/Parent 673 0 R /Count 0 -/Prev 677 0 R +/Prev 676 0 R /Dest [151 0 R /XYZ 0 702.1200000000001 null] >> endobj -679 0 obj +678 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 4 -/First 680 0 R -/Last 683 0 R -/Next 684 0 R -/Prev 674 0 R +/First 679 0 R +/Last 682 0 R +/Next 683 0 R +/Prev 673 0 R /Dest [151 0 R /XYZ 0 645.8400000000003 null] >> endobj -680 0 obj +679 0 obj << /Title -/Parent 679 0 R +/Parent 678 0 R /Count 0 -/Next 681 0 R +/Next 680 0 R /Dest [151 0 R /XYZ 0 577.6800000000004 null] >> endobj -681 0 obj +680 0 obj << /Title -/Parent 679 0 R +/Parent 678 0 R /Count 0 -/Next 682 0 R -/Prev 680 0 R +/Next 681 0 R +/Prev 679 0 R /Dest [151 0 R /XYZ 0 435.0000000000005 null] >> endobj -682 0 obj +681 0 obj << /Title -/Parent 679 0 R +/Parent 678 0 R /Count 0 -/Next 683 0 R -/Prev 681 0 R +/Next 682 0 R +/Prev 680 0 R /Dest [151 0 R /XYZ 0 329.88000000000045 null] >> endobj -683 0 obj +682 0 obj << /Title -/Parent 679 0 R +/Parent 678 0 R /Count 0 -/Prev 682 0 R +/Prev 681 0 R /Dest [151 0 R /XYZ 0 273.6000000000004 null] >> endobj -684 0 obj +683 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 685 0 R -/Last 687 0 R -/Next 688 0 R -/Prev 679 0 R +/First 684 0 R +/Last 686 0 R +/Next 687 0 R +/Prev 678 0 R /Dest [151 0 R /XYZ 0 217.32000000000042 null] >> endobj -685 0 obj +684 0 obj << /Title -/Parent 684 0 R +/Parent 683 0 R /Count 0 -/Next 686 0 R +/Next 685 0 R /Dest [151 0 R /XYZ 0 177.2400000000004 null] >> endobj -686 0 obj +685 0 obj << /Title -/Parent 684 0 R +/Parent 683 0 R /Count 0 -/Next 687 0 R -/Prev 685 0 R +/Next 686 0 R +/Prev 684 0 R /Dest [165 0 R /XYZ 0 792.0 null] >> endobj -687 0 obj +686 0 obj << /Title -/Parent 684 0 R +/Parent 683 0 R /Count 0 -/Prev 686 0 R +/Prev 685 0 R /Dest [165 0 R /XYZ 0 653.2800000000002 null] >> endobj -688 0 obj +687 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 689 0 R -/Last 690 0 R -/Next 691 0 R -/Prev 684 0 R +/First 688 0 R +/Last 689 0 R +/Next 690 0 R +/Prev 683 0 R /Dest [165 0 R /XYZ 0 597.0000000000003 null] >> endobj -689 0 obj +688 0 obj << /Title -/Parent 688 0 R +/Parent 687 0 R /Count 0 -/Next 690 0 R +/Next 689 0 R /Dest [165 0 R /XYZ 0 556.9200000000004 null] >> endobj -690 0 obj +689 0 obj << /Title -/Parent 688 0 R +/Parent 687 0 R /Count 0 -/Prev 689 0 R +/Prev 688 0 R /Dest [165 0 R /XYZ 0 451.8000000000005 null] >> endobj -691 0 obj +690 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 692 0 R -/Last 694 0 R -/Next 695 0 R -/Prev 688 0 R +/First 691 0 R +/Last 693 0 R +/Next 694 0 R +/Prev 687 0 R /Dest [165 0 R /XYZ 0 395.5200000000005 null] >> endobj -692 0 obj +691 0 obj << /Title -/Parent 691 0 R +/Parent 690 0 R /Count 0 -/Next 693 0 R +/Next 692 0 R /Dest [165 0 R /XYZ 0 327.36000000000047 null] >> endobj -693 0 obj +692 0 obj << /Title -/Parent 691 0 R +/Parent 690 0 R /Count 0 -/Next 694 0 R -/Prev 692 0 R +/Next 693 0 R +/Prev 691 0 R /Dest [165 0 R /XYZ 0 222.2400000000004 null] >> endobj -694 0 obj +693 0 obj << /Title -/Parent 691 0 R +/Parent 690 0 R /Count 0 -/Prev 693 0 R +/Prev 692 0 R /Dest [165 0 R /XYZ 0 117.12000000000037 null] >> endobj -695 0 obj +694 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 696 0 R -/Last 698 0 R -/Next 699 0 R -/Prev 691 0 R -/Dest [179 0 R /XYZ 0 792.0 null] +/First 695 0 R +/Last 697 0 R +/Next 698 0 R +/Prev 690 0 R +/Dest [178 0 R /XYZ 0 792.0 null] >> endobj -696 0 obj +695 0 obj << /Title -/Parent 695 0 R +/Parent 694 0 R /Count 0 -/Next 697 0 R -/Dest [179 0 R /XYZ 0 718.32 null] +/Next 696 0 R +/Dest [178 0 R /XYZ 0 718.32 null] >> endobj -697 0 obj +696 0 obj << /Title -/Parent 695 0 R +/Parent 694 0 R /Count 0 -/Next 698 0 R -/Prev 696 0 R -/Dest [179 0 R /XYZ 0 613.2000000000003 null] +/Next 697 0 R +/Prev 695 0 R +/Dest [178 0 R /XYZ 0 613.2000000000003 null] >> endobj -698 0 obj +697 0 obj << /Title -/Parent 695 0 R +/Parent 694 0 R /Count 0 -/Prev 697 0 R -/Dest [179 0 R /XYZ 0 508.0800000000004 null] +/Prev 696 0 R +/Dest [178 0 R /XYZ 0 508.0800000000004 null] >> endobj -699 0 obj +698 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 4 -/First 700 0 R -/Last 703 0 R -/Next 704 0 R -/Prev 695 0 R -/Dest [179 0 R /XYZ 0 451.80000000000035 null] +/First 699 0 R +/Last 702 0 R +/Next 703 0 R +/Prev 694 0 R +/Dest [178 0 R /XYZ 0 451.80000000000035 null] >> endobj -700 0 obj +699 0 obj << /Title -/Parent 699 0 R +/Parent 698 0 R +/Count 0 +/Next 700 0 R +/Dest [178 0 R /XYZ 0 411.7200000000003 null] +>> +endobj +700 0 obj +<< /Title +/Parent 698 0 R /Count 0 /Next 701 0 R -/Dest [179 0 R /XYZ 0 411.7200000000003 null] +/Prev 699 0 R +/Dest [178 0 R /XYZ 0 269.04000000000025 null] >> endobj 701 0 obj -<< /Title -/Parent 699 0 R +<< /Title +/Parent 698 0 R /Count 0 /Next 702 0 R /Prev 700 0 R -/Dest [179 0 R /XYZ 0 269.04000000000025 null] +/Dest [178 0 R /XYZ 0 163.92000000000024 null] >> endobj 702 0 obj -<< /Title -/Parent 699 0 R +<< /Title +/Parent 698 0 R /Count 0 -/Next 703 0 R /Prev 701 0 R -/Dest [179 0 R /XYZ 0 163.92000000000024 null] +/Dest [178 0 R /XYZ 0 107.64000000000021 null] >> endobj 703 0 obj -<< /Title -/Parent 699 0 R -/Count 0 -/Prev 702 0 R -/Dest [179 0 R /XYZ 0 107.64000000000021 null] ->> -endobj -704 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 705 0 R -/Last 706 0 R -/Next 707 0 R -/Prev 699 0 R +/First 704 0 R +/Last 705 0 R +/Next 706 0 R +/Prev 698 0 R /Dest [192 0 R /XYZ 0 792.0 null] >> endobj -705 0 obj +704 0 obj << /Title -/Parent 704 0 R +/Parent 703 0 R /Count 0 -/Next 706 0 R +/Next 705 0 R /Dest [192 0 R /XYZ 0 718.32 null] >> endobj -706 0 obj +705 0 obj << /Title -/Parent 704 0 R +/Parent 703 0 R /Count 0 -/Prev 705 0 R +/Prev 704 0 R /Dest [192 0 R /XYZ 0 613.2000000000003 null] >> endobj -707 0 obj +706 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 2 -/First 708 0 R -/Last 709 0 R -/Next 710 0 R -/Prev 704 0 R +/First 707 0 R +/Last 708 0 R +/Next 709 0 R +/Prev 703 0 R /Dest [192 0 R /XYZ 0 556.9200000000004 null] >> endobj -708 0 obj +707 0 obj << /Title -/Parent 707 0 R +/Parent 706 0 R /Count 0 -/Next 709 0 R +/Next 708 0 R /Dest [192 0 R /XYZ 0 516.8400000000005 null] >> endobj -709 0 obj +708 0 obj << /Title -/Parent 707 0 R +/Parent 706 0 R /Count 0 -/Prev 708 0 R +/Prev 707 0 R /Dest [192 0 R /XYZ 0 411.7200000000005 null] >> endobj -710 0 obj +709 0 obj << /Title -/Parent 596 0 R +/Parent 595 0 R /Count 3 -/First 711 0 R -/Last 713 0 R -/Prev 707 0 R +/First 710 0 R +/Last 712 0 R +/Prev 706 0 R /Dest [192 0 R /XYZ 0 355.44000000000045 null] >> endobj -711 0 obj +710 0 obj << /Title -/Parent 710 0 R +/Parent 709 0 R /Count 0 -/Next 712 0 R +/Next 711 0 R /Dest [192 0 R /XYZ 0 315.3600000000004 null] >> endobj -712 0 obj +711 0 obj << /Title -/Parent 710 0 R +/Parent 709 0 R /Count 0 -/Next 713 0 R -/Prev 711 0 R +/Next 712 0 R +/Prev 710 0 R /Dest [192 0 R /XYZ 0 210.2400000000004 null] >> endobj -713 0 obj +712 0 obj << /Title -/Parent 710 0 R +/Parent 709 0 R /Count 0 -/Prev 712 0 R +/Prev 711 0 R /Dest [192 0 R /XYZ 0 105.12000000000037 null] >> endobj -714 0 obj +713 0 obj << /Title -/Parent 590 0 R +/Parent 589 0 R /Count 19 -/First 715 0 R -/Last 733 0 R -/Prev 596 0 R -/Dest [208 0 R /XYZ 0 792.0 null] +/First 714 0 R +/Last 732 0 R +/Prev 595 0 R +/Dest [207 0 R /XYZ 0 792.0 null] >> endobj -715 0 obj +714 0 obj << /Title -/Parent 714 0 R +/Parent 713 0 R +/Count 0 +/Next 715 0 R +/Dest [207 0 R /XYZ 0 712.0799999999999 null] +>> +endobj +715 0 obj +<< /Title +/Parent 713 0 R /Count 0 /Next 716 0 R -/Dest [208 0 R /XYZ 0 712.0799999999999 null] +/Prev 714 0 R +/Dest [207 0 R /XYZ 0 524.04 null] >> endobj 716 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 717 0 R /Prev 715 0 R -/Dest [208 0 R /XYZ 0 524.04 null] +/Dest [207 0 R /XYZ 0 148.19999999999993 null] >> endobj 717 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 718 0 R /Prev 716 0 R -/Dest [208 0 R /XYZ 0 148.19999999999993 null] +/Dest [214 0 R /XYZ 0 345.11999999999995 null] >> endobj 718 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 719 0 R /Prev 717 0 R -/Dest [215 0 R /XYZ 0 345.11999999999995 null] +/Dest [214 0 R /XYZ 0 194.6399999999999 null] >> endobj 719 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 720 0 R /Prev 718 0 R -/Dest [215 0 R /XYZ 0 194.6399999999999 null] +/Dest [220 0 R /XYZ 0 683.1600000000001 null] >> endobj 720 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 721 0 R /Prev 719 0 R -/Dest [221 0 R /XYZ 0 683.1600000000001 null] +/Dest [228 0 R /XYZ 0 532.9200000000003 null] >> endobj 721 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 722 0 R /Prev 720 0 R -/Dest [229 0 R /XYZ 0 532.9200000000003 null] +/Dest [234 0 R /XYZ 0 382.68000000000023 null] >> endobj 722 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 723 0 R /Prev 721 0 R -/Dest [235 0 R /XYZ 0 382.68000000000023 null] +/Dest [239 0 R /XYZ 0 232.44000000000023 null] >> endobj 723 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 724 0 R /Prev 722 0 R -/Dest [240 0 R /XYZ 0 232.44000000000023 null] +/Dest [255 0 R /XYZ 0 645.6000000000001 null] >> endobj 724 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 725 0 R /Prev 723 0 R -/Dest [256 0 R /XYZ 0 645.6000000000001 null] +/Dest [265 0 R /XYZ 0 645.6000000000001 null] >> endobj 725 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 726 0 R /Prev 724 0 R -/Dest [266 0 R /XYZ 0 645.6000000000001 null] +/Dest [265 0 R /XYZ 0 157.08000000000015 null] >> endobj 726 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 727 0 R /Prev 725 0 R -/Dest [266 0 R /XYZ 0 157.08000000000015 null] +/Dest [271 0 R /XYZ 0 532.9200000000001 null] >> endobj 727 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 728 0 R /Prev 726 0 R -/Dest [272 0 R /XYZ 0 532.9200000000001 null] +/Dest [277 0 R /XYZ 0 645.6000000000001 null] >> endobj 728 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 729 0 R /Prev 727 0 R -/Dest [278 0 R /XYZ 0 645.6000000000001 null] +/Dest [277 0 R /XYZ 0 457.56000000000023 null] >> endobj 729 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 730 0 R /Prev 728 0 R -/Dest [278 0 R /XYZ 0 457.56000000000023 null] +/Dest [285 0 R /XYZ 0 382.68000000000023 null] >> endobj 730 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 731 0 R /Prev 729 0 R -/Dest [286 0 R /XYZ 0 382.68000000000023 null] +/Dest [285 0 R /XYZ 0 314.82000000000016 null] >> endobj 731 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 /Next 732 0 R /Prev 730 0 R -/Dest [286 0 R /XYZ 0 314.82000000000016 null] +/Dest [294 0 R /XYZ 0 420.24 null] >> endobj 732 0 obj -<< /Title -/Parent 714 0 R +<< /Title +/Parent 713 0 R /Count 0 -/Next 733 0 R /Prev 731 0 R -/Dest [296 0 R /XYZ 0 457.8 null] +/Dest [301 0 R /XYZ 0 645.5999999999999 null] >> endobj 733 0 obj -<< /Title -/Parent 714 0 R -/Count 0 -/Prev 732 0 R -/Dest [303 0 R /XYZ 0 683.1600000000001 null] ->> -endobj -734 0 obj << /Nums [0 << /P (i) >> 1 << /P (ii) >> 2 << /P (iii) @@ -49012,7 +49097,7 @@ endobj >>] >> endobj -735 0 obj +734 0 obj << /Length1 12112 /Length 7776 /Filter [/FlateDecode] @@ -49045,10 +49130,10 @@ G)Dz adç4ft#ːe=<'cìpN/(i$V(.>t`jxp\5=ۥXwګ rWΪV-/Ms6C,CTī6ӿ|?`dUl'of]q \LcM&>'sNXpZ,a:;?p)̀tᾁ)xjzh@%x'CY& Da2|b$!V;n;>p,r<@1eTRVTfdPl<_oTpAҧRW٢Y,JVz "wn_is[ a\!ox(P/ endstream endobj -736 0 obj +735 0 obj << /Type /FontDescriptor /FontName /AAAAAA+NotoSerif -/FontFile2 735 0 R +/FontFile2 734 0 R /FontBBox [-212 -250 1246 1047] /Flags 6 /StemV 0 @@ -49059,7 +49144,7 @@ endobj /XHeight 1098 >> endobj -737 0 obj +736 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -49069,10 +49154,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -738 0 obj +737 0 obj [259 1000 1000 1000 1000 1000 1000 1000 346 346 1000 1000 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 1000 559 1000 559 1000 1000 705 653 613 727 623 589 713 792 367 356 1000 623 937 763 742 604 1000 655 543 612 716 674 1046 1000 625 1000 1000 1000 1000 1000 458 1000 562 613 492 613 535 369 538 634 319 299 584 310 944 645 577 613 1000 471 451 352 634 579 861 578 564 1000 428 1000 428 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -739 0 obj +738 0 obj << /Length1 11308 /Length 7514 /Filter [/FlateDecode] @@ -49103,10 +49188,10 @@ f \LBCXd0j s؀֑݌#Xc19=Q8*; [oTp:A+jG3\,+fXȦW-}BE>K(\( endstream endobj -740 0 obj +739 0 obj << /Type /FontDescriptor /FontName /AAAAAB+NotoSerif-Bold -/FontFile2 739 0 R +/FontFile2 738 0 R /FontBBox [-212 -250 1306 1058] /Flags 6 /StemV 0 @@ -49117,7 +49202,7 @@ endobj /XHeight 1098 >> endobj -741 0 obj +740 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -49127,10 +49212,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -742 0 obj +741 0 obj [259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 293 288 559 559 559 559 559 559 559 559 559 559 1000 1000 1000 1000 1000 1000 1000 752 671 667 767 652 621 769 818 400 368 1000 653 952 788 787 638 1000 707 585 652 747 698 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 345 636 352 985 666 612 645 647 522 487 404 666 605 855 645 579 1000 441 1000 441 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -743 0 obj +742 0 obj << /Length1 5116 /Length 3170 /Filter [/FlateDecode] @@ -49150,10 +49235,10 @@ a :2]^5w,º*Ӌ58mgnk7cB4aD[NaU> endobj -745 0 obj +744 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -49174,10 +49259,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -746 0 obj +745 0 obj [1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 653 1000 1000 1000 1000 1000 792 1000 1000 1000 1000 1000 1000 1000 620 1000 1000 543 612 1000 674 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 579 1000 486 579 493 1000 1000 599 304 1000 1000 304 895 599 574 577 560 467 463 368 599 1000 1000 1000 527 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -747 0 obj +746 0 obj << /Length1 3280 /Length 2112 /Filter [/FlateDecode] @@ -49192,10 +49277,10 @@ x $W"k8 Vi<!N..Ͷ&W+uX:j Z;cO-/UFN6][)%r*ffRT6e|Q!gɝE/iR~L z!RSzd3T2hʱ$5EeM"FJh@|f #DA΄-VQˎAOqXG٧΄Y(YSBF-!c^vua[0CaaE—c]GZD>&Vk}[DR]hߑz?+w_ endstream endobj -748 0 obj +747 0 obj << /Type /FontDescriptor /FontName /AAAAAD+mplus1mn-regular -/FontFile2 747 0 R +/FontFile2 746 0 R /FontBBox [0 -230 1000 860] /Flags 4 /StemV 0 @@ -49206,7 +49291,7 @@ endobj /XHeight 0 >> endobj -749 0 obj +748 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -49216,11 +49301,11 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -750 0 obj +749 0 obj [1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 1000 1000 1000 500 500 1000 500 500 500 500 500 1000 1000 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj xref -0 751 +0 750 0000000000 65535 f 0000000015 00000 n 0000000264 00000 n @@ -49243,740 +49328,739 @@ xref 0000127807 00000 n 0000127850 00000 n 0000127899 00000 n -0000128013 00000 n -0000128186 00000 n -0000128241 00000 n -0000128416 00000 n -0000128460 00000 n -0000140641 00000 n -0000140902 00000 n -0000140945 00000 n -0000141000 00000 n -0000141043 00000 n -0000141215 00000 n -0000141270 00000 n -0000141445 00000 n -0000141501 00000 n -0000141556 00000 n -0000141611 00000 n -0000141667 00000 n -0000141722 00000 n -0000141880 00000 n -0000141935 00000 n -0000141991 00000 n -0000158351 00000 n -0000158625 00000 n -0000158668 00000 n -0000158822 00000 n -0000158877 00000 n -0000159033 00000 n -0000159088 00000 n -0000159144 00000 n -0000159199 00000 n -0000159254 00000 n -0000159309 00000 n -0000159619 00000 n -0000159949 00000 n -0000160004 00000 n -0000160060 00000 n -0000178217 00000 n -0000178498 00000 n -0000178541 00000 n -0000178697 00000 n -0000178752 00000 n -0000178807 00000 n -0000178862 00000 n -0000179016 00000 n -0000179071 00000 n -0000179227 00000 n -0000179283 00000 n -0000179339 00000 n -0000179394 00000 n -0000179449 00000 n -0000194772 00000 n -0000195022 00000 n -0000195065 00000 n -0000195120 00000 n -0000195175 00000 n -0000195230 00000 n -0000195286 00000 n -0000195341 00000 n -0000195397 00000 n -0000195453 00000 n -0000195509 00000 n -0000195789 00000 n -0000213656 00000 n -0000213923 00000 n -0000213967 00000 n -0000214022 00000 n -0000214335 00000 n -0000214390 00000 n -0000214552 00000 n -0000214608 00000 n -0000214663 00000 n -0000214718 00000 n -0000214773 00000 n -0000214829 00000 n -0000214885 00000 n -0000231049 00000 n -0000231324 00000 n -0000231367 00000 n -0000231528 00000 n -0000231584 00000 n -0000231640 00000 n -0000231696 00000 n -0000231753 00000 n -0000231915 00000 n -0000231971 00000 n -0000232028 00000 n -0000232085 00000 n -0000232142 00000 n -0000251266 00000 n -0000251552 00000 n -0000251704 00000 n -0000251761 00000 n -0000251818 00000 n -0000251875 00000 n -0000251933 00000 n -0000252096 00000 n -0000252153 00000 n -0000252211 00000 n -0000252269 00000 n -0000252327 00000 n -0000252490 00000 n -0000268772 00000 n -0000269042 00000 n -0000269087 00000 n -0000269144 00000 n -0000269201 00000 n -0000269258 00000 n -0000269593 00000 n -0000269650 00000 n -0000269950 00000 n -0000270007 00000 n -0000270065 00000 n -0000270123 00000 n -0000270287 00000 n -0000270344 00000 n -0000290041 00000 n -0000290335 00000 n -0000290380 00000 n -0000290426 00000 n -0000290581 00000 n -0000290638 00000 n -0000290801 00000 n -0000290858 00000 n -0000290915 00000 n -0000290973 00000 n -0000291030 00000 n -0000291195 00000 n -0000291252 00000 n -0000291429 00000 n -0000306939 00000 n -0000307217 00000 n -0000307262 00000 n -0000307319 00000 n -0000307376 00000 n -0000307433 00000 n -0000307591 00000 n -0000307648 00000 n -0000307811 00000 n -0000307869 00000 n -0000308332 00000 n -0000308389 00000 n -0000308447 00000 n -0000308504 00000 n -0000324978 00000 n -0000325256 00000 n -0000325301 00000 n -0000325463 00000 n -0000325520 00000 n -0000325577 00000 n -0000326170 00000 n -0000326227 00000 n -0000326388 00000 n -0000326445 00000 n -0000326502 00000 n -0000326560 00000 n -0000326617 00000 n -0000326675 00000 n -0000344786 00000 n -0000345064 00000 n -0000345109 00000 n -0000345155 00000 n -0000345212 00000 n -0000345371 00000 n -0000345428 00000 n -0000345486 00000 n -0000345543 00000 n -0000345601 00000 n -0000345762 00000 n -0000345820 00000 n -0000345878 00000 n -0000362449 00000 n -0000362727 00000 n -0000362772 00000 n -0000362818 00000 n -0000363137 00000 n -0000363307 00000 n -0000363364 00000 n -0000363716 00000 n -0000363773 00000 n -0000363830 00000 n -0000363887 00000 n -0000363945 00000 n -0000364002 00000 n -0000364059 00000 n -0000364230 00000 n -0000364288 00000 n -0000380425 00000 n -0000380682 00000 n -0000380727 00000 n -0000380784 00000 n -0000380830 00000 n -0000381007 00000 n -0000381065 00000 n -0000401418 00000 n -0000401683 00000 n -0000401847 00000 n -0000401905 00000 n -0000402088 00000 n -0000402145 00000 n -0000424131 00000 n -0000424420 00000 n -0000424477 00000 n -0000424645 00000 n -0000424812 00000 n -0000424982 00000 n -0000425154 00000 n -0000425314 00000 n -0000446881 00000 n -0000447154 00000 n -0000447211 00000 n -0000447380 00000 n -0000447549 00000 n -0000447718 00000 n -0000468936 00000 n -0000469201 00000 n -0000469352 00000 n -0000469491 00000 n -0000469549 00000 n -0000491260 00000 n -0000491549 00000 n -0000491717 00000 n -0000491864 00000 n -0000492013 00000 n -0000492164 00000 n -0000492303 00000 n -0000492361 00000 n -0000492911 00000 n -0000515656 00000 n -0000515945 00000 n -0000516113 00000 n -0000516260 00000 n -0000516409 00000 n -0000516560 00000 n -0000516699 00000 n -0000540091 00000 n -0000540396 00000 n -0000540453 00000 n -0000540623 00000 n -0000540794 00000 n -0000540962 00000 n -0000541135 00000 n -0000541314 00000 n -0000541476 00000 n -0000541654 00000 n -0000562349 00000 n -0000562614 00000 n -0000562671 00000 n -0000562840 00000 n -0000563029 00000 n -0000563087 00000 n -0000584792 00000 n -0000585065 00000 n -0000585228 00000 n -0000585285 00000 n -0000585472 00000 n -0000585634 00000 n -0000606442 00000 n -0000606723 00000 n -0000606780 00000 n -0000606955 00000 n -0000607127 00000 n -0000607185 00000 n -0000607355 00000 n -0000607524 00000 n -0000627973 00000 n -0000628270 00000 n -0000628445 00000 n -0000628609 00000 n -0000628773 00000 n -0000628831 00000 n -0000628889 00000 n -0000629060 00000 n -0000629231 00000 n -0000629394 00000 n -0000651222 00000 n -0000651503 00000 n -0000651658 00000 n -0000651802 00000 n -0000651847 00000 n -0000652018 00000 n -0000652193 00000 n -0000661973 00000 n -0000662238 00000 n -0000662295 00000 n -0000662464 00000 n -0000662633 00000 n -0000662777 00000 n -0000662922 00000 n -0000663087 00000 n -0000663243 00000 n -0000663401 00000 n -0000663548 00000 n -0000663710 00000 n -0000663852 00000 n -0000664017 00000 n -0000664161 00000 n -0000664318 00000 n -0000664464 00000 n -0000664620 00000 n -0000664765 00000 n -0000664920 00000 n -0000665064 00000 n -0000665223 00000 n -0000665371 00000 n -0000665529 00000 n -0000665676 00000 n -0000665831 00000 n -0000665976 00000 n -0000666136 00000 n -0000666285 00000 n -0000666443 00000 n -0000666590 00000 n -0000666745 00000 n -0000666890 00000 n -0000667059 00000 n -0000667207 00000 n -0000667368 00000 n -0000667518 00000 n -0000667674 00000 n -0000667820 00000 n -0000667978 00000 n -0000668125 00000 n -0000668316 00000 n -0000668486 00000 n -0000668646 00000 n -0000668795 00000 n -0000668955 00000 n -0000669104 00000 n -0000669295 00000 n -0000669465 00000 n -0000669636 00000 n -0000669786 00000 n -0000669945 00000 n -0000670093 00000 n -0000670253 00000 n -0000670402 00000 n -0000670573 00000 n -0000670734 00000 n -0000670904 00000 n -0000671053 00000 n -0000671212 00000 n -0000671360 00000 n -0000671517 00000 n -0000671664 00000 n -0000671824 00000 n -0000671973 00000 n -0000672140 00000 n -0000672286 00000 n -0000672458 00000 n -0000672609 00000 n -0000672770 00000 n -0000672920 00000 n -0000673079 00000 n -0000673227 00000 n -0000673419 00000 n -0000673600 00000 n -0000673770 00000 n -0000673919 00000 n -0000674066 00000 n -0000674202 00000 n -0000674349 00000 n -0000674485 00000 n -0000674639 00000 n +0000128005 00000 n +0000128178 00000 n +0000128233 00000 n +0000128408 00000 n +0000128452 00000 n +0000140633 00000 n +0000140894 00000 n +0000140937 00000 n +0000140992 00000 n +0000141035 00000 n +0000141207 00000 n +0000141262 00000 n +0000141437 00000 n +0000141493 00000 n +0000141548 00000 n +0000141603 00000 n +0000141659 00000 n +0000141714 00000 n +0000141872 00000 n +0000141927 00000 n +0000141983 00000 n +0000158343 00000 n +0000158617 00000 n +0000158660 00000 n +0000158814 00000 n +0000158869 00000 n +0000159025 00000 n +0000159080 00000 n +0000159136 00000 n +0000159191 00000 n +0000159246 00000 n +0000159301 00000 n +0000159611 00000 n +0000159920 00000 n +0000159975 00000 n +0000160031 00000 n +0000178188 00000 n +0000178469 00000 n +0000178512 00000 n +0000178668 00000 n +0000178723 00000 n +0000178778 00000 n +0000178833 00000 n +0000178987 00000 n +0000179042 00000 n +0000179198 00000 n +0000179254 00000 n +0000179310 00000 n +0000179365 00000 n +0000179420 00000 n +0000194743 00000 n +0000194993 00000 n +0000195036 00000 n +0000195091 00000 n +0000195146 00000 n +0000195201 00000 n +0000195257 00000 n +0000195312 00000 n +0000195368 00000 n +0000195424 00000 n +0000195480 00000 n +0000196149 00000 n +0000214016 00000 n +0000214283 00000 n +0000214327 00000 n +0000214382 00000 n +0000214695 00000 n +0000214750 00000 n +0000214912 00000 n +0000214968 00000 n +0000215023 00000 n +0000215078 00000 n +0000215133 00000 n +0000215189 00000 n +0000215245 00000 n +0000231409 00000 n +0000231684 00000 n +0000231727 00000 n +0000231888 00000 n +0000231944 00000 n +0000232000 00000 n +0000232056 00000 n +0000232113 00000 n +0000232275 00000 n +0000232331 00000 n +0000232388 00000 n +0000232445 00000 n +0000232502 00000 n +0000251626 00000 n +0000251912 00000 n +0000252064 00000 n +0000252121 00000 n +0000252178 00000 n +0000252235 00000 n +0000252293 00000 n +0000252715 00000 n +0000252878 00000 n +0000252935 00000 n +0000252993 00000 n +0000253051 00000 n +0000253109 00000 n +0000253272 00000 n +0000269554 00000 n +0000269824 00000 n +0000269869 00000 n +0000269926 00000 n +0000269983 00000 n +0000270040 00000 n +0000270097 00000 n +0000270397 00000 n +0000270454 00000 n +0000270512 00000 n +0000270570 00000 n +0000270734 00000 n +0000270791 00000 n +0000290488 00000 n +0000290782 00000 n +0000290827 00000 n +0000290873 00000 n +0000291028 00000 n +0000291085 00000 n +0000291248 00000 n +0000291305 00000 n +0000291362 00000 n +0000291420 00000 n +0000291477 00000 n +0000291642 00000 n +0000291699 00000 n +0000291876 00000 n +0000307386 00000 n +0000307664 00000 n +0000307709 00000 n +0000307766 00000 n +0000307823 00000 n +0000307880 00000 n +0000308038 00000 n +0000308095 00000 n +0000308258 00000 n +0000308316 00000 n +0000308779 00000 n +0000308836 00000 n +0000308894 00000 n +0000308951 00000 n +0000325425 00000 n +0000325703 00000 n +0000325748 00000 n +0000325910 00000 n +0000325967 00000 n +0000326024 00000 n +0000326081 00000 n +0000326242 00000 n +0000326299 00000 n +0000326356 00000 n +0000326414 00000 n +0000326471 00000 n +0000326529 00000 n +0000344640 00000 n +0000344918 00000 n +0000344963 00000 n +0000345009 00000 n +0000345066 00000 n +0000345225 00000 n +0000345282 00000 n +0000345340 00000 n +0000345397 00000 n +0000345455 00000 n +0000345857 00000 n +0000346018 00000 n +0000346076 00000 n +0000346134 00000 n +0000362705 00000 n +0000362983 00000 n +0000363028 00000 n +0000363074 00000 n +0000363244 00000 n +0000363301 00000 n +0000363653 00000 n +0000363710 00000 n +0000363767 00000 n +0000363824 00000 n +0000363882 00000 n +0000363939 00000 n +0000363996 00000 n +0000364167 00000 n +0000364225 00000 n +0000380362 00000 n +0000380619 00000 n +0000380664 00000 n +0000380721 00000 n +0000380767 00000 n +0000380944 00000 n +0000381002 00000 n +0000401355 00000 n +0000401620 00000 n +0000401784 00000 n +0000401842 00000 n +0000402025 00000 n +0000402082 00000 n +0000424068 00000 n +0000424357 00000 n +0000424414 00000 n +0000424582 00000 n +0000424749 00000 n +0000424919 00000 n +0000425091 00000 n +0000425251 00000 n +0000446818 00000 n +0000447091 00000 n +0000447148 00000 n +0000447317 00000 n +0000447486 00000 n +0000447655 00000 n +0000468873 00000 n +0000469138 00000 n +0000469289 00000 n +0000469428 00000 n +0000469486 00000 n +0000491197 00000 n +0000491486 00000 n +0000491654 00000 n +0000491801 00000 n +0000491950 00000 n +0000492101 00000 n +0000492240 00000 n +0000492298 00000 n +0000492848 00000 n +0000515593 00000 n +0000515882 00000 n +0000516050 00000 n +0000516197 00000 n +0000516346 00000 n +0000516497 00000 n +0000516636 00000 n +0000540028 00000 n +0000540333 00000 n +0000540390 00000 n +0000540560 00000 n +0000540731 00000 n +0000540899 00000 n +0000541072 00000 n +0000541251 00000 n +0000541413 00000 n +0000541591 00000 n +0000562286 00000 n +0000562551 00000 n +0000562608 00000 n +0000562777 00000 n +0000562966 00000 n +0000563024 00000 n +0000584729 00000 n +0000585002 00000 n +0000585165 00000 n +0000585222 00000 n +0000585409 00000 n +0000585571 00000 n +0000606379 00000 n +0000606660 00000 n +0000606717 00000 n +0000606892 00000 n +0000607064 00000 n +0000607122 00000 n +0000607292 00000 n +0000607461 00000 n +0000627744 00000 n +0000628033 00000 n +0000628208 00000 n +0000628372 00000 n +0000628536 00000 n +0000628594 00000 n +0000628652 00000 n +0000628823 00000 n +0000628994 00000 n +0000650522 00000 n +0000650803 00000 n +0000650946 00000 n +0000651121 00000 n +0000651285 00000 n +0000651331 00000 n +0000651502 00000 n +0000662703 00000 n +0000662976 00000 n +0000663131 00000 n +0000663188 00000 n +0000663337 00000 n +0000663486 00000 n +0000663630 00000 n +0000663775 00000 n +0000663940 00000 n +0000664096 00000 n +0000664254 00000 n +0000664401 00000 n +0000664563 00000 n +0000664705 00000 n +0000664870 00000 n +0000665014 00000 n +0000665171 00000 n +0000665317 00000 n +0000665473 00000 n +0000665618 00000 n +0000665773 00000 n +0000665917 00000 n +0000666076 00000 n +0000666224 00000 n +0000666382 00000 n +0000666529 00000 n +0000666684 00000 n +0000666829 00000 n +0000666989 00000 n +0000667138 00000 n +0000667296 00000 n +0000667443 00000 n +0000667598 00000 n +0000667743 00000 n +0000667912 00000 n +0000668060 00000 n +0000668221 00000 n +0000668371 00000 n +0000668527 00000 n +0000668673 00000 n +0000668831 00000 n +0000668978 00000 n +0000669169 00000 n +0000669339 00000 n +0000669499 00000 n +0000669648 00000 n +0000669808 00000 n +0000669957 00000 n +0000670148 00000 n +0000670318 00000 n +0000670489 00000 n +0000670639 00000 n +0000670798 00000 n +0000670946 00000 n +0000671106 00000 n +0000671255 00000 n +0000671426 00000 n +0000671587 00000 n +0000671757 00000 n +0000671906 00000 n +0000672065 00000 n +0000672213 00000 n +0000672370 00000 n +0000672517 00000 n +0000672677 00000 n +0000672826 00000 n +0000672993 00000 n +0000673139 00000 n +0000673311 00000 n +0000673462 00000 n +0000673623 00000 n +0000673773 00000 n +0000673932 00000 n +0000674080 00000 n +0000674272 00000 n +0000674453 00000 n +0000674623 00000 n 0000674772 00000 n -0000674931 00000 n -0000675069 00000 n -0000675228 00000 n -0000675377 00000 n -0000675539 00000 n -0000675682 00000 n -0000675852 00000 n -0000676001 00000 n -0000676160 00000 n -0000676309 00000 n -0000676478 00000 n -0000676626 00000 n -0000676780 00000 n -0000676923 00000 n -0000677082 00000 n -0000677231 00000 n -0000677400 00000 n -0000677548 00000 n -0000677702 00000 n -0000677846 00000 n -0000678016 00000 n -0000678165 00000 n -0000678325 00000 n -0000678475 00000 n -0000678645 00000 n -0000678794 00000 n -0000678949 00000 n -0000679093 00000 n -0000679263 00000 n -0000679412 00000 n -0000679571 00000 n -0000679720 00000 n -0000679890 00000 n -0000680039 00000 n -0000680206 00000 n -0000680352 00000 n -0000680524 00000 n -0000680675 00000 n -0000680834 00000 n -0000680983 00000 n -0000681152 00000 n -0000681300 00000 n -0000681455 00000 n -0000681600 00000 n -0000681772 00000 n -0000681923 00000 n -0000682083 00000 n -0000682233 00000 n -0000682402 00000 n -0000682550 00000 n -0000682717 00000 n -0000682863 00000 n -0000683036 00000 n -0000683188 00000 n -0000683349 00000 n -0000683500 00000 n -0000683671 00000 n -0000683821 00000 n -0000683976 00000 n -0000684121 00000 n -0000684294 00000 n -0000684446 00000 n -0000684607 00000 n -0000684758 00000 n -0000684928 00000 n -0000685077 00000 n -0000685238 00000 n -0000685380 00000 n -0000685551 00000 n -0000685701 00000 n -0000685848 00000 n -0000685985 00000 n -0000686143 00000 n -0000686280 00000 n -0000686431 00000 n +0000674919 00000 n +0000675055 00000 n +0000675202 00000 n +0000675338 00000 n +0000675492 00000 n +0000675625 00000 n +0000675784 00000 n +0000675922 00000 n +0000676081 00000 n +0000676230 00000 n +0000676393 00000 n +0000676537 00000 n +0000676707 00000 n +0000676856 00000 n +0000677015 00000 n +0000677164 00000 n +0000677333 00000 n +0000677481 00000 n +0000677636 00000 n +0000677780 00000 n +0000677939 00000 n +0000678088 00000 n +0000678257 00000 n +0000678405 00000 n +0000678559 00000 n +0000678703 00000 n +0000678873 00000 n +0000679022 00000 n +0000679182 00000 n +0000679332 00000 n +0000679502 00000 n +0000679651 00000 n +0000679807 00000 n +0000679952 00000 n +0000680122 00000 n +0000680271 00000 n +0000680430 00000 n +0000680579 00000 n +0000680749 00000 n +0000680898 00000 n +0000681065 00000 n +0000681211 00000 n +0000681383 00000 n +0000681534 00000 n +0000681693 00000 n +0000681842 00000 n +0000682011 00000 n +0000682159 00000 n +0000682314 00000 n +0000682459 00000 n +0000682631 00000 n +0000682782 00000 n +0000682942 00000 n +0000683092 00000 n +0000683261 00000 n +0000683409 00000 n +0000683576 00000 n +0000683722 00000 n +0000683895 00000 n +0000684047 00000 n +0000684208 00000 n +0000684359 00000 n +0000684530 00000 n +0000684680 00000 n +0000684836 00000 n +0000684982 00000 n +0000685155 00000 n +0000685307 00000 n +0000685468 00000 n +0000685619 00000 n +0000685789 00000 n +0000685938 00000 n +0000686099 00000 n +0000686241 00000 n +0000686412 00000 n 0000686562 00000 n -0000686722 00000 n -0000686860 00000 n -0000687019 00000 n -0000687167 00000 n -0000687325 00000 n -0000687471 00000 n -0000687640 00000 n -0000687787 00000 n -0000687951 00000 n -0000688093 00000 n -0000688264 00000 n -0000688413 00000 n -0000688572 00000 n -0000688720 00000 n -0000688878 00000 n -0000689024 00000 n -0000689193 00000 n -0000689340 00000 n -0000689501 00000 n -0000689643 00000 n -0000689814 00000 n -0000689963 00000 n -0000690123 00000 n -0000690272 00000 n -0000690431 00000 n -0000690578 00000 n -0000690748 00000 n -0000690896 00000 n -0000691050 00000 n -0000691192 00000 n -0000691363 00000 n -0000691512 00000 n -0000691672 00000 n -0000691821 00000 n -0000691992 00000 n -0000692141 00000 n -0000692305 00000 n -0000692449 00000 n -0000692608 00000 n -0000692756 00000 n -0000692925 00000 n -0000693072 00000 n -0000693274 00000 n -0000693456 00000 n -0000693628 00000 n -0000693778 00000 n -0000693938 00000 n -0000694087 00000 n -0000694256 00000 n -0000694403 00000 n -0000694603 00000 n -0000694781 00000 n -0000694954 00000 n -0000695105 00000 n -0000695266 00000 n -0000695416 00000 n -0000695587 00000 n -0000695736 00000 n -0000695903 00000 n -0000696048 00000 n -0000696221 00000 n -0000696372 00000 n -0000696533 00000 n -0000696683 00000 n -0000696842 00000 n -0000696989 00000 n -0000697156 00000 n -0000697301 00000 n -0000697456 00000 n -0000697599 00000 n -0000697746 00000 n -0000697882 00000 n -0000698040 00000 n -0000698176 00000 n -0000698334 00000 n -0000698481 00000 n -0000698629 00000 n -0000698766 00000 n -0000698935 00000 n -0000699082 00000 n -0000699269 00000 n -0000699434 00000 n -0000699605 00000 n -0000699754 00000 n -0000699913 00000 n -0000700061 00000 n -0000700230 00000 n -0000700377 00000 n -0000700546 00000 n -0000700693 00000 n -0000700866 00000 n -0000701017 00000 n -0000701175 00000 n -0000701321 00000 n -0000701486 00000 n -0000701639 00000 n -0000701803 00000 n -0000701956 00000 n -0000702137 00000 n -0000702296 00000 n -0000702464 00000 n -0000702610 00000 n -0000702777 00000 n -0000702922 00000 n -0000703090 00000 n -0000703236 00000 n -0000703396 00000 n -0000703545 00000 n -0000703708 00000 n -0000703849 00000 n -0000704014 00000 n -0000704168 00000 n -0000704334 00000 n -0000704478 00000 n -0000704648 00000 n -0000704796 00000 n -0000704980 00000 n -0000705144 00000 n -0000705321 00000 n -0000705476 00000 n -0000705641 00000 n -0000705784 00000 n -0000705960 00000 n -0000706114 00000 n -0000706283 00000 n -0000706430 00000 n -0000706597 00000 n -0000706742 00000 n -0000707027 00000 n -0000707106 00000 n -0000707270 00000 n -0000707461 00000 n -0000707689 00000 n -0000707906 00000 n -0000708076 00000 n -0000708294 00000 n -0000708540 00000 n -0000708713 00000 n -0000708894 00000 n -0000709159 00000 n -0000709344 00000 n -0000709525 00000 n -0000709782 00000 n -0000709967 00000 n -0000710148 00000 n -0000710405 00000 n -0000710582 00000 n -0000710781 00000 n -0000710976 00000 n -0000711158 00000 n -0000711478 00000 n -0000711663 00000 n -0000711844 00000 n -0000712168 00000 n -0000712358 00000 n -0000712545 00000 n -0000712726 00000 n -0000713010 00000 n -0000713199 00000 n -0000713398 00000 n -0000713594 00000 n -0000713776 00000 n -0000714072 00000 n -0000714261 00000 n -0000714448 00000 n -0000714629 00000 n -0000715009 00000 n -0000715198 00000 n -0000715398 00000 n -0000715579 00000 n -0000715888 00000 n -0000716082 00000 n -0000716272 00000 n -0000716569 00000 n -0000716762 00000 n -0000716965 00000 n -0000717151 00000 n -0000717435 00000 n -0000717624 00000 n -0000717809 00000 n -0000718130 00000 n -0000718324 00000 n -0000718515 00000 n -0000718700 00000 n -0000719084 00000 n -0000719277 00000 n -0000719481 00000 n -0000719666 00000 n -0000719979 00000 n -0000720173 00000 n -0000720377 00000 n -0000720563 00000 n -0000720864 00000 n -0000721058 00000 n -0000721263 00000 n -0000721449 00000 n -0000721759 00000 n -0000721954 00000 n -0000722159 00000 n -0000722333 00000 n -0000722686 00000 n -0000722880 00000 n -0000723084 00000 n -0000723270 00000 n -0000723587 00000 n -0000723782 00000 n -0000723987 00000 n -0000724173 00000 n -0000724538 00000 n -0000724721 00000 n -0000724925 00000 n -0000725125 00000 n -0000725311 00000 n -0000725697 00000 n -0000725891 00000 n -0000726095 00000 n -0000726283 00000 n -0000726469 00000 n -0000726858 00000 n -0000727052 00000 n -0000727256 00000 n -0000727457 00000 n -0000727643 00000 n -0000727925 00000 n -0000728119 00000 n -0000728311 00000 n -0000728497 00000 n -0000728786 00000 n -0000728976 00000 n -0000729162 00000 n -0000729543 00000 n -0000729738 00000 n -0000729942 00000 n -0000730129 00000 n -0000730478 00000 n -0000730661 00000 n -0000730865 00000 n -0000731051 00000 n -0000731413 00000 n -0000731607 00000 n -0000731812 00000 n -0000732013 00000 n -0000732200 00000 n -0000732445 00000 n -0000732624 00000 n -0000732810 00000 n -0000733091 00000 n -0000733281 00000 n -0000733467 00000 n -0000733771 00000 n -0000733965 00000 n -0000734169 00000 n -0000734356 00000 n -0000734584 00000 n -0000734786 00000 n -0000734971 00000 n -0000735196 00000 n -0000735421 00000 n -0000735665 00000 n -0000735857 00000 n -0000736045 00000 n -0000736242 00000 n -0000736451 00000 n -0000736627 00000 n -0000736851 00000 n -0000737040 00000 n -0000737248 00000 n -0000737520 00000 n -0000737753 00000 n -0000737938 00000 n -0000738167 00000 n -0000738359 00000 n -0000738533 00000 n -0000739088 00000 n -0000746956 00000 n -0000747172 00000 n -0000748535 00000 n -0000749604 00000 n -0000757210 00000 n -0000757431 00000 n -0000758794 00000 n -0000759873 00000 n -0000763134 00000 n -0000763360 00000 n -0000764723 00000 n -0000765839 00000 n -0000768042 00000 n -0000768256 00000 n -0000769619 00000 n +0000686709 00000 n +0000686846 00000 n +0000687004 00000 n +0000687141 00000 n +0000687293 00000 n +0000687425 00000 n +0000687585 00000 n +0000687723 00000 n +0000687882 00000 n +0000688030 00000 n +0000688188 00000 n +0000688334 00000 n +0000688503 00000 n +0000688650 00000 n +0000688815 00000 n +0000688958 00000 n +0000689129 00000 n +0000689278 00000 n +0000689437 00000 n +0000689585 00000 n +0000689743 00000 n +0000689889 00000 n +0000690058 00000 n +0000690205 00000 n +0000690367 00000 n +0000690510 00000 n +0000690681 00000 n +0000690830 00000 n +0000690990 00000 n +0000691139 00000 n +0000691298 00000 n +0000691445 00000 n +0000691615 00000 n +0000691763 00000 n +0000691918 00000 n +0000692061 00000 n +0000692232 00000 n +0000692381 00000 n +0000692541 00000 n +0000692690 00000 n +0000692861 00000 n +0000693010 00000 n +0000693174 00000 n +0000693318 00000 n +0000693477 00000 n +0000693625 00000 n +0000693794 00000 n +0000693941 00000 n +0000694143 00000 n +0000694325 00000 n +0000694497 00000 n +0000694647 00000 n +0000694807 00000 n +0000694956 00000 n +0000695125 00000 n +0000695272 00000 n +0000695472 00000 n +0000695650 00000 n +0000695823 00000 n +0000695974 00000 n +0000696135 00000 n +0000696285 00000 n +0000696456 00000 n +0000696605 00000 n +0000696772 00000 n +0000696917 00000 n +0000697090 00000 n +0000697241 00000 n +0000697402 00000 n +0000697552 00000 n +0000697711 00000 n +0000697858 00000 n +0000698025 00000 n +0000698170 00000 n +0000698325 00000 n +0000698468 00000 n +0000698615 00000 n +0000698751 00000 n +0000698909 00000 n +0000699045 00000 n +0000699203 00000 n +0000699350 00000 n +0000699498 00000 n +0000699635 00000 n +0000699804 00000 n +0000699951 00000 n +0000700138 00000 n +0000700303 00000 n +0000700474 00000 n +0000700623 00000 n +0000700782 00000 n +0000700930 00000 n +0000701099 00000 n +0000701246 00000 n +0000701415 00000 n +0000701562 00000 n +0000701735 00000 n +0000701886 00000 n +0000702044 00000 n +0000702190 00000 n +0000702355 00000 n +0000702508 00000 n +0000702672 00000 n +0000702825 00000 n +0000703006 00000 n +0000703165 00000 n +0000703333 00000 n +0000703479 00000 n +0000703646 00000 n +0000703791 00000 n +0000703959 00000 n +0000704105 00000 n +0000704265 00000 n +0000704414 00000 n +0000704577 00000 n +0000704718 00000 n +0000704883 00000 n +0000705037 00000 n +0000705203 00000 n +0000705347 00000 n +0000705517 00000 n +0000705665 00000 n +0000705849 00000 n +0000706013 00000 n +0000706190 00000 n +0000706345 00000 n +0000706510 00000 n +0000706653 00000 n +0000706829 00000 n +0000706983 00000 n +0000707152 00000 n +0000707299 00000 n +0000707466 00000 n +0000707611 00000 n +0000707896 00000 n +0000707975 00000 n +0000708139 00000 n +0000708330 00000 n +0000708558 00000 n +0000708775 00000 n +0000708945 00000 n +0000709163 00000 n +0000709409 00000 n +0000709582 00000 n +0000709763 00000 n +0000710028 00000 n +0000710213 00000 n +0000710394 00000 n +0000710651 00000 n +0000710836 00000 n +0000711017 00000 n +0000711274 00000 n +0000711451 00000 n +0000711650 00000 n +0000711845 00000 n +0000712027 00000 n +0000712347 00000 n +0000712532 00000 n +0000712713 00000 n +0000713037 00000 n +0000713227 00000 n +0000713414 00000 n +0000713595 00000 n +0000713879 00000 n +0000714068 00000 n +0000714267 00000 n +0000714463 00000 n +0000714645 00000 n +0000714941 00000 n +0000715130 00000 n +0000715317 00000 n +0000715498 00000 n +0000715878 00000 n +0000716067 00000 n +0000716267 00000 n +0000716448 00000 n +0000716757 00000 n +0000716951 00000 n +0000717141 00000 n +0000717438 00000 n +0000717631 00000 n +0000717834 00000 n +0000718020 00000 n +0000718304 00000 n +0000718493 00000 n +0000718678 00000 n +0000718999 00000 n +0000719193 00000 n +0000719384 00000 n +0000719569 00000 n +0000719953 00000 n +0000720146 00000 n +0000720350 00000 n +0000720535 00000 n +0000720848 00000 n +0000721042 00000 n +0000721246 00000 n +0000721432 00000 n +0000721733 00000 n +0000721927 00000 n +0000722132 00000 n +0000722318 00000 n +0000722628 00000 n +0000722823 00000 n +0000723028 00000 n +0000723202 00000 n +0000723555 00000 n +0000723749 00000 n +0000723953 00000 n +0000724139 00000 n +0000724456 00000 n +0000724651 00000 n +0000724856 00000 n +0000725042 00000 n +0000725407 00000 n +0000725590 00000 n +0000725794 00000 n +0000725994 00000 n +0000726180 00000 n +0000726566 00000 n +0000726760 00000 n +0000726964 00000 n +0000727152 00000 n +0000727338 00000 n +0000727727 00000 n +0000727921 00000 n +0000728125 00000 n +0000728326 00000 n +0000728512 00000 n +0000728794 00000 n +0000728988 00000 n +0000729180 00000 n +0000729366 00000 n +0000729655 00000 n +0000729845 00000 n +0000730031 00000 n +0000730412 00000 n +0000730607 00000 n +0000730811 00000 n +0000730998 00000 n +0000731347 00000 n +0000731530 00000 n +0000731734 00000 n +0000731920 00000 n +0000732282 00000 n +0000732476 00000 n +0000732681 00000 n +0000732882 00000 n +0000733069 00000 n +0000733314 00000 n +0000733493 00000 n +0000733679 00000 n +0000733960 00000 n +0000734150 00000 n +0000734336 00000 n +0000734640 00000 n +0000734834 00000 n +0000735038 00000 n +0000735225 00000 n +0000735453 00000 n +0000735655 00000 n +0000735840 00000 n +0000736065 00000 n +0000736290 00000 n +0000736534 00000 n +0000736726 00000 n +0000736914 00000 n +0000737111 00000 n +0000737320 00000 n +0000737496 00000 n +0000737720 00000 n +0000737909 00000 n +0000738117 00000 n +0000738389 00000 n +0000738622 00000 n +0000738807 00000 n +0000739036 00000 n +0000739229 00000 n +0000739403 00000 n +0000739958 00000 n +0000747826 00000 n +0000748042 00000 n +0000749405 00000 n +0000750474 00000 n +0000758080 00000 n +0000758301 00000 n +0000759664 00000 n +0000760743 00000 n +0000764004 00000 n +0000764230 00000 n +0000765593 00000 n +0000766709 00000 n +0000768912 00000 n +0000769126 00000 n +0000770489 00000 n trailer -<< /Size 751 +<< /Size 750 /Root 2 0 R /Info 1 0 R >> startxref -770744 +771614 %%EOF diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 2a7f4c1cc..b4c5bf309 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -143,9 +143,9 @@ pdp_group varchar(255), pdp_sub_group varchar(255), loop_element_model_id varchar(255), - loop_id varchar(255) not null, policy_model_type varchar(255), policy_model_version varchar(255), + loop_id varchar(255) not null, primary key (name) ) engine=InnoDB; @@ -246,12 +246,12 @@ foreign key (loop_element_model_id) references loop_element_models (name); - alter table operational_policies - add constraint FK1ddoggk9ni2bnqighv6ecmuwu - foreign key (loop_id) - references loops (name); - alter table operational_policies add constraint FKlsyhfkoqvkwj78ofepxhoctip foreign key (policy_model_type, policy_model_version) references policy_models (policy_model_type, version); + + alter table operational_policies + add constraint FK1ddoggk9ni2bnqighv6ecmuwu + foreign key (loop_id) + references loops (name); diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index 41ca89a70..1dfa208a9 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -63,7 +63,7 @@ UNLOCK TABLES; LOCK TABLES `loop_element_models` WRITE; /*!40000 ALTER TABLE `loop_element_models` DISABLE KEYS */; -INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-02-27 15:08:46.764261','Not found','2020-02-27 15:08:48.172681',NULL,NULL,'MICRO_SERVICE_TYPE',NULL); +INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-03-02 13:24:51.453602','Not found','2020-03-02 13:24:52.167202',NULL,NULL,'MICRO_SERVICE_TYPE',NULL); /*!40000 ALTER TABLE `loop_element_models` ENABLE KEYS */; UNLOCK TABLES; @@ -82,9 +82,9 @@ UNLOCK TABLES; LOCK TABLES `loop_templates` WRITE; /*!40000 ALTER TABLE `loop_templates` DISABLE KEYS */; -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_lCoAC_v1_0_ResourceInstanceName1_tca','Not found','2020-02-27 15:08:47.793512','Not found','2020-02-27 15:08:47.793512','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-49bf6c16-46a7-4962-a667-8be63b66f549',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_lCoAC_v1_0_ResourceInstanceName1_tca_3','Not found','2020-02-27 15:08:47.303168','Not found','2020-02-27 15:08:47.303168','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-41007420-32ac-4d57-8541-12faa3554315',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_lCoAC_v1_0_ResourceInstanceName2_tca_2','Not found','2020-02-27 15:08:46.692894','Not found','2020-02-27 15:08:46.692894','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-e3a75307-db43-4d5a-869d-75ff38d86dda',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_OlECc_v1_0_ResourceInstanceName1_tca','Not found','2020-03-02 13:24:52.069749','Not found','2020-03-02 13:24:52.069749','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-7f559db8-bce7-4ae8-af3a-a0601330ef61',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_OlECc_v1_0_ResourceInstanceName1_tca_3','Not found','2020-03-02 13:24:51.821227','Not found','2020-03-02 13:24:51.821227','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap.svc.cluster.local\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n consul_host:\n type: string\n default: consul-server.onap.svc.cluster.local\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service.dcae.svc.cluster.local\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"none\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: dcae.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \n get_input: policy_model_id\n','typeId-4ccd66a3-88f2-4882-97bd-867590f69092',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_OlECc_v1_0_ResourceInstanceName2_tca_2','Not found','2020-03-02 13:24:51.431617','Not found','2020-03-02 13:24:51.431617','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-4d04b1b1-9331-47c5-88ad-9ae89c231b97',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; UNLOCK TABLES; @@ -122,9 +122,9 @@ UNLOCK TABLES; LOCK TABLES `looptemplates_to_loopelementmodels` WRITE; /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` DISABLE KEYS */; -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_lCoAC_v1_0_ResourceInstanceName1_tca',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_lCoAC_v1_0_ResourceInstanceName1_tca_3',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_lCoAC_v1_0_ResourceInstanceName2_tca_2',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_OlECc_v1_0_ResourceInstanceName1_tca',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_OlECc_v1_0_ResourceInstanceName1_tca_3',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_OlECc_v1_0_ResourceInstanceName2_tca_2',0); /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` ENABLE KEYS */; UNLOCK TABLES; @@ -152,15 +152,13 @@ UNLOCK TABLES; LOCK TABLES `policy_models` WRITE; /*!40000 ALTER TABLE `policy_models` DISABLE KEYS */; -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Guard','1.0.0','Not found','2020-02-27 15:09:20.557489','Not found','2020-02-27 15:09:21.051644','Guard','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"xacml\"\n ]\n }\n ]\n}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.Blacklist','1.0.0','Not found','2020-02-27 15:09:20.518533','Not found','2020-02-27 15:09:20.518533','Blacklist','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.FrequencyLimiter','1.0.0','Not found','2020-02-27 15:09:20.386878','Not found','2020-02-27 15:09:20.386878','FrequencyLimiter','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.MinMax','1.0.0','Not found','2020-02-27 15:09:20.483188','Not found','2020-02-27 15:09:20.483188','MinMax','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Operational','1.0.0','Not found','2020-02-27 15:09:20.358225','Not found','2020-02-27 15:09:21.072743','Operational','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"apex\",\n \"drools\"\n ]\n }\n ]\n}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controloop.operational.Apex','1.0.0','Not found','2020-02-27 15:09:20.354431','Not found','2020-02-27 15:09:20.354431','Apex','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL); -INSERT INTO `policy_models` VALUES ('onap.policies.controloop.operational.Drools','1.0.0','Not found','2020-02-27 15:09:20.354507','Not found','2020-02-27 15:09:20.354507','Drools','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n',NULL); -INSERT INTO `policy_models` VALUES ('onap.policies.Monitoring','1.0.0','Not found','2020-02-27 15:09:20.514460','Not found','2020-02-27 15:09:20.514460','Monitoring','',NULL); -INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0','Not found','2020-02-27 15:08:46.796072','Not found','2020-02-27 15:09:21.107687','app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n description: a base policy type for all policies that governs monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','{\n \"supportedPdpGroups\": [\n {\n \"monitoring\": [\n \"xacml\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.Blacklist','1.0.0','Not found','2020-03-02 13:25:10.047752','Not found','2020-03-02 13:25:10.047752','Blacklist','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.controlloop.Guard:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: Guard Policies for Control Loop Operational Policies\n onap.policies.controlloop.guard.Blacklist:\n derived_from: onap.policies.controlloop.Guard\n version: 1.0.0\n description: Supports blacklist of VNF\'s from performing control loop actions on.\n properties:\n blacklist_policy:\n type: map\n description: null\n entry_schema:\n type: onap.datatypes.guard.Blacklist\ndata_types:\n onap.datatypes.guard.Blacklist:\n derived_from: tosca.datatypes.Root\n properties:\n actor:\n type: string\n description: Specifies the Actor\n required: true\n recipe:\n type: string\n description: Specified the Recipe\n required: true\n time_range:\n type: tosca.datatypes.TimeInterval\n description: An optional range of time during the day the blacklist is valid for.\n required: false\n controlLoopName:\n type: string\n description: An optional specific control loop to apply this guard to.\n required: false\n blacklist:\n type: list\n description: List of VNF\'s\n required: true',NULL); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.FrequencyLimiter','1.0.0','Not found','2020-03-02 13:25:09.987158','Not found','2020-03-02 13:25:09.987158','FrequencyLimiter','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.controlloop.Guard:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: Guard Policies for Control Loop Operational Policies\n onap.policies.controlloop.guard.FrequencyLimiter:\n derived_from: onap.policies.controlloop.Guard\n version: 1.0.0\n description: Supports limiting the frequency of actions being taken by a Actor.\n properties:\n frequency_policy:\n type: map\n description: null\n entry_schema:\n type: onap.datatypes.guard.FrequencyLimiter\ndata_types:\n onap.datatypes.guard.FrequencyLimiter:\n derived_from: tosca.datatypes.Root\n properties:\n actor:\n type: string\n description: Specifies the Actor\n required: true\n recipe:\n type: string\n description: Specified the Recipe\n required: true\n time_window:\n type: scalar-unit.time\n description: The time window to count the actions against.\n required: true\n limit:\n type: integer\n description: The limit\n required: true\n constraints:\n - greater_than: 0\n time_range:\n type: tosca.datatypes.TimeInterval\n description: An optional range of time during the day the frequency is valid for.\n required: false\n controlLoopName:\n type: string\n description: An optional specific control loop to apply this guard to.\n required: false\n target:\n type: string\n description: An optional specific VNF to apply this guard to.\n required: false',NULL); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.MinMax','2.0.0','Not found','2020-03-02 13:25:09.987757','Not found','2020-03-02 13:25:09.987757','MinMax','',NULL); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.operational.Apex','1.0.0','Not found','2020-03-02 13:25:09.987152','Not found','2020-03-02 13:25:09.987152','Apex','',NULL); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.operational.Drools','1.0.0','Not found','2020-03-02 13:25:09.992687','Not found','2020-03-02 13:25:09.992687','Drools','',NULL); +INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0','Not found','2020-03-02 13:24:51.467136','Not found','2020-03-02 13:25:10.569587','app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: a base policy type for all policies that govern monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: map\n description: TCA Policy JSON\n entry_schema:\n type: onap.datatypes.monitoring.tca_policy\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold','{\n \"supportedPdpGroups\": [\n {\n \"monitoring\": [\n \"xacml\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.operational.legacy','1.0.0','Not found','2020-03-02 13:24:26.818795','Not found','2020-03-02 13:24:26.818795','OperationalPolicyLegacy','',NULL); /*!40000 ALTER TABLE `policy_models` ENABLE KEYS */; UNLOCK TABLES; @@ -182,4 +180,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-02-27 23:10:22 +-- Dump completed on 2020-03-02 21:26:34 diff --git a/src/main/java/org/onap/clamp/clds/config/ClampProperties.java b/src/main/java/org/onap/clamp/clds/config/ClampProperties.java index 8eae9066d..0b5c951bf 100644 --- a/src/main/java/org/onap/clamp/clds/config/ClampProperties.java +++ b/src/main/java/org/onap/clamp/clds/config/ClampProperties.java @@ -23,14 +23,10 @@ package org.onap.clamp.clds.config; -import com.google.gson.JsonElement; - import java.io.IOException; import java.net.URL; import java.nio.charset.StandardCharsets; - import org.apache.commons.io.IOUtils; -import org.onap.clamp.clds.util.JsonUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; @@ -74,38 +70,6 @@ public class ClampProperties { return value; } - /** - * Return json as objects that can be updated. The value obtained from the - * clds-reference file will be used as a filename. - * - * @param key The key that will be used to access the clds-reference file - * @return A jsonNode - * @throws IOException In case of issues with the JSON parser - */ - public JsonElement getJsonTemplate(String key) throws IOException { - String fileReference = getStringValue(key); - return (fileReference != null) - ? JsonUtils.GSON.fromJson(getFileContentFromPath(fileReference), JsonElement.class) - : null; - } - - /** - * Return json as objects that can be updated. First try with combo key (key1 + - * "." + key2), otherwise default to just key1. The value obtained from the - * clds-reference file will be used as a filename. - * - * @param key1 The first key - * @param key2 The second key after a dot - * @return A JsonNode - * @throws IOException In case of issues with the JSON parser - */ - public JsonElement getJsonTemplate(String key1, String key2) throws IOException { - String fileReference = getStringValue(key1, key2); - return (fileReference != null) - ? JsonUtils.GSON.fromJson(getFileContentFromPath(fileReference), JsonElement.class) - : null; - } - /** * Return the file content. The value obtained from the clds-reference file will * be used as a filename. diff --git a/src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicy.java b/src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicy.java new file mode 100644 index 000000000..7d4b5f8fe --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/config/LegacyOperationalPolicy.java @@ -0,0 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.config; + +import javax.annotation.PostConstruct; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +@Configuration +@Profile("legacy-operational-policy") +public class LegacyOperationalPolicy { + + @Autowired + PolicyModelsService policyModelService; + + public static final String OPERATIONAL_POLICY_LEGACY = "onap.policies.operational.legacy"; + + @PostConstruct + public void init() { + policyModelService.saveOrUpdatePolicyModel(new PolicyModel(OPERATIONAL_POLICY_LEGACY, "", "1.0.0", + "OperationalPolicyLegacy")); + } +} + diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 122b4c77f..f185460cf 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -48,6 +48,7 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; +import org.apache.commons.lang3.RandomStringUtils; import org.hibernate.annotations.SortNatural; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; @@ -62,6 +63,7 @@ import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.service.Service; import org.onap.clamp.loop.template.LoopElementModel; import org.onap.clamp.loop.template.LoopTemplate; +import org.onap.clamp.policy.Policy; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; @@ -168,12 +170,18 @@ public class Loop extends AuditEntity implements Serializable { this.setModelService(loopTemplate.getModelService()); loopTemplate.getLoopElementModelsUsed().forEach(element -> { if (LoopElementModel.MICRO_SERVICE_TYPE.equals(element.getLoopElementModel().getLoopElementType())) { - this.addMicroServicePolicy(new MicroServicePolicy(name, + this.addMicroServicePolicy(new MicroServicePolicy(Policy.generatePolicyName("MICROSERVICE_", + loopTemplate.getModelService().getName(),loopTemplate.getModelService().getVersion(), + RandomStringUtils.randomAlphanumeric(3),RandomStringUtils.randomAlphanumeric(3)), element.getLoopElementModel().getPolicyModels().first(), false, element.getLoopElementModel())); } else if (LoopElementModel.OPERATIONAL_POLICY_TYPE .equals(element.getLoopElementModel().getLoopElementType())) { - this.addOperationalPolicy(new OperationalPolicy(name, null, new JsonObject(), - element.getLoopElementModel().getPolicyModels().first(), element.getLoopElementModel(), null, null)); + this.addOperationalPolicy(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL_", + loopTemplate.getModelService().getName(),loopTemplate.getModelService().getVersion(), + RandomStringUtils.randomAlphanumeric(3),RandomStringUtils.randomAlphanumeric(3)), null, + new JsonObject(), + element.getLoopElementModel().getPolicyModels().first(), element.getLoopElementModel(), + null,null)); } }); } diff --git a/src/main/java/org/onap/clamp/loop/LoopController.java b/src/main/java/org/onap/clamp/loop/LoopController.java index 59b97e1a2..1a67455e8 100644 --- a/src/main/java/org/onap/clamp/loop/LoopController.java +++ b/src/main/java/org/onap/clamp/loop/LoopController.java @@ -38,11 +38,9 @@ import org.springframework.stereotype.Controller; public class LoopController { private final LoopService loopService; - private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken>() { - }.getType(); + private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken>() {}.getType(); - private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken>() { - }.getType(); + private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken>() {}.getType(); @Autowired public LoopController(LoopService loopService) { diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java index 47dee1ae9..ebeb84fd6 100644 --- a/src/main/java/org/onap/clamp/policy/Policy.java +++ b/src/main/java/org/onap/clamp/policy/Policy.java @@ -23,28 +23,40 @@ package org.onap.clamp.policy; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import java.io.UnsupportedEncodingException; - +import java.util.Map; import javax.persistence.Column; import javax.persistence.FetchType; import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; import javax.persistence.MappedSuperclass; - +import javax.persistence.Transient; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; +import org.json.JSONObject; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.loop.template.PolicyModel; +import org.yaml.snakeyaml.Yaml; @MappedSuperclass @TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) public abstract class Policy extends AuditEntity { + @Transient + private static final EELFLogger logger = EELFManager.getInstance().getLogger(Policy.class); + @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "json_representation", nullable = false) @@ -72,7 +84,67 @@ public abstract class Policy extends AuditEntity { @Column(name = "pdp_sub_group") private String pdpSubgroup; - public abstract String createPolicyPayload() throws UnsupportedEncodingException; + @Expose + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumns({@JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), + @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) + private PolicyModel policyModel; + + private JsonObject createJsonFromPolicyTosca() { + Map map = + new Yaml().load(this.getPolicyModel() != null ? this.getPolicyModel().getPolicyModelTosca() : ""); + JSONObject jsonObject = new JSONObject(map); + return new Gson().fromJson(jsonObject.toString(), JsonObject.class); + } + + private String getModelPropertyNameFromTosca(JsonObject object, String policyModelType) { + return object.getAsJsonObject("policy_types").getAsJsonObject(policyModelType) + .getAsJsonObject( + "properties") + .keySet().toArray(new String[1])[0]; + } + + /** + * This method create the policy payload that must be sent to PEF. + * + * @return A String containing the payload + * @throws UnsupportedEncodingException In case of failure + */ + public String createPolicyPayload() throws UnsupportedEncodingException { + JsonObject toscaJson = createJsonFromPolicyTosca(); + + JsonObject policyPayloadResult = new JsonObject(); + + policyPayloadResult.add("tosca_definitions_version", toscaJson.get("tosca_definitions_version")); + + JsonObject topologyTemplateNode = new JsonObject(); + policyPayloadResult.add("topology_template", topologyTemplateNode); + + JsonArray policiesArray = new JsonArray(); + topologyTemplateNode.add("policies", policiesArray); + + JsonObject thisPolicy = new JsonObject(); + policiesArray.add(thisPolicy); + + JsonObject policyDetails = new JsonObject(); + thisPolicy.add(this.getName(), policyDetails); + policyDetails.addProperty("type", this.getPolicyModel().getPolicyModelType()); + policyDetails.addProperty("version", this.getPolicyModel().getVersion()); + + JsonObject policyMetadata = new JsonObject(); + policyDetails.add("metadata", policyMetadata); + policyMetadata.addProperty("policy-id", this.getName()); + + JsonObject policyProperties = new JsonObject(); + policyDetails.add("properties", policyProperties); + policyProperties + .add(this.getModelPropertyNameFromTosca(toscaJson, this.getPolicyModel().getPolicyModelType()), + this.getConfigurationsJson()); + String policyPayload = new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult); + logger.info("Policy payload: " + policyPayload); + return policyPayload; + } + /** * Name getter. @@ -104,6 +176,24 @@ public abstract class Policy extends AuditEntity { this.jsonRepresentation = jsonRepresentation; } + /** + * policyModel getter. + * + * @return the policyModel + */ + public PolicyModel getPolicyModel() { + return policyModel; + } + + /** + * policyModel setter. + * + * @param policyModel The new policyModel + */ + public void setPolicyModel(PolicyModel policyModel) { + this.policyModel = policyModel; + } + /** * configurationsJson getter. * @@ -160,7 +250,7 @@ public abstract class Policy extends AuditEntity { /** * pdpSubgroup getter. - * + * * @return the pdpSubgroup */ public String getPdpSubgroup() { @@ -169,7 +259,7 @@ public abstract class Policy extends AuditEntity { /** * pdpSubgroup setter. - * + * * @param pdpSubgroup the pdpSubgroup to set */ public void setPdpSubgroup(String pdpSubgroup) { diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index 7fd752c31..c4037ffb6 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -25,28 +25,20 @@ package org.onap.clamp.policy.microservice; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import java.io.Serializable; import java.util.HashSet; -import java.util.Map; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinColumns; import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; -import org.json.JSONObject; import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; @@ -54,7 +46,6 @@ import org.onap.clamp.loop.Loop; import org.onap.clamp.loop.template.LoopElementModel; import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.Policy; -import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "micro_service_policies") @@ -100,12 +91,6 @@ public class MicroServicePolicy extends Policy implements Serializable { @Column(name = "dcae_blueprint_id") private String dcaeBlueprintId; - @Expose - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumns({@JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), - @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) - private PolicyModel policyModel; - public MicroServicePolicy() { // serialization } @@ -119,20 +104,15 @@ public class MicroServicePolicy extends Policy implements Serializable { * @param shared The flag indicate whether the MicroService is shared */ public MicroServicePolicy(String name, PolicyModel policyModel, Boolean shared, LoopElementModel loopElementModel) { - this(name,policyModel,shared,JsonUtils.GSON_JPA_MODEL + this(name, policyModel, shared, JsonUtils.GSON_JPA_MODEL .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyModel.getPolicyModelTosca(), - policyModel.getPolicyModelType()), JsonObject.class),loopElementModel, null, null); - } - - private JsonObject createJsonFromPolicyTosca() { - Map map = new Yaml().load(this.getPolicyModel().getPolicyModelTosca()); - JSONObject jsonObject = new JSONObject(map); - return new Gson().fromJson(jsonObject.toString(), JsonObject.class); + policyModel.getPolicyModelType()), JsonObject.class), loopElementModel,null,null); } /** * The constructor that does not make use of ToscaYamlToJsonConvertor but take * the jsonRepresentation instead. + * * @param name The name of the MicroService * @param policyModel The policy model type of the MicroService * @param shared The flag indicate whether the MicroService is @@ -145,7 +125,7 @@ public class MicroServicePolicy extends Policy implements Serializable { public MicroServicePolicy(String name, PolicyModel policyModel, Boolean shared, JsonObject jsonRepresentation, LoopElementModel loopElementModel, String pdpGroup, String pdpSubgroup) { this.name = name; - this.policyModel = policyModel; + this.setPolicyModel(policyModel); this.shared = shared; this.setJsonRepresentation(jsonRepresentation); this.setLoopElementModel(loopElementModel); @@ -200,14 +180,6 @@ public class MicroServicePolicy extends Policy implements Serializable { this.deviceTypeScope = deviceTypeScope; } - public PolicyModel getPolicyModel() { - return policyModel; - } - - public void setPolicyModel(PolicyModel policyModel) { - this.policyModel = policyModel; - } - /** * dcaeDeploymentId getter. * @@ -288,48 +260,7 @@ public class MicroServicePolicy extends Policy implements Serializable { } } else if (!name.equals(other.name)) { return false; - } return true; - } - - private String getMicroServicePropertyNameFromTosca(JsonObject object) { - return object.getAsJsonObject("policy_types").getAsJsonObject(this.getPolicyModel().getPolicyModelType()) - .getAsJsonObject( - "properties") - .keySet().toArray(new String[1])[0]; - } - - @Override - public String createPolicyPayload() { - JsonObject toscaJson = createJsonFromPolicyTosca(); - - JsonObject policyPayloadResult = new JsonObject(); - - policyPayloadResult.add("tosca_definitions_version", toscaJson.get("tosca_definitions_version")); - - JsonObject topologyTemplateNode = new JsonObject(); - policyPayloadResult.add("topology_template", topologyTemplateNode); - - JsonArray policiesArray = new JsonArray(); - topologyTemplateNode.add("policies", policiesArray); - - JsonObject thisPolicy = new JsonObject(); - policiesArray.add(thisPolicy); - - JsonObject policyDetails = new JsonObject(); - thisPolicy.add(this.getName(), policyDetails); - policyDetails.addProperty("type", this.getPolicyModel().getPolicyModelType()); - policyDetails.addProperty("version", this.getPolicyModel().getVersion()); - - JsonObject policyMetadata = new JsonObject(); - policyDetails.add("metadata", policyMetadata); - policyMetadata.addProperty("policy-id", this.getName()); - - JsonObject policyProperties = new JsonObject(); - policyDetails.add("properties", policyProperties); - policyProperties.add(this.getMicroServicePropertyNameFromTosca(toscaJson), this.getConfigurationsJson()); - String policyPayload = new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult); - logger.info("Micro service policy payload: " + policyPayload); - return policyPayload; + } + return true; } - } diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index aab30bfb6..82cfcf4ef 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -50,6 +50,8 @@ import javax.persistence.Table; import javax.persistence.Transient; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; +import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; import org.onap.clamp.loop.template.LoopElementModel; @@ -79,12 +81,6 @@ public class OperationalPolicy extends Policy implements Serializable { @JoinColumn(name = "loop_id", nullable = false) private Loop loop; - @Expose - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumns({@JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"), - @JoinColumn(name = "policy_model_version", referencedColumnName = "version")}) - private PolicyModel policyModel; - public OperationalPolicy() { // Serialization } @@ -110,16 +106,32 @@ public class OperationalPolicy extends Policy implements Serializable { this.setPdpGroup(pdpGroup); this.setPdpSubgroup(pdpSubgroup); this.setLoopElementModel(loopElementModel); - if (policyModel != null && policyModel.getPolicyModelType().contains("legacy")) { - LegacyOperationalPolicy.preloadConfiguration(configurationsJson, loop); + this.setJsonRepresentation(this.generateJsonRepresentation(policyModel)); + + } + + private JsonObject generateJsonRepresentation(PolicyModel policyModel) { + JsonObject jsonReturned = new JsonObject(); + if (policyModel == null) { + return new JsonObject(); } try { - this.setJsonRepresentation( - OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(loop.getModelService())); + if (isLegacy()) { + // Op policy Legacy case + LegacyOperationalPolicy.preloadConfiguration(jsonReturned, loop); + this.setJsonRepresentation( + OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(loop.getModelService())); + } else { + // Generic Case + this.setJsonRepresentation(JsonUtils.GSON + .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyModel.getPolicyModelTosca(), + policyModel.getPolicyModelType()), JsonObject.class)); + } } catch (JsonSyntaxException | IOException | NullPointerException e) { logger.error("Unable to generate the operational policy Schema ... ", e); this.setJsonRepresentation(new JsonObject()); } + return jsonReturned; } public void setLoop(Loop loopName) { @@ -145,24 +157,6 @@ public class OperationalPolicy extends Policy implements Serializable { this.name = name; } - /** - * policyModel getter. - * - * @return the policyModel - */ - public PolicyModel getPolicyModel() { - return policyModel; - } - - /** - * policyModel setter. - * - * @param policyModel the policyModel to set - */ - public void setPolicyModel(PolicyModel policyModel) { - this.policyModel = policyModel; - } - @Override public int hashCode() { final int prime = 31; @@ -193,6 +187,10 @@ public class OperationalPolicy extends Policy implements Serializable { return true; } + public Boolean isLegacy() { + return (this.getPolicyModel() != null) && this.getPolicyModel().getPolicyModelType().contains("legacy"); + } + /** * Create policy Yaml from json defined here. * @@ -235,17 +233,22 @@ public class OperationalPolicy extends Policy implements Serializable { @Override public String createPolicyPayload() throws UnsupportedEncodingException { - // Now using the legacy payload fo Dublin - JsonObject payload = new JsonObject(); - payload.addProperty("policy-id", this.getName()); - payload.addProperty("content", - URLEncoder.encode( - LegacyOperationalPolicy - .createPolicyPayloadYamlLegacy(this.getConfigurationsJson().get("operational_policy")), - StandardCharsets.UTF_8.toString())); - String opPayload = new GsonBuilder().setPrettyPrinting().create().toJson(payload); - logger.info("Operational policy payload: " + opPayload); - return opPayload; + if (isLegacy()) { + // Now using the legacy payload fo Dublin + JsonObject payload = new JsonObject(); + payload.addProperty("policy-id", this.getName()); + payload.addProperty("content", + URLEncoder.encode( + LegacyOperationalPolicy + .createPolicyPayloadYamlLegacy( + this.getConfigurationsJson().get("operational_policy")), + StandardCharsets.UTF_8.toString())); + String opPayload = new GsonBuilder().setPrettyPrinting().create().toJson(payload); + logger.info("Operational policy payload: " + opPayload); + return opPayload; + } else { + return super.createPolicyPayload(); + } } /** diff --git a/src/main/resources/META-INF/resources/swagger.html b/src/main/resources/META-INF/resources/swagger.html index 23844cb23..9c4c9fff2 100644 --- a/src/main/resources/META-INF/resources/swagger.html +++ b/src/main/resources/META-INF/resources/swagger.html @@ -444,25 +444,25 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
      • 2. Paths
      • @@ -740,7 +740,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -774,7 +774,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -811,7 +811,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1060,7 +1060,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1184,7 +1184,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1233,7 +1233,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1295,7 +1295,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1332,7 +1332,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1394,7 +1394,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1456,7 +1456,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1518,7 +1518,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1580,7 +1580,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1642,7 +1642,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1704,7 +1704,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1766,7 +1766,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1844,7 +1844,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1922,7 +1922,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2000,7 +2000,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2062,7 +2062,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2223,7 +2223,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2301,7 +2301,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -3617,6 +3617,11 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b + + + + diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties index 69d16875c..320e0c2a3 100644 --- a/src/main/resources/application-noaaf.properties +++ b/src/main/resources/application-noaaf.properties @@ -21,11 +21,6 @@ # ### -info.build.artifact=@project.artifactId@ -info.build.name=@project.name@ -info.build.description=@project.description@ -info.build.version=@project.version@ - ### Set the port for HTTP or HTTPS protocol (Controlled by Spring framework, only one at a time). ### (See below for the parameter 'server.http.port' if you want to have both enabled) ### To have only HTTP, keep the lines server.ssl.* commented @@ -73,7 +68,7 @@ clamp.config.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile server.servlet.context-path=/ #Modified engine-rest applicationpath -spring.profiles.active=clamp-default,clamp-default-user,clamp-sdc-controller,clamp-ssl-config,clamp-policy-controller +spring.profiles.active=clamp-default,clamp-default-user,clamp-sdc-controller,clamp-ssl-config,clamp-policy-controller,legacy-operational-policy spring.http.converters.preferred-json-mapper=gson #The max number of active threads in this pool @@ -145,12 +140,7 @@ clamp.config.files.cldsUsers=classpath:/clds/clds-users.json clamp.config.files.globalProperties=classpath:/clds/templates/globalProperties.json clamp.config.files.sdcController=classpath:/clds/sdc-controllers-config.json -# Properties for Clamp -# DCAE request build properties -# -clamp.config.dcae.template=classpath:/clds/templates/dcae-template.json -clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment-template.json -# + # # Configuration Settings for Policy Engine Components clamp.config.policy.api.url=http4://localhost:8085 @@ -160,36 +150,9 @@ clamp.config.policy.pap.url=http4://localhost:8085 clamp.config.policy.pap.userName=healthcheck clamp.config.policy.pap.password=zb!XztG34 -# TCA MicroService Policy request build properties -# -clamp.config.tca.policyid.prefix=DCAE.Config_ -clamp.config.tca.policy.template=classpath:/clds/templates/tca-policy-template.json -clamp.config.tca.template=classpath:/clds/templates/tca-template.json -clamp.config.tca.thresholds.template=classpath:/clds/templates/tca-thresholds-template.json - -# -# -# Operational Policy request build properties -# -clamp.config.op.policyDescription=from CLAMP -# default -clamp.config.op.templateName=ClosedLoopControlName -clamp.config.op.operationTopic=APPC-CL -clamp.config.op.notificationTopic=POLICY-CL-MGT -clamp.config.op.controller=amsterdam -clamp.config.op.policy.appc=APPC # # Sdc service properties clamp.config.sdc.csarFolder = /tmp/sdc-controllers -clamp.config.sdc.blueprint.parser.mapping = classpath:/clds/blueprint-parser-mapping.json -# -clamp.config.ui.location.default=classpath:/clds/templates/ui-location-default.json -# -# if action.test.override is true, then any action will be marked as test=true (even if incoming action request had test=false); otherwise, test flag will be unchanged on the action request -clamp.config.action.test.override=false -# if action.insert.test.event is true, then insert event even if the action is set to test -clamp.config.action.insert.test.event=false -clamp.config.clds.service.cache.invalidate.after.seconds=120 #DCAE Inventory Url Properties clamp.config.dcae.inventory.url=http4://localhost:8085 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 695319d5b..e856743a8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -73,7 +73,7 @@ server.ssl.trust-store-password=enc:iDnPBBLq_EMidXlMa1FEuBR8TZzYxrCg66vq_XfLHdJ server.servlet.context-path=/ #Modified engine-rest applicationpath -spring.profiles.active=clamp-default,clamp-aaf-authentication,clamp-sdc-controller,clamp-ssl-config,clamp-policy-controller +spring.profiles.active=clamp-default,clamp-aaf-authentication,clamp-sdc-controller,clamp-ssl-config,clamp-policy-controller,legacy-operational-policy spring.http.converters.preferred-json-mapper=gson #The max number of active threads in this pool @@ -143,12 +143,6 @@ clamp.config.files.cldsUsers=classpath:/clds/clds-users.json clamp.config.files.globalProperties=classpath:/clds/templates/globalProperties.json clamp.config.files.sdcController=classpath:/clds/sdc-controllers-config.json -# Properties for Clamp -# DCAE request build properties -# -clamp.config.dcae.template=classpath:/clds/templates/dcae-template.json -clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment-template.json -# # # Configuration Settings for Policy Engine Components clamp.config.policy.api.url=http4://policy.api.simpledemo.onap.org:6969 @@ -158,36 +152,9 @@ clamp.config.policy.pap.url=http4://policy.api.simpledemo.onap.org:6969 clamp.config.policy.pap.userName=healthcheck clamp.config.policy.pap.password=zb!XztG34 -# TCA MicroService Policy request build properties -# -clamp.config.tca.policyid.prefix=DCAE.Config_ -clamp.config.tca.policy.template=classpath:/clds/templates/tca-policy-template.json -clamp.config.tca.template=classpath:/clds/templates/tca-template.json -clamp.config.tca.thresholds.template=classpath:/clds/templates/tca-thresholds-template.json - -# -# -# Operational Policy request build properties -# -clamp.config.op.policyDescription=from CLAMP -# default -clamp.config.op.templateName=ClosedLoopControlName -clamp.config.op.operationTopic=APPC-CL -clamp.config.op.notificationTopic=POLICY-CL-MGT -clamp.config.op.controller=amsterdam -clamp.config.op.policy.appc=APPC # # Sdc service properties clamp.config.sdc.csarFolder = /tmp/sdc-controllers -clamp.config.sdc.blueprint.parser.mapping = classpath:/clds/blueprint-parser-mapping.json -# -clamp.config.ui.location.default=classpath:/clds/templates/ui-location-default.json -# -# if action.test.override is true, then any action will be marked as test=true (even if incoming action request had test=false); otherwise, test flag will be unchanged on the action request -clamp.config.action.test.override=false -# if action.insert.test.event is true, then insert event even if the action is set to test -clamp.config.action.insert.test.event=false -clamp.config.clds.service.cache.invalidate.after.seconds=120 #DCAE Inventory Url Properties clamp.config.dcae.inventory.url=http4://dcae.api.simpledemo.onap.org:8080 diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml index 3ed272e7c..fbf90712a 100644 --- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml @@ -377,51 +377,56 @@ ${exchangeProperty[loopObject].getMicroServicePolicies()} - + ${body} + message="Processing Micro Service Policy: ${exchangeProperty[policy].getName()}" /> false - - + + ${exchangeProperty[loopObject].getOperationalPolicies()} - + ${body} + message="Processing Operational Policy: ${exchangeProperty[policy].getName()}" /> false - - - - - - ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} - - - ${body} - - + + + + + ${exchangeProperty['policy'].isLegacy()} == true + + + + ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} + + + ${body} + + - - false - - - - + + false + + + + + + diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml index afc5f952a..48e518da9 100644 --- a/src/main/resources/clds/camel/routes/policy-flows.xml +++ b/src/main/resources/clds/camel/routes/policy-flows.xml @@ -183,6 +183,102 @@ + + + + + + + ${exchangeProperty[policy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policy].getName()} creation + status + + + + POLICY + + + + + + + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + ${exchangeProperty[policy].getName()} removal + status + + + + POLICY + + + + + diff --git a/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java b/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java index c25415ecc..4bf2de030 100644 --- a/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java @@ -24,17 +24,11 @@ package org.onap.clamp.clds.it.config; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import com.google.gson.JsonElement; - import java.io.IOException; - import org.junit.Test; import org.junit.runner.RunWith; import org.onap.clamp.clds.config.ClampProperties; +import org.onap.clamp.clds.util.ResourceFileUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @@ -57,37 +51,6 @@ public class CldsReferencePropertiesItCase { assertEquals("healthcheck", refProp.getStringValue("policy.api.userName")); } - @Test - public void shouldReturnJsonFromTemplate() throws IOException { - // when - JsonElement root = refProp.getJsonTemplate("ui.location.default"); - - // then - assertNotNull(root); - assertTrue(root.isJsonObject()); - assertEquals("Data Center 1", root.getAsJsonObject().get("DC1").getAsString()); - } - - @Test - public void shouldReturnJsonFromTemplate_2() throws IOException { - // when - JsonElement root = refProp.getJsonTemplate("ui.location", "default"); - - // then - assertNotNull(root); - assertTrue(root.isJsonObject()); - assertEquals("Data Center 1", root.getAsJsonObject().get("DC1").getAsString()); - } - - @Test - public void shouldReturnNullIfPropertyNotFound() throws IOException { - // when - JsonElement root = refProp.getJsonTemplate("ui.location", ""); - - // then - assertNull(root); - } - /** * Test getting prop value as a JSON Node / template. * @@ -95,12 +58,9 @@ public class CldsReferencePropertiesItCase { */ @Test public void testGetFileContent() throws IOException { - String location = "{\n\t\"DC1\": \"Data Center 1\"," - + "\n\t\"DC2\": \"Data Center 2\",\n\t\"DC3\": \"Data Center 3\"\n}\n"; - String content = refProp.getFileContent("ui.location.default"); - assertEquals(location, content); + String users = ResourceFileUtil.getResourceAsString("clds/clds-users.json"); + assertEquals(users, refProp.getFileContent("files.cldsUsers")); // Test composite key - content = refProp.getFileContent("ui.location", "default"); - assertEquals(location, content); + assertEquals(users, refProp.getFileContent("files", "cldsUsers")); } } diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index a1499f720..fd215dd39 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -34,9 +34,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; - import javax.transaction.Transactional; - import org.apache.commons.lang3.RandomStringUtils; import org.json.JSONException; import org.junit.Assert; @@ -44,6 +42,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.onap.clamp.clds.Application; +import org.onap.clamp.clds.config.LegacyOperationalPolicy; import org.onap.clamp.clds.exception.sdc.controller.BlueprintParserException; import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; @@ -74,7 +73,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) -@ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller") +@ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller,legacy-operational-policy") public class CsarInstallerItCase { private static final String CSAR_ARTIFACT_NAME = "example/sdc/service_Vloadbalancerms_csar.csar"; @@ -160,6 +159,13 @@ public class CsarInstallerItCase { return csarHandler; } + @Test + @Transactional + public void testPolicyModelAddedAtStartup() { + assertThat(policyModelsRepository.findByPolicyModelType( + LegacyOperationalPolicy.OPERATIONAL_POLICY_LEGACY).get(0)).isNotNull(); + } + @Test @Transactional public void testGetPolicyModelYaml() throws IOException, SdcToscaParserException, CsarHandlerException { diff --git a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java index 47b4b65c3..164625fef 100644 --- a/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java +++ b/src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java @@ -90,7 +90,8 @@ public class LoopRepositoriesItCase { } private OperationalPolicy getOperationalPolicy(String configJson, String name, PolicyModel policyModel) { - return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class), policyModel, null, null, null); + return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class), policyModel, + null, null, null); } private LoopElementModel getLoopElementModel(String yaml, String name, String policyType, String createdBy, @@ -105,11 +106,13 @@ public class LoopRepositoriesItCase { return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); } - private LoopTemplate getLoopTemplate(String name, String blueprint, String svgRepresentation, String createdBy, - Integer maxInstancesAllowed) { + private LoopTemplate getLoopTemplates(String name, String blueprint, String svgRepresentation, String createdBy, + Integer maxInstancesAllowed) { LoopTemplate template = new LoopTemplate(name, blueprint, svgRepresentation, maxInstancesAllowed, null); template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "org.onap.policy.drools", createdBy, getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools"))); + template.addLoopElementModel(getLoopElementModel("yaml", "oppolicy1", "org.onap.policy.drools.legacy", + createdBy, getPolicyModel("org.onap.policy.drools.legacy", "yaml", "1.0.0", "DroolsLegacy"))); loopTemplateRepository.save(template); return template; } @@ -123,7 +126,7 @@ public class LoopRepositoriesItCase { loop.setLastComputedState(LoopState.DESIGN); loop.setDcaeDeploymentId(dcaeId); loop.setDcaeDeploymentStatusUrl(dcaeUrl); - loop.setLoopTemplate(getLoopTemplate("templateName", "yaml", "svg", "toto", 1)); + loop.setLoopTemplate(getLoopTemplates("templateName", "yaml", "svg", "toto", 1)); return loop; } @@ -149,7 +152,7 @@ public class LoopRepositoriesItCase { Loop loopTest = getLoop("ControlLoopTest", "", "yamlcontent", "{\"testname\":\"testvalue\"}", "123456789", "https://dcaetest.org", "UUID-blueprint"); OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest", - getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools")); + getPolicyModel("org.onap.policy.drools.legacy", "yaml", "1.0.0", "DroolsLegacy")); loopTest.addOperationalPolicy(opPolicy); MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "{\"configtype\":\"json\"}", "{\"param1\":\"value1\"}", true, getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools")); diff --git a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java index de2ef145a..6c7836e50 100644 --- a/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java +++ b/src/test/java/org/onap/clamp/loop/LoopToJsonTest.java @@ -37,6 +37,7 @@ import java.util.Random; import org.junit.Test; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.loop.components.external.PolicyComponent; import org.onap.clamp.loop.log.LogType; import org.onap.clamp.loop.log.LoopLog; import org.onap.clamp.loop.service.Service; @@ -45,6 +46,7 @@ import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; +import org.skyscreamer.jsonassert.JSONAssert; public class LoopToJsonTest { @@ -52,7 +54,7 @@ public class LoopToJsonTest { private OperationalPolicy getOperationalPolicy(String configJson, String name) { return new OperationalPolicy(name, null, gson.fromJson(configJson, JsonObject.class), - getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools", "type1"), null, null, null); + getPolicyModel("org.onap.policy.drools.legacy", "yaml", "1.0.0", "Drools", "type1"), null,null,null); } private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson, diff --git a/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java b/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java index 370c319b3..89d3e6172 100644 --- a/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java +++ b/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java @@ -24,9 +24,9 @@ package org.onap.clamp.loop; import static org.assertj.core.api.Assertions.assertThat; + import com.google.gson.Gson; import com.google.gson.JsonObject; - import java.io.IOException; import java.util.HashSet; import org.apache.camel.Exchange; @@ -44,13 +44,13 @@ import org.onap.clamp.policy.operational.OperationalPolicy; public class PolicyComponentTest { /** - * Test the computeState method. - * oldState newState expectedFinalState - * NOT_SENT SENT_AND_DEPLOYED NOT_SENT - * NOT_SENT SENT NOT_SENT - * NOT_SENT NOT_SENT NOT_SENT - * NOT_SENT IN_ERROR IN_ERROR - */ + * Test the computeState method. + * oldState newState expectedFinalState + * NOT_SENT SENT_AND_DEPLOYED NOT_SENT + * NOT_SENT SENT NOT_SENT + * NOT_SENT NOT_SENT NOT_SENT + * NOT_SENT IN_ERROR IN_ERROR + */ @Test public void computeStateTestOriginalStateUnknown() { Exchange exchange = Mockito.mock(Exchange.class); @@ -81,14 +81,15 @@ public class PolicyComponentTest { ExternalComponentState state3 = policy.computeState(exchange); assertThat(state3.getStateName()).isEqualTo("IN_ERROR"); } + /** - * Test the computeState method. - * oldState newState expectedFinalState - * NOT_SENT SENT_AND_DEPLOYED NOT_SENT - * NOT_SENT SENT NOT_SENT - * NOT_SENT NOT_SENT NOT_SENT - * NOT_SENT IN_ERROR IN_ERROR - */ + * Test the computeState method. + * oldState newState expectedFinalState + * NOT_SENT SENT_AND_DEPLOYED NOT_SENT + * NOT_SENT SENT NOT_SENT + * NOT_SENT NOT_SENT NOT_SENT + * NOT_SENT IN_ERROR IN_ERROR + */ @Test public void computeStateTestOriginalStateNotSent() { Exchange exchange = Mockito.mock(Exchange.class); @@ -124,13 +125,13 @@ public class PolicyComponentTest { /** - * Test the computeState method. - * oldState newState expectedFinalState - * SENT SENT SENT - * SENT SENT_AND_DEPLOYED SENT - * SENT IN_ERROR IN_ERROR - * SENT NOT_SENT NOT_SENT - */ + * Test the computeState method. + * oldState newState expectedFinalState + * SENT SENT SENT + * SENT SENT_AND_DEPLOYED SENT + * SENT IN_ERROR IN_ERROR + * SENT NOT_SENT NOT_SENT + */ @Test public void computeStateTestOriginalStateSent() throws IOException { Exchange exchange = Mockito.mock(Exchange.class); @@ -166,13 +167,13 @@ public class PolicyComponentTest { } /** - * Test the computeState method. - * oldState newState expectedFinalState - * SENT_AND_DEPLOYED SENT_AND_DEPLOYED SENT_AND_DEPLOYED - * SENT_AND_DEPLOYED SENT SENT - * SENT_AND_DEPLOYED IN_ERROR IN_ERROR - * SENT_AND_DEPLOYED NOT_SENT NOT_SENT - */ + * Test the computeState method. + * oldState newState expectedFinalState + * SENT_AND_DEPLOYED SENT_AND_DEPLOYED SENT_AND_DEPLOYED + * SENT_AND_DEPLOYED SENT SENT + * SENT_AND_DEPLOYED IN_ERROR IN_ERROR + * SENT_AND_DEPLOYED NOT_SENT NOT_SENT + */ @Test public void computeStateTestOriginalStateSentAndDeployed() throws IOException { Exchange exchange = Mockito.mock(Exchange.class); @@ -209,13 +210,13 @@ public class PolicyComponentTest { /** - * Test the computeState method. - * oldState newState expectedFinalState - * IN_ERROR SENT_AND_DEPLOYED IN_ERROR - * IN_ERROR SENT IN_ERROR - * IN_ERROR IN_ERROR IN_ERROR - * IN_ERROR NOT_SENT IN_ERROR - */ + * Test the computeState method. + * oldState newState expectedFinalState + * IN_ERROR SENT_AND_DEPLOYED IN_ERROR + * IN_ERROR SENT IN_ERROR + * IN_ERROR IN_ERROR IN_ERROR + * IN_ERROR NOT_SENT IN_ERROR + */ @Test public void computeStateTestOriginalStateInError() throws IOException { Exchange exchange = Mockito.mock(Exchange.class); @@ -265,7 +266,8 @@ public class PolicyComponentTest { PolicyModel policyModel2 = new PolicyModel("onap.policies.controlloop.Operational", null, "1.0.0"); OperationalPolicy opPolicy = new OperationalPolicy("opPolicy", loopTest, - new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), policyModel2, null, "pdpGroup2", "pdpSubgroup2"); + new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), policyModel2, null, "pdpGroup2", + "pdpSubgroup2"); loopTest.addOperationalPolicy(opPolicy); LoopTemplate loopTemplate = new LoopTemplate("test", "yaml", "svg", 1, null); diff --git a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java index d918a8e6d..b16aa558d 100644 --- a/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java +++ b/src/test/java/org/onap/clamp/loop/PolicyModelServiceItCase.java @@ -119,7 +119,7 @@ public class PolicyModelServiceItCase { /** * This tests a create Policy Model from Tosca. * - * @throws IOException + * @throws IOException In case of failure */ @Test @Transactional @@ -137,7 +137,7 @@ public class PolicyModelServiceItCase { /** * This tests a update Policy Model. * - * @throws IOException + * @throws IOException In case of failure */ @Test @Transactional diff --git a/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java b/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java index 3f502ff78..2cd301850 100644 --- a/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java +++ b/src/test/java/org/onap/clamp/policy/downloader/PolicyEngineControllerTestItCase.java @@ -68,9 +68,12 @@ public class PolicyEngineControllerTestItCase { Instant firstExecution = policyController.getLastInstantExecuted(); assertThat(firstExecution).isNotNull(); List policyModelsList = policyModelsRepository.findAll(); - assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(8); - assertThat(policyModelsList).contains(new PolicyModel("onap.policies.Monitoring", null, "1.0.0")); - assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.Operational", null, "1.0.0")); + assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(5); + assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.operational.Drools", null, "1.0.0")); + assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.operational.Apex", null, "1.0.0")); + assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.guard.FrequencyLimiter", null, "1.0.0")); + assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.guard.Blacklist", null, "1.0.0")); + assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.guard.MinMax", null, "2.0.0")); // Re-do it to check that there is no issue with duplicate key policyController.synchronizeAllPolicies(); diff --git a/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java index 5686bc161..4b8eee921 100644 --- a/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java +++ b/src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.Map; import org.junit.Test; import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.loop.template.PolicyModel; import org.onap.clamp.policy.operational.LegacyOperationalPolicy; import org.onap.clamp.policy.operational.OperationalPolicy; import org.skyscreamer.jsonassert.JSONAssert; @@ -38,10 +39,11 @@ import org.skyscreamer.jsonassert.JSONAssert; public class OperationalPolicyPayloadTest { @Test - public void testOperationalPolicyPayloadConstruction() throws IOException { + public void testOperationalPolicyLegacyPayloadConstruction() throws IOException { JsonObject jsonConfig = new GsonBuilder().create().fromJson( ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class); - OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig, null, null, null, null); + OperationalPolicy policy = new OperationalPolicy("testPolicy.legacy", null, jsonConfig, + new PolicyModel("onap.policies.controlloop.Operational.legacy","","1.0.0","test"), null,null,null); assertThat(policy.createPolicyPayloadYaml()) .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.yaml")); diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index 5b921e9e3..e842abd4c 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -128,12 +128,6 @@ clamp.config.files.cldsUsers=classpath:/clds/clds-users.json clamp.config.files.globalProperties=classpath:/clds/templates/globalProperties.json clamp.config.files.sdcController=classpath:/clds/sdc-controllers-config.json -# Properties for Clamp -# DCAE request build properties -# -clamp.config.dcae.template=classpath:/clds/templates/dcae-template.json -clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment-template.json -# # # Configuration Settings for Policy Engine Components clamp.config.policy.api.url=http4://localhost:${docker.http-cache.port.host} @@ -143,37 +137,9 @@ clamp.config.policy.pap.url=http4://localhost:${docker.http-cache.port.host} clamp.config.policy.pap.userName=healthcheck clamp.config.policy.pap.password=zb!XztG34 -# TCA MicroService Policy request build properties -# -clamp.config.tca.policyid.prefix=DCAE.Config_ -clamp.config.tca.policy.template=classpath:/clds/templates/tca-policy-template.json -clamp.config.tca.template=classpath:/clds/templates/tca-template.json -clamp.config.tca.thresholds.template=classpath:/clds/templates/tca-thresholds-template.json - -# -# -# Operational Policy request build properties -# -clamp.config.op.policyDescription=from clds -# default -clamp.config.op.templateName=ClosedLoopControlName -clamp.config.op.operationTopic=APPC-CL -clamp.config.op.notificationTopic=POLICY-CL-MGT -clamp.config.op.controller=amsterdam -clamp.config.op.policy.appc=APPC -# # Sdc service properties # clamp.config.sdc.csarFolder = ${project.build.directory}/sdc-tests -clamp.config.sdc.blueprint.parser.mapping = classpath:/clds/blueprint-parser-mapping.json -# -clamp.config.ui.location.default=classpath:/clds/templates/ui-location-default.json -# -# if action.test.override is true, then any action will be marked as test=true (even if incoming action request had test=false); otherwise, test flag will be unchanged on the action request -clamp.config.action.test.override=false -# if action.insert.test.event is true, then insert event even if the action is set to test -clamp.config.action.insert.test.event=false -clamp.config.clds.service.cache.invalidate.after.seconds=120 #DCAE Inventory Url Properties clamp.config.dcae.inventory.url=http4://localhost:${docker.http-cache.port.host} diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes?connectionTimeToLive=5000/.file index ab3b40e2f..4b27438cc 100644 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes?connectionTimeToLive=5000/.file +++ b/src/test/resources/http-cache/example/policy/api/v1/policytypes?connectionTimeToLive=5000/.file @@ -1,40 +1,19 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 policy_types: - - onap.policies.Monitoring: - version: 1.0.0 - description: A base policy type for all policies that govern monitoring provision - derived_from: tosca.policies.Root - properties: - # Omitted for brevity, see Section 1 - - - onap.policies.controlloop.Operational: - version: 1.0.0 - description: Operational Policy for Control Loops - derived_from: tosca.policies.Root - properties: - # Omitted for brevity, see Section 1 - - - onap.policies.controloop.operational.Drools: + - onap.policies.controlloop.operational.Drools: version: 1.0.0 description: Operational Policy for Control Loops using the Drools PDP - derived_from: onap.policies.controlloop.Operational + derived_from: onapy.policies.controlloop.Operational properties: # Omitted for brevity, see Section 1 - - onap.policies.controloop.operational.Apex: + - onap.policies.controlloop.operational.Apex: version: 1.0.0 description: Operational Policy for Control Loops using the APEX PDP derived_from: onap.policies.controlloop.Operational properties: # Omitted for brevity, see Section 1 - - onap.policies.controlloop.Guard: - version: 1.0.0 - description: Operational Policy for Control Loops - derived_from: tosca.policies.Root - properties: - # Omitted for brevity, see Section 1 - - onap.policies.controlloop.guard.FrequencyLimiter: version: 1.0.0 description: Supports limiting the frequency of actions being taken by a Actor. @@ -50,7 +29,7 @@ policy_types: # Omitted for brevity, see Section 1 - onap.policies.controlloop.guard.MinMax: - version: 1.0.0 + version: 2.0.0 description: Supports Min/Max number of VF Modules derived_from: onap.policies.controlloop.Guard properties: diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.file deleted file mode 100644 index b0119f887..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.file +++ /dev/null @@ -1,158 +0,0 @@ -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.policies.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/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.header b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.header deleted file mode 100644 index 6a280d972..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0?connectionTimeToLive=5000/.header +++ /dev/null @@ -1 +0,0 @@ -{"Transfer-Encoding": "chunked", "Set-Cookie": "JSESSIONID=158qxkdtdobkd1umr3ikkgrmlx;Path=/", "Expires": "Thu, 01 Jan 1970 00:00:00 GMT", "Server": "Jetty(9.3.21.v20170918)", "Content-Type": "application/json", "X-ECOMP-RequestID": "e2ddb3c8-994f-47df-b4dc-097d4fb55c08"} \ No newline at end of file diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.file deleted file mode 100644 index b0119f887..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.file +++ /dev/null @@ -1,158 +0,0 @@ -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.policies.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/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.header b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.header deleted file mode 100644 index 6a280d972..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0?connectionTimeToLive=5000/.header +++ /dev/null @@ -1 +0,0 @@ -{"Transfer-Encoding": "chunked", "Set-Cookie": "JSESSIONID=158qxkdtdobkd1umr3ikkgrmlx;Path=/", "Expires": "Thu, 01 Jan 1970 00:00:00 GMT", "Server": "Jetty(9.3.21.v20170918)", "Content-Type": "application/json", "X-ECOMP-RequestID": "e2ddb3c8-994f-47df-b4dc-097d4fb55c08"} \ No newline at end of file diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.Blacklist/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.Blacklist/versions/1.0.0?connectionTimeToLive=5000/.file index b0119f887..91a825212 100644 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.Blacklist/versions/1.0.0?connectionTimeToLive=5000/.file +++ b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.Blacklist/versions/1.0.0?connectionTimeToLive=5000/.file @@ -1,158 +1,40 @@ 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.policies.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 + onap.policies.controlloop.Guard: + derived_from: tosca.policies.Root + version: 1.0.0 + description: Guard Policies for Control Loop Operational Policies + onap.policies.controlloop.guard.Blacklist: + derived_from: onap.policies.controlloop.Guard + version: 1.0.0 + description: Supports blacklist of VNF's from performing control loop actions on. + properties: + blacklist_policy: + type: map + description: null + entry_schema: + type: onap.datatypes.guard.Blacklist 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 + onap.datatypes.guard.Blacklist: + derived_from: tosca.datatypes.Root + properties: + actor: + type: string + description: Specifies the Actor + required: true + recipe: + type: string + description: Specified the Recipe + required: true + time_range: + type: tosca.datatypes.TimeInterval + description: An optional range of time during the day the blacklist is valid for. + required: false + controlLoopName: + type: string + description: An optional specific control loop to apply this guard to. + required: false + blacklist: + type: list + description: List of VNF's + required: true \ No newline at end of file diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.FrequencyLimiter/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.FrequencyLimiter/versions/1.0.0?connectionTimeToLive=5000/.file index b0119f887..45e5471fc 100644 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.FrequencyLimiter/versions/1.0.0?connectionTimeToLive=5000/.file +++ b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.FrequencyLimiter/versions/1.0.0?connectionTimeToLive=5000/.file @@ -1,158 +1,50 @@ 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.policies.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 + onap.policies.controlloop.Guard: + derived_from: tosca.policies.Root + version: 1.0.0 + description: Guard Policies for Control Loop Operational Policies + onap.policies.controlloop.guard.FrequencyLimiter: + derived_from: onap.policies.controlloop.Guard + version: 1.0.0 + description: Supports limiting the frequency of actions being taken by a Actor. + properties: + frequency_policy: + type: map + description: null + entry_schema: + type: onap.datatypes.guard.FrequencyLimiter 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 + onap.datatypes.guard.FrequencyLimiter: + derived_from: tosca.datatypes.Root + properties: + actor: + type: string + description: Specifies the Actor + required: true + recipe: + type: string + description: Specified the Recipe + required: true + time_window: + type: scalar-unit.time + description: The time window to count the actions against. + required: true + limit: + type: integer + description: The limit + required: true + constraints: + - greater_than: 0 + time_range: + type: tosca.datatypes.TimeInterval + description: An optional range of time during the day the frequency is valid for. + required: false + controlLoopName: + type: string + description: An optional specific control loop to apply this guard to. + required: false + target: + type: string + description: An optional specific VNF to apply this guard to. + required: false \ No newline at end of file diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.MinMax/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.MinMax/versions/1.0.0?connectionTimeToLive=5000/.file index b0119f887..54c4204e2 100644 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.MinMax/versions/1.0.0?connectionTimeToLive=5000/.file +++ b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controlloop.guard.MinMax/versions/1.0.0?connectionTimeToLive=5000/.file @@ -1,158 +1,44 @@ 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.policies.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 + onap.policies.controlloop.Guard: + derived_from: tosca.policies.Root + version: 1.0.0 + description: Guard Policies for Control Loop Operational Policies + onap.policies.controlloop.guard.MinMax: + derived_from: onap.policies.controlloop.Guard + version: 1.0.0 + description: Supports Min/Max number of VF Modules + properties: + minmax_policy: + type: map + description: null + entry_schema: + type: onap.datatypes.guard.MinMax 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 + onap.datatypes.guard.MinMax: + derived_from: tosca.datatypes.Root + properties: + actor: + type: string + description: Specifies the Actor + required: true + recipe: + type: string + description: Specified the Recipe + required: true + time_range: + type: tosca.datatypes.TimeInterval + description: An optional range of time during the day the Min/Max limit is valid for. + required: false + controlLoopName: + type: string + description: An optional specific control loop to apply this guard to. + required: false + min_vf_module_instances: + type: integer + required: true + description: The minimum instances of this VF-Module + max_vf_module_instances: + type: integer + required: false + description: The maximum instances of this VF-Module \ No newline at end of file diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.file deleted file mode 100644 index b0119f887..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.file +++ /dev/null @@ -1,158 +0,0 @@ -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.policies.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/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.header b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.header deleted file mode 100644 index 6a280d972..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Apex/versions/1.0.0?connectionTimeToLive=5000/.header +++ /dev/null @@ -1 +0,0 @@ -{"Transfer-Encoding": "chunked", "Set-Cookie": "JSESSIONID=158qxkdtdobkd1umr3ikkgrmlx;Path=/", "Expires": "Thu, 01 Jan 1970 00:00:00 GMT", "Server": "Jetty(9.3.21.v20170918)", "Content-Type": "application/json", "X-ECOMP-RequestID": "e2ddb3c8-994f-47df-b4dc-097d4fb55c08"} \ No newline at end of file diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.file deleted file mode 100644 index b0119f887..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.file +++ /dev/null @@ -1,158 +0,0 @@ -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.policies.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/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.header b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.header deleted file mode 100644 index 6a280d972..000000000 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.controloop.operational.Drools/versions/1.0.0?connectionTimeToLive=5000/.header +++ /dev/null @@ -1 +0,0 @@ -{"Transfer-Encoding": "chunked", "Set-Cookie": "JSESSIONID=158qxkdtdobkd1umr3ikkgrmlx;Path=/", "Expires": "Thu, 01 Jan 1970 00:00:00 GMT", "Server": "Jetty(9.3.21.v20170918)", "Content-Type": "application/json", "X-ECOMP-RequestID": "e2ddb3c8-994f-47df-b4dc-097d4fb55c08"} \ No newline at end of file diff --git a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0?connectionTimeToLive=5000/.file b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0?connectionTimeToLive=5000/.file index b0119f887..5fa4308db 100644 --- a/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0?connectionTimeToLive=5000/.file +++ b/src/test/resources/http-cache/example/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0?connectionTimeToLive=5000/.file @@ -1,158 +1,159 @@ 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.policies.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 + onap.policies.Monitoring: + derived_from: tosca.policies.Root + version: 1.0.0 + description: a base policy type for all policies that govern monitoring provisioning + onap.policies.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 + 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 \ No newline at end of file diff --git a/src/test/resources/tosca/operational-policy-payload.json b/src/test/resources/tosca/operational-policy-payload.json index bfb109ec1..033eecd17 100644 --- a/src/test/resources/tosca/operational-policy-payload.json +++ b/src/test/resources/tosca/operational-policy-payload.json @@ -1,4 +1,4 @@ { - "policy-id": "testPolicy", + "policy-id": "testPolicy.legacy", "content": "controlLoop%3A%0A++abatement%3A+true%0A++controlLoopName%3A+LOOP_ASJOy_v1_0_ResourceInstanceName1_tca%0A++timeout%3A+0%0A++trigger_policy%3A+policy1%0Apolicies%3A%0A-+actor%3A+APPC%0A++failure%3A+policy2%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+policy1%0A++payload%3A%0A++++configurationParameters%3A+%27%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B10%5D.value%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B15%5D.value%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B22%5D.value%22%7D%5D%27%0A++++requestParameters%3A+%27%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D%27%0A++recipe%3A+Restart%0A++retry%3A+0%0A++success%3A+final_success%0A++target%3A%0A++++resourceID%3A+vLoadBalancerMS%0A++++type%3A+VNF%0A++timeout%3A+0%0A-+actor%3A+SO%0A++failure%3A+final_failure%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+policy2%0A++recipe%3A+VF+Module+Create%0A++retry%3A+0%0A++success%3A+final_success%0A++target%3A%0A++++modelCustomizationId%3A+1bffdc31-a37d-4dee-b65c-dde623a76e52%0A++++modelInvariantId%3A+ca052563-eb92-4b5b-ad41-9111768ce043%0A++++modelName%3A+Vloadbalancerms..vpkg..module-1%0A++++modelVersion%3A+1%0A++++modelVersionId%3A+1e725ccc-b823-4f67-82b9-4f4367070dbc%0A++++resourceID%3A+Vloadbalancerms..vpkg..module-1%0A++++type%3A+VFMODULE%0A++timeout%3A+0%0A" } \ No newline at end of file diff --git a/src/test/resources/tosca/operational-policy-payload.yaml b/src/test/resources/tosca/operational-policy-payload.yaml index ed03842f5..4e667e59b 100644 --- a/src/test/resources/tosca/operational-policy-payload.yaml +++ b/src/test/resources/tosca/operational-policy-payload.yaml @@ -1,11 +1,11 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 topology_template: policies: - - testPolicy: + - testPolicy.legacy: type: onap.policies.controlloop.Operational version: 1.0.0 metadata: - policy-id: testPolicy + policy-id: testPolicy.legacy properties: controlLoop: timeout: '0' diff --git a/ui-react/src/components/loop_viewer/svg/LoopComponentConverter.js b/ui-react/src/components/loop_viewer/svg/LoopComponentConverter.js index 5b0dc1e01..29422a1f5 100644 --- a/ui-react/src/components/loop_viewer/svg/LoopComponentConverter.js +++ b/ui-react/src/components/loop_viewer/svg/LoopComponentConverter.js @@ -9,11 +9,7 @@ export default class LoopComponentConverter { } if (typeof (loopCache.getOperationalPolicies()) !== "undefined") { loopCache.getOperationalPolicies().forEach(op => { - if (op.name.includes("legacy")) { - componentsMap.set(op.name,"/operationalPolicyModal"); - } else { - componentsMap.set(op.name, "/policyModal/OPERATIONAL-POLICY/"+op.name); - } + componentsMap.set(op.name, "/policyModal/OPERATIONAL-POLICY/"+op.name); }) } return componentsMap; -- cgit 1.2.3-korg From 03d382d6be6ff6b98d2e2b391f2dd34081731cfe Mon Sep 17 00:00:00 2001 From: sebdet Date: Wed, 3 Jun 2020 14:22:37 +0200 Subject: Update sql files Update sql files and swagger due to svg removal Issue-ID: CLAMP-854 Signed-off-by: sebdet Change-Id: I90b9ea58c63733d6b7a8ed7354469a68e9f914cf --- docs/swagger/swagger.json | 466 +- docs/swagger/swagger.pdf | 17755 +++++++++---------- extra/sql/bulkload/create-tables.sql | 2 - extra/sql/dump/test-data.sql | 62 +- src/main/resources/META-INF/resources/swagger.html | 406 +- 5 files changed, 8282 insertions(+), 10409 deletions(-) (limited to 'extra/sql/bulkload/create-tables.sql') diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 25b09a700..c818ee24f 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -4,13 +4,13 @@ "version" : "5.1.0-SNAPSHOT", "title" : "Clamp Rest API" }, - "host" : "localhost:37033", + "host" : "localhost:44217", "basePath" : "/restservices/clds/", "schemes" : [ "http" ], "paths" : { "/v2/clampInformation" : { "get" : { - "operationId" : "route112", + "operationId" : "route34", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -20,13 +20,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route112" + "x-camelContextId" : "camel-1", + "x-routeId" : "route34" } }, "/v2/dictionary" : { "get" : { - "operationId" : "route96", + "operationId" : "route19", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -36,11 +36,11 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route96" + "x-camelContextId" : "camel-1", + "x-routeId" : "route19" }, "put" : { - "operationId" : "route99", + "operationId" : "route22", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -59,13 +59,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route99" + "x-camelContextId" : "camel-1", + "x-routeId" : "route22" } }, "/v2/dictionary/{dictionaryName}" : { "get" : { - "operationId" : "route98", + "operationId" : "route21", "produces" : [ "application/json" ], "parameters" : [ { "name" : "dictionaryName", @@ -81,13 +81,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route98" + "x-camelContextId" : "camel-1", + "x-routeId" : "route21" } }, "/v2/dictionary/{name}" : { "put" : { - "operationId" : "route100", + "operationId" : "route23", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -111,11 +111,11 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route100" + "x-camelContextId" : "camel-1", + "x-routeId" : "route23" }, "delete" : { - "operationId" : "route101", + "operationId" : "route24", "produces" : [ "application/json" ], "parameters" : [ { "name" : "name", @@ -126,13 +126,13 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route101" + "x-camelContextId" : "camel-1", + "x-routeId" : "route24" } }, "/v2/dictionary/{name}/elements/{shortName}" : { "delete" : { - "operationId" : "route102", + "operationId" : "route25", "produces" : [ "application/json" ], "parameters" : [ { "name" : "name", @@ -148,13 +148,13 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route102" + "x-camelContextId" : "camel-1", + "x-routeId" : "route25" } }, "/v2/dictionary/secondary/names" : { "get" : { - "operationId" : "route97", + "operationId" : "route20", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -167,13 +167,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route97" + "x-camelContextId" : "camel-1", + "x-routeId" : "route20" } }, "/v2/loop/{loopName}" : { "get" : { - "operationId" : "route79", + "operationId" : "route3", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -189,13 +189,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route79" + "x-camelContextId" : "camel-1", + "x-routeId" : "route3" } }, "/v2/loop/addOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}" : { "put" : { - "operationId" : "route93", + "operationId" : "route16", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -221,13 +221,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route93" + "x-camelContextId" : "camel-1", + "x-routeId" : "route16" } }, "/v2/loop/create/{loopName}?templateName={templateName}" : { "post" : { - "operationId" : "route95", + "operationId" : "route18", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -244,13 +244,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route95" + "x-camelContextId" : "camel-1", + "x-routeId" : "route18" } }, "/v2/loop/delete/{loopName}" : { "put" : { - "operationId" : "route91", + "operationId" : "route14", "parameters" : [ { "name" : "loopName", "in" : "path", @@ -260,13 +260,13 @@ "responses" : { "200" : { } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route91" + "x-camelContextId" : "camel-1", + "x-routeId" : "route14" } }, "/v2/loop/deploy/{loopName}" : { "put" : { - "operationId" : "route84", + "operationId" : "route7", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -282,13 +282,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route84" + "x-camelContextId" : "camel-1", + "x-routeId" : "route7" } }, "/v2/loop/getAllNames" : { "get" : { - "operationId" : "route78", + "operationId" : "route2", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -301,13 +301,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route78" + "x-camelContextId" : "camel-1", + "x-routeId" : "route2" } }, "/v2/loop/getstatus/{loopName}" : { "get" : { - "operationId" : "route92", + "operationId" : "route15", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -323,13 +323,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route92" + "x-camelContextId" : "camel-1", + "x-routeId" : "route15" } }, "/v2/loop/refreshMicroServicePolicyJsonSchema/{loopName}/{microServicePolicyName}" : { "put" : { - "operationId" : "route85", + "operationId" : "route8", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -350,13 +350,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route85" + "x-camelContextId" : "camel-1", + "x-routeId" : "route8" } }, "/v2/loop/refreshOperationalPolicyJsonSchema/{loopName}/{operationalPolicyName}" : { "put" : { - "operationId" : "route86", + "operationId" : "route9", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -377,13 +377,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route86" + "x-camelContextId" : "camel-1", + "x-routeId" : "route9" } }, "/v2/loop/removeOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}/{policyName}" : { "put" : { - "operationId" : "route94", + "operationId" : "route17", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -414,13 +414,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route94" + "x-camelContextId" : "camel-1", + "x-routeId" : "route17" } }, "/v2/loop/restart/{loopName}" : { "put" : { - "operationId" : "route89", + "operationId" : "route12", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -436,13 +436,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route89" + "x-camelContextId" : "camel-1", + "x-routeId" : "route12" } }, "/v2/loop/stop/{loopName}" : { "put" : { - "operationId" : "route88", + "operationId" : "route11", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -458,13 +458,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route88" + "x-camelContextId" : "camel-1", + "x-routeId" : "route11" } }, "/v2/loop/submit/{loopName}" : { "put" : { - "operationId" : "route90", + "operationId" : "route13", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -480,35 +480,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route90" - } - }, - "/v2/loop/svgRepresentation/{loopName}" : { - "get" : { - "operationId" : "route80", - "produces" : [ "application/xml" ], - "parameters" : [ { - "name" : "loopName", - "in" : "path", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "Output type", - "schema" : { - "type" : "string" - } - } - }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route80" + "x-camelContextId" : "camel-1", + "x-routeId" : "route13" } }, "/v2/loop/undeploy/{loopName}" : { "put" : { - "operationId" : "route87", + "operationId" : "route10", "produces" : [ "application/json" ], "parameters" : [ { "name" : "loopName", @@ -524,13 +502,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route87" + "x-camelContextId" : "camel-1", + "x-routeId" : "route10" } }, "/v2/loop/updateGlobalProperties/{loopName}" : { "post" : { - "operationId" : "route81", + "operationId" : "route4", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -554,13 +532,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route81" + "x-camelContextId" : "camel-1", + "x-routeId" : "route4" } }, "/v2/loop/updateMicroservicePolicy/{loopName}" : { "post" : { - "operationId" : "route83", + "operationId" : "route6", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -584,13 +562,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route83" + "x-camelContextId" : "camel-1", + "x-routeId" : "route6" } }, "/v2/loop/updateOperationalPolicies/{loopName}" : { "post" : { - "operationId" : "route82", + "operationId" : "route5", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -614,13 +592,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route82" + "x-camelContextId" : "camel-1", + "x-routeId" : "route5" } }, "/v2/policyToscaModels" : { "get" : { - "operationId" : "route103", + "operationId" : "route26", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -630,11 +608,11 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route103" + "x-camelContextId" : "camel-1", + "x-routeId" : "route26" }, "post" : { - "operationId" : "route106", + "operationId" : "route29", "consumes" : [ "plain/text" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -653,13 +631,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route106" + "x-camelContextId" : "camel-1", + "x-routeId" : "route29" } }, "/v2/policyToscaModels/{policyModelType}/{policyModelVersion}" : { "get" : { - "operationId" : "route104", + "operationId" : "route27", "produces" : [ "application/json" ], "parameters" : [ { "name" : "policyModelType", @@ -680,11 +658,11 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route104" + "x-camelContextId" : "camel-1", + "x-routeId" : "route27" }, "put" : { - "operationId" : "route107", + "operationId" : "route30", "consumes" : [ "plain/text" ], "produces" : [ "application/json" ], "parameters" : [ { @@ -713,13 +691,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route107" + "x-camelContextId" : "camel-1", + "x-routeId" : "route30" } }, "/v2/policyToscaModels/yaml/{policyModelType}/{policyModelVersion}" : { "get" : { - "operationId" : "route105", + "operationId" : "route28", "produces" : [ "application/json" ], "parameters" : [ { "name" : "policyModelType", @@ -740,13 +718,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route105" + "x-camelContextId" : "camel-1", + "x-routeId" : "route28" } }, "/v2/templates" : { "get" : { - "operationId" : "route108", + "operationId" : "route31", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -756,13 +734,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route108" + "x-camelContextId" : "camel-1", + "x-routeId" : "route31" } }, "/v2/templates/{templateName}" : { "get" : { - "operationId" : "route109", + "operationId" : "route32", "produces" : [ "application/json" ], "parameters" : [ { "name" : "templateName", @@ -778,35 +756,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route109" - } - }, - "/v2/templates/{templateName}/svgRepresentation" : { - "get" : { - "operationId" : "route111", - "produces" : [ "application/xml" ], - "parameters" : [ { - "name" : "templateName", - "in" : "path", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "Output type", - "schema" : { - "type" : "string" - } - } - }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route111" + "x-camelContextId" : "camel-1", + "x-routeId" : "route32" } }, "/v2/templates/names" : { "get" : { - "operationId" : "route110", + "operationId" : "route33", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -819,13 +775,13 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route110" + "x-camelContextId" : "camel-1", + "x-routeId" : "route33" } }, "/v1/healthcheck" : { "get" : { - "operationId" : "route113", + "operationId" : "route35", "produces" : [ "application/json" ], "responses" : { "200" : { @@ -835,19 +791,19 @@ } } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route113" + "x-camelContextId" : "camel-1", + "x-routeId" : "route35" } }, "/v1/user/getUser" : { "get" : { - "operationId" : "route114", + "operationId" : "route36", "produces" : [ "text/plain" ], "responses" : { "200" : { } }, - "x-camelContextId" : "camel-3", - "x-routeId" : "route114" + "x-camelContextId" : "camel-1", + "x-routeId" : "route36" } } }, @@ -980,9 +936,6 @@ "dcaeDeploymentStatusUrl" : { "type" : "string" }, - "svgRepresentation" : { - "type" : "string" - }, "globalPropertiesJson" : { "$ref" : "#/definitions/JsonObject" }, @@ -1041,19 +994,6 @@ "asString" : { "type" : "string" }, - "asCharacter" : { - "type" : "string" - }, - "asBigDecimal" : { - "type" : "number" - }, - "asBigInteger" : { - "type" : "integer" - }, - "asShort" : { - "type" : "integer", - "format" : "int32" - }, "asNumber" : { "$ref" : "#/definitions/Number" }, @@ -1077,23 +1017,39 @@ "type" : "string", "format" : "byte" }, + "asCharacter" : { + "type" : "string" + }, + "asBigDecimal" : { + "type" : "number" + }, + "asBigInteger" : { + "type" : "integer" + }, + "asShort" : { + "type" : "integer", + "format" : "int32" + }, "boolean" : { "type" : "boolean" }, "string" : { "type" : "boolean" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" }, "asJsonObject" : { "$ref" : "#/definitions/JsonObject" }, + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" + }, "jsonArray" : { "type" : "boolean" }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" + "jsonObject" : { + "type" : "boolean" }, "jsonPrimitive" : { "type" : "boolean" @@ -1101,11 +1057,8 @@ "jsonNull" : { "type" : "boolean" }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, - "jsonObject" : { - "type" : "boolean" + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" } } }, @@ -1187,30 +1140,14 @@ "asBoolean" : { "type" : "boolean" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" - }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" }, "asString" : { "type" : "string" }, - "asCharacter" : { - "type" : "string" - }, - "asBigDecimal" : { - "type" : "number" - }, - "asBigInteger" : { - "type" : "integer" - }, - "asShort" : { - "type" : "integer", - "format" : "int32" - }, - "jsonArray" : { - "type" : "boolean" + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" @@ -1218,15 +1155,6 @@ "asNumber" : { "$ref" : "#/definitions/Number" }, - "jsonPrimitive" : { - "type" : "boolean" - }, - "jsonNull" : { - "type" : "boolean" - }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, "asDouble" : { "type" : "number", "format" : "double" @@ -1247,8 +1175,33 @@ "type" : "string", "format" : "byte" }, + "asCharacter" : { + "type" : "string" + }, + "asBigDecimal" : { + "type" : "number" + }, + "asBigInteger" : { + "type" : "integer" + }, + "asShort" : { + "type" : "integer", + "format" : "int32" + }, + "jsonArray" : { + "type" : "boolean" + }, "jsonObject" : { "type" : "boolean" + }, + "jsonPrimitive" : { + "type" : "boolean" + }, + "jsonNull" : { + "type" : "boolean" + }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" } }, "x-className" : { @@ -1388,30 +1341,14 @@ "asBoolean" : { "type" : "boolean" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" - }, - "asJsonObject" : { - "$ref" : "#/definitions/JsonObject" + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" }, "asString" : { "type" : "string" }, - "asCharacter" : { - "type" : "string" - }, - "asBigDecimal" : { - "type" : "number" - }, - "asBigInteger" : { - "type" : "integer" - }, - "asShort" : { - "type" : "integer", - "format" : "int32" - }, - "jsonArray" : { - "type" : "boolean" + "asJsonObject" : { + "$ref" : "#/definitions/JsonObject" }, "asJsonNull" : { "$ref" : "#/definitions/JsonNull" @@ -1419,15 +1356,6 @@ "asNumber" : { "$ref" : "#/definitions/Number" }, - "jsonPrimitive" : { - "type" : "boolean" - }, - "jsonNull" : { - "type" : "boolean" - }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, "asDouble" : { "type" : "number", "format" : "double" @@ -1448,8 +1376,33 @@ "type" : "string", "format" : "byte" }, + "asCharacter" : { + "type" : "string" + }, + "asBigDecimal" : { + "type" : "number" + }, + "asBigInteger" : { + "type" : "integer" + }, + "asShort" : { + "type" : "integer", + "format" : "int32" + }, + "jsonArray" : { + "type" : "boolean" + }, "jsonObject" : { "type" : "boolean" + }, + "jsonPrimitive" : { + "type" : "boolean" + }, + "jsonNull" : { + "type" : "boolean" + }, + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" } } }, @@ -1462,19 +1415,6 @@ "asString" : { "type" : "string" }, - "asCharacter" : { - "type" : "string" - }, - "asBigDecimal" : { - "type" : "number" - }, - "asBigInteger" : { - "type" : "integer" - }, - "asShort" : { - "type" : "integer", - "format" : "int32" - }, "asNumber" : { "$ref" : "#/definitions/Number" }, @@ -1498,17 +1438,33 @@ "type" : "string", "format" : "byte" }, - "asJsonArray" : { - "$ref" : "#/definitions/JsonArray" + "asCharacter" : { + "type" : "string" + }, + "asBigDecimal" : { + "type" : "number" + }, + "asBigInteger" : { + "type" : "integer" + }, + "asShort" : { + "type" : "integer", + "format" : "int32" + }, + "asJsonPrimitive" : { + "$ref" : "#/definitions/JsonPrimitive" }, "asJsonObject" : { "$ref" : "#/definitions/JsonObject" }, + "asJsonNull" : { + "$ref" : "#/definitions/JsonNull" + }, "jsonArray" : { "type" : "boolean" }, - "asJsonNull" : { - "$ref" : "#/definitions/JsonNull" + "jsonObject" : { + "type" : "boolean" }, "jsonPrimitive" : { "type" : "boolean" @@ -1516,11 +1472,8 @@ "jsonNull" : { "type" : "boolean" }, - "asJsonPrimitive" : { - "$ref" : "#/definitions/JsonPrimitive" - }, - "jsonObject" : { - "type" : "boolean" + "asJsonArray" : { + "$ref" : "#/definitions/JsonArray" } }, "x-className" : { @@ -1594,9 +1547,6 @@ "blueprint" : { "type" : "string" }, - "svgRepresentation" : { - "type" : "string" - }, "loopElementModelsUsed" : { "type" : "array", "uniqueItems" : true, diff --git a/docs/swagger/swagger.pdf b/docs/swagger/swagger.pdf index e5e2bb04e..763e3ecb4 100644 --- a/docs/swagger/swagger.pdf +++ b/docs/swagger/swagger.pdf @@ -4,16 +4,16 @@ << /Title (Clamp Rest API) /Creator (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) /Producer (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0) -/CreationDate (D:20200519123507+02'00') -/ModDate (D:20200519123507+02'00') +/CreationDate (D:20200603140548+02'00') +/ModDate (D:20200603140548+02'00') >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R /Names 22 0 R -/Outlines 703 0 R -/PageLabels 877 0 R +/Outlines 677 0 R +/PageLabels 843 0 R /PageMode /UseOutlines /OpenAction [7 0 R /FitH 793.0] /ViewerPreferences << /DisplayDocTitle true @@ -22,8 +22,8 @@ endobj endobj 3 0 obj << /Type /Pages -/Count 39 -/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 29 0 R 45 0 R 61 0 R 75 0 R 87 0 R 98 0 R 110 0 R 123 0 R 133 0 R 144 0 R 160 0 R 172 0 R 186 0 R 199 0 R 213 0 R 225 0 R 238 0 R 251 0 R 257 0 R 264 0 R 270 0 R 277 0 R 283 0 R 291 0 R 298 0 R 306 0 R 314 0 R 320 0 R 327 0 R 336 0 R 344 0 R 352 0 R] +/Count 38 +/Kids [7 0 R 10 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 29 0 R 45 0 R 61 0 R 75 0 R 87 0 R 98 0 R 110 0 R 123 0 R 134 0 R 144 0 R 159 0 R 173 0 R 186 0 R 199 0 R 214 0 R 225 0 R 238 0 R 247 0 R 254 0 R 260 0 R 267 0 R 273 0 R 281 0 R 288 0 R 296 0 R 304 0 R 311 0 R 318 0 R 326 0 R 335 0 R 343 0 R] >> endobj 4 0 obj @@ -80,11 +80,11 @@ endobj << /Type /Font /BaseFont /AAAAAA+NotoSerif /Subtype /TrueType -/FontDescriptor 879 0 R +/FontDescriptor 845 0 R /FirstChar 32 /LastChar 255 -/Widths 881 0 R -/ToUnicode 880 0 R +/Widths 847 0 R +/ToUnicode 846 0 R >> endobj 9 0 obj @@ -1559,7 +1559,7 @@ endobj /F1.0 8 0 R >> >> -/Annots [358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R] +/Annots [348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R] >> endobj 11 0 obj @@ -3062,11 +3062,11 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 505 0 R] +/Annots [420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 495 0 R] >> endobj 13 0 obj -<< /Length 31409 +<< /Length 31445 >> stream q @@ -3689,7 +3689,7 @@ ET BT 60.24000000000001 449.1059999999997 Td /F1.0 10.5 Tf -<322e32332e20474554202f76322f6c6f6f702f737667526570726573656e746174696f6e2f7b6c6f6f704e616d657d> Tj +[<322e32332e20505554202f76322f6c6f6f702f756e6465706c6f> 20.01953125 <792f7b6c6f6f704e616d657d>] TJ ET 0.000 0.000 0.000 SCN @@ -3698,9 +3698,9 @@ ET 0.200 0.200 0.200 SCN BT -310.15874999999994 449.1059999999997 Td +267.40274999999997 449.1059999999997 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -3849,7 +3849,7 @@ ET BT 60.24000000000001 375.18599999999964 Td /F1.0 10.5 Tf -[<322e32342e20505554202f76322f6c6f6f702f756e6465706c6f> 20.01953125 <792f7b6c6f6f704e616d657d>] TJ +[<322e32342e20504f53> 20.01953125 <54202f76322f6c6f6f702f757064617465476c6f62616c50726f706572746965732f7b6c6f6f704e616d657d>] TJ ET 0.000 0.000 0.000 SCN @@ -3858,9 +3858,9 @@ ET 0.200 0.200 0.200 SCN BT -267.40274999999997 375.18599999999964 Td +342.22574999999995 375.18599999999964 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -3969,7 +3969,7 @@ ET BT 72.24000000000001 319.7459999999996 Td /F1.0 10.5 Tf -<322e32342e332e2050726f6475636573> Tj +<322e32342e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -3978,9 +3978,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 319.7459999999996 Td +160.51274999999998 319.7459999999996 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4007,9 +4007,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 301.26599999999956 Td +72.24000000000001 301.26599999999956 Td /F1.0 10.5 Tf -[<322e32352e20504f53> 20.01953125 <54202f76322f6c6f6f702f757064617465476c6f62616c50726f706572746965732f7b6c6f6f704e616d657d>] TJ +<322e32342e342e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -4018,9 +4018,9 @@ ET 0.200 0.200 0.200 SCN BT -342.22574999999995 301.26599999999956 Td +155.16824999999994 301.26599999999956 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4047,9 +4047,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 282.78599999999955 Td +60.24000000000001 282.78599999999955 Td /F1.0 10.5 Tf -[<322e32352e312e20506172> 20.01953125 <616d6574657273>] TJ +[<322e32352e20504f53> 20.01953125 <54202f76322f6c6f6f702f7570646174654d6963726f73657276696365506f6c6963792f7b6c6f6f704e616d657d>] TJ ET 0.000 0.000 0.000 SCN @@ -4058,9 +4058,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 282.78599999999955 Td +352.91474999999997 282.78599999999955 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4089,7 +4089,7 @@ ET BT 72.24000000000001 264.30599999999953 Td /F1.0 10.5 Tf -<322e32352e322e20526573706f6e736573> Tj +[<322e32352e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN @@ -4098,9 +4098,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 264.30599999999953 Td +165.85724999999996 264.30599999999953 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4129,7 +4129,7 @@ ET BT 72.24000000000001 245.8259999999995 Td /F1.0 10.5 Tf -<322e32352e332e20436f6e73756d6573> Tj +<322e32352e322e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -4169,7 +4169,7 @@ ET BT 72.24000000000001 227.34599999999952 Td /F1.0 10.5 Tf -<322e32352e342e2050726f6475636573> Tj +<322e32352e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -4178,9 +4178,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 227.34599999999952 Td +160.51274999999998 227.34599999999952 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4207,9 +4207,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 208.86599999999953 Td +72.24000000000001 208.86599999999953 Td /F1.0 10.5 Tf -[<322e32362e20504f53> 20.01953125 <54202f76322f6c6f6f702f7570646174654d6963726f73657276696365506f6c6963792f7b6c6f6f704e616d657d>] TJ +<322e32352e342e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -4218,9 +4218,9 @@ ET 0.200 0.200 0.200 SCN BT -352.91474999999997 208.86599999999953 Td +155.16824999999994 208.86599999999953 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4247,9 +4247,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 190.38599999999954 Td +60.24000000000001 190.38599999999954 Td /F1.0 10.5 Tf -[<322e32362e312e20506172> 20.01953125 <616d6574657273>] TJ +[<322e32362e20504f53> 20.01953125 <54202f76322f6c6f6f702f7570646174654f706572> 20.01953125 <6174696f6e616c506f6c69636965732f7b6c6f6f704e616d657d>] TJ ET 0.000 0.000 0.000 SCN @@ -4258,9 +4258,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 190.38599999999954 Td +358.25924999999995 190.38599999999954 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4289,7 +4289,7 @@ ET BT 72.24000000000001 171.90599999999955 Td /F1.0 10.5 Tf -<322e32362e322e20526573706f6e736573> Tj +[<322e32362e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN @@ -4298,9 +4298,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 171.90599999999955 Td +165.85724999999996 171.90599999999955 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4329,7 +4329,7 @@ ET BT 72.24000000000001 153.42599999999956 Td /F1.0 10.5 Tf -<322e32362e332e20436f6e73756d6573> Tj +<322e32362e322e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -4369,7 +4369,7 @@ ET BT 72.24000000000001 134.94599999999957 Td /F1.0 10.5 Tf -<322e32362e342e2050726f6475636573> Tj +<322e32362e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -4378,9 +4378,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 134.94599999999957 Td +160.51274999999998 134.94599999999957 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4407,9 +4407,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 116.46599999999958 Td +72.24000000000001 116.46599999999958 Td /F1.0 10.5 Tf -[<322e32372e20504f53> 20.01953125 <54202f76322f6c6f6f702f7570646174654f706572> 20.01953125 <6174696f6e616c506f6c69636965732f7b6c6f6f704e616d657d>] TJ +<322e32362e342e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -4418,9 +4418,9 @@ ET 0.200 0.200 0.200 SCN BT -358.25924999999995 116.46599999999958 Td +155.16824999999994 116.46599999999958 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4447,9 +4447,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 97.98599999999959 Td +60.24000000000001 97.98599999999959 Td /F1.0 10.5 Tf -[<322e32372e312e20506172> 20.01953125 <616d6574657273>] TJ +<322e32372e20474554202f76322f6c6f6f702f7b6c6f6f704e616d657d> Tj ET 0.000 0.000 0.000 SCN @@ -4458,9 +4458,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 97.98599999999959 Td +213.95774999999998 97.98599999999959 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4489,7 +4489,7 @@ ET BT 72.24000000000001 79.5059999999996 Td /F1.0 10.5 Tf -<322e32372e322e20526573706f6e736573> Tj +[<322e32372e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN @@ -4498,9 +4498,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 79.5059999999996 Td +165.85724999999996 79.5059999999996 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4529,7 +4529,7 @@ ET BT 72.24000000000001 61.02599999999961 Td /F1.0 10.5 Tf -<322e32372e332e20436f6e73756d6573> Tj +<322e32372e322e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -4576,11 +4576,11 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [504 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R] +/Annots [494 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R] >> endobj 15 0 obj -<< /Length 31965 +<< /Length 32033 >> stream q @@ -4592,7 +4592,7 @@ q BT 72.24000000000001 744.786 Td /F1.0 10.5 Tf -<322e32372e342e2050726f6475636573> Tj +<322e32372e332e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -4632,7 +4632,7 @@ ET BT 60.24000000000001 726.3059999999999 Td /F1.0 10.5 Tf -<322e32382e20474554202f76322f6c6f6f702f7b6c6f6f704e616d657d> Tj +[<322e32382e20504f53> 20.01953125 <54202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ ET 0.000 0.000 0.000 SCN @@ -4641,9 +4641,9 @@ ET 0.200 0.200 0.200 SCN BT -213.95774999999998 726.3059999999999 Td +229.99124999999998 726.3059999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4752,7 +4752,7 @@ ET BT 72.24000000000001 670.8659999999999 Td /F1.0 10.5 Tf -<322e32382e332e2050726f6475636573> Tj +<322e32382e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -4761,9 +4761,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 670.8659999999999 Td +160.51274999999998 670.8659999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4790,9 +4790,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 652.3859999999999 Td +72.24000000000001 652.3859999999999 Td /F1.0 10.5 Tf -[<322e32392e20504f53> 20.01953125 <54202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ +<322e32382e342e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -4801,9 +4801,9 @@ ET 0.200 0.200 0.200 SCN BT -229.99124999999998 652.3859999999999 Td +155.16824999999994 652.3859999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4830,9 +4830,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 633.9059999999998 Td +60.24000000000001 633.9059999999998 Td /F1.0 10.5 Tf -[<322e32392e312e20506172> 20.01953125 <616d6574657273>] TJ +[<322e32392e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ ET 0.000 0.000 0.000 SCN @@ -4841,9 +4841,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 633.9059999999998 Td +224.64675 633.9059999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4872,7 +4872,7 @@ ET BT 72.24000000000001 615.4259999999998 Td /F1.0 10.5 Tf -<322e32392e322e20526573706f6e736573> Tj +<322e32392e312e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -4912,7 +4912,7 @@ ET BT 72.24000000000001 596.9459999999998 Td /F1.0 10.5 Tf -<322e32392e332e20436f6e73756d6573> Tj +<322e32392e322e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -4921,9 +4921,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 596.9459999999998 Td +155.16824999999994 596.9459999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4950,9 +4950,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 578.4659999999998 Td +60.24000000000001 578.4659999999998 Td /F1.0 10.5 Tf -<322e32392e342e2050726f6475636573> Tj +[<322e33302e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f79616d6c2f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c56> 60.05859375 <657273696f6e7d>] TJ ET 0.000 0.000 0.000 SCN @@ -4961,9 +4961,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 578.4659999999998 Td +465.14925 578.4659999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -4990,9 +4990,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 559.9859999999999 Td +72.24000000000001 559.9859999999999 Td /F1.0 10.5 Tf -[<322e33302e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ +[<322e33302e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN @@ -5001,9 +5001,9 @@ ET 0.200 0.200 0.200 SCN BT -224.64675 559.9859999999999 Td +165.85724999999996 559.9859999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5032,7 +5032,7 @@ ET BT 72.24000000000001 541.5059999999999 Td /F1.0 10.5 Tf -<322e33302e312e20526573706f6e736573> Tj +<322e33302e322e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -5072,7 +5072,7 @@ ET BT 72.24000000000001 523.0259999999998 Td /F1.0 10.5 Tf -<322e33302e322e2050726f6475636573> Tj +<322e33302e332e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -5112,7 +5112,7 @@ ET BT 60.24000000000001 504.54599999999976 Td /F1.0 10.5 Tf -[<322e33312e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f79616d6c2f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c56> 60.05859375 <657273696f6e7d>] TJ +[<322e33312e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c56> 60.05859375 <657273696f6e7d>] TJ ET 0.000 0.000 0.000 SCN @@ -5121,9 +5121,9 @@ ET 0.200 0.200 0.200 SCN BT -465.14925 504.54599999999976 Td +433.08225 504.54599999999976 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5272,7 +5272,7 @@ ET BT 60.24000000000001 430.6259999999997 Td /F1.0 10.5 Tf -[<322e33322e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c56> 60.05859375 <657273696f6e7d>] TJ +[<322e33322e20505554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c56> 60.05859375 <657273696f6e7d>] TJ ET 0.000 0.000 0.000 SCN @@ -5392,7 +5392,7 @@ ET BT 72.24000000000001 375.18599999999964 Td /F1.0 10.5 Tf -<322e33322e332e2050726f6475636573> Tj +<322e33322e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -5401,9 +5401,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 375.18599999999964 Td +160.51274999999998 375.18599999999964 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5430,9 +5430,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 356.7059999999996 Td +72.24000000000001 356.7059999999996 Td /F1.0 10.5 Tf -[<322e33332e20505554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c56> 60.05859375 <657273696f6e7d>] TJ +<322e33322e342e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -5441,9 +5441,9 @@ ET 0.200 0.200 0.200 SCN BT -433.08225 356.7059999999996 Td +155.16824999999994 356.7059999999996 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5470,9 +5470,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 338.2259999999996 Td +60.24000000000001 338.2259999999996 Td /F1.0 10.5 Tf -[<322e33332e312e20506172> 20.01953125 <616d6574657273>] TJ +<322e33332e20474554202f76322f74656d706c61746573> Tj ET 0.000 0.000 0.000 SCN @@ -5481,9 +5481,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 338.2259999999996 Td +176.54625 338.2259999999996 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5512,7 +5512,7 @@ ET BT 72.24000000000001 319.7459999999996 Td /F1.0 10.5 Tf -<322e33332e322e20526573706f6e736573> Tj +<322e33332e312e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -5552,7 +5552,7 @@ ET BT 72.24000000000001 301.26599999999956 Td /F1.0 10.5 Tf -<322e33332e332e20436f6e73756d6573> Tj +<322e33332e322e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -5561,9 +5561,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 301.26599999999956 Td +155.16824999999994 301.26599999999956 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5590,9 +5590,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 282.78599999999955 Td +60.24000000000001 282.78599999999955 Td /F1.0 10.5 Tf -<322e33332e342e2050726f6475636573> Tj +<322e33342e20474554202f76322f74656d706c617465732f6e616d6573> Tj ET 0.000 0.000 0.000 SCN @@ -5601,9 +5601,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 282.78599999999955 Td +213.95774999999998 282.78599999999955 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5630,9 +5630,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 264.30599999999953 Td +72.24000000000001 264.30599999999953 Td /F1.0 10.5 Tf -<322e33342e20474554202f76322f74656d706c61746573> Tj +<322e33342e312e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -5641,9 +5641,9 @@ ET 0.200 0.200 0.200 SCN BT -176.54625 264.30599999999953 Td +160.51274999999998 264.30599999999953 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5672,7 +5672,7 @@ ET BT 72.24000000000001 245.8259999999995 Td /F1.0 10.5 Tf -<322e33342e312e20526573706f6e736573> Tj +<322e33342e322e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -5681,9 +5681,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 245.8259999999995 Td +155.16824999999994 245.8259999999995 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5710,9 +5710,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 227.34599999999952 Td +60.24000000000001 227.34599999999952 Td /F1.0 10.5 Tf -<322e33342e322e2050726f6475636573> Tj +<322e33352e20474554202f76322f74656d706c617465732f7b74656d706c6174654e616d657d> Tj ET 0.000 0.000 0.000 SCN @@ -5721,9 +5721,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 227.34599999999952 Td +267.40274999999997 227.34599999999952 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5750,9 +5750,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 208.86599999999953 Td +72.24000000000001 208.86599999999953 Td /F1.0 10.5 Tf -<322e33352e20474554202f76322f74656d706c617465732f6e616d6573> Tj +[<322e33352e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN @@ -5761,9 +5761,9 @@ ET 0.200 0.200 0.200 SCN BT -213.95774999999998 208.86599999999953 Td +165.85724999999996 208.86599999999953 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5792,7 +5792,7 @@ ET BT 72.24000000000001 190.38599999999954 Td /F1.0 10.5 Tf -<322e33352e312e20526573706f6e736573> Tj +<322e33352e322e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -5832,7 +5832,7 @@ ET BT 72.24000000000001 171.90599999999955 Td /F1.0 10.5 Tf -<322e33352e322e2050726f6475636573> Tj +<322e33352e332e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -5870,9 +5870,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 153.42599999999956 Td +48.24000000000001 153.42599999999956 Td /F1.0 10.5 Tf -<322e33362e20474554202f76322f74656d706c617465732f7b74656d706c6174654e616d657d> Tj +<332e20446566696e6974696f6e73> Tj ET 0.000 0.000 0.000 SCN @@ -5881,9 +5881,9 @@ ET 0.200 0.200 0.200 SCN BT -267.40274999999997 153.42599999999956 Td +117.75674999999995 153.42599999999956 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5901,7 +5901,7 @@ ET BT 552.021 153.42599999999956 Td /F1.0 10.5 Tf -<3138> Tj +<3139> Tj ET 0.000 0.000 0.000 SCN @@ -5910,9 +5910,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 134.94599999999957 Td +60.24000000000001 134.94599999999957 Td /F1.0 10.5 Tf -[<322e33362e312e20506172> 20.01953125 <616d6574657273>] TJ +<332e312e20436c616d70496e666f726d6174696f6e> Tj ET 0.000 0.000 0.000 SCN @@ -5921,9 +5921,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 134.94599999999957 Td +176.54625 134.94599999999957 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5941,7 +5941,7 @@ ET BT 552.021 134.94599999999957 Td /F1.0 10.5 Tf -<3138> Tj +<3139> Tj ET 0.000 0.000 0.000 SCN @@ -5950,9 +5950,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 116.46599999999958 Td +60.24000000000001 116.46599999999958 Td /F1.0 10.5 Tf -<322e33362e322e20526573706f6e736573> Tj +<332e322e20436c64734865616c7468436865636b> Tj ET 0.000 0.000 0.000 SCN @@ -5961,9 +5961,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 116.46599999999958 Td +165.85724999999996 116.46599999999958 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -5981,7 +5981,7 @@ ET BT 552.021 116.46599999999958 Td /F1.0 10.5 Tf -<3138> Tj +<3139> Tj ET 0.000 0.000 0.000 SCN @@ -5990,9 +5990,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 97.98599999999959 Td +60.24000000000001 97.98599999999959 Td /F1.0 10.5 Tf -<322e33362e332e2050726f6475636573> Tj +<332e332e2044696374696f6e617279> Tj ET 0.000 0.000 0.000 SCN @@ -6001,9 +6001,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 97.98599999999959 Td +133.79024999999996 97.98599999999959 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6021,7 +6021,7 @@ ET BT 552.021 97.98599999999959 Td /F1.0 10.5 Tf -<3138> Tj +<3139> Tj ET 0.000 0.000 0.000 SCN @@ -6032,7 +6032,7 @@ ET BT 60.24000000000001 79.5059999999996 Td /F1.0 10.5 Tf -<322e33372e20474554202f76322f74656d706c617465732f7b74656d706c6174654e616d657d2f737667526570726573656e746174696f6e> Tj +<332e342e2044696374696f6e617279456c656d656e74> Tj ET 0.000 0.000 0.000 SCN @@ -6041,9 +6041,9 @@ ET 0.200 0.200 0.200 SCN BT -358.25924999999995 79.5059999999996 Td +176.54625 79.5059999999996 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6061,7 +6061,7 @@ ET BT 552.021 79.5059999999996 Td /F1.0 10.5 Tf -<3139> Tj +<3230> Tj ET 0.000 0.000 0.000 SCN @@ -6070,9 +6070,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 61.02599999999961 Td +60.24000000000001 61.02599999999961 Td /F1.0 10.5 Tf -[<322e33372e312e20506172> 20.01953125 <616d6574657273>] TJ +<332e352e2045787465726e616c436f6d706f6e656e74> Tj ET 0.000 0.000 0.000 SCN @@ -6081,9 +6081,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 61.02599999999961 Td +181.89074999999997 61.02599999999961 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6101,7 +6101,7 @@ ET BT 552.021 61.02599999999961 Td /F1.0 10.5 Tf -<3139> Tj +<3230> Tj ET 0.000 0.000 0.000 SCN @@ -6119,11 +6119,11 @@ endobj /Font << /F1.0 8 0 R >> >> -/Annots [580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R] +/Annots [570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R] >> endobj 17 0 obj -<< /Length 19618 +<< /Length 12802 >> stream q @@ -6133,9 +6133,9 @@ q 0.200 0.200 0.200 SCN BT -72.24000000000001 744.786 Td +60.24 744.786 Td /F1.0 10.5 Tf -<322e33372e322e20526573706f6e736573> Tj +<332e362e2045787465726e616c436f6d706f6e656e745374617465> Tj ET 0.000 0.000 0.000 SCN @@ -6144,9 +6144,9 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 744.786 Td +208.61325 744.786 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6164,7 +6164,7 @@ ET BT 552.021 744.786 Td /F1.0 10.5 Tf -<3139> Tj +<3231> Tj ET 0.000 0.000 0.000 SCN @@ -6173,9 +6173,9 @@ ET 0.200 0.200 0.200 SCN BT -72.24000000000001 726.3059999999999 Td +60.24000000000001 726.3059999999999 Td /F1.0 10.5 Tf -<322e33372e332e2050726f6475636573> Tj +[<332e372e204a736f6e417272> 20.01953125 <61> 20.01953125 <79>] TJ ET 0.000 0.000 0.000 SCN @@ -6184,9 +6184,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 726.3059999999999 Td +133.79024999999996 726.3059999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6204,7 +6204,7 @@ ET BT 552.021 726.3059999999999 Td /F1.0 10.5 Tf -<3139> Tj +<3231> Tj ET 0.000 0.000 0.000 SCN @@ -6213,9 +6213,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 707.8259999999999 Td +60.24000000000001 707.8259999999999 Td /F1.0 10.5 Tf -<332e20446566696e6974696f6e73> Tj +<332e382e204a736f6e4e756c6c> Tj ET 0.000 0.000 0.000 SCN @@ -6224,9 +6224,9 @@ ET 0.200 0.200 0.200 SCN BT -117.75674999999995 707.8259999999999 Td +128.44574999999998 707.8259999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6244,7 +6244,7 @@ ET BT 552.021 707.8259999999999 Td /F1.0 10.5 Tf -<3230> Tj +<3232> Tj ET 0.000 0.000 0.000 SCN @@ -6255,7 +6255,7 @@ ET BT 60.24000000000001 689.3459999999999 Td /F1.0 10.5 Tf -<332e312e20436c616d70496e666f726d6174696f6e> Tj +<332e392e204a736f6e4f626a656374> Tj ET 0.000 0.000 0.000 SCN @@ -6264,9 +6264,9 @@ ET 0.200 0.200 0.200 SCN BT -176.54625 689.3459999999999 Td +133.79024999999996 689.3459999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6284,7 +6284,7 @@ ET BT 552.021 689.3459999999999 Td /F1.0 10.5 Tf -<3230> Tj +<3233> Tj ET 0.000 0.000 0.000 SCN @@ -6295,7 +6295,7 @@ ET BT 60.24000000000001 670.8659999999999 Td /F1.0 10.5 Tf -<332e322e20436c64734865616c7468436865636b> Tj +<332e31302e204a736f6e5072696d6974697665> Tj ET 0.000 0.000 0.000 SCN @@ -6304,9 +6304,9 @@ ET 0.200 0.200 0.200 SCN BT -165.85724999999996 670.8659999999999 Td +155.16824999999994 670.8659999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6324,7 +6324,7 @@ ET BT 552.021 670.8659999999999 Td /F1.0 10.5 Tf -<3230> Tj +<3235> Tj ET 0.000 0.000 0.000 SCN @@ -6335,7 +6335,7 @@ ET BT 60.24000000000001 652.3859999999999 Td /F1.0 10.5 Tf -<332e332e2044696374696f6e617279> Tj +<332e31312e204c6f6f70> Tj ET 0.000 0.000 0.000 SCN @@ -6344,9 +6344,9 @@ ET 0.200 0.200 0.200 SCN BT -133.79024999999996 652.3859999999999 Td +112.41224999999997 652.3859999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6364,7 +6364,7 @@ ET BT 552.021 652.3859999999999 Td /F1.0 10.5 Tf -<3230> Tj +<3236> Tj ET 0.000 0.000 0.000 SCN @@ -6375,7 +6375,7 @@ ET BT 60.24000000000001 633.9059999999998 Td /F1.0 10.5 Tf -<332e342e2044696374696f6e617279456c656d656e74> Tj +<332e31322e204c6f6f70456c656d656e744d6f64656c> Tj ET 0.000 0.000 0.000 SCN @@ -6384,9 +6384,9 @@ ET 0.200 0.200 0.200 SCN BT -176.54625 633.9059999999998 Td +187.23524999999995 633.9059999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6404,7 +6404,7 @@ ET BT 552.021 633.9059999999998 Td /F1.0 10.5 Tf -<3231> Tj +<3237> Tj ET 0.000 0.000 0.000 SCN @@ -6415,7 +6415,7 @@ ET BT 60.24000000000001 615.4259999999998 Td /F1.0 10.5 Tf -<332e352e2045787465726e616c436f6d706f6e656e74> Tj +<332e31332e204c6f6f704c6f67> Tj ET 0.000 0.000 0.000 SCN @@ -6424,9 +6424,9 @@ ET 0.200 0.200 0.200 SCN BT -181.89074999999997 615.4259999999998 Td +133.79024999999996 615.4259999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6444,7 +6444,7 @@ ET BT 552.021 615.4259999999998 Td /F1.0 10.5 Tf -<3231> Tj +<3238> Tj ET 0.000 0.000 0.000 SCN @@ -6455,7 +6455,7 @@ ET BT 60.24000000000001 596.9459999999998 Td /F1.0 10.5 Tf -<332e362e2045787465726e616c436f6d706f6e656e745374617465> Tj +[<332e31342e204c6f6f7054> 29.78515625 <656d706c617465>] TJ ET 0.000 0.000 0.000 SCN @@ -6464,9 +6464,9 @@ ET 0.200 0.200 0.200 SCN BT -208.61325 596.9459999999998 Td +160.51274999999998 596.9459999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6484,7 +6484,7 @@ ET BT 552.021 596.9459999999998 Td /F1.0 10.5 Tf -<3232> Tj +<3238> Tj ET 0.000 0.000 0.000 SCN @@ -6495,7 +6495,7 @@ ET BT 60.24000000000001 578.4659999999998 Td /F1.0 10.5 Tf -[<332e372e204a736f6e417272> 20.01953125 <61> 20.01953125 <79>] TJ +[<332e31352e204c6f6f7054> 29.78515625 <656d706c6174654c6f6f70456c656d656e744d6f64656c>] TJ ET 0.000 0.000 0.000 SCN @@ -6504,9 +6504,9 @@ ET 0.200 0.200 0.200 SCN BT -133.79024999999996 578.4659999999998 Td +256.71375 578.4659999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6524,7 +6524,7 @@ ET BT 552.021 578.4659999999998 Td /F1.0 10.5 Tf -<3232> Tj +<3239> Tj ET 0.000 0.000 0.000 SCN @@ -6535,7 +6535,7 @@ ET BT 60.24000000000001 559.9859999999999 Td /F1.0 10.5 Tf -<332e382e204a736f6e4e756c6c> Tj +<332e31362e204d6963726f53657276696365506f6c696379> Tj ET 0.000 0.000 0.000 SCN @@ -6544,9 +6544,9 @@ ET 0.200 0.200 0.200 SCN BT -128.44574999999998 559.9859999999999 Td +187.23524999999995 559.9859999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6564,7 +6564,7 @@ ET BT 552.021 559.9859999999999 Td /F1.0 10.5 Tf -<3233> Tj +<3239> Tj ET 0.000 0.000 0.000 SCN @@ -6575,7 +6575,7 @@ ET BT 60.24000000000001 541.5059999999999 Td /F1.0 10.5 Tf -<332e392e204a736f6e4f626a656374> Tj +<332e31372e204e756d626572> Tj ET 0.000 0.000 0.000 SCN @@ -6584,9 +6584,9 @@ ET 0.200 0.200 0.200 SCN BT -133.79024999999996 541.5059999999999 Td +128.44574999999998 541.5059999999999 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6604,7 +6604,7 @@ ET BT 552.021 541.5059999999999 Td /F1.0 10.5 Tf -<3234> Tj +<3330> Tj ET 0.000 0.000 0.000 SCN @@ -6615,7 +6615,7 @@ ET BT 60.24000000000001 523.0259999999998 Td /F1.0 10.5 Tf -<332e31302e204a736f6e5072696d6974697665> Tj +[<332e31382e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ ET 0.000 0.000 0.000 SCN @@ -6624,9 +6624,9 @@ ET 0.200 0.200 0.200 SCN BT -155.16824999999994 523.0259999999998 Td +176.54625 523.0259999999998 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6644,7 +6644,7 @@ ET BT 552.021 523.0259999999998 Td /F1.0 10.5 Tf -<3236> Tj +<3330> Tj ET 0.000 0.000 0.000 SCN @@ -6655,7 +6655,7 @@ ET BT 60.24000000000001 504.54599999999976 Td /F1.0 10.5 Tf -<332e31312e204c6f6f70> Tj +<332e31392e20506f6c6963794d6f64656c> Tj ET 0.000 0.000 0.000 SCN @@ -6664,9 +6664,9 @@ ET 0.200 0.200 0.200 SCN BT -112.41224999999997 504.54599999999976 Td +149.82374999999996 504.54599999999976 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6684,7 +6684,7 @@ ET BT 552.021 504.54599999999976 Td /F1.0 10.5 Tf -<3237> Tj +<3331> Tj ET 0.000 0.000 0.000 SCN @@ -6695,7 +6695,7 @@ ET BT 60.24000000000001 486.06599999999975 Td /F1.0 10.5 Tf -<332e31322e204c6f6f70456c656d656e744d6f64656c> Tj +<332e32302e2053657276696365> Tj ET 0.000 0.000 0.000 SCN @@ -6704,9 +6704,9 @@ ET 0.200 0.200 0.200 SCN BT -187.23524999999995 486.06599999999975 Td +123.10125 486.06599999999975 Td /F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj ET 0.000 0.000 0.000 SCN @@ -6724,18 +6724,41 @@ ET BT 552.021 486.06599999999975 Td /F1.0 10.5 Tf -<3238> Tj +<3332> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn +Q + +endstream +endobj +18 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 17 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +>> +>> +/Annots [646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R] +>> +endobj +19 0 obj +<< /Length 2379 +>> +stream +q +/DeviceRGB cs 0.200 0.200 0.200 scn +/DeviceRGB CS 0.200 0.200 0.200 SCN BT -60.24000000000001 467.58599999999973 Td -/F1.0 10.5 Tf -<332e31332e204c6f6f704c6f67> Tj +48.24 730.304 Td +/F2.0 22 Tf +<4368617074657220312e204f76657276696577> Tj ET 0.000 0.000 0.000 SCN @@ -6744,27 +6767,20 @@ ET 0.200 0.200 0.200 SCN BT -133.79024999999996 467.58599999999973 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +48.24 688.656 Td +/F2.0 18 Tf +[<312e312e2056> 60.05859375 <657273696f6e20696e666f726d6174696f6e>] TJ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn - -BT -550.66125 467.58599999999973 Td -/F1.0 5.25 Tf - Tj -ET - 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -552.021 467.58599999999973 Td -/F1.0 10.5 Tf -<3239> Tj +48.24 660.036 Td +/F3.0 10.5 Tf +[<56> 60.05859375 <657273696f6e>] TJ ET 0.000 0.000 0.000 SCN @@ -6773,9 +6789,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 449.1059999999997 Td +85.136384765625 660.036 Td /F1.0 10.5 Tf -[<332e31342e204c6f6f7054> 29.78515625 <656d706c617465>] TJ +[<203a20352e312e302d534e415053484f> 20.01953125 <54>] TJ ET 0.000 0.000 0.000 SCN @@ -6784,27 +6800,20 @@ ET 0.200 0.200 0.200 SCN BT -160.51274999999998 449.1059999999997 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +48.24 620.796 Td +/F2.0 18 Tf +<312e322e2055524920736368656d65> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn - -BT -550.66125 449.1059999999997 Td -/F1.0 5.25 Tf - Tj -ET - 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -552.021 449.1059999999997 Td -/F1.0 10.5 Tf -<3239> Tj +48.24 592.176 Td +/F3.0 10.5 Tf +<486f7374> Tj ET 0.000 0.000 0.000 SCN @@ -6813,9 +6822,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 430.6259999999997 Td +71.30850000000001 592.176 Td /F1.0 10.5 Tf -[<332e31352e204c6f6f7054> 29.78515625 <656d706c6174654c6f6f70456c656d656e744d6f64656c>] TJ +<203a206c6f63616c686f73743a3434323137> Tj ET 0.000 0.000 0.000 SCN @@ -6824,27 +6833,18 @@ ET 0.200 0.200 0.200 SCN BT -256.71375 430.6259999999997 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +48.24 576.3960000000001 Td ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn - -BT -550.66125 430.6259999999997 Td -/F1.0 5.25 Tf - Tj -ET - 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -552.021 430.6259999999997 Td -/F1.0 10.5 Tf -<3330> Tj +48.24 576.3960000000001 Td +/F3.0 10.5 Tf +<4261736550617468> Tj ET 0.000 0.000 0.000 SCN @@ -6853,9 +6853,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 412.1459999999997 Td +93.95700000000001 576.3960000000001 Td /F1.0 10.5 Tf -<332e31362e204d6963726f53657276696365506f6c696379> Tj +<203a202f7265737473657276696365732f636c64732f> Tj ET 0.000 0.000 0.000 SCN @@ -6864,27 +6864,18 @@ ET 0.200 0.200 0.200 SCN BT -187.23524999999995 412.1459999999997 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +48.24 560.6160000000001 Td ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn - -BT -550.66125 412.1459999999997 Td -/F1.0 5.25 Tf - Tj -ET - 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -552.021 412.1459999999997 Td -/F1.0 10.5 Tf -<3330> Tj +48.24 560.6160000000001 Td +/F3.0 10.5 Tf +<536368656d6573> Tj ET 0.000 0.000 0.000 SCN @@ -6893,38 +6884,106 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 393.66599999999966 Td +89.946 560.6160000000001 Td /F1.0 10.5 Tf -<332e31372e204e756d626572> Tj +<203a2048545450> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -128.44574999999998 393.66599999999966 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +557.7289999999999 14.388 Td +/F1.0 9 Tf +<31> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn +Q +Q -BT -550.66125 393.66599999999966 Td -/F1.0 5.25 Tf - Tj -ET - +endstream +endobj +20 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 19 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 24 0 R +/F3.0 26 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 676 0 R +>> +>> +>> +endobj +21 0 obj +[20 0 R /XYZ 0 792.0 null] +endobj +22 0 obj +<< /Type /Names +/Dests 23 0 R +>> +endobj +23 0 obj +<< /Kids [56 0 R 258 0 R 320 0 R 155 0 R 242 0 R 90 0 R 152 0 R 221 0 R 57 0 R 201 0 R 125 0 R 236 0 R 84 0 R 206 0 R] +>> +endobj +24 0 obj +<< /Type /Font +/BaseFont /AAAAAB+NotoSerif-Bold +/Subtype /TrueType +/FontDescriptor 849 0 R +/FirstChar 32 +/LastChar 255 +/Widths 851 0 R +/ToUnicode 850 0 R +>> +endobj +25 0 obj +[20 0 R /XYZ 0 712.0799999999999 null] +endobj +26 0 obj +<< /Type /Font +/BaseFont /AAAAAC+NotoSerif-Italic +/Subtype /TrueType +/FontDescriptor 853 0 R +/FirstChar 32 +/LastChar 255 +/Widths 855 0 R +/ToUnicode 854 0 R +>> +endobj +27 0 obj +[20 0 R /XYZ 0 644.22 null] +endobj +28 0 obj +<< /Length 12151 +>> +stream +q +/DeviceRGB cs 0.200 0.200 0.200 scn +/DeviceRGB CS 0.200 0.200 0.200 SCN BT -552.021 393.66599999999966 Td -/F1.0 10.5 Tf -<3331> Tj +48.24 730.304 Td +/F2.0 22 Tf +<4368617074657220322e205061746873> Tj ET 0.000 0.000 0.000 SCN @@ -6933,9 +6992,9 @@ ET 0.200 0.200 0.200 SCN BT -60.24000000000001 375.18599999999964 Td -/F1.0 10.5 Tf -[<332e31382e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +48.24 688.656 Td +/F2.0 18 Tf +<322e312e20474554202f76312f6865616c7468636865636b> Tj ET 0.000 0.000 0.000 SCN @@ -6944,448 +7003,69 @@ ET 0.200 0.200 0.200 SCN BT -176.54625 375.18599999999964 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +48.24 654.416 Td +/F2.0 13 Tf +<322e312e312e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 602.160 51.552 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +99.792 602.160 360.864 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +460.656 602.160 103.104 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 578.880 51.552 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +99.792 578.880 360.864 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +460.656 578.880 103.104 23.280 re +f +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 639.720 m +99.792 639.720 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 602.160 m +99.792 602.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 639.970 m +48.240 601.410 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 639.970 m +99.792 601.410 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn BT -550.66125 375.18599999999964 Td -/F1.0 5.25 Tf - Tj -ET - -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -552.021 375.18599999999964 Td -/F1.0 10.5 Tf -<3331> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -60.24000000000001 356.7059999999996 Td -/F1.0 10.5 Tf -<332e31392e20506f6c6963794d6f64656c> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -149.82374999999996 356.7059999999996 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -BT -550.66125 356.7059999999996 Td -/F1.0 5.25 Tf - Tj -ET - -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -552.021 356.7059999999996 Td -/F1.0 10.5 Tf -<3332> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -60.24000000000001 338.2259999999996 Td -/F1.0 10.5 Tf -<332e32302e2053657276696365> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -123.10125 338.2259999999996 Td -/F1.0 10.5 Tf -<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -BT -550.66125 338.2259999999996 Td -/F1.0 5.25 Tf - Tj -ET - -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -552.021 338.2259999999996 Td -/F1.0 10.5 Tf -<3333> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -Q - -endstream -endobj -18 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 17 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F1.0 8 0 R ->> ->> -/Annots [656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R] ->> -endobj -19 0 obj -<< /Length 2379 ->> -stream -q -/DeviceRGB cs -0.200 0.200 0.200 scn -/DeviceRGB CS -0.200 0.200 0.200 SCN - -BT -48.24 730.304 Td -/F2.0 22 Tf -<4368617074657220312e204f76657276696577> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 688.656 Td -/F2.0 18 Tf -[<312e312e2056> 60.05859375 <657273696f6e20696e666f726d6174696f6e>] TJ -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 660.036 Td -/F3.0 10.5 Tf -[<56> 60.05859375 <657273696f6e>] TJ -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -85.136384765625 660.036 Td -/F1.0 10.5 Tf -[<203a20352e312e302d534e415053484f> 20.01953125 <54>] TJ -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 620.796 Td -/F2.0 18 Tf -<312e322e2055524920736368656d65> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 592.176 Td -/F3.0 10.5 Tf -<486f7374> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -71.30850000000001 592.176 Td -/F1.0 10.5 Tf -<203a206c6f63616c686f73743a3337303333> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 576.3960000000001 Td -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 576.3960000000001 Td -/F3.0 10.5 Tf -<4261736550617468> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -93.95700000000001 576.3960000000001 Td -/F1.0 10.5 Tf -<203a202f7265737473657276696365732f636c64732f> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 560.6160000000001 Td -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 560.6160000000001 Td -/F3.0 10.5 Tf -<536368656d6573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -89.946 560.6160000000001 Td -/F1.0 10.5 Tf -<203a2048545450> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -q -0.000 0.000 0.000 scn -0.000 0.000 0.000 SCN -1 w -0 J -0 j -[ ] 0 d -/Stamp1 Do -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -557.7289999999999 14.388 Td -/F1.0 9 Tf -<31> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -Q -Q - -endstream -endobj -20 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 19 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F2.0 24 0 R -/F3.0 26 0 R -/F1.0 8 0 R ->> -/XObject << /Stamp1 702 0 R ->> ->> ->> -endobj -21 0 obj -[20 0 R /XYZ 0 792.0 null] -endobj -22 0 obj -<< /Type /Names -/Dests 23 0 R ->> -endobj -23 0 obj -<< /Kids [56 0 R 268 0 R 330 0 R 156 0 R 231 0 R 90 0 R 153 0 R 220 0 R 57 0 R 150 0 R 218 0 R 84 0 R 222 0 R 140 0 R] ->> -endobj -24 0 obj -<< /Type /Font -/BaseFont /AAAAAB+NotoSerif-Bold -/Subtype /TrueType -/FontDescriptor 883 0 R -/FirstChar 32 -/LastChar 255 -/Widths 885 0 R -/ToUnicode 884 0 R ->> -endobj -25 0 obj -[20 0 R /XYZ 0 712.0799999999999 null] -endobj -26 0 obj -<< /Type /Font -/BaseFont /AAAAAC+NotoSerif-Italic -/Subtype /TrueType -/FontDescriptor 887 0 R -/FirstChar 32 -/LastChar 255 -/Widths 889 0 R -/ToUnicode 888 0 R ->> -endobj -27 0 obj -[20 0 R /XYZ 0 644.22 null] -endobj -28 0 obj -<< /Length 12151 ->> -stream -q -/DeviceRGB cs -0.200 0.200 0.200 scn -/DeviceRGB CS -0.200 0.200 0.200 SCN - -BT -48.24 730.304 Td -/F2.0 22 Tf -<4368617074657220322e205061746873> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 688.656 Td -/F2.0 18 Tf -<322e312e20474554202f76312f6865616c7468636865636b> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 654.416 Td -/F2.0 13 Tf -<322e312e312e20526573706f6e736573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 602.160 51.552 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -99.792 602.160 360.864 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -460.656 602.160 103.104 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 578.880 51.552 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -99.792 578.880 360.864 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -460.656 578.880 103.104 23.280 re -f -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 639.720 m -99.792 639.720 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 602.160 m -99.792 602.160 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 639.970 m -48.240 601.410 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 639.970 m -99.792 601.410 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 623.9730000000002 Td -/F2.0 10.5 Tf -<48545450> Tj +51.24 623.9730000000002 Td +/F2.0 10.5 Tf +<48545450> Tj ET @@ -8184,7 +7864,7 @@ endobj /F1.0 8 0 R /F4.0 35 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> /Annots [33 0 R 41 0 R] @@ -8214,11 +7894,11 @@ endobj << /Type /Font /BaseFont /AAAAAD+mplus1mn-regular /Subtype /TrueType -/FontDescriptor 891 0 R +/FontDescriptor 857 0 R /FirstChar 32 /LastChar 255 -/Widths 893 0 R -/ToUnicode 892 0 R +/Widths 859 0 R +/ToUnicode 858 0 R >> endobj 36 0 obj @@ -9462,7 +9142,7 @@ endobj /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> /Annots [47 0 R 51 0 R 53 0 R] @@ -9515,12 +9195,12 @@ endobj endobj 56 0 obj << /Limits [(_clampinformation) (_consumes_8)] -/Names [(_clampinformation) 259 0 R (_cldshealthcheck) 260 0 R (_consumes) 54 0 R (_consumes_2) 73 0 R (_consumes_3) 100 0 R (_consumes_4) 178 0 R (_consumes_5) 187 0 R (_consumes_6) 194 0 R (_consumes_7) 207 0 R (_consumes_8) 234 0 R] +/Names [(_clampinformation) 249 0 R (_cldshealthcheck) 250 0 R (_consumes) 54 0 R (_consumes_2) 73 0 R (_consumes_3) 100 0 R (_consumes_4) 171 0 R (_consumes_5) 180 0 R (_consumes_6) 189 0 R (_consumes_7) 203 0 R (_consumes_8) 228 0 R] >> endobj 57 0 obj << /Limits [(_responses_10) (_responses_19)] -/Names [(_responses_10) 83 0 R (_responses_11) 91 0 R (_responses_12) 96 0 R (_responses_13) 104 0 R (_responses_14) 107 0 R (_responses_15) 113 0 R (_responses_16) 117 0 R (_responses_17) 124 0 R (_responses_18) 129 0 R (_responses_19) 136 0 R] +/Names [(_responses_10) 83 0 R (_responses_11) 91 0 R (_responses_12) 96 0 R (_responses_13) 104 0 R (_responses_14) 107 0 R (_responses_15) 113 0 R (_responses_16) 117 0 R (_responses_17) 124 0 R (_responses_18) 130 0 R (_responses_19) 137 0 R] >> endobj 58 0 obj @@ -10875,7 +10555,7 @@ endobj /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> /Annots [66 0 R 70 0 R 72 0 R] @@ -12095,7 +11775,7 @@ endobj /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> >> @@ -12125,8 +11805,8 @@ endobj [75 0 R /XYZ 0 198.9600000000004 null] endobj 84 0 obj -<< /Limits [(_route101) (_route78)] -/Names [(_route101) 77 0 R (_route102) 81 0 R (_route103) 209 0 R (_route104) 221 0 R (_route105) 215 0 R (_route106) 203 0 R (_route107) 229 0 R (_route108) 236 0 R (_route109) 245 0 R (_route110) 242 0 R (_route111) 252 0 R (_route112) 39 0 R (_route113) 31 0 R (_route114) 36 0 R (_route78) 112 0 R] +<< /Limits [(_route2) (_route3)] +/Names [(_route2) 112 0 R (_route20) 58 0 R (_route21) 63 0 R (_route22) 49 0 R (_route23) 68 0 R (_route24) 77 0 R (_route25) 81 0 R (_route26) 205 0 R (_route27) 216 0 R (_route28) 210 0 R (_route29) 196 0 R (_route3) 191 0 R] >> endobj 85 0 obj @@ -13327,7 +13007,7 @@ endobj /F1.0 8 0 R /F4.0 35 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> /Annots [92 0 R] @@ -13341,7 +13021,7 @@ endobj endobj 90 0 obj << /Limits [(_policymodel) (_produces_18)] -/Names [(_policymodel) 350 0 R (_produces) 34 0 R (_produces_10) 85 0 R (_produces_11) 93 0 R (_produces_12) 101 0 R (_produces_13) 111 0 R (_produces_14) 114 0 R (_produces_15) 119 0 R (_produces_16) 126 0 R (_produces_17) 131 0 R (_produces_18) 138 0 R] +/Names [(_policymodel) 340 0 R (_produces) 34 0 R (_produces_10) 85 0 R (_produces_11) 93 0 R (_produces_12) 101 0 R (_produces_13) 111 0 R (_produces_14) 114 0 R (_produces_15) 119 0 R (_produces_16) 127 0 R (_produces_17) 132 0 R (_produces_18) 139 0 R] >> endobj 91 0 obj @@ -14695,7 +14375,7 @@ endobj /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> /Annots [99 0 R 108 0 R] @@ -15729,7 +15409,7 @@ endobj /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> /Annots [118 0 R] @@ -17203,16 +16883,21 @@ endobj /F1.0 8 0 R /F4.0 35 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [125 0 R 130 0 R] +/Annots [126 0 R 131 0 R] >> endobj 124 0 obj [123 0 R /XYZ 0 645.5999999999999 null] endobj 125 0 obj +<< /Limits [(_responses_30) (_responses_8)] +/Names [(_responses_30) 212 0 R (_responses_31) 218 0 R (_responses_32) 226 0 R (_responses_33) 231 0 R (_responses_34) 235 0 R (_responses_35) 243 0 R (_responses_4) 46 0 R (_responses_5) 52 0 R (_responses_6) 59 0 R (_responses_7) 65 0 R (_responses_8) 71 0 R] +>> +endobj +126 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -17220,19 +16905,19 @@ endobj /Type /Annot >> endobj -126 0 obj +127 0 obj [123 0 R /XYZ 0 540.48 null] endobj -127 0 obj +128 0 obj [123 0 R /XYZ 0 484.20000000000016 null] endobj -128 0 obj +129 0 obj [123 0 R /XYZ 0 387.96000000000015 null] endobj -129 0 obj +130 0 obj [123 0 R /XYZ 0 245.28000000000014 null] endobj -130 0 obj +131 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -17240,10 +16925,10 @@ endobj /Type /Annot >> endobj -131 0 obj +132 0 obj [123 0 R /XYZ 0 140.1600000000001 null] endobj -132 0 obj +133 0 obj << /Length 17251 >> stream @@ -18527,33 +18212,33 @@ Q endstream endobj -133 0 obj +134 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 132 0 R +/Contents 133 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R /F4.0 35 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [137 0 R] +/Annots [138 0 R] >> endobj -134 0 obj -[133 0 R /XYZ 0 792.0 null] -endobj 135 0 obj -[133 0 R /XYZ 0 662.1600000000001 null] +[134 0 R /XYZ 0 792.0 null] endobj 136 0 obj -[133 0 R /XYZ 0 444.3600000000002 null] +[134 0 R /XYZ 0 662.1600000000001 null] endobj 137 0 obj +[134 0 R /XYZ 0 444.3600000000002 null] +endobj +138 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -18561,22 +18246,17 @@ endobj /Type /Annot >> endobj -138 0 obj -[133 0 R /XYZ 0 339.2400000000001 null] -endobj 139 0 obj -[133 0 R /XYZ 0 282.9600000000001 null] +[134 0 R /XYZ 0 339.2400000000001 null] endobj 140 0 obj -<< /Limits [(_route90) (_version_information)] -/Names [(_route90) 154 0 R (_route91) 102 0 R (_route92) 115 0 R (_route93) 88 0 R (_route94) 134 0 R (_route95) 94 0 R (_route96) 43 0 R (_route97) 58 0 R (_route98) 63 0 R (_route99) 49 0 R (_service) 355 0 R (_uri_scheme) 27 0 R (_version_information) 25 0 R] ->> +[134 0 R /XYZ 0 282.9600000000001 null] endobj 141 0 obj -[133 0 R /XYZ 0 242.8800000000001 null] +[134 0 R /XYZ 0 242.8800000000001 null] endobj 142 0 obj -[133 0 R /XYZ 0 137.76000000000008 null] +[134 0 R /XYZ 0 137.76000000000008 null] endobj 143 0 obj << /Length 19073 @@ -19999,10 +19679,10 @@ endobj /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [145 0 R 151 0 R 158 0 R] +/Annots [145 0 R 150 0 R 157 0 R] >> endobj 145 0 obj @@ -20026,11 +19706,6 @@ endobj [144 0 R /XYZ 0 481.68000000000046 null] endobj 150 0 obj -<< /Limits [(_responses_2) (_responses_28)] -/Names [(_responses_2) 37 0 R (_responses_20) 142 0 R (_responses_21) 149 0 R (_responses_22) 157 0 R (_responses_23) 164 0 R (_responses_24) 168 0 R (_responses_25) 176 0 R (_responses_26) 183 0 R (_responses_27) 192 0 R (_responses_28) 200 0 R] ->> -endobj -151 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -20038,29 +19713,29 @@ endobj /Type /Annot >> endobj -152 0 obj +151 0 obj [144 0 R /XYZ 0 376.5600000000004 null] endobj -153 0 obj +152 0 obj << /Limits [(_produces_19) (_produces_27)] -/Names [(_produces_19) 146 0 R (_produces_2) 38 0 R (_produces_20) 152 0 R (_produces_21) 161 0 R (_produces_22) 165 0 R (_produces_23) 170 0 R (_produces_24) 179 0 R (_produces_25) 188 0 R (_produces_26) 195 0 R (_produces_27) 202 0 R] +/Names [(_produces_19) 146 0 R (_produces_2) 38 0 R (_produces_20) 151 0 R (_produces_21) 160 0 R (_produces_22) 165 0 R (_produces_23) 174 0 R (_produces_24) 181 0 R (_produces_25) 190 0 R (_produces_26) 195 0 R (_produces_27) 204 0 R] >> endobj -154 0 obj +153 0 obj [144 0 R /XYZ 0 320.28000000000037 null] endobj -155 0 obj +154 0 obj [144 0 R /XYZ 0 280.20000000000033 null] endobj -156 0 obj +155 0 obj << /Limits [(_parameters_15) (_parameters_23)] -/Names [(_parameters_15) 148 0 R (_parameters_16) 155 0 R (_parameters_17) 163 0 R (_parameters_18) 167 0 R (_parameters_19) 174 0 R (_parameters_2) 64 0 R (_parameters_20) 181 0 R (_parameters_21) 190 0 R (_parameters_22) 197 0 R (_parameters_23) 204 0 R] +/Names [(_parameters_15) 148 0 R (_parameters_16) 154 0 R (_parameters_17) 162 0 R (_parameters_18) 167 0 R (_parameters_19) 176 0 R (_parameters_2) 64 0 R (_parameters_20) 183 0 R (_parameters_21) 192 0 R (_parameters_22) 197 0 R (_parameters_23) 211 0 R] >> endobj -157 0 obj +156 0 obj [144 0 R /XYZ 0 175.08000000000033 null] endobj -158 0 obj +157 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link @@ -20068,8 +19743,8 @@ endobj /Type /Annot >> endobj -159 0 obj -<< /Length 16217 +158 0 obj +<< /Length 18295 >> stream q @@ -20118,7 +19793,7 @@ ET BT 48.24000000000001 678.6960000000001 Td /F2.0 18 Tf -<322e32332e20474554202f76322f6c6f6f702f737667526570726573656e746174696f6e2f7b6c6f6f704e616d657d> Tj +[<322e32332e20505554202f76322f6c6f6f702f756e6465706c6f> 20.01953125 <792f7b6c6f6f704e616d657d>] TJ ET 0.000 0.000 0.000 SCN @@ -20624,13 +20299,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 463.65600000000006 470.8330000000004 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4c6f6f70> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN @@ -20664,7 +20347,7 @@ ET BT 66.24000000000001 409.7400000000004 Td /F4.0 10.5 Tf -<6170706c69636174696f6e2f786d6c> Tj +<6170706c69636174696f6e2f6a736f6e> Tj ET 0.000 0.000 0.000 SCN @@ -20675,7 +20358,7 @@ ET BT 48.24000000000001 372.0960000000004 Td /F2.0 18 Tf -[<322e32342e20505554202f76322f6c6f6f702f756e6465706c6f> 20.01953125 <792f7b6c6f6f704e616d657d>] TJ +[<322e32342e20504f53> 20.01953125 <54202f76322f6c6f6f702f757064617465476c6f62616c50726f706572746965732f7b6c6f6f704e616d657d>] TJ ET 0.000 0.000 0.000 SCN @@ -20715,6 +20398,18 @@ f 334.640 262.320 229.120 37.560 re f 0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 224.760 114.560 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +162.800 224.760 171.840 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +334.640 224.760 229.120 37.560 re +f +0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN 48.240 323.160 m @@ -20936,12 +20631,137 @@ BT <737472696e67> Tj ET +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 262.320 m +162.800 262.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 224.760 m +162.800 224.760 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 262.570 m +48.240 224.510 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 262.570 m +162.800 224.510 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24000000000001 238.93300000000025 Td +/F2.0 10.5 Tf +<426f6479> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +162.800 262.320 m +334.640 262.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 224.760 m +334.640 224.760 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 262.570 m +162.800 224.510 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 262.570 m +334.640 224.510 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +165.79988544000003 246.07300000000026 Td +/F2.0 10.5 Tf +<626f6479> Tj +ET + + +BT +165.79988544000003 231.79300000000026 Td +ET + + +BT +165.79988544000003 231.79300000000026 Td +/F3.0 10.5 Tf +<7265717569726564> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +334.640 262.320 m +563.760 262.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 224.760 m +563.760 224.760 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 262.570 m +334.640 224.510 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 262.570 m +563.760 224.510 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +337.6397136 238.93300000000025 Td +/F1.0 10.5 Tf +<4a736f6e4f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 232.73600000000033 Td +48.24000000000001 195.17600000000027 Td /F2.0 13 Tf <322e32342e322e20526573706f6e736573> Tj ET @@ -20949,51 +20769,51 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 180.480 51.552 37.560 re +48.240 142.920 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 180.480 360.864 37.560 re +99.792 142.920 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 180.480 103.104 37.560 re +460.656 142.920 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 157.200 51.552 23.280 re +48.240 119.640 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 157.200 360.864 23.280 re +99.792 119.640 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 157.200 103.104 23.280 re +460.656 119.640 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 218.040 m -99.792 218.040 l +48.240 180.480 m +99.792 180.480 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 180.480 m -99.792 180.480 l +48.240 142.920 m +99.792 142.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 218.290 m -48.240 179.730 l +48.240 180.730 m +48.240 142.170 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 218.290 m -99.792 179.730 l +99.792 180.730 m +99.792 142.170 l S [ ] 0 d 1 w @@ -21001,14 +20821,14 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 202.29300000000032 Td +51.24000000000001 164.73300000000026 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24000000000001 188.01300000000032 Td +51.24000000000001 150.45300000000026 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -21016,26 +20836,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 218.040 m -460.656 218.040 l +99.792 180.480 m +460.656 180.480 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 180.480 m -460.656 180.480 l +99.792 142.920 m +460.656 142.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 218.290 m -99.792 179.730 l +99.792 180.730 m +99.792 142.170 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 218.290 m -460.656 179.730 l +460.656 180.730 m +460.656 142.170 l S [ ] 0 d 1 w @@ -21043,7 +20863,7 @@ S 0.200 0.200 0.200 scn BT -102.792 202.29300000000032 Td +102.792 164.73300000000026 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -21051,26 +20871,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 218.040 m -563.760 218.040 l +460.656 180.480 m +563.760 180.480 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 180.480 m -563.760 180.480 l +460.656 142.920 m +563.760 142.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 218.290 m -460.656 179.730 l +460.656 180.730 m +460.656 142.170 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 218.290 m -563.760 179.730 l +563.760 180.730 m +563.760 142.170 l S [ ] 0 d 1 w @@ -21078,7 +20898,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 202.29300000000032 Td +463.65600000000006 164.73300000000026 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -21086,26 +20906,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 180.480 m -99.792 180.480 l +48.240 142.920 m +99.792 142.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 157.200 m -99.792 157.200 l +48.240 119.640 m +99.792 119.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 180.730 m -48.240 156.950 l +48.240 143.170 m +48.240 119.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 180.730 m -99.792 156.950 l +99.792 143.170 m +99.792 119.390 l S [ ] 0 d 1 w @@ -21113,7 +20933,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 164.23300000000032 Td +51.24000000000001 126.67300000000026 Td /F2.0 10.5 Tf <323030> Tj ET @@ -21121,26 +20941,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 180.480 m -460.656 180.480 l +99.792 142.920 m +460.656 142.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 157.200 m -460.656 157.200 l +99.792 119.640 m +460.656 119.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 180.730 m -99.792 156.950 l +99.792 143.170 m +99.792 119.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 180.730 m -460.656 156.950 l +460.656 143.170 m +460.656 119.390 l S [ ] 0 d 1 w @@ -21148,7 +20968,7 @@ S 0.200 0.200 0.200 scn BT -102.792 164.23300000000032 Td +102.792 126.67300000000026 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -21156,26 +20976,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 180.480 m -563.760 180.480 l +460.656 142.920 m +563.760 142.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 157.200 m -563.760 157.200 l +460.656 119.640 m +563.760 119.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 180.730 m -460.656 156.950 l +460.656 143.170 m +460.656 119.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 180.730 m -563.760 156.950 l +563.760 143.170 m +563.760 119.390 l S [ ] 0 d 1 w @@ -21189,7 +21009,7 @@ S 0.259 0.545 0.792 SCN BT -463.65600000000006 164.23300000000032 Td +463.65600000000006 126.67300000000026 Td /F1.0 10.5 Tf <4c6f6f70> Tj ET @@ -21201,9 +21021,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 127.61600000000028 Td +48.24000000000001 90.05600000000024 Td /F2.0 13 Tf -<322e32342e332e2050726f6475636573> Tj +<322e32342e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -21214,7 +21034,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 100.95600000000027 Td +56.88050000000001 63.39600000000024 Td /F1.0 10.5 Tf Tj ET @@ -21227,7 +21047,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 103.14000000000027 Td +66.24000000000001 65.58000000000024 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -21258,60 +21078,76 @@ Q endstream endobj -160 0 obj +159 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 159 0 R +/Contents 158 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F1.0 8 0 R /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [169 0 R] +/Annots [164 0 R 168 0 R 170 0 R] >> endobj +160 0 obj +[159 0 R /XYZ 0 792.0 null] +endobj 161 0 obj -[160 0 R /XYZ 0 792.0 null] +[159 0 R /XYZ 0 702.1200000000001 null] endobj 162 0 obj -[160 0 R /XYZ 0 702.1200000000001 null] +[159 0 R /XYZ 0 662.0400000000002 null] endobj 163 0 obj -[160 0 R /XYZ 0 662.0400000000002 null] +[159 0 R /XYZ 0 556.9200000000003 null] endobj 164 0 obj -[160 0 R /XYZ 0 556.9200000000003 null] +<< /Border [0 0 0] +/Dest (_loop) +/Subtype /Link +/Rect [463.65600000000006 467.76700000000045 488.7510000000001 482.0470000000004] +/Type /Annot +>> endobj 165 0 obj -[160 0 R /XYZ 0 451.8000000000004 null] +[159 0 R /XYZ 0 451.8000000000004 null] endobj 166 0 obj -[160 0 R /XYZ 0 395.5200000000004 null] +[159 0 R /XYZ 0 395.5200000000004 null] endobj 167 0 obj -[160 0 R /XYZ 0 355.44000000000034 null] +[159 0 R /XYZ 0 355.44000000000034 null] endobj 168 0 obj -[160 0 R /XYZ 0 250.32000000000033 null] +<< /Border [0 0 0] +/Dest (_jsonobject) +/Subtype /Link +/Rect [337.6397136 235.86700000000027 390.7907136 250.14700000000028] +/Type /Annot +>> endobj 169 0 obj +[159 0 R /XYZ 0 212.76000000000028 null] +endobj +170 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link -/Rect [463.65600000000006 161.16700000000031 488.7510000000001 175.44700000000032] +/Rect [463.65600000000006 123.60700000000026 488.7510000000001 137.88700000000026] /Type /Annot >> endobj -170 0 obj -[160 0 R /XYZ 0 145.2000000000003 null] -endobj 171 0 obj -<< /Length 19644 +[159 0 R /XYZ 0 107.64000000000024 null] +endobj +172 0 obj +<< /Length 17036 >> stream q @@ -21321,9 +21157,57 @@ q 0.200 0.200 0.200 SCN BT -48.24 734.976 Td +48.24 740.816 Td +/F2.0 13 Tf +<322e32342e342e2050726f6475636573> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +-0.500 Tc +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +56.88050000000001 714.1560000000001 Td +/F1.0 10.5 Tf + Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +0.000 Tc +0.694 0.129 0.275 scn +0.694 0.129 0.275 SCN + +BT +66.24000000000001 716.3400000000001 Td +/F4.0 10.5 Tf +<6170706c69636174696f6e2f6a736f6e> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24000000000001 678.6960000000001 Td /F2.0 18 Tf -[<322e32352e20504f53> 20.01953125 <54202f76322f6c6f6f702f757064617465476c6f62616c50726f706572746965732f7b6c6f6f704e616d657d>] TJ +[<322e32352e20504f53> 20.01953125 <54>] TJ +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24000000000001 650.6160000000002 Td +/F2.0 18 Tf +<2f76322f6c6f6f702f7570646174654d6963726f73657276696365506f6c6963792f7b6c6f6f704e616d657d> Tj ET 0.000 0.000 0.000 SCN @@ -21332,7 +21216,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 700.7360000000001 Td +48.24000000000001 616.3760000000002 Td /F2.0 13 Tf [<322e32352e312e20506172> 20.01953125 <616d6574657273>] TJ ET @@ -21340,63 +21224,63 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 662.760 114.560 23.280 re +48.240 578.400 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 662.760 171.840 23.280 re +162.800 578.400 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 662.760 229.120 23.280 re +334.640 578.400 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 625.200 114.560 37.560 re +48.240 540.840 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 625.200 171.840 37.560 re +162.800 540.840 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 625.200 229.120 37.560 re +334.640 540.840 229.120 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 587.640 114.560 37.560 re +48.240 503.280 114.560 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -162.800 587.640 171.840 37.560 re +162.800 503.280 171.840 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -334.640 587.640 229.120 37.560 re +334.640 503.280 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 686.040 m -162.800 686.040 l +48.240 601.680 m +162.800 601.680 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 662.760 m -162.800 662.760 l +48.240 578.400 m +162.800 578.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 686.290 m -48.240 662.010 l +48.240 601.930 m +48.240 577.650 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 686.290 m -162.800 662.010 l +162.800 601.930 m +162.800 577.650 l S [ ] 0 d 1 w @@ -21404,7 +21288,7 @@ S 0.200 0.200 0.200 scn BT -51.24 670.2930000000001 Td +51.24000000000001 585.9330000000002 Td /F2.0 10.5 Tf <54797065> Tj ET @@ -21412,26 +21296,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 686.040 m -334.640 686.040 l +162.800 601.680 m +334.640 601.680 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 662.760 m -334.640 662.760 l +162.800 578.400 m +334.640 578.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 686.290 m -162.800 662.010 l +162.800 601.930 m +162.800 577.650 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 686.290 m -334.640 662.010 l +334.640 601.930 m +334.640 577.650 l S [ ] 0 d 1 w @@ -21439,7 +21323,7 @@ S 0.200 0.200 0.200 scn BT -165.79988544 670.2930000000001 Td +165.79988544000003 585.9330000000002 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -21447,26 +21331,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 686.040 m -563.760 686.040 l +334.640 601.680 m +563.760 601.680 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -334.640 662.760 m -563.760 662.760 l +334.640 578.400 m +563.760 578.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 686.290 m -334.640 662.010 l +334.640 601.930 m +334.640 577.650 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 686.290 m -563.760 662.010 l +563.760 601.930 m +563.760 577.650 l S [ ] 0 d 1 w @@ -21474,7 +21358,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 670.2930000000001 Td +337.6397136 585.9330000000002 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -21482,26 +21366,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 662.760 m -162.800 662.760 l +48.240 578.400 m +162.800 578.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 625.200 m -162.800 625.200 l +48.240 540.840 m +162.800 540.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 663.010 m -48.240 624.950 l +48.240 578.650 m +48.240 540.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 663.010 m -162.800 624.950 l +162.800 578.650 m +162.800 540.590 l S [ ] 0 d 1 w @@ -21509,7 +21393,7 @@ S 0.200 0.200 0.200 scn BT -51.24 639.3730000000002 Td +51.24000000000001 555.0130000000003 Td /F2.0 10.5 Tf <50617468> Tj ET @@ -21517,26 +21401,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 662.760 m -334.640 662.760 l +162.800 578.400 m +334.640 578.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 625.200 m -334.640 625.200 l +162.800 540.840 m +334.640 540.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 663.010 m -162.800 624.950 l +162.800 578.650 m +162.800 540.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 663.010 m -334.640 624.950 l +334.640 578.650 m +334.640 540.590 l S [ ] 0 d 1 w @@ -21544,19 +21428,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544 646.5130000000001 Td +165.79988544000003 562.1530000000002 Td /F2.0 10.5 Tf <6c6f6f704e616d65> Tj ET BT -165.79988544 632.2330000000002 Td +165.79988544000003 547.8730000000003 Td ET BT -165.79988544 632.2330000000002 Td +165.79988544000003 547.8730000000003 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -21564,26 +21448,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 662.760 m -563.760 662.760 l +334.640 578.400 m +563.760 578.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 625.200 m -563.760 625.200 l +334.640 540.840 m +563.760 540.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 663.010 m -334.640 624.950 l +334.640 578.650 m +334.640 540.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 663.010 m -563.760 624.950 l +563.760 578.650 m +563.760 540.590 l S [ ] 0 d 1 w @@ -21591,7 +21475,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 639.3730000000002 Td +337.6397136 555.0130000000003 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -21599,26 +21483,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 625.200 m -162.800 625.200 l +48.240 540.840 m +162.800 540.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 587.640 m -162.800 587.640 l +48.240 503.280 m +162.800 503.280 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 625.450 m -48.240 587.390 l +48.240 541.090 m +48.240 503.030 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 625.450 m -162.800 587.390 l +162.800 541.090 m +162.800 503.030 l S [ ] 0 d 1 w @@ -21626,7 +21510,7 @@ S 0.200 0.200 0.200 scn BT -51.24 601.8130000000001 Td +51.24000000000001 517.4530000000002 Td /F2.0 10.5 Tf <426f6479> Tj ET @@ -21634,26 +21518,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 625.200 m -334.640 625.200 l +162.800 540.840 m +334.640 540.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 587.640 m -334.640 587.640 l +162.800 503.280 m +334.640 503.280 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 625.450 m -162.800 587.390 l +162.800 541.090 m +162.800 503.030 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 625.450 m -334.640 587.390 l +334.640 541.090 m +334.640 503.030 l S [ ] 0 d 1 w @@ -21661,19 +21545,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544 608.9530000000002 Td +165.79988544000003 524.5930000000003 Td /F2.0 10.5 Tf <626f6479> Tj ET BT -165.79988544 594.6730000000001 Td +165.79988544000003 510.3130000000002 Td ET BT -165.79988544 594.6730000000001 Td +165.79988544000003 510.3130000000002 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -21681,26 +21565,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 625.200 m -563.760 625.200 l +334.640 540.840 m +563.760 540.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 587.640 m -563.760 587.640 l +334.640 503.280 m +563.760 503.280 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 625.450 m -334.640 587.390 l +334.640 541.090 m +334.640 503.030 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 625.450 m -563.760 587.390 l +563.760 541.090 m +563.760 503.030 l S [ ] 0 d 1 w @@ -21714,9 +21598,9 @@ S 0.259 0.545 0.792 SCN BT -337.6397136 601.8130000000001 Td +337.6397136 517.4530000000002 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<4d6963726f53657276696365506f6c696379> Tj ET 0.000 0.000 0.000 SCN @@ -21726,7 +21610,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 558.0560000000002 Td +48.24000000000001 473.69600000000025 Td /F2.0 13 Tf <322e32352e322e20526573706f6e736573> Tj ET @@ -21734,51 +21618,51 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 505.800 51.552 37.560 re +48.240 421.440 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 505.800 360.864 37.560 re +99.792 421.440 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 505.800 103.104 37.560 re +460.656 421.440 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 482.520 51.552 23.280 re +48.240 398.160 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 482.520 360.864 23.280 re +99.792 398.160 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 482.520 103.104 23.280 re +460.656 398.160 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 543.360 m -99.792 543.360 l +48.240 459.000 m +99.792 459.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 505.800 m -99.792 505.800 l +48.240 421.440 m +99.792 421.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 543.610 m -48.240 505.050 l +48.240 459.250 m +48.240 420.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 543.610 m -99.792 505.050 l +99.792 459.250 m +99.792 420.690 l S [ ] 0 d 1 w @@ -21786,14 +21670,14 @@ S 0.200 0.200 0.200 scn BT -51.24 527.6130000000003 Td +51.24000000000001 443.2530000000002 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24 513.3330000000002 Td +51.24000000000001 428.9730000000002 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -21801,26 +21685,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 543.360 m -460.656 543.360 l +99.792 459.000 m +460.656 459.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 505.800 m -460.656 505.800 l +99.792 421.440 m +460.656 421.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 543.610 m -99.792 505.050 l +99.792 459.250 m +99.792 420.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 543.610 m -460.656 505.050 l +460.656 459.250 m +460.656 420.690 l S [ ] 0 d 1 w @@ -21828,7 +21712,7 @@ S 0.200 0.200 0.200 scn BT -102.792 527.6130000000003 Td +102.792 443.2530000000002 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -21836,26 +21720,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 543.360 m -563.760 543.360 l +460.656 459.000 m +563.760 459.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 505.800 m -563.760 505.800 l +460.656 421.440 m +563.760 421.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 543.610 m -460.656 505.050 l +460.656 459.250 m +460.656 420.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 543.610 m -563.760 505.050 l +563.760 459.250 m +563.760 420.690 l S [ ] 0 d 1 w @@ -21863,7 +21747,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 527.6130000000003 Td +463.65600000000006 443.2530000000002 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -21871,26 +21755,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 505.800 m -99.792 505.800 l +48.240 421.440 m +99.792 421.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 482.520 m -99.792 482.520 l +48.240 398.160 m +99.792 398.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 506.050 m -48.240 482.270 l +48.240 421.690 m +48.240 397.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 506.050 m -99.792 482.270 l +99.792 421.690 m +99.792 397.910 l S [ ] 0 d 1 w @@ -21898,7 +21782,7 @@ S 0.200 0.200 0.200 scn BT -51.24 489.5530000000002 Td +51.24000000000001 405.1930000000002 Td /F2.0 10.5 Tf <323030> Tj ET @@ -21906,26 +21790,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 505.800 m -460.656 505.800 l +99.792 421.440 m +460.656 421.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 482.520 m -460.656 482.520 l +99.792 398.160 m +460.656 398.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 506.050 m -99.792 482.270 l +99.792 421.690 m +99.792 397.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 506.050 m -460.656 482.270 l +460.656 421.690 m +460.656 397.910 l S [ ] 0 d 1 w @@ -21933,7 +21817,7 @@ S 0.200 0.200 0.200 scn BT -102.792 489.5530000000002 Td +102.792 405.1930000000002 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -21941,26 +21825,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 505.800 m -563.760 505.800 l +460.656 421.440 m +563.760 421.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 482.520 m -563.760 482.520 l +460.656 398.160 m +563.760 398.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 506.050 m -460.656 482.270 l +460.656 421.690 m +460.656 397.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 506.050 m -563.760 482.270 l +563.760 421.690 m +563.760 397.910 l S [ ] 0 d 1 w @@ -21974,9 +21858,9 @@ S 0.259 0.545 0.792 SCN BT -463.65600000000006 489.5530000000002 Td +463.65600000000006 405.1930000000002 Td /F1.0 10.5 Tf -<4c6f6f70> Tj +<4d6963726f53657276696365506f6c696379> Tj ET 0.000 0.000 0.000 SCN @@ -21986,7 +21870,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 452.9360000000002 Td +48.24000000000001 368.5760000000002 Td /F2.0 13 Tf <322e32352e332e20436f6e73756d6573> Tj ET @@ -21999,7 +21883,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 426.2760000000002 Td +56.88050000000001 341.91600000000017 Td /F1.0 10.5 Tf Tj ET @@ -22012,7 +21896,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 428.4600000000002 Td +66.24000000000001 344.1000000000002 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -22023,7 +21907,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 396.6560000000002 Td +48.24000000000001 312.29600000000016 Td /F2.0 13 Tf <322e32352e342e2050726f6475636573> Tj ET @@ -22036,7 +21920,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 369.99600000000015 Td +56.88050000000001 285.63600000000014 Td /F1.0 10.5 Tf Tj ET @@ -22049,7 +21933,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 372.1800000000002 Td +66.24000000000001 287.82000000000016 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -22060,7 +21944,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 334.5360000000002 Td +48.24000000000001 250.17600000000016 Td /F2.0 18 Tf [<322e32362e20504f53> 20.01953125 <54>] TJ ET @@ -22071,9 +21955,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 306.45600000000013 Td +48.24000000000001 222.09600000000015 Td /F2.0 18 Tf -<2f76322f6c6f6f702f7570646174654d6963726f73657276696365506f6c6963792f7b6c6f6f704e616d657d> Tj +[<2f76322f6c6f6f702f7570646174654f706572> 20.01953125 <6174696f6e616c506f6c69636965732f7b6c6f6f704e616d657d>] TJ ET 0.000 0.000 0.000 SCN @@ -22082,7 +21966,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 272.2160000000001 Td +48.24000000000001 187.8560000000001 Td /F2.0 13 Tf [<322e32362e312e20506172> 20.01953125 <616d6574657273>] TJ ET @@ -22090,63 +21974,63 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 234.240 114.560 23.280 re +48.240 149.880 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 234.240 171.840 23.280 re +162.800 149.880 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 234.240 229.120 23.280 re +334.640 149.880 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 196.680 114.560 37.560 re +48.240 112.320 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 196.680 171.840 37.560 re +162.800 112.320 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 196.680 229.120 37.560 re +334.640 112.320 229.120 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 159.120 114.560 37.560 re +48.240 74.760 114.560 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -162.800 159.120 171.840 37.560 re +162.800 74.760 171.840 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -334.640 159.120 229.120 37.560 re +334.640 74.760 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 257.520 m -162.800 257.520 l +48.240 173.160 m +162.800 173.160 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 234.240 m -162.800 234.240 l +48.240 149.880 m +162.800 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 257.770 m -48.240 233.490 l +48.240 173.410 m +48.240 149.130 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 257.770 m -162.800 233.490 l +162.800 173.410 m +162.800 149.130 l S [ ] 0 d 1 w @@ -22154,7 +22038,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 241.7730000000001 Td +51.24000000000001 157.41300000000012 Td /F2.0 10.5 Tf <54797065> Tj ET @@ -22162,26 +22046,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 257.520 m -334.640 257.520 l +162.800 173.160 m +334.640 173.160 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 234.240 m -334.640 234.240 l +162.800 149.880 m +334.640 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 257.770 m -162.800 233.490 l +162.800 173.410 m +162.800 149.130 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 257.770 m -334.640 233.490 l +334.640 173.410 m +334.640 149.130 l S [ ] 0 d 1 w @@ -22189,7 +22073,7 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 241.7730000000001 Td +165.79988544000003 157.41300000000012 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -22197,26 +22081,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 257.520 m -563.760 257.520 l +334.640 173.160 m +563.760 173.160 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -334.640 234.240 m -563.760 234.240 l +334.640 149.880 m +563.760 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 257.770 m -334.640 233.490 l +334.640 173.410 m +334.640 149.130 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 257.770 m -563.760 233.490 l +563.760 173.410 m +563.760 149.130 l S [ ] 0 d 1 w @@ -22224,7 +22108,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 241.7730000000001 Td +337.6397136 157.41300000000012 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -22232,26 +22116,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 234.240 m -162.800 234.240 l +48.240 149.880 m +162.800 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 196.680 m -162.800 196.680 l +48.240 112.320 m +162.800 112.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 234.490 m -48.240 196.430 l +48.240 150.130 m +48.240 112.070 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 234.490 m -162.800 196.430 l +162.800 150.130 m +162.800 112.070 l S [ ] 0 d 1 w @@ -22259,7 +22143,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 210.8530000000001 Td +51.24000000000001 126.49300000000012 Td /F2.0 10.5 Tf <50617468> Tj ET @@ -22267,26 +22151,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 234.240 m -334.640 234.240 l +162.800 149.880 m +334.640 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 196.680 m -334.640 196.680 l +162.800 112.320 m +334.640 112.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 234.490 m -162.800 196.430 l +162.800 150.130 m +162.800 112.070 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 234.490 m -334.640 196.430 l +334.640 150.130 m +334.640 112.070 l S [ ] 0 d 1 w @@ -22294,19 +22178,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 217.9930000000001 Td +165.79988544000003 133.63300000000012 Td /F2.0 10.5 Tf <6c6f6f704e616d65> Tj ET BT -165.79988544000003 203.7130000000001 Td +165.79988544000003 119.35300000000012 Td ET BT -165.79988544000003 203.7130000000001 Td +165.79988544000003 119.35300000000012 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -22314,26 +22198,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 234.240 m -563.760 234.240 l +334.640 149.880 m +563.760 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 196.680 m -563.760 196.680 l +334.640 112.320 m +563.760 112.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 234.490 m -334.640 196.430 l +334.640 150.130 m +334.640 112.070 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 234.490 m -563.760 196.430 l +563.760 150.130 m +563.760 112.070 l S [ ] 0 d 1 w @@ -22341,7 +22225,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 210.8530000000001 Td +337.6397136 126.49300000000012 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -22349,26 +22233,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 196.680 m -162.800 196.680 l +48.240 112.320 m +162.800 112.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 159.120 m -162.800 159.120 l +48.240 74.760 m +162.800 74.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 196.930 m -48.240 158.870 l +48.240 112.570 m +48.240 74.510 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 196.930 m -162.800 158.870 l +162.800 112.570 m +162.800 74.510 l S [ ] 0 d 1 w @@ -22376,7 +22260,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 173.2930000000001 Td +51.24000000000001 88.9330000000001 Td /F2.0 10.5 Tf <426f6479> Tj ET @@ -22384,26 +22268,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 196.680 m -334.640 196.680 l +162.800 112.320 m +334.640 112.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 159.120 m -334.640 159.120 l +162.800 74.760 m +334.640 74.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 196.930 m -162.800 158.870 l +162.800 112.570 m +162.800 74.510 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 196.930 m -334.640 158.870 l +334.640 112.570 m +334.640 74.510 l S [ ] 0 d 1 w @@ -22411,19 +22295,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 180.4330000000001 Td +165.79988544000003 96.0730000000001 Td /F2.0 10.5 Tf <626f6479> Tj ET BT -165.79988544000003 166.1530000000001 Td +165.79988544000003 81.7930000000001 Td ET BT -165.79988544000003 166.1530000000001 Td +165.79988544000003 81.7930000000001 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -22431,26 +22315,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 196.680 m -563.760 196.680 l +334.640 112.320 m +563.760 112.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 159.120 m -563.760 159.120 l +334.640 74.760 m +563.760 74.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 196.930 m -334.640 158.870 l +334.640 112.570 m +334.640 74.510 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 196.930 m -563.760 158.870 l +563.760 112.570 m +563.760 74.510 l S [ ] 0 d 1 w @@ -22464,269 +22348,9 @@ S 0.259 0.545 0.792 SCN BT -337.6397136 173.2930000000001 Td +337.6397136 88.9330000000001 Td /F1.0 10.5 Tf -<4d6963726f53657276696365506f6c696379> Tj -ET - -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 129.53600000000006 Td -/F2.0 13 Tf -<322e32362e322e20526573706f6e736573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 77.280 51.552 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -99.792 77.280 360.864 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -460.656 77.280 103.104 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 54.000 51.552 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -99.792 54.000 360.864 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -460.656 54.000 103.104 23.280 re -f -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 114.840 m -99.792 114.840 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 77.280 m -99.792 77.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 115.090 m -48.240 76.530 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 115.090 m -99.792 76.530 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24000000000001 99.09300000000006 Td -/F2.0 10.5 Tf -<48545450> Tj -ET - - -BT -51.24000000000001 84.81300000000006 Td -/F2.0 10.5 Tf -<436f6465> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -99.792 114.840 m -460.656 114.840 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -99.792 77.280 m -460.656 77.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 115.090 m -99.792 76.530 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 115.090 m -460.656 76.530 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -102.792 99.09300000000006 Td -/F2.0 10.5 Tf -<4465736372697074696f6e> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -460.656 114.840 m -563.760 114.840 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -460.656 77.280 m -563.760 77.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 115.090 m -460.656 76.530 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 115.090 m -563.760 76.530 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -463.65600000000006 99.09300000000006 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 77.280 m -99.792 77.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 54.000 m -99.792 54.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 77.530 m -48.240 53.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 77.530 m -99.792 53.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24000000000001 61.03300000000006 Td -/F2.0 10.5 Tf -<323030> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -99.792 77.280 m -460.656 77.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 54.000 m -460.656 54.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 77.530 m -99.792 53.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 77.530 m -460.656 53.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -102.792 61.03300000000006 Td -/F1.0 10.5 Tf -<4f75747075742074797065> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -460.656 77.280 m -563.760 77.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 54.000 m -563.760 54.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 77.530 m -460.656 53.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 77.530 m -563.760 53.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN - -BT -463.65600000000006 61.03300000000006 Td -/F1.0 10.5 Tf -<4d6963726f53657276696365506f6c696379> Tj +[<4a736f6e417272> 20.01953125 <61> 20.01953125 <79>] TJ ET 0.000 0.000 0.000 SCN @@ -22756,81 +22380,73 @@ Q endstream endobj -172 0 obj +173 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 171 0 R +/Contents 172 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R -/F3.0 26 0 R /F1.0 8 0 R /F4.0 35 0 R +/F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [175 0 R 177 0 R 182 0 R 184 0 R] +/Annots [177 0 R 179 0 R 184 0 R] >> endobj -173 0 obj -[172 0 R /XYZ 0 792.0 null] -endobj 174 0 obj -[172 0 R /XYZ 0 718.32 null] +[173 0 R /XYZ 0 792.0 null] endobj 175 0 obj -<< /Border [0 0 0] -/Dest (_jsonobject) -/Subtype /Link -/Rect [337.6397136 598.7470000000002 390.7907136 613.0270000000002] -/Type /Annot ->> +[173 0 R /XYZ 0 702.1200000000001 null] endobj 176 0 obj -[172 0 R /XYZ 0 575.6400000000001 null] +[173 0 R /XYZ 0 633.9600000000002 null] endobj 177 0 obj << /Border [0 0 0] -/Dest (_loop) +/Dest (_microservicepolicy) /Subtype /Link -/Rect [463.65600000000006 486.48700000000025 488.7510000000001 500.7670000000002] +/Rect [337.6397136 514.3870000000003 433.5677136 528.6670000000003] /Type /Annot >> endobj 178 0 obj -[172 0 R /XYZ 0 470.5200000000002 null] +[173 0 R /XYZ 0 491.28000000000026 null] endobj 179 0 obj -[172 0 R /XYZ 0 414.2400000000002 null] +<< /Border [0 0 0] +/Dest (_microservicepolicy) +/Subtype /Link +/Rect [463.65600000000006 402.12700000000024 559.5840000000001 416.4070000000002] +/Type /Annot +>> endobj 180 0 obj -[172 0 R /XYZ 0 357.96000000000015 null] +[173 0 R /XYZ 0 386.1600000000002 null] endobj 181 0 obj -[172 0 R /XYZ 0 289.8000000000001 null] +[173 0 R /XYZ 0 329.88000000000017 null] endobj 182 0 obj -<< /Border [0 0 0] -/Dest (_microservicepolicy) -/Subtype /Link -/Rect [337.6397136 170.22700000000012 433.5677136 184.50700000000012] -/Type /Annot ->> +[173 0 R /XYZ 0 273.60000000000014 null] endobj 183 0 obj -[172 0 R /XYZ 0 147.1200000000001 null] +[173 0 R /XYZ 0 205.44000000000014 null] endobj 184 0 obj << /Border [0 0 0] -/Dest (_microservicepolicy) +/Dest (_jsonarray) /Subtype /Link -/Rect [463.65600000000006 57.967000000000056 559.5840000000001 72.24700000000006] +/Rect [337.6397136 85.8670000000001 387.64030344375 100.1470000000001] /Type /Annot >> endobj 185 0 obj -<< /Length 15453 +<< /Length 16279 >> stream q @@ -22842,6 +22458,266 @@ q BT 48.24 740.816 Td /F2.0 13 Tf +<322e32362e322e20526573706f6e736573> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 688.560 51.552 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +99.792 688.560 360.864 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +460.656 688.560 103.104 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 665.280 51.552 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +99.792 665.280 360.864 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +460.656 665.280 103.104 23.280 re +f +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 726.120 m +99.792 726.120 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 688.560 m +99.792 688.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 726.370 m +48.240 687.810 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 726.370 m +99.792 687.810 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 710.373 Td +/F2.0 10.5 Tf +<48545450> Tj +ET + + +BT +51.24 696.0930000000001 Td +/F2.0 10.5 Tf +<436f6465> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +99.792 726.120 m +460.656 726.120 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +99.792 688.560 m +460.656 688.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 726.370 m +99.792 687.810 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 726.370 m +460.656 687.810 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +102.792 710.373 Td +/F2.0 10.5 Tf +<4465736372697074696f6e> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +460.656 726.120 m +563.760 726.120 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +460.656 688.560 m +563.760 688.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 726.370 m +460.656 687.810 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 726.370 m +563.760 687.810 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +463.65600000000006 710.373 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 688.560 m +99.792 688.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 665.280 m +99.792 665.280 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 688.810 m +48.240 665.030 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 688.810 m +99.792 665.030 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 672.3130000000001 Td +/F2.0 10.5 Tf +<323030> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +99.792 688.560 m +460.656 688.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 665.280 m +460.656 665.280 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 688.810 m +99.792 665.030 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 688.810 m +460.656 665.030 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +102.792 672.3130000000001 Td +/F1.0 10.5 Tf +<4f75747075742074797065> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +460.656 688.560 m +563.760 688.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 665.280 m +563.760 665.280 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 688.810 m +460.656 665.030 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 688.810 m +563.760 665.030 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +463.65600000000006 672.3130000000001 Td +/F1.0 10.5 Tf +<4c6f6f70> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 635.6960000000003 Td +/F2.0 13 Tf <322e32362e332e20436f6e73756d6573> Tj ET @@ -22853,7 +22729,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 714.1560000000001 Td +56.88050000000001 609.0360000000003 Td /F1.0 10.5 Tf Tj ET @@ -22866,7 +22742,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 716.3400000000001 Td +66.24000000000001 611.2200000000004 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -22877,7 +22753,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 684.5360000000002 Td +48.24000000000001 579.4160000000004 Td /F2.0 13 Tf <322e32362e342e2050726f6475636573> Tj ET @@ -22890,7 +22766,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 657.8760000000002 Td +56.88050000000001 552.7560000000004 Td /F1.0 10.5 Tf Tj ET @@ -22903,7 +22779,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 660.0600000000003 Td +66.24000000000001 554.9400000000005 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -22914,20 +22790,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 622.4160000000003 Td -/F2.0 18 Tf -[<322e32372e20504f53> 20.01953125 <54>] TJ -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 594.3360000000004 Td +48.24000000000001 517.2960000000005 Td /F2.0 18 Tf -[<2f76322f6c6f6f702f7570646174654f706572> 20.01953125 <6174696f6e616c506f6c69636965732f7b6c6f6f704e616d657d>] TJ +<322e32372e20474554202f76322f6c6f6f702f7b6c6f6f704e616d657d> Tj ET 0.000 0.000 0.000 SCN @@ -22936,7 +22801,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 560.0960000000005 Td +48.24000000000001 483.0560000000005 Td /F2.0 13 Tf [<322e32372e312e20506172> 20.01953125 <616d6574657273>] TJ ET @@ -22944,63 +22809,51 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 522.120 114.560 23.280 re +48.240 445.080 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 522.120 171.840 23.280 re +162.800 445.080 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 522.120 229.120 23.280 re +334.640 445.080 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 484.560 114.560 37.560 re +48.240 407.520 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 484.560 171.840 37.560 re +162.800 407.520 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 484.560 229.120 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 447.000 114.560 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -162.800 447.000 171.840 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -334.640 447.000 229.120 37.560 re +334.640 407.520 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 545.400 m -162.800 545.400 l +48.240 468.360 m +162.800 468.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 522.120 m -162.800 522.120 l +48.240 445.080 m +162.800 445.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 545.650 m -48.240 521.370 l +48.240 468.610 m +48.240 444.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 545.650 m -162.800 521.370 l +162.800 468.610 m +162.800 444.330 l S [ ] 0 d 1 w @@ -23008,7 +22861,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 529.6530000000005 Td +51.24000000000001 452.61300000000045 Td /F2.0 10.5 Tf <54797065> Tj ET @@ -23016,26 +22869,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 545.400 m -334.640 545.400 l +162.800 468.360 m +334.640 468.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 522.120 m -334.640 522.120 l +162.800 445.080 m +334.640 445.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 545.650 m -162.800 521.370 l +162.800 468.610 m +162.800 444.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 545.650 m -334.640 521.370 l +334.640 468.610 m +334.640 444.330 l S [ ] 0 d 1 w @@ -23043,7 +22896,7 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 529.6530000000005 Td +165.79988544000003 452.61300000000045 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -23051,26 +22904,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 545.400 m -563.760 545.400 l +334.640 468.360 m +563.760 468.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -334.640 522.120 m -563.760 522.120 l +334.640 445.080 m +563.760 445.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 545.650 m -334.640 521.370 l +334.640 468.610 m +334.640 444.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 545.650 m -563.760 521.370 l +563.760 468.610 m +563.760 444.330 l S [ ] 0 d 1 w @@ -23078,7 +22931,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 529.6530000000005 Td +337.6397136 452.61300000000045 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -23086,26 +22939,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 522.120 m -162.800 522.120 l +48.240 445.080 m +162.800 445.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 484.560 m -162.800 484.560 l +48.240 407.520 m +162.800 407.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 522.370 m -48.240 484.310 l +48.240 445.330 m +48.240 407.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 522.370 m -162.800 484.310 l +162.800 445.330 m +162.800 407.270 l S [ ] 0 d 1 w @@ -23113,7 +22966,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 498.7330000000006 Td +51.24000000000001 421.6930000000005 Td /F2.0 10.5 Tf <50617468> Tj ET @@ -23121,26 +22974,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 522.120 m -334.640 522.120 l +162.800 445.080 m +334.640 445.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 484.560 m -334.640 484.560 l +162.800 407.520 m +334.640 407.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 522.370 m -162.800 484.310 l +162.800 445.330 m +162.800 407.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 522.370 m -334.640 484.310 l +334.640 445.330 m +334.640 407.270 l S [ ] 0 d 1 w @@ -23148,19 +23001,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 505.87300000000056 Td +165.79988544000003 428.8330000000005 Td /F2.0 10.5 Tf <6c6f6f704e616d65> Tj ET BT -165.79988544000003 491.59300000000053 Td +165.79988544000003 414.55300000000045 Td ET BT -165.79988544000003 491.59300000000053 Td +165.79988544000003 414.55300000000045 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -23168,26 +23021,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 522.120 m -563.760 522.120 l +334.640 445.080 m +563.760 445.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 484.560 m -563.760 484.560 l +334.640 407.520 m +563.760 407.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 522.370 m -334.640 484.310 l +334.640 445.330 m +334.640 407.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 522.370 m -563.760 484.310 l +563.760 445.330 m +563.760 407.270 l S [ ] 0 d 1 w @@ -23195,142 +23048,17 @@ S 0.200 0.200 0.200 scn BT -337.6397136 498.7330000000006 Td +337.6397136 421.6930000000005 Td /F1.0 10.5 Tf <737472696e67> Tj ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 484.560 m -162.800 484.560 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 447.000 m -162.800 447.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 484.810 m -48.240 446.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 484.810 m -162.800 446.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24000000000001 461.1730000000005 Td -/F2.0 10.5 Tf -<426f6479> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -162.800 484.560 m -334.640 484.560 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 447.000 m -334.640 447.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 484.810 m -162.800 446.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 484.810 m -334.640 446.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -165.79988544000003 468.3130000000005 Td -/F2.0 10.5 Tf -<626f6479> Tj -ET - - -BT -165.79988544000003 454.03300000000047 Td -ET - - -BT -165.79988544000003 454.03300000000047 Td -/F3.0 10.5 Tf -<7265717569726564> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -334.640 484.560 m -563.760 484.560 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 447.000 m -563.760 447.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 484.810 m -334.640 446.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 484.810 m -563.760 446.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN - -BT -337.6397136 461.1730000000005 Td -/F1.0 10.5 Tf -[<4a736f6e417272> 20.01953125 <61> 20.01953125 <79>] TJ -ET - -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 417.4160000000005 Td +48.24000000000001 377.9360000000005 Td /F2.0 13 Tf <322e32372e322e20526573706f6e736573> Tj ET @@ -23338,51 +23066,51 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 365.160 51.552 37.560 re +48.240 325.680 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 365.160 360.864 37.560 re +99.792 325.680 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 365.160 103.104 37.560 re +460.656 325.680 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 341.880 51.552 23.280 re +48.240 302.400 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 341.880 360.864 23.280 re +99.792 302.400 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 341.880 103.104 23.280 re +460.656 302.400 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 402.720 m -99.792 402.720 l +48.240 363.240 m +99.792 363.240 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 365.160 m -99.792 365.160 l +48.240 325.680 m +99.792 325.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 402.970 m -48.240 364.410 l +48.240 363.490 m +48.240 324.930 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 402.970 m -99.792 364.410 l +99.792 363.490 m +99.792 324.930 l S [ ] 0 d 1 w @@ -23390,14 +23118,14 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 386.97300000000047 Td +51.24000000000001 347.49300000000045 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24000000000001 372.69300000000044 Td +51.24000000000001 333.2130000000004 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -23405,26 +23133,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 402.720 m -460.656 402.720 l +99.792 363.240 m +460.656 363.240 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 365.160 m -460.656 365.160 l +99.792 325.680 m +460.656 325.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 402.970 m -99.792 364.410 l +99.792 363.490 m +99.792 324.930 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 402.970 m -460.656 364.410 l +460.656 363.490 m +460.656 324.930 l S [ ] 0 d 1 w @@ -23432,7 +23160,7 @@ S 0.200 0.200 0.200 scn BT -102.792 386.97300000000047 Td +102.792 347.49300000000045 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -23440,26 +23168,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 402.720 m -563.760 402.720 l +460.656 363.240 m +563.760 363.240 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 365.160 m -563.760 365.160 l +460.656 325.680 m +563.760 325.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 402.970 m -460.656 364.410 l +460.656 363.490 m +460.656 324.930 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 402.970 m -563.760 364.410 l +563.760 363.490 m +563.760 324.930 l S [ ] 0 d 1 w @@ -23467,7 +23195,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 386.97300000000047 Td +463.65600000000006 347.49300000000045 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -23475,26 +23203,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 365.160 m -99.792 365.160 l +48.240 325.680 m +99.792 325.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 341.880 m -99.792 341.880 l +48.240 302.400 m +99.792 302.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 365.410 m -48.240 341.630 l +48.240 325.930 m +48.240 302.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 365.410 m -99.792 341.630 l +99.792 325.930 m +99.792 302.150 l S [ ] 0 d 1 w @@ -23502,7 +23230,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 348.91300000000047 Td +51.24000000000001 309.43300000000045 Td /F2.0 10.5 Tf <323030> Tj ET @@ -23510,26 +23238,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 365.160 m -460.656 365.160 l +99.792 325.680 m +460.656 325.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 341.880 m -460.656 341.880 l +99.792 302.400 m +460.656 302.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 365.410 m -99.792 341.630 l +99.792 325.930 m +99.792 302.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 365.410 m -460.656 341.630 l +460.656 325.930 m +460.656 302.150 l S [ ] 0 d 1 w @@ -23537,7 +23265,7 @@ S 0.200 0.200 0.200 scn BT -102.792 348.91300000000047 Td +102.792 309.43300000000045 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -23545,26 +23273,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 365.160 m -563.760 365.160 l +460.656 325.680 m +563.760 325.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 341.880 m -563.760 341.880 l +460.656 302.400 m +563.760 302.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 365.410 m -460.656 341.630 l +460.656 325.930 m +460.656 302.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 365.410 m -563.760 341.630 l +563.760 325.930 m +563.760 302.150 l S [ ] 0 d 1 w @@ -23578,7 +23306,7 @@ S 0.259 0.545 0.792 SCN BT -463.65600000000006 348.91300000000047 Td +463.65600000000006 309.43300000000045 Td /F1.0 10.5 Tf <4c6f6f70> Tj ET @@ -23590,46 +23318,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 312.29600000000045 Td -/F2.0 13 Tf -<322e32372e332e20436f6e73756d6573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - --0.500 Tc -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -56.88050000000001 285.6360000000004 Td -/F1.0 10.5 Tf - Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -0.000 Tc -0.694 0.129 0.275 scn -0.694 0.129 0.275 SCN - -BT -66.24000000000001 287.8200000000004 Td -/F4.0 10.5 Tf -<6170706c69636174696f6e2f6a736f6e> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 256.0160000000004 Td +48.24000000000001 272.81600000000043 Td /F2.0 13 Tf -<322e32372e342e2050726f6475636573> Tj +<322e32372e332e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -23640,7 +23331,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 229.35600000000042 Td +56.88050000000001 246.1560000000004 Td /F1.0 10.5 Tf Tj ET @@ -23653,7 +23344,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 231.54000000000042 Td +66.24000000000001 248.3400000000004 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -23664,9 +23355,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 193.8960000000004 Td +48.24000000000001 210.6960000000004 Td /F2.0 18 Tf -<322e32382e20474554202f76322f6c6f6f702f7b6c6f6f704e616d657d> Tj +[<322e32382e20504f53> 20.01953125 <54202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ ET 0.000 0.000 0.000 SCN @@ -23675,7 +23366,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 159.6560000000004 Td +48.24000000000001 176.45600000000036 Td /F2.0 13 Tf [<322e32382e312e20506172> 20.01953125 <616d6574657273>] TJ ET @@ -23683,51 +23374,51 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 121.680 114.560 23.280 re +48.240 138.480 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 121.680 171.840 23.280 re +162.800 138.480 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 121.680 229.120 23.280 re +334.640 138.480 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 84.120 114.560 37.560 re +48.240 100.920 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 84.120 171.840 37.560 re +162.800 100.920 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 84.120 229.120 37.560 re +334.640 100.920 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 144.960 m -162.800 144.960 l +48.240 161.760 m +162.800 161.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 121.680 m -162.800 121.680 l +48.240 138.480 m +162.800 138.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 145.210 m -48.240 120.930 l +48.240 162.010 m +48.240 137.730 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 145.210 m -162.800 120.930 l +162.800 162.010 m +162.800 137.730 l S [ ] 0 d 1 w @@ -23735,7 +23426,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 129.2130000000004 Td +51.24000000000001 146.01300000000037 Td /F2.0 10.5 Tf <54797065> Tj ET @@ -23743,26 +23434,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 144.960 m -334.640 144.960 l +162.800 161.760 m +334.640 161.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 121.680 m -334.640 121.680 l +162.800 138.480 m +334.640 138.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 145.210 m -162.800 120.930 l +162.800 162.010 m +162.800 137.730 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 145.210 m -334.640 120.930 l +334.640 162.010 m +334.640 137.730 l S [ ] 0 d 1 w @@ -23770,7 +23461,7 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 129.2130000000004 Td +165.79988544000003 146.01300000000037 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -23778,26 +23469,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 144.960 m -563.760 144.960 l +334.640 161.760 m +563.760 161.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -334.640 121.680 m -563.760 121.680 l +334.640 138.480 m +563.760 138.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 145.210 m -334.640 120.930 l +334.640 162.010 m +334.640 137.730 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 145.210 m -563.760 120.930 l +563.760 162.010 m +563.760 137.730 l S [ ] 0 d 1 w @@ -23805,7 +23496,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 129.2130000000004 Td +337.6397136 146.01300000000037 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -23813,26 +23504,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 121.680 m -162.800 121.680 l +48.240 138.480 m +162.800 138.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 84.120 m -162.800 84.120 l +48.240 100.920 m +162.800 100.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 121.930 m -48.240 83.870 l +48.240 138.730 m +48.240 100.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 121.930 m -162.800 83.870 l +162.800 138.730 m +162.800 100.670 l S [ ] 0 d 1 w @@ -23840,34 +23531,34 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 98.29300000000038 Td +51.24000000000001 115.09300000000037 Td /F2.0 10.5 Tf -<50617468> Tj +<426f6479> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 121.680 m -334.640 121.680 l +162.800 138.480 m +334.640 138.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 84.120 m -334.640 84.120 l +162.800 100.920 m +334.640 100.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 121.930 m -162.800 83.870 l +162.800 138.730 m +162.800 100.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 121.930 m -334.640 83.870 l +334.640 138.730 m +334.640 100.670 l S [ ] 0 d 1 w @@ -23875,19 +23566,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 105.43300000000038 Td +165.79988544000003 122.23300000000037 Td /F2.0 10.5 Tf -<6c6f6f704e616d65> Tj +<626f6479> Tj ET BT -165.79988544000003 91.15300000000038 Td +165.79988544000003 107.95300000000037 Td ET BT -165.79988544000003 91.15300000000038 Td +165.79988544000003 107.95300000000037 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -23895,26 +23586,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 121.680 m -563.760 121.680 l +334.640 138.480 m +563.760 138.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 84.120 m -563.760 84.120 l +334.640 100.920 m +563.760 100.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 121.930 m -334.640 83.870 l +334.640 138.730 m +334.640 100.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 121.930 m -563.760 83.870 l +563.760 138.730 m +563.760 100.670 l S [ ] 0 d 1 w @@ -23922,7 +23613,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 98.29300000000038 Td +337.6397136 115.09300000000037 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -23963,57 +23654,57 @@ endobj /F4.0 35 0 R /F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [191 0 R 193 0 R] +/Annots [188 0 R 194 0 R] >> endobj 187 0 obj [186 0 R /XYZ 0 792.0 null] endobj 188 0 obj -[186 0 R /XYZ 0 702.1200000000001 null] +<< /Border [0 0 0] +/Dest (_loop) +/Subtype /Link +/Rect [463.65600000000006 669.2470000000002 488.7510000000001 683.5270000000002] +/Type /Annot +>> endobj 189 0 obj -[186 0 R /XYZ 0 645.8400000000003 null] +[186 0 R /XYZ 0 653.2800000000002 null] endobj 190 0 obj -[186 0 R /XYZ 0 577.6800000000004 null] +[186 0 R /XYZ 0 597.0000000000003 null] endobj 191 0 obj -<< /Border [0 0 0] -/Dest (_jsonarray) -/Subtype /Link -/Rect [337.6397136 458.1070000000005 387.64030344375 472.3870000000005] -/Type /Annot ->> +[186 0 R /XYZ 0 540.7200000000005 null] endobj 192 0 obj -[186 0 R /XYZ 0 435.0000000000005 null] +[186 0 R /XYZ 0 500.6400000000005 null] endobj 193 0 obj +[186 0 R /XYZ 0 395.5200000000005 null] +endobj +194 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link -/Rect [463.65600000000006 345.8470000000005 488.7510000000001 360.12700000000046] +/Rect [463.65600000000006 306.3670000000005 488.7510000000001 320.64700000000045] /Type /Annot >> endobj -194 0 obj -[186 0 R /XYZ 0 329.88000000000045 null] -endobj 195 0 obj -[186 0 R /XYZ 0 273.6000000000004 null] +[186 0 R /XYZ 0 290.40000000000043 null] endobj 196 0 obj -[186 0 R /XYZ 0 217.32000000000042 null] +[186 0 R /XYZ 0 234.1200000000004 null] endobj 197 0 obj -[186 0 R /XYZ 0 177.2400000000004 null] +[186 0 R /XYZ 0 194.0400000000004 null] endobj 198 0 obj -<< /Length 16406 +<< /Length 15184 >> stream q @@ -24273,7 +23964,7 @@ S BT 463.65600000000006 672.3130000000001 Td /F1.0 10.5 Tf -<4c6f6f70> Tj +<506f6c6963794d6f64656c> Tj ET 0.000 0.000 0.000 SCN @@ -24285,7 +23976,7 @@ ET BT 48.24 635.6960000000003 Td /F2.0 13 Tf -<322e32382e332e2050726f6475636573> Tj +<322e32382e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -24311,7 +24002,7 @@ ET BT 66.24000000000001 611.2200000000004 Td /F4.0 10.5 Tf -<6170706c69636174696f6e2f6a736f6e> Tj +<706c61696e2f74657874> Tj ET 0.000 0.000 0.000 SCN @@ -24320,327 +24011,107 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 573.5760000000004 Td -/F2.0 18 Tf -[<322e32392e20504f53> 20.01953125 <54202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ +48.24000000000001 579.4160000000004 Td +/F2.0 13 Tf +<322e32382e342e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn + +-0.500 Tc 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 539.3360000000005 Td -/F2.0 13 Tf -[<322e32392e312e20506172> 20.01953125 <616d6574657273>] TJ +56.88050000000001 552.7560000000004 Td +/F1.0 10.5 Tf + Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 501.360 114.560 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -162.800 501.360 171.840 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -334.640 501.360 229.120 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 463.800 114.560 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -162.800 463.800 171.840 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -334.640 463.800 229.120 37.560 re -f -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 524.640 m -162.800 524.640 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 501.360 m -162.800 501.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 524.890 m -48.240 500.610 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 524.890 m -162.800 500.610 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24000000000001 508.89300000000054 Td -/F2.0 10.5 Tf -<54797065> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -162.800 524.640 m -334.640 524.640 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -162.800 501.360 m -334.640 501.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 524.890 m -162.800 500.610 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 524.890 m -334.640 500.610 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -165.79988544000003 508.89300000000054 Td -/F2.0 10.5 Tf -<4e616d65> Tj -ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -334.640 524.640 m -563.760 524.640 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -334.640 501.360 m -563.760 501.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 524.890 m -334.640 500.610 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 524.890 m -563.760 500.610 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn +0.000 Tc +0.694 0.129 0.275 scn +0.694 0.129 0.275 SCN BT -337.6397136 508.89300000000054 Td -/F2.0 10.5 Tf -<536368656d61> Tj +66.24000000000001 554.9400000000005 Td +/F4.0 10.5 Tf +<6170706c69636174696f6e2f6a736f6e> Tj ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 501.360 m -162.800 501.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 463.800 m -162.800 463.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 501.610 m -48.240 463.550 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 501.610 m -162.800 463.550 l -S -[ ] 0 d -1 w 0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24000000000001 477.9730000000006 Td -/F2.0 10.5 Tf -<426f6479> Tj -ET - 0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -162.800 501.360 m -334.640 501.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 463.800 m -334.640 463.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 501.610 m -162.800 463.550 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 501.610 m -334.640 463.550 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN BT -165.79988544000003 485.11300000000057 Td -/F2.0 10.5 Tf -<626f6479> Tj -ET - - -BT -165.79988544000003 470.83300000000054 Td -ET - - -BT -165.79988544000003 470.83300000000054 Td -/F3.0 10.5 Tf -<7265717569726564> Tj +48.24000000000001 517.2960000000005 Td +/F2.0 18 Tf +[<322e32392e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -334.640 501.360 m -563.760 501.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 463.800 m -563.760 463.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 501.610 m -334.640 463.550 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 501.610 m -563.760 463.550 l -S -[ ] 0 d -1 w 0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -337.6397136 477.9730000000006 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 434.2160000000006 Td +48.24000000000001 483.0560000000005 Td /F2.0 13 Tf -<322e32392e322e20526573706f6e736573> Tj +<322e32392e312e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 381.960 51.552 37.560 re +48.240 430.800 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 381.960 360.864 37.560 re +99.792 430.800 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 381.960 103.104 37.560 re +460.656 430.800 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 358.680 51.552 23.280 re +48.240 407.520 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 358.680 360.864 23.280 re +99.792 407.520 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 358.680 103.104 23.280 re +460.656 407.520 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 419.520 m -99.792 419.520 l +48.240 468.360 m +99.792 468.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 381.960 m -99.792 381.960 l +48.240 430.800 m +99.792 430.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 419.770 m -48.240 381.210 l +48.240 468.610 m +48.240 430.050 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 419.770 m -99.792 381.210 l +99.792 468.610 m +99.792 430.050 l S [ ] 0 d 1 w @@ -24648,14 +24119,14 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 403.77300000000054 Td +51.24000000000001 452.61300000000045 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24000000000001 389.4930000000005 Td +51.24000000000001 438.3330000000004 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -24663,26 +24134,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 419.520 m -460.656 419.520 l +99.792 468.360 m +460.656 468.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 381.960 m -460.656 381.960 l +99.792 430.800 m +460.656 430.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 419.770 m -99.792 381.210 l +99.792 468.610 m +99.792 430.050 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 419.770 m -460.656 381.210 l +460.656 468.610 m +460.656 430.050 l S [ ] 0 d 1 w @@ -24690,7 +24161,7 @@ S 0.200 0.200 0.200 scn BT -102.792 403.77300000000054 Td +102.792 452.61300000000045 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -24698,26 +24169,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 419.520 m -563.760 419.520 l +460.656 468.360 m +563.760 468.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 381.960 m -563.760 381.960 l +460.656 430.800 m +563.760 430.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 419.770 m -460.656 381.210 l +460.656 468.610 m +460.656 430.050 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 419.770 m -563.760 381.210 l +563.760 468.610 m +563.760 430.050 l S [ ] 0 d 1 w @@ -24725,7 +24196,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 403.77300000000054 Td +463.65600000000006 452.61300000000045 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -24733,26 +24204,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 381.960 m -99.792 381.960 l +48.240 430.800 m +99.792 430.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 358.680 m -99.792 358.680 l +48.240 407.520 m +99.792 407.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 382.210 m -48.240 358.430 l +48.240 431.050 m +48.240 407.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 382.210 m -99.792 358.430 l +99.792 431.050 m +99.792 407.270 l S [ ] 0 d 1 w @@ -24760,7 +24231,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 365.71300000000053 Td +51.24000000000001 414.55300000000045 Td /F2.0 10.5 Tf <323030> Tj ET @@ -24768,26 +24239,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 381.960 m -460.656 381.960 l +99.792 430.800 m +460.656 430.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 358.680 m -460.656 358.680 l +99.792 407.520 m +460.656 407.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 382.210 m -99.792 358.430 l +99.792 431.050 m +99.792 407.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 382.210 m -460.656 358.430 l +460.656 431.050 m +460.656 407.270 l S [ ] 0 d 1 w @@ -24795,7 +24266,7 @@ S 0.200 0.200 0.200 scn BT -102.792 365.71300000000053 Td +102.792 414.55300000000045 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -24803,26 +24274,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 381.960 m -563.760 381.960 l +460.656 430.800 m +563.760 430.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 358.680 m -563.760 358.680 l +460.656 407.520 m +563.760 407.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 382.210 m -460.656 358.430 l +460.656 431.050 m +460.656 407.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 382.210 m -563.760 358.430 l +563.760 431.050 m +563.760 407.270 l S [ ] 0 d 1 w @@ -24836,7 +24307,7 @@ S 0.259 0.545 0.792 SCN BT -463.65600000000006 365.71300000000053 Td +463.65600000000006 414.55300000000045 Td /F1.0 10.5 Tf <506f6c6963794d6f64656c> Tj ET @@ -24848,9 +24319,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 329.0960000000005 Td +48.24000000000001 377.93600000000043 Td /F2.0 13 Tf -<322e32392e332e20436f6e73756d6573> Tj +<322e32392e322e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -24861,7 +24332,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 302.4360000000005 Td +56.88050000000001 351.2760000000004 Td /F1.0 10.5 Tf Tj ET @@ -24874,9 +24345,9 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 304.6200000000005 Td +66.24000000000001 353.46000000000043 Td /F4.0 10.5 Tf -<706c61696e2f74657874> Tj +<6170706c69636174696f6e2f6a736f6e> Tj ET 0.000 0.000 0.000 SCN @@ -24885,35 +24356,20 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 272.8160000000005 Td -/F2.0 13 Tf -<322e32392e342e2050726f6475636573> Tj +48.24000000000001 315.81600000000043 Td +/F2.0 18 Tf +<322e33302e20474554> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn - --0.500 Tc 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -56.88050000000001 246.15600000000046 Td -/F1.0 10.5 Tf - Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -0.000 Tc -0.694 0.129 0.275 scn -0.694 0.129 0.275 SCN - -BT -66.24000000000001 248.34000000000046 Td -/F4.0 10.5 Tf -<6170706c69636174696f6e2f6a736f6e> Tj +48.24000000000001 287.73600000000044 Td +/F2.0 18 Tf +[<2f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f79616d6c2f7b706f6c6963794d6f64656c547970657d2f7b706f6c696379>] TJ ET 0.000 0.000 0.000 SCN @@ -24922,9 +24378,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 210.69600000000045 Td +48.24000000000001 259.6560000000004 Td /F2.0 18 Tf -[<322e33302e20474554202f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c73>] TJ +[<4d6f64656c56> 60.05859375 <657273696f6e7d>] TJ ET 0.000 0.000 0.000 SCN @@ -24933,59 +24389,71 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 176.45600000000042 Td +48.24000000000001 225.4160000000004 Td /F2.0 13 Tf -<322e33302e312e20526573706f6e736573> Tj +[<322e33302e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 124.200 51.552 37.560 re +48.240 187.440 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 124.200 360.864 37.560 re +162.800 187.440 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 124.200 103.104 37.560 re +334.640 187.440 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 100.920 51.552 23.280 re +48.240 149.880 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 100.920 360.864 23.280 re +162.800 149.880 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 100.920 103.104 23.280 re +334.640 149.880 229.120 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 112.320 114.560 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +162.800 112.320 171.840 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +334.640 112.320 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 161.760 m -99.792 161.760 l +48.240 210.720 m +162.800 210.720 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 124.200 m -99.792 124.200 l +48.240 187.440 m +162.800 187.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 162.010 m -48.240 123.450 l +48.240 210.970 m +48.240 186.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 162.010 m -99.792 123.450 l +162.800 210.970 m +162.800 186.690 l S [ ] 0 d 1 w @@ -24993,41 +24461,34 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 146.01300000000043 Td -/F2.0 10.5 Tf -<48545450> Tj -ET - - -BT -51.24000000000001 131.73300000000043 Td +51.24000000000001 194.9730000000004 Td /F2.0 10.5 Tf -<436f6465> Tj +<54797065> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 161.760 m -460.656 161.760 l +162.800 210.720 m +334.640 210.720 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 124.200 m -460.656 124.200 l +162.800 187.440 m +334.640 187.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 162.010 m -99.792 123.450 l +162.800 210.970 m +162.800 186.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 162.010 m -460.656 123.450 l +334.640 210.970 m +334.640 186.690 l S [ ] 0 d 1 w @@ -25035,34 +24496,34 @@ S 0.200 0.200 0.200 scn BT -102.792 146.01300000000043 Td +165.79988544000003 194.9730000000004 Td /F2.0 10.5 Tf -<4465736372697074696f6e> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 161.760 m -563.760 161.760 l +334.640 210.720 m +563.760 210.720 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 124.200 m -563.760 124.200 l +334.640 187.440 m +563.760 187.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 162.010 m -460.656 123.450 l +334.640 210.970 m +334.640 186.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 162.010 m -563.760 123.450 l +563.760 210.970 m +563.760 186.690 l S [ ] 0 d 1 w @@ -25070,7 +24531,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 146.01300000000043 Td +337.6397136 194.9730000000004 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -25078,26 +24539,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 124.200 m -99.792 124.200 l +48.240 187.440 m +162.800 187.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 100.920 m -99.792 100.920 l +48.240 149.880 m +162.800 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 124.450 m -48.240 100.670 l +48.240 187.690 m +48.240 149.630 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 124.450 m -99.792 100.670 l +162.800 187.690 m +162.800 149.630 l S [ ] 0 d 1 w @@ -25105,34 +24566,34 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 107.95300000000042 Td +51.24000000000001 164.0530000000004 Td /F2.0 10.5 Tf -<323030> Tj +<50617468> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 124.200 m -460.656 124.200 l +162.800 187.440 m +334.640 187.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 100.920 m -460.656 100.920 l +162.800 149.880 m +334.640 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 124.450 m -99.792 100.670 l +162.800 187.690 m +162.800 149.630 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 124.450 m -460.656 100.670 l +334.640 187.690 m +334.640 149.630 l S [ ] 0 d 1 w @@ -25140,161 +24601,536 @@ S 0.200 0.200 0.200 scn BT -102.792 107.95300000000042 Td -/F1.0 10.5 Tf -<4f75747075742074797065> Tj +165.79988544000003 171.1930000000004 Td +/F2.0 10.5 Tf +<706f6c6963794d6f64656c54797065> Tj +ET + + +BT +165.79988544000003 156.9130000000004 Td +ET + + +BT +165.79988544000003 156.9130000000004 Td +/F3.0 10.5 Tf +<7265717569726564> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 124.200 m -563.760 124.200 l +334.640 187.440 m +563.760 187.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 100.920 m -563.760 100.920 l +334.640 149.880 m +563.760 149.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 124.450 m -460.656 100.670 l +334.640 187.690 m +334.640 149.630 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 124.450 m -563.760 100.670 l +563.760 187.690 m +563.760 149.630 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -463.65600000000006 107.95300000000042 Td +337.6397136 164.0530000000004 Td /F1.0 10.5 Tf -<506f6c6963794d6f64656c> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.000 0.000 0.000 scn -q 0.000 0.000 0.000 scn -0.000 0.000 0.000 SCN -1 w -0 J -0 j +0.5 w +0.867 0.867 0.867 SCN +48.240 149.880 m +162.800 149.880 l +S [ ] 0 d -/Stamp1 Do +0.5 w +0.867 0.867 0.867 SCN +48.240 112.320 m +162.800 112.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 150.130 m +48.240 112.070 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 150.130 m +162.800 112.070 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -552.698 14.388 Td -/F1.0 9 Tf -<3135> Tj +51.24000000000001 126.49300000000041 Td +/F2.0 10.5 Tf +<50617468> Tj ET -0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn -Q -Q - -endstream -endobj -199 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 198 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F2.0 24 0 R -/F1.0 8 0 R -/F4.0 35 0 R -/F3.0 26 0 R +0.5 w +0.867 0.867 0.867 SCN +162.800 149.880 m +334.640 149.880 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 112.320 m +334.640 112.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 150.130 m +162.800 112.070 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 150.130 m +334.640 112.070 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +165.79988544000003 133.6330000000004 Td +/F2.0 10.5 Tf +[<706f6c6963794d6f64656c56> 60.05859375 <657273696f6e>] TJ +ET + + +BT +165.79988544000003 119.3530000000004 Td +ET + + +BT +165.79988544000003 119.3530000000004 Td +/F3.0 10.5 Tf +<7265717569726564> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +334.640 149.880 m +563.760 149.880 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 112.320 m +563.760 112.320 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 150.130 m +334.640 112.070 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 150.130 m +563.760 112.070 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +337.6397136 126.49300000000041 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24000000000001 82.73600000000039 Td +/F2.0 13 Tf +<322e33302e322e20526573706f6e736573> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +552.698 14.388 Td +/F1.0 9 Tf +<3135> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +199 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 198 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 24 0 R +/F1.0 8 0 R +/F4.0 35 0 R +/F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [201 0 R 206 0 R 211 0 R] +/Annots [202 0 R 208 0 R] >> endobj 200 0 obj [199 0 R /XYZ 0 792.0 null] endobj 201 0 obj +<< /Limits [(_responses_2) (_responses_3)] +/Names [(_responses_2) 37 0 R (_responses_20) 142 0 R (_responses_21) 149 0 R (_responses_22) 156 0 R (_responses_23) 163 0 R (_responses_24) 169 0 R (_responses_25) 178 0 R (_responses_26) 187 0 R (_responses_27) 193 0 R (_responses_28) 200 0 R (_responses_29) 207 0 R (_responses_3) 40 0 R] +>> +endobj +202 0 obj << /Border [0 0 0] -/Dest (_loop) +/Dest (_policymodel) /Subtype /Link -/Rect [463.65600000000006 669.2470000000002 488.7510000000001 683.5270000000002] +/Rect [463.65600000000006 669.2470000000002 524.955 683.5270000000002] /Type /Annot >> endobj -202 0 obj -[199 0 R /XYZ 0 653.2800000000002 null] -endobj 203 0 obj -[199 0 R /XYZ 0 597.0000000000003 null] +[199 0 R /XYZ 0 653.2800000000002 null] endobj 204 0 obj -[199 0 R /XYZ 0 556.9200000000004 null] +[199 0 R /XYZ 0 597.0000000000003 null] endobj 205 0 obj -[199 0 R /XYZ 0 451.8000000000006 null] +[199 0 R /XYZ 0 540.7200000000005 null] endobj 206 0 obj -<< /Border [0 0 0] -/Dest (_policymodel) -/Subtype /Link -/Rect [463.65600000000006 362.64700000000056 524.955 376.92700000000053] -/Type /Annot +<< /Limits [(_route30) (_version_information)] +/Names [(_route30) 222 0 R (_route31) 230 0 R (_route32) 240 0 R (_route33) 234 0 R (_route34) 39 0 R (_route35) 31 0 R (_route36) 36 0 R (_route4) 166 0 R (_route5) 182 0 R (_route6) 175 0 R (_route7) 105 0 R (_route8) 120 0 R (_route9) 128 0 R (_service) 345 0 R (_uri_scheme) 27 0 R (_version_information) 25 0 R] >> endobj 207 0 obj -[199 0 R /XYZ 0 346.6800000000005 null] +[199 0 R /XYZ 0 500.6400000000005 null] endobj 208 0 obj -[199 0 R /XYZ 0 290.4000000000005 null] +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [463.65600000000006 411.4870000000005 524.955 425.76700000000045] +/Type /Annot +>> endobj 209 0 obj -[199 0 R /XYZ 0 234.12000000000046 null] +[199 0 R /XYZ 0 395.52000000000044 null] endobj 210 0 obj -[199 0 R /XYZ 0 194.04000000000045 null] +[199 0 R /XYZ 0 339.2400000000004 null] endobj 211 0 obj -<< /Border [0 0 0] -/Dest (_policymodel) -/Subtype /Link -/Rect [463.65600000000006 104.88700000000041 524.955 119.16700000000041] -/Type /Annot ->> +[199 0 R /XYZ 0 243.00000000000043 null] endobj 212 0 obj -<< /Length 16387 +[199 0 R /XYZ 0 100.32000000000039 null] +endobj +213 0 obj +<< /Length 14693 >> stream q /DeviceRGB cs -0.200 0.200 0.200 scn +1.000 1.000 1.000 scn +48.240 718.440 51.552 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +99.792 718.440 360.864 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +460.656 718.440 103.104 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 695.160 51.552 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +99.792 695.160 360.864 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +460.656 695.160 103.104 23.280 re +f +0.000 0.000 0.000 scn +0.5 w /DeviceRGB CS +0.867 0.867 0.867 SCN +48.240 756.000 m +99.792 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +48.240 718.440 m +99.792 718.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 756.250 m +48.240 717.690 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 756.250 m +99.792 717.690 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 740.2529999999999 Td +/F2.0 10.5 Tf +<48545450> Tj +ET + + +BT +51.24 725.973 Td +/F2.0 10.5 Tf +<436f6465> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +99.792 756.000 m +460.656 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +99.792 718.440 m +460.656 718.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 756.250 m +99.792 717.690 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 756.250 m +460.656 717.690 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +102.792 740.2529999999999 Td +/F2.0 10.5 Tf +<4465736372697074696f6e> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +460.656 756.000 m +563.760 756.000 l +S +[ ] 0 d +1.5 w +0.867 0.867 0.867 SCN +460.656 718.440 m +563.760 718.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 756.250 m +460.656 717.690 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 756.250 m +563.760 717.690 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +463.65600000000006 740.2529999999999 Td +/F2.0 10.5 Tf +<536368656d61> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 718.440 m +99.792 718.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 695.160 m +99.792 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 718.690 m +48.240 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 718.690 m +99.792 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 702.193 Td +/F2.0 10.5 Tf +<323030> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +99.792 718.440 m +460.656 718.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 695.160 m +460.656 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +99.792 718.690 m +99.792 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 718.690 m +460.656 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +102.792 702.193 Td +/F1.0 10.5 Tf +<4f75747075742074797065> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +460.656 718.440 m +563.760 718.440 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 695.160 m +563.760 695.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +460.656 718.690 m +460.656 694.910 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 718.690 m +563.760 694.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +463.65600000000006 702.193 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24 740.816 Td +48.24 665.5760000000001 Td /F2.0 13 Tf -<322e33302e322e2050726f6475636573> Tj +<322e33302e332e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -25305,7 +25141,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 714.1560000000001 Td +56.88050000000001 638.9160000000002 Td /F1.0 10.5 Tf Tj ET @@ -25318,7 +25154,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 716.3400000000001 Td +66.24000000000001 641.1000000000003 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -25329,7 +25165,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 678.6960000000001 Td +48.24000000000001 603.4560000000002 Td /F2.0 18 Tf <322e33312e20474554> Tj ET @@ -25340,9 +25176,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 650.6160000000002 Td +48.24000000000001 575.3760000000003 Td /F2.0 18 Tf -[<2f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f79616d6c2f7b706f6c6963794d6f64656c547970657d2f7b706f6c696379>] TJ +[<2f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c>] TJ ET 0.000 0.000 0.000 SCN @@ -25351,9 +25187,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 622.5360000000002 Td +48.24000000000001 547.2960000000003 Td /F2.0 18 Tf -[<4d6f64656c56> 60.05859375 <657273696f6e7d>] TJ +[<56> 60.05859375 <657273696f6e7d>] TJ ET 0.000 0.000 0.000 SCN @@ -25362,7 +25198,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 588.2960000000003 Td +48.24000000000001 513.0560000000004 Td /F2.0 13 Tf [<322e33312e312e20506172> 20.01953125 <616d6574657273>] TJ ET @@ -25370,63 +25206,63 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 550.320 114.560 23.280 re +48.240 475.080 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 550.320 171.840 23.280 re +162.800 475.080 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 550.320 229.120 23.280 re +334.640 475.080 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 512.760 114.560 37.560 re +48.240 437.520 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 512.760 171.840 37.560 re +162.800 437.520 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 512.760 229.120 37.560 re +334.640 437.520 229.120 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 475.200 114.560 37.560 re +48.240 399.960 114.560 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -162.800 475.200 171.840 37.560 re +162.800 399.960 171.840 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -334.640 475.200 229.120 37.560 re +334.640 399.960 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 573.600 m -162.800 573.600 l +48.240 498.360 m +162.800 498.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 550.320 m -162.800 550.320 l +48.240 475.080 m +162.800 475.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 573.850 m -48.240 549.570 l +48.240 498.610 m +48.240 474.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 573.850 m -162.800 549.570 l +162.800 498.610 m +162.800 474.330 l S [ ] 0 d 1 w @@ -25434,7 +25270,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 557.8530000000003 Td +51.24000000000001 482.61300000000034 Td /F2.0 10.5 Tf <54797065> Tj ET @@ -25442,26 +25278,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 573.600 m -334.640 573.600 l +162.800 498.360 m +334.640 498.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 550.320 m -334.640 550.320 l +162.800 475.080 m +334.640 475.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 573.850 m -162.800 549.570 l +162.800 498.610 m +162.800 474.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 573.850 m -334.640 549.570 l +334.640 498.610 m +334.640 474.330 l S [ ] 0 d 1 w @@ -25469,7 +25305,7 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 557.8530000000003 Td +165.79988544000003 482.61300000000034 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -25477,26 +25313,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 573.600 m -563.760 573.600 l +334.640 498.360 m +563.760 498.360 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -334.640 550.320 m -563.760 550.320 l +334.640 475.080 m +563.760 475.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 573.850 m -334.640 549.570 l +334.640 498.610 m +334.640 474.330 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 573.850 m -563.760 549.570 l +563.760 498.610 m +563.760 474.330 l S [ ] 0 d 1 w @@ -25504,7 +25340,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 557.8530000000003 Td +337.6397136 482.61300000000034 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -25512,26 +25348,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 550.320 m -162.800 550.320 l +48.240 475.080 m +162.800 475.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 512.760 m -162.800 512.760 l +48.240 437.520 m +162.800 437.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 550.570 m -48.240 512.510 l +48.240 475.330 m +48.240 437.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 550.570 m -162.800 512.510 l +162.800 475.330 m +162.800 437.270 l S [ ] 0 d 1 w @@ -25539,7 +25375,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 526.9330000000003 Td +51.24000000000001 451.6930000000004 Td /F2.0 10.5 Tf <50617468> Tj ET @@ -25547,26 +25383,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 550.320 m -334.640 550.320 l +162.800 475.080 m +334.640 475.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 512.760 m -334.640 512.760 l +162.800 437.520 m +334.640 437.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 550.570 m -162.800 512.510 l +162.800 475.330 m +162.800 437.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 550.570 m -334.640 512.510 l +334.640 475.330 m +334.640 437.270 l S [ ] 0 d 1 w @@ -25574,19 +25410,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 534.0730000000003 Td +165.79988544000003 458.83300000000037 Td /F2.0 10.5 Tf <706f6c6963794d6f64656c54797065> Tj ET BT -165.79988544000003 519.7930000000003 Td +165.79988544000003 444.55300000000034 Td ET BT -165.79988544000003 519.7930000000003 Td +165.79988544000003 444.55300000000034 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -25594,26 +25430,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 550.320 m -563.760 550.320 l +334.640 475.080 m +563.760 475.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 512.760 m -563.760 512.760 l +334.640 437.520 m +563.760 437.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 550.570 m -334.640 512.510 l +334.640 475.330 m +334.640 437.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 550.570 m -563.760 512.510 l +563.760 475.330 m +563.760 437.270 l S [ ] 0 d 1 w @@ -25621,7 +25457,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 526.9330000000003 Td +337.6397136 451.6930000000004 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -25629,26 +25465,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 512.760 m -162.800 512.760 l +48.240 437.520 m +162.800 437.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 475.200 m -162.800 475.200 l +48.240 399.960 m +162.800 399.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 513.010 m -48.240 474.950 l +48.240 437.770 m +48.240 399.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 513.010 m -162.800 474.950 l +162.800 437.770 m +162.800 399.710 l S [ ] 0 d 1 w @@ -25656,7 +25492,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 489.37300000000033 Td +51.24000000000001 414.1330000000003 Td /F2.0 10.5 Tf <50617468> Tj ET @@ -25664,26 +25500,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 512.760 m -334.640 512.760 l +162.800 437.520 m +334.640 437.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 475.200 m -334.640 475.200 l +162.800 399.960 m +334.640 399.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 513.010 m -162.800 474.950 l +162.800 437.770 m +162.800 399.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 513.010 m -334.640 474.950 l +334.640 437.770 m +334.640 399.710 l S [ ] 0 d 1 w @@ -25691,19 +25527,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 496.5130000000003 Td +165.79988544000003 421.2730000000003 Td /F2.0 10.5 Tf [<706f6c6963794d6f64656c56> 60.05859375 <657273696f6e>] TJ ET BT -165.79988544000003 482.2330000000003 Td +165.79988544000003 406.9930000000003 Td ET BT -165.79988544000003 482.2330000000003 Td +165.79988544000003 406.9930000000003 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -25711,26 +25547,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 512.760 m -563.760 512.760 l +334.640 437.520 m +563.760 437.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 475.200 m -563.760 475.200 l +334.640 399.960 m +563.760 399.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 513.010 m -334.640 474.950 l +334.640 437.770 m +334.640 399.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 513.010 m -563.760 474.950 l +563.760 437.770 m +563.760 399.710 l S [ ] 0 d 1 w @@ -25738,7 +25574,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 489.37300000000033 Td +337.6397136 414.1330000000003 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -25748,7 +25584,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 445.6160000000003 Td +48.24000000000001 370.3760000000003 Td /F2.0 13 Tf <322e33312e322e20526573706f6e736573> Tj ET @@ -25756,51 +25592,51 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 393.360 51.552 37.560 re +48.240 318.120 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 393.360 360.864 37.560 re +99.792 318.120 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 393.360 103.104 37.560 re +460.656 318.120 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 370.080 51.552 23.280 re +48.240 294.840 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 370.080 360.864 23.280 re +99.792 294.840 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 370.080 103.104 23.280 re +460.656 294.840 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 430.920 m -99.792 430.920 l +48.240 355.680 m +99.792 355.680 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 393.360 m -99.792 393.360 l +48.240 318.120 m +99.792 318.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 431.170 m -48.240 392.610 l +48.240 355.930 m +48.240 317.370 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 431.170 m -99.792 392.610 l +99.792 355.930 m +99.792 317.370 l S [ ] 0 d 1 w @@ -25808,14 +25644,14 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 415.1730000000003 Td +51.24000000000001 339.9330000000003 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24000000000001 400.89300000000026 Td +51.24000000000001 325.65300000000025 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -25823,26 +25659,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 430.920 m -460.656 430.920 l +99.792 355.680 m +460.656 355.680 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 393.360 m -460.656 393.360 l +99.792 318.120 m +460.656 318.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 431.170 m -99.792 392.610 l +99.792 355.930 m +99.792 317.370 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 431.170 m -460.656 392.610 l +460.656 355.930 m +460.656 317.370 l S [ ] 0 d 1 w @@ -25850,7 +25686,7 @@ S 0.200 0.200 0.200 scn BT -102.792 415.1730000000003 Td +102.792 339.9330000000003 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -25858,26 +25694,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 430.920 m -563.760 430.920 l +460.656 355.680 m +563.760 355.680 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 393.360 m -563.760 393.360 l +460.656 318.120 m +563.760 318.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 431.170 m -460.656 392.610 l +460.656 355.930 m +460.656 317.370 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 431.170 m -563.760 392.610 l +563.760 355.930 m +563.760 317.370 l S [ ] 0 d 1 w @@ -25885,7 +25721,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 415.1730000000003 Td +463.65600000000006 339.9330000000003 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -25893,26 +25729,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 393.360 m -99.792 393.360 l +48.240 318.120 m +99.792 318.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 370.080 m -99.792 370.080 l +48.240 294.840 m +99.792 294.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 393.610 m -48.240 369.830 l +48.240 318.370 m +48.240 294.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 393.610 m -99.792 369.830 l +99.792 318.370 m +99.792 294.590 l S [ ] 0 d 1 w @@ -25920,7 +25756,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 377.1130000000003 Td +51.24000000000001 301.8730000000003 Td /F2.0 10.5 Tf <323030> Tj ET @@ -25928,26 +25764,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 393.360 m -460.656 393.360 l +99.792 318.120 m +460.656 318.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 370.080 m -460.656 370.080 l +99.792 294.840 m +460.656 294.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 393.610 m -99.792 369.830 l +99.792 318.370 m +99.792 294.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 393.610 m -460.656 369.830 l +460.656 318.370 m +460.656 294.590 l S [ ] 0 d 1 w @@ -25955,7 +25791,7 @@ S 0.200 0.200 0.200 scn BT -102.792 377.1130000000003 Td +102.792 301.8730000000003 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -25963,44 +25799,52 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 393.360 m -563.760 393.360 l +460.656 318.120 m +563.760 318.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 370.080 m -563.760 370.080 l +460.656 294.840 m +563.760 294.840 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 393.610 m -460.656 369.830 l +460.656 318.370 m +460.656 294.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 393.610 m -563.760 369.830 l +563.760 318.370 m +563.760 294.590 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -463.65600000000006 377.1130000000003 Td +463.65600000000006 301.8730000000003 Td /F1.0 10.5 Tf -<737472696e67> Tj +<506f6c6963794d6f64656c> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 340.49600000000027 Td +48.24000000000001 265.25600000000026 Td /F2.0 13 Tf <322e33312e332e2050726f6475636573> Tj ET @@ -26013,7 +25857,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 313.83600000000024 Td +56.88050000000001 238.59600000000026 Td /F1.0 10.5 Tf Tj ET @@ -26026,7 +25870,7 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 316.02000000000027 Td +66.24000000000001 240.78000000000026 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET @@ -26037,9 +25881,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 278.37600000000026 Td +48.24000000000001 203.13600000000025 Td /F2.0 18 Tf -<322e33322e20474554> Tj +<322e33322e20505554> Tj ET 0.000 0.000 0.000 SCN @@ -26048,7 +25892,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 250.29600000000025 Td +48.24000000000001 175.05600000000024 Td /F2.0 18 Tf [<2f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c>] TJ ET @@ -26059,7 +25903,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 222.21600000000024 Td +48.24000000000001 146.97600000000023 Td /F2.0 18 Tf [<56> 60.05859375 <657273696f6e7d>] TJ ET @@ -26070,71 +25914,165 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 187.97600000000023 Td +48.24000000000001 112.73600000000025 Td /F2.0 13 Tf [<322e33322e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3136> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +214 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 213 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 24 0 R +/F1.0 8 0 R +/F4.0 35 0 R +/F3.0 26 0 R +>> +/XObject << /Stamp1 676 0 R +>> +>> +/Annots [219 0 R] +>> +endobj +215 0 obj +[214 0 R /XYZ 0 683.1600000000001 null] +endobj +216 0 obj +[214 0 R /XYZ 0 626.8800000000002 null] +endobj +217 0 obj +[214 0 R /XYZ 0 530.6400000000003 null] +endobj +218 0 obj +[214 0 R /XYZ 0 387.9600000000003 null] +endobj +219 0 obj +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [463.65600000000006 298.8070000000003 524.955 313.0870000000003] +/Type /Annot +>> +endobj +220 0 obj +[214 0 R /XYZ 0 282.84000000000026 null] +endobj +221 0 obj +<< /Limits [(_produces_28) (_responses)] +/Names [(_produces_28) 209 0 R (_produces_29) 215 0 R (_produces_3) 42 0 R (_produces_30) 220 0 R (_produces_31) 229 0 R (_produces_32) 233 0 R (_produces_33) 239 0 R (_produces_34) 245 0 R (_produces_4) 48 0 R (_produces_5) 55 0 R (_produces_6) 62 0 R (_produces_7) 67 0 R (_produces_8) 76 0 R (_produces_9) 80 0 R (_responses) 32 0 R] +>> +endobj +222 0 obj +[214 0 R /XYZ 0 226.56000000000026 null] +endobj +223 0 obj +[214 0 R /XYZ 0 130.32000000000025 null] +endobj +224 0 obj +<< /Length 19206 +>> +stream +q +/DeviceRGB cs 1.000 1.000 1.000 scn -48.240 150.000 114.560 23.280 re +48.240 732.720 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 150.000 171.840 23.280 re +162.800 732.720 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 150.000 229.120 23.280 re +334.640 732.720 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 112.440 114.560 37.560 re +48.240 695.160 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 112.440 171.840 37.560 re +162.800 695.160 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 112.440 229.120 37.560 re +334.640 695.160 229.120 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 74.880 114.560 37.560 re +48.240 657.600 114.560 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -162.800 74.880 171.840 37.560 re +162.800 657.600 171.840 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -334.640 74.880 229.120 37.560 re +334.640 657.600 229.120 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 620.040 114.560 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +162.800 620.040 171.840 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +334.640 620.040 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w +/DeviceRGB CS 0.867 0.867 0.867 SCN -48.240 173.280 m -162.800 173.280 l +48.240 756.000 m +162.800 756.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 150.000 m -162.800 150.000 l +48.240 732.720 m +162.800 732.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 173.530 m -48.240 149.250 l +48.240 756.250 m +48.240 731.970 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 173.530 m -162.800 149.250 l +162.800 756.250 m +162.800 731.970 l S [ ] 0 d 1 w @@ -26142,7 +26080,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 157.53300000000024 Td +51.24 740.2529999999999 Td /F2.0 10.5 Tf <54797065> Tj ET @@ -26150,26 +26088,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 173.280 m -334.640 173.280 l +162.800 756.000 m +334.640 756.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 150.000 m -334.640 150.000 l +162.800 732.720 m +334.640 732.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 173.530 m -162.800 149.250 l +162.800 756.250 m +162.800 731.970 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 173.530 m -334.640 149.250 l +334.640 756.250 m +334.640 731.970 l S [ ] 0 d 1 w @@ -26177,7 +26115,7 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 157.53300000000024 Td +165.79988544 740.2529999999999 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -26185,26 +26123,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 173.280 m -563.760 173.280 l +334.640 756.000 m +563.760 756.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -334.640 150.000 m -563.760 150.000 l +334.640 732.720 m +563.760 732.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 173.530 m -334.640 149.250 l +334.640 756.250 m +334.640 731.970 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 173.530 m -563.760 149.250 l +563.760 756.250 m +563.760 731.970 l S [ ] 0 d 1 w @@ -26212,7 +26150,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 157.53300000000024 Td +337.6397136 740.2529999999999 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -26220,26 +26158,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 150.000 m -162.800 150.000 l +48.240 732.720 m +162.800 732.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 112.440 m -162.800 112.440 l +48.240 695.160 m +162.800 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 150.250 m -48.240 112.190 l +48.240 732.970 m +48.240 694.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 150.250 m -162.800 112.190 l +162.800 732.970 m +162.800 694.910 l S [ ] 0 d 1 w @@ -26247,7 +26185,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 126.61300000000024 Td +51.24 709.333 Td /F2.0 10.5 Tf <50617468> Tj ET @@ -26255,26 +26193,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 150.000 m -334.640 150.000 l +162.800 732.720 m +334.640 732.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 112.440 m -334.640 112.440 l +162.800 695.160 m +334.640 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 150.250 m -162.800 112.190 l +162.800 732.970 m +162.800 694.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 150.250 m -334.640 112.190 l +334.640 732.970 m +334.640 694.910 l S [ ] 0 d 1 w @@ -26282,19 +26220,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 133.75300000000024 Td +165.79988544 716.473 Td /F2.0 10.5 Tf <706f6c6963794d6f64656c54797065> Tj ET BT -165.79988544000003 119.47300000000024 Td +165.79988544 702.193 Td ET BT -165.79988544000003 119.47300000000024 Td +165.79988544 702.193 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -26302,26 +26240,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 150.000 m -563.760 150.000 l +334.640 732.720 m +563.760 732.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 112.440 m -563.760 112.440 l +334.640 695.160 m +563.760 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 150.250 m -334.640 112.190 l +334.640 732.970 m +334.640 694.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 150.250 m -563.760 112.190 l +563.760 732.970 m +563.760 694.910 l S [ ] 0 d 1 w @@ -26329,7 +26267,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 126.61300000000024 Td +337.6397136 709.333 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -26337,26 +26275,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 112.440 m -162.800 112.440 l +48.240 695.160 m +162.800 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 74.880 m -162.800 74.880 l +48.240 657.600 m +162.800 657.600 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 112.690 m -48.240 74.630 l +48.240 695.410 m +48.240 657.350 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 112.690 m -162.800 74.630 l +162.800 695.410 m +162.800 657.350 l S [ ] 0 d 1 w @@ -26364,7 +26302,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 89.05300000000022 Td +51.24 671.7729999999999 Td /F2.0 10.5 Tf <50617468> Tj ET @@ -26372,26 +26310,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 112.440 m -334.640 112.440 l +162.800 695.160 m +334.640 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 74.880 m -334.640 74.880 l +162.800 657.600 m +334.640 657.600 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 112.690 m -162.800 74.630 l +162.800 695.410 m +162.800 657.350 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 112.690 m -334.640 74.630 l +334.640 695.410 m +334.640 657.350 l S [ ] 0 d 1 w @@ -26399,19 +26337,19 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 96.19300000000023 Td +165.79988544 678.913 Td /F2.0 10.5 Tf [<706f6c6963794d6f64656c56> 60.05859375 <657273696f6e>] TJ ET BT -165.79988544000003 81.91300000000022 Td +165.79988544 664.6329999999999 Td ET BT -165.79988544000003 81.91300000000022 Td +165.79988544 664.6329999999999 Td /F3.0 10.5 Tf <7265717569726564> Tj ET @@ -26419,26 +26357,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 112.440 m -563.760 112.440 l +334.640 695.160 m +563.760 695.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 74.880 m -563.760 74.880 l +334.640 657.600 m +563.760 657.600 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 112.690 m -334.640 74.630 l +334.640 695.410 m +334.640 657.350 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 112.690 m -563.760 74.630 l +563.760 695.410 m +563.760 657.350 l S [ ] 0 d 1 w @@ -26446,100 +26384,134 @@ S 0.200 0.200 0.200 scn BT -337.6397136 89.05300000000022 Td +337.6397136 671.7729999999999 Td /F1.0 10.5 Tf <737472696e67> Tj ET 0.000 0.000 0.000 scn -q -0.000 0.000 0.000 scn -0.000 0.000 0.000 SCN -1 w -0 J -0 j +0.5 w +0.867 0.867 0.867 SCN +48.240 657.600 m +162.800 657.600 l +S [ ] 0 d -/Stamp1 Do +0.5 w +0.867 0.867 0.867 SCN +48.240 620.040 m +162.800 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 657.850 m +48.240 619.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 657.850 m +162.800 619.790 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -49.24 14.388 Td -/F1.0 9 Tf -<3136> Tj +51.24 634.213 Td +/F2.0 10.5 Tf +<426f6479> Tj ET +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +162.800 657.600 m +334.640 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 620.040 m +334.640 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +162.800 657.850 m +162.800 619.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 657.850 m +334.640 619.790 l +S +[ ] 0 d +1 w 0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +165.79988544 641.3530000000001 Td +/F2.0 10.5 Tf +<626f6479> Tj +ET + + +BT +165.79988544 627.073 Td +ET + + +BT +165.79988544 627.073 Td +/F3.0 10.5 Tf +<7265717569726564> Tj +ET + 0.000 0.000 0.000 scn -Q -Q +0.5 w +0.867 0.867 0.867 SCN +334.640 657.600 m +563.760 657.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 620.040 m +563.760 620.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +334.640 657.850 m +334.640 619.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 657.850 m +563.760 619.790 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn -endstream -endobj -213 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 212 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F2.0 24 0 R -/F1.0 8 0 R -/F4.0 35 0 R -/F3.0 26 0 R ->> -/XObject << /Stamp1 702 0 R ->> ->> ->> -endobj -214 0 obj -[213 0 R /XYZ 0 792.0 null] -endobj -215 0 obj -[213 0 R /XYZ 0 702.1200000000001 null] -endobj -216 0 obj -[213 0 R /XYZ 0 605.8800000000002 null] -endobj -217 0 obj -[213 0 R /XYZ 0 463.20000000000033 null] -endobj -218 0 obj -<< /Limits [(_responses_29) (_route100)] -/Names [(_responses_29) 205 0 R (_responses_3) 40 0 R (_responses_30) 210 0 R (_responses_31) 217 0 R (_responses_32) 226 0 R (_responses_33) 232 0 R (_responses_34) 239 0 R (_responses_35) 243 0 R (_responses_36) 247 0 R (_responses_37) 254 0 R (_responses_4) 46 0 R (_responses_5) 52 0 R (_responses_6) 59 0 R (_responses_7) 65 0 R (_responses_8) 71 0 R (_responses_9) 79 0 R (_route100) 68 0 R] ->> -endobj -219 0 obj -[213 0 R /XYZ 0 358.08000000000027 null] -endobj -220 0 obj -<< /Limits [(_produces_28) (_responses)] -/Names [(_produces_28) 208 0 R (_produces_29) 214 0 R (_produces_3) 42 0 R (_produces_30) 219 0 R (_produces_31) 228 0 R (_produces_32) 235 0 R (_produces_33) 241 0 R (_produces_34) 244 0 R (_produces_35) 249 0 R (_produces_36) 255 0 R (_produces_4) 48 0 R (_produces_5) 55 0 R (_produces_6) 62 0 R (_produces_7) 67 0 R (_produces_8) 76 0 R (_produces_9) 80 0 R (_responses) 32 0 R] ->> -endobj -221 0 obj -[213 0 R /XYZ 0 301.80000000000024 null] -endobj -222 0 obj -<< /Limits [(_route79) (_route89)] -/Names [(_route79) 196 0 R (_route80) 162 0 R (_route81) 173 0 R (_route82) 189 0 R (_route83) 180 0 R (_route84) 105 0 R (_route85) 120 0 R (_route86) 127 0 R (_route87) 166 0 R (_route88) 147 0 R (_route89) 139 0 R] ->> -endobj -223 0 obj -[213 0 R /XYZ 0 205.56000000000026 null] -endobj -224 0 obj -<< /Length 16651 ->> -stream -q -/DeviceRGB cs +BT +337.6397136 634.213 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn 0.200 0.200 0.200 scn -/DeviceRGB CS 0.200 0.200 0.200 SCN BT -48.24 740.816 Td +48.24 590.456 Td /F2.0 13 Tf <322e33322e322e20526573706f6e736573> Tj ET @@ -26547,51 +26519,51 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 688.560 51.552 37.560 re +48.240 538.200 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 688.560 360.864 37.560 re +99.792 538.200 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 688.560 103.104 37.560 re +460.656 538.200 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 665.280 51.552 23.280 re +48.240 514.920 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 665.280 360.864 23.280 re +99.792 514.920 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 665.280 103.104 23.280 re +460.656 514.920 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 726.120 m -99.792 726.120 l +48.240 575.760 m +99.792 575.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 688.560 m -99.792 688.560 l +48.240 538.200 m +99.792 538.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 726.370 m -48.240 687.810 l +48.240 576.010 m +48.240 537.450 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 726.370 m -99.792 687.810 l +99.792 576.010 m +99.792 537.450 l S [ ] 0 d 1 w @@ -26599,14 +26571,14 @@ S 0.200 0.200 0.200 scn BT -51.24 710.373 Td +51.24 560.0130000000001 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24 696.0930000000001 Td +51.24 545.7330000000001 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -26614,26 +26586,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 726.120 m -460.656 726.120 l +99.792 575.760 m +460.656 575.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 688.560 m -460.656 688.560 l +99.792 538.200 m +460.656 538.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 726.370 m -99.792 687.810 l +99.792 576.010 m +99.792 537.450 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 726.370 m -460.656 687.810 l +460.656 576.010 m +460.656 537.450 l S [ ] 0 d 1 w @@ -26641,7 +26613,7 @@ S 0.200 0.200 0.200 scn BT -102.792 710.373 Td +102.792 560.0130000000001 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -26649,26 +26621,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 726.120 m -563.760 726.120 l +460.656 575.760 m +563.760 575.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 688.560 m -563.760 688.560 l +460.656 538.200 m +563.760 538.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 726.370 m -460.656 687.810 l +460.656 576.010 m +460.656 537.450 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 726.370 m -563.760 687.810 l +563.760 576.010 m +563.760 537.450 l S [ ] 0 d 1 w @@ -26676,7 +26648,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 710.373 Td +463.65600000000006 560.0130000000001 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -26684,26 +26656,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 688.560 m -99.792 688.560 l +48.240 538.200 m +99.792 538.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 665.280 m -99.792 665.280 l +48.240 514.920 m +99.792 514.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 688.810 m -48.240 665.030 l +48.240 538.450 m +48.240 514.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 688.810 m -99.792 665.030 l +99.792 538.450 m +99.792 514.670 l S [ ] 0 d 1 w @@ -26711,7 +26683,7 @@ S 0.200 0.200 0.200 scn BT -51.24 672.3130000000001 Td +51.24 521.953 Td /F2.0 10.5 Tf <323030> Tj ET @@ -26719,26 +26691,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 688.560 m -460.656 688.560 l +99.792 538.200 m +460.656 538.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 665.280 m -460.656 665.280 l +99.792 514.920 m +460.656 514.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 688.810 m -99.792 665.030 l +99.792 538.450 m +99.792 514.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 688.810 m -460.656 665.030 l +460.656 538.450 m +460.656 514.670 l S [ ] 0 d 1 w @@ -26746,7 +26718,7 @@ S 0.200 0.200 0.200 scn BT -102.792 672.3130000000001 Td +102.792 521.953 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -26754,26 +26726,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 688.560 m -563.760 688.560 l +460.656 538.200 m +563.760 538.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 665.280 m -563.760 665.280 l +460.656 514.920 m +563.760 514.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 688.810 m -460.656 665.030 l +460.656 538.450 m +460.656 514.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 688.810 m -563.760 665.030 l +563.760 538.450 m +563.760 514.670 l S [ ] 0 d 1 w @@ -26787,7 +26759,7 @@ S 0.259 0.545 0.792 SCN BT -463.65600000000006 672.3130000000001 Td +463.65600000000006 521.953 Td /F1.0 10.5 Tf <506f6c6963794d6f64656c> Tj ET @@ -26799,9 +26771,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24 635.6960000000003 Td +48.24 485.33600000000007 Td /F2.0 13 Tf -<322e33322e332e2050726f6475636573> Tj +<322e33322e332e20436f6e73756d6573> Tj ET 0.000 0.000 0.000 SCN @@ -26812,7 +26784,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 609.0360000000003 Td +56.88050000000001 458.67600000000004 Td /F1.0 10.5 Tf Tj ET @@ -26825,9 +26797,9 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 611.2200000000004 Td +66.24000000000001 460.86000000000007 Td /F4.0 10.5 Tf -<6170706c69636174696f6e2f6a736f6e> Tj +<706c61696e2f74657874> Tj ET 0.000 0.000 0.000 SCN @@ -26836,20 +26808,35 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 573.5760000000004 Td -/F2.0 18 Tf -<322e33332e20505554> Tj +48.24000000000001 429.05600000000004 Td +/F2.0 13 Tf +<322e33322e342e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn + +-0.500 Tc 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 545.4960000000004 Td -/F2.0 18 Tf -[<2f76322f706f6c69637954> 29.78515625 <6f7363614d6f64656c732f7b706f6c6963794d6f64656c547970657d2f7b706f6c6963794d6f64656c>] TJ +56.88050000000001 402.396 Td +/F1.0 10.5 Tf + Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +0.000 Tc +0.694 0.129 0.275 scn +0.694 0.129 0.275 SCN + +BT +66.24000000000001 404.58000000000004 Td +/F4.0 10.5 Tf +<6170706c69636174696f6e2f6a736f6e> Tj ET 0.000 0.000 0.000 SCN @@ -26858,9 +26845,9 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 517.4160000000004 Td +48.24000000000001 366.93600000000004 Td /F2.0 18 Tf -[<56> 60.05859375 <657273696f6e7d>] TJ +<322e33332e20474554202f76322f74656d706c61746573> Tj ET 0.000 0.000 0.000 SCN @@ -26869,83 +26856,59 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 483.1760000000004 Td +48.24000000000001 332.69599999999997 Td /F2.0 13 Tf -[<322e33332e312e20506172> 20.01953125 <616d6574657273>] TJ +<322e33332e312e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 445.200 114.560 23.280 re +48.240 280.440 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 445.200 171.840 23.280 re +99.792 280.440 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 445.200 229.120 23.280 re +460.656 280.440 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 407.640 114.560 37.560 re +48.240 257.160 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 407.640 171.840 37.560 re +99.792 257.160 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 407.640 229.120 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 370.080 114.560 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -162.800 370.080 171.840 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -334.640 370.080 229.120 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 332.520 114.560 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -162.800 332.520 171.840 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -334.640 332.520 229.120 37.560 re +460.656 257.160 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 468.480 m -162.800 468.480 l +48.240 318.000 m +99.792 318.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 445.200 m -162.800 445.200 l +48.240 280.440 m +99.792 280.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 468.730 m -48.240 444.450 l +48.240 318.250 m +48.240 279.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 468.730 m -162.800 444.450 l +99.792 318.250 m +99.792 279.690 l S [ ] 0 d 1 w @@ -26953,34 +26916,41 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 452.73300000000035 Td +51.24000000000001 302.25299999999993 Td /F2.0 10.5 Tf -<54797065> Tj +<48545450> Tj +ET + + +BT +51.24000000000001 287.97299999999996 Td +/F2.0 10.5 Tf +<436f6465> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 468.480 m -334.640 468.480 l +99.792 318.000 m +460.656 318.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 445.200 m -334.640 445.200 l +99.792 280.440 m +460.656 280.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 468.730 m -162.800 444.450 l +99.792 318.250 m +99.792 279.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 468.730 m -334.640 444.450 l +460.656 318.250 m +460.656 279.690 l S [ ] 0 d 1 w @@ -26988,34 +26958,34 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 452.73300000000035 Td +102.792 302.25299999999993 Td /F2.0 10.5 Tf -<4e616d65> Tj +<4465736372697074696f6e> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 468.480 m -563.760 468.480 l +460.656 318.000 m +563.760 318.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -334.640 445.200 m -563.760 445.200 l +460.656 280.440 m +563.760 280.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 468.730 m -334.640 444.450 l +460.656 318.250 m +460.656 279.690 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 468.730 m -563.760 444.450 l +563.760 318.250 m +563.760 279.690 l S [ ] 0 d 1 w @@ -27023,7 +26993,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 452.73300000000035 Td +463.65600000000006 302.25299999999993 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -27031,26 +27001,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 445.200 m -162.800 445.200 l +48.240 280.440 m +99.792 280.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 407.640 m -162.800 407.640 l +48.240 257.160 m +99.792 257.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 445.450 m -48.240 407.390 l +48.240 280.690 m +48.240 256.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 445.450 m -162.800 407.390 l +99.792 280.690 m +99.792 256.910 l S [ ] 0 d 1 w @@ -27058,34 +27028,34 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 421.8130000000004 Td +51.24000000000001 264.1929999999999 Td /F2.0 10.5 Tf -<50617468> Tj +<323030> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 445.200 m -334.640 445.200 l +99.792 280.440 m +460.656 280.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 407.640 m -334.640 407.640 l +99.792 257.160 m +460.656 257.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 445.450 m -162.800 407.390 l +99.792 280.690 m +99.792 256.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 445.450 m -334.640 407.390 l +460.656 280.690 m +460.656 256.910 l S [ ] 0 d 1 w @@ -27093,350 +27063,160 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 428.9530000000004 Td -/F2.0 10.5 Tf -<706f6c6963794d6f64656c54797065> Tj -ET - - -BT -165.79988544000003 414.67300000000034 Td -ET - - -BT -165.79988544000003 414.67300000000034 Td -/F3.0 10.5 Tf -<7265717569726564> Tj +102.792 264.1929999999999 Td +/F1.0 10.5 Tf +<4f75747075742074797065> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 445.200 m -563.760 445.200 l +460.656 280.440 m +563.760 280.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 407.640 m -563.760 407.640 l +460.656 257.160 m +563.760 257.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 445.450 m -334.640 407.390 l +460.656 280.690 m +460.656 256.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 445.450 m -563.760 407.390 l +563.760 280.690 m +563.760 256.910 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -337.6397136 421.8130000000004 Td +463.65600000000006 264.1929999999999 Td /F1.0 10.5 Tf -<737472696e67> Tj +[<4c6f6f7054> 29.78515625 <656d706c617465>] TJ ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 407.640 m -162.800 407.640 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 370.080 m -162.800 370.080 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 407.890 m -48.240 369.830 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 407.890 m -162.800 369.830 l -S -[ ] 0 d -1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn - -BT -51.24000000000001 384.2530000000003 Td -/F2.0 10.5 Tf -<50617468> Tj -ET - 0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -162.800 407.640 m -334.640 407.640 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 370.080 m -334.640 370.080 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 407.890 m -162.800 369.830 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 407.890 m -334.640 369.830 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN BT -165.79988544000003 391.3930000000003 Td -/F2.0 10.5 Tf -[<706f6c6963794d6f64656c56> 60.05859375 <657273696f6e>] TJ -ET - - -BT -165.79988544000003 377.1130000000003 Td -ET - - -BT -165.79988544000003 377.1130000000003 Td -/F3.0 10.5 Tf -<7265717569726564> Tj +48.24000000000001 227.57599999999996 Td +/F2.0 13 Tf +<322e33332e322e2050726f6475636573> Tj ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -334.640 407.640 m -563.760 407.640 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 370.080 m -563.760 370.080 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 407.890 m -334.640 369.830 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 407.890 m -563.760 369.830 l -S -[ ] 0 d -1 w 0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +-0.500 Tc 0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN BT -337.6397136 384.2530000000003 Td +56.88050000000001 200.91599999999994 Td /F1.0 10.5 Tf -<737472696e67> Tj + Tj ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 370.080 m -162.800 370.080 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 332.520 m -162.800 332.520 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 370.330 m -48.240 332.270 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 370.330 m -162.800 332.270 l -S -[ ] 0 d -1 w 0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24000000000001 346.6930000000004 Td -/F2.0 10.5 Tf -<426f6479> Tj -ET - 0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -162.800 370.080 m -334.640 370.080 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 332.520 m -334.640 332.520 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 370.330 m -162.800 332.270 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 370.330 m -334.640 332.270 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -165.79988544000003 353.83300000000037 Td -/F2.0 10.5 Tf -<626f6479> Tj -ET - - -BT -165.79988544000003 339.55300000000034 Td -ET +0.000 Tc +0.694 0.129 0.275 scn +0.694 0.129 0.275 SCN BT -165.79988544000003 339.55300000000034 Td -/F3.0 10.5 Tf -<7265717569726564> Tj +66.24000000000001 203.09999999999994 Td +/F4.0 10.5 Tf +<6170706c69636174696f6e2f6a736f6e> Tj ET -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -334.640 370.080 m -563.760 370.080 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 332.520 m -563.760 332.520 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 370.330 m -334.640 332.270 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 370.330 m -563.760 332.270 l -S -[ ] 0 d -1 w 0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn 0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN BT -337.6397136 346.6930000000004 Td -/F1.0 10.5 Tf -<737472696e67> Tj +48.24000000000001 165.4559999999999 Td +/F2.0 18 Tf +<322e33342e20474554202f76322f74656d706c617465732f6e616d6573> Tj ET +0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 302.9360000000004 Td +48.24000000000001 131.2159999999999 Td /F2.0 13 Tf -<322e33332e322e20526573706f6e736573> Tj +<322e33342e312e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 250.680 51.552 37.560 re +48.240 78.960 51.552 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 250.680 360.864 37.560 re +99.792 78.960 360.864 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 250.680 103.104 37.560 re +460.656 78.960 103.104 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 227.400 51.552 23.280 re +48.240 55.680 51.552 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 227.400 360.864 23.280 re +99.792 55.680 360.864 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 227.400 103.104 23.280 re +460.656 55.680 103.104 23.280 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 288.240 m -99.792 288.240 l +48.240 116.520 m +99.792 116.520 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 250.680 m -99.792 250.680 l +48.240 78.960 m +99.792 78.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 288.490 m -48.240 249.930 l +48.240 116.770 m +48.240 78.210 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 288.490 m -99.792 249.930 l +99.792 116.770 m +99.792 78.210 l S [ ] 0 d 1 w @@ -27444,14 +27224,14 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 272.49300000000034 Td +51.24000000000001 100.7729999999999 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24000000000001 258.2130000000003 Td +51.24000000000001 86.4929999999999 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -27459,26 +27239,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 288.240 m -460.656 288.240 l +99.792 116.520 m +460.656 116.520 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 250.680 m -460.656 250.680 l +99.792 78.960 m +460.656 78.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 288.490 m -99.792 249.930 l +99.792 116.770 m +99.792 78.210 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 288.490 m -460.656 249.930 l +460.656 116.770 m +460.656 78.210 l S [ ] 0 d 1 w @@ -27486,7 +27266,7 @@ S 0.200 0.200 0.200 scn BT -102.792 272.49300000000034 Td +102.792 100.7729999999999 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -27494,26 +27274,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 288.240 m -563.760 288.240 l +460.656 116.520 m +563.760 116.520 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 250.680 m -563.760 250.680 l +460.656 78.960 m +563.760 78.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 288.490 m -460.656 249.930 l +460.656 116.770 m +460.656 78.210 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 288.490 m -563.760 249.930 l +563.760 116.770 m +563.760 78.210 l S [ ] 0 d 1 w @@ -27521,7 +27301,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 272.49300000000034 Td +463.65600000000006 100.7729999999999 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -27529,26 +27309,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 250.680 m -99.792 250.680 l +48.240 78.960 m +99.792 78.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 227.400 m -99.792 227.400 l +48.240 55.680 m +99.792 55.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 250.930 m -48.240 227.150 l +48.240 79.210 m +48.240 55.430 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 250.930 m -99.792 227.150 l +99.792 79.210 m +99.792 55.430 l S [ ] 0 d 1 w @@ -27556,7 +27336,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 234.43300000000036 Td +51.24000000000001 62.712999999999894 Td /F2.0 10.5 Tf <323030> Tj ET @@ -27564,26 +27344,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 250.680 m -460.656 250.680 l +99.792 78.960 m +460.656 78.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 227.400 m -460.656 227.400 l +99.792 55.680 m +460.656 55.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 250.930 m -99.792 227.150 l +99.792 79.210 m +99.792 55.430 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 250.930 m -460.656 227.150 l +460.656 79.210 m +460.656 55.430 l S [ ] 0 d 1 w @@ -27591,7 +27371,7 @@ S 0.200 0.200 0.200 scn BT -102.792 234.43300000000036 Td +102.792 62.712999999999894 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -27599,131 +27379,38 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 250.680 m -563.760 250.680 l +460.656 78.960 m +563.760 78.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 227.400 m -563.760 227.400 l +460.656 55.680 m +563.760 55.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 250.930 m -460.656 227.150 l +460.656 79.210 m +460.656 55.430 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 250.930 m -563.760 227.150 l +563.760 79.210 m +563.760 55.430 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN - -BT -463.65600000000006 234.43300000000036 Td -/F1.0 10.5 Tf -<506f6c6963794d6f64656c> Tj -ET - -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 197.81600000000032 Td -/F2.0 13 Tf -<322e33332e332e20436f6e73756d6573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - --0.500 Tc -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -56.88050000000001 171.15600000000032 Td -/F1.0 10.5 Tf - Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -0.000 Tc -0.694 0.129 0.275 scn -0.694 0.129 0.275 SCN - -BT -66.24000000000001 173.34000000000032 Td -/F4.0 10.5 Tf -<706c61696e2f74657874> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 141.53600000000029 Td -/F2.0 13 Tf -<322e33332e342e2050726f6475636573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - --0.500 Tc -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -56.88050000000001 114.87600000000029 Td +463.65600000000006 62.712999999999894 Td /F1.0 10.5 Tf - Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -0.000 Tc -0.694 0.129 0.275 scn -0.694 0.129 0.275 SCN - -BT -66.24000000000001 117.06000000000029 Td -/F4.0 10.5 Tf -<6170706c69636174696f6e2f6a736f6e> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 79.41600000000028 Td -/F2.0 18 Tf -<322e33342e20474554202f76322f74656d706c61746573> Tj +[<3c20737472696e67203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET -0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn q 0.000 0.000 0.000 scn @@ -27756,63 +27443,63 @@ endobj /Contents 224 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R +/F3.0 26 0 R /F1.0 8 0 R /F4.0 35 0 R -/F3.0 26 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [227 0 R 233 0 R] +/Annots [227 0 R 232 0 R] >> endobj 226 0 obj -[225 0 R /XYZ 0 792.0 null] +[225 0 R /XYZ 0 608.04 null] endobj 227 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link -/Rect [463.65600000000006 669.2470000000002 524.955 683.5270000000002] +/Rect [463.65600000000006 518.8870000000001 524.955 533.167] /Type /Annot >> endobj 228 0 obj -[225 0 R /XYZ 0 653.2800000000002 null] +[225 0 R /XYZ 0 502.9200000000001 null] endobj 229 0 obj -[225 0 R /XYZ 0 597.0000000000003 null] +[225 0 R /XYZ 0 446.64000000000004 null] endobj 230 0 obj -[225 0 R /XYZ 0 500.7600000000004 null] +[225 0 R /XYZ 0 390.36 null] endobj 231 0 obj -<< /Limits [(_parameters_24) (_paths)] -/Names [(_parameters_24) 216 0 R (_parameters_25) 223 0 R (_parameters_26) 230 0 R (_parameters_27) 246 0 R (_parameters_28) 253 0 R (_parameters_3) 69 0 R (_parameters_4) 78 0 R (_parameters_5) 82 0 R (_parameters_6) 89 0 R (_parameters_7) 95 0 R (_parameters_8) 103 0 R (_parameters_9) 106 0 R (_paths) 30 0 R] ->> +[225 0 R /XYZ 0 350.28 null] endobj 232 0 obj -[225 0 R /XYZ 0 320.5200000000004 null] -endobj -233 0 obj << /Border [0 0 0] -/Dest (_policymodel) +/Dest (_looptemplate) /Subtype /Link -/Rect [463.65600000000006 231.36700000000036 524.955 245.64700000000036] +/Rect [463.65600000000006 261.12699999999995 535.2997558593751 275.4069999999999] /Type /Annot >> endobj +233 0 obj +[225 0 R /XYZ 0 245.15999999999997 null] +endobj 234 0 obj -[225 0 R /XYZ 0 215.40000000000035 null] +[225 0 R /XYZ 0 188.87999999999994 null] endobj 235 0 obj -[225 0 R /XYZ 0 159.12000000000032 null] +[225 0 R /XYZ 0 148.79999999999993 null] endobj 236 0 obj -[225 0 R /XYZ 0 102.84000000000029 null] +<< /Limits [(_responses_9) (_route19)] +/Names [(_responses_9) 79 0 R (_route10) 161 0 R (_route11) 147 0 R (_route12) 140 0 R (_route13) 153 0 R (_route14) 102 0 R (_route15) 115 0 R (_route16) 88 0 R (_route17) 135 0 R (_route18) 94 0 R (_route19) 43 0 R] +>> endobj 237 0 obj -<< /Length 16306 +<< /Length 8598 >> stream q @@ -27824,57 +27511,105 @@ q BT 48.24 740.816 Td /F2.0 13 Tf -<322e33342e312e20526573706f6e736573> Tj +<322e33342e322e2050726f6475636573> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +-0.500 Tc +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +56.88050000000001 714.1560000000001 Td +/F1.0 10.5 Tf + Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn + +0.000 Tc +0.694 0.129 0.275 scn +0.694 0.129 0.275 SCN + +BT +66.24000000000001 716.3400000000001 Td +/F4.0 10.5 Tf +<6170706c69636174696f6e2f6a736f6e> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24000000000001 678.6960000000001 Td +/F2.0 18 Tf +<322e33352e20474554202f76322f74656d706c617465732f7b74656d706c6174654e616d657d> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24000000000001 644.4560000000002 Td +/F2.0 13 Tf +[<322e33352e312e20506172> 20.01953125 <616d6574657273>] TJ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 688.560 51.552 37.560 re +48.240 606.480 114.560 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 688.560 360.864 37.560 re +162.800 606.480 171.840 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 688.560 103.104 37.560 re +334.640 606.480 229.120 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 665.280 51.552 23.280 re +48.240 568.920 114.560 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 665.280 360.864 23.280 re +162.800 568.920 171.840 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 665.280 103.104 23.280 re +334.640 568.920 229.120 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 726.120 m -99.792 726.120 l +48.240 629.760 m +162.800 629.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 688.560 m -99.792 688.560 l +48.240 606.480 m +162.800 606.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 726.370 m -48.240 687.810 l +48.240 630.010 m +48.240 605.730 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 726.370 m -99.792 687.810 l +162.800 630.010 m +162.800 605.730 l S [ ] 0 d 1 w @@ -27882,41 +27617,34 @@ S 0.200 0.200 0.200 scn BT -51.24 710.373 Td -/F2.0 10.5 Tf -<48545450> Tj -ET - - -BT -51.24 696.0930000000001 Td +51.24000000000001 614.0130000000003 Td /F2.0 10.5 Tf -<436f6465> Tj +<54797065> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 726.120 m -460.656 726.120 l +162.800 629.760 m +334.640 629.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 688.560 m -460.656 688.560 l +162.800 606.480 m +334.640 606.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 726.370 m -99.792 687.810 l +162.800 630.010 m +162.800 605.730 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 726.370 m -460.656 687.810 l +334.640 630.010 m +334.640 605.730 l S [ ] 0 d 1 w @@ -27924,34 +27652,34 @@ S 0.200 0.200 0.200 scn BT -102.792 710.373 Td +165.79988544000003 614.0130000000003 Td /F2.0 10.5 Tf -<4465736372697074696f6e> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 726.120 m -563.760 726.120 l +334.640 629.760 m +563.760 629.760 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -460.656 688.560 m -563.760 688.560 l +334.640 606.480 m +563.760 606.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 726.370 m -460.656 687.810 l +334.640 630.010 m +334.640 605.730 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 726.370 m -563.760 687.810 l +563.760 630.010 m +563.760 605.730 l S [ ] 0 d 1 w @@ -27959,7 +27687,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 710.373 Td +337.6397136 614.0130000000003 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -27967,26 +27695,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 688.560 m -99.792 688.560 l +48.240 606.480 m +162.800 606.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 665.280 m -99.792 665.280 l +48.240 568.920 m +162.800 568.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 688.810 m -48.240 665.030 l +48.240 606.730 m +48.240 568.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 688.810 m -99.792 665.030 l +162.800 606.730 m +162.800 568.670 l S [ ] 0 d 1 w @@ -27994,34 +27722,34 @@ S 0.200 0.200 0.200 scn BT -51.24 672.3130000000001 Td +51.24000000000001 583.0930000000003 Td /F2.0 10.5 Tf -<323030> Tj +<50617468> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 688.560 m -460.656 688.560 l +162.800 606.480 m +334.640 606.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 665.280 m -460.656 665.280 l +162.800 568.920 m +334.640 568.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 688.810 m -99.792 665.030 l +162.800 606.730 m +162.800 568.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 688.810 m -460.656 665.030 l +334.640 606.730 m +334.640 568.670 l S [ ] 0 d 1 w @@ -28029,110 +27757,66 @@ S 0.200 0.200 0.200 scn BT -102.792 672.3130000000001 Td -/F1.0 10.5 Tf -<4f75747075742074797065> Tj +165.79988544000003 590.2330000000004 Td +/F2.0 10.5 Tf +<74656d706c6174654e616d65> Tj +ET + + +BT +165.79988544000003 575.9530000000003 Td +ET + + +BT +165.79988544000003 575.9530000000003 Td +/F3.0 10.5 Tf +<7265717569726564> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 688.560 m -563.760 688.560 l +334.640 606.480 m +563.760 606.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 665.280 m -563.760 665.280 l +334.640 568.920 m +563.760 568.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 688.810 m -460.656 665.030 l +334.640 606.730 m +334.640 568.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 688.810 m -563.760 665.030 l +563.760 606.730 m +563.760 568.670 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -463.65600000000006 672.3130000000001 Td +337.6397136 583.0930000000003 Td /F1.0 10.5 Tf -[<4c6f6f7054> 29.78515625 <656d706c617465>] TJ +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24 635.6960000000003 Td +48.24000000000001 539.3360000000004 Td /F2.0 13 Tf -<322e33342e322e2050726f6475636573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - --0.500 Tc -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -56.88050000000001 609.0360000000003 Td -/F1.0 10.5 Tf - Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -0.000 Tc -0.694 0.129 0.275 scn -0.694 0.129 0.275 SCN - -BT -66.24000000000001 611.2200000000004 Td -/F4.0 10.5 Tf -<6170706c69636174696f6e2f6a736f6e> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 573.5760000000004 Td -/F2.0 18 Tf -<322e33352e20474554202f76322f74656d706c617465732f6e616d6573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 539.3360000000005 Td -/F2.0 13 Tf -<322e33352e312e20526573706f6e736573> Tj +<322e33352e322e20526573706f6e736573> Tj ET 0.000 0.000 0.000 SCN @@ -28190,14 +27874,14 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 508.89300000000054 Td +51.24000000000001 508.8930000000004 Td /F2.0 10.5 Tf <48545450> Tj ET BT -51.24000000000001 494.6130000000005 Td +51.24000000000001 494.6130000000004 Td /F2.0 10.5 Tf <436f6465> Tj ET @@ -28232,7 +27916,7 @@ S 0.200 0.200 0.200 scn BT -102.792 508.89300000000054 Td +102.792 508.8930000000004 Td /F2.0 10.5 Tf <4465736372697074696f6e> Tj ET @@ -28267,7 +27951,7 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 508.89300000000054 Td +463.65600000000006 508.8930000000004 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -28302,7 +27986,7 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 470.83300000000054 Td +51.24000000000001 470.8330000000004 Td /F2.0 10.5 Tf <323030> Tj ET @@ -28337,7 +28021,7 @@ S 0.200 0.200 0.200 scn BT -102.792 470.83300000000054 Td +102.792 470.8330000000004 Td /F1.0 10.5 Tf <4f75747075742074797065> Tj ET @@ -28370,21 +28054,29 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -463.65600000000006 470.83300000000054 Td +463.65600000000006 470.8330000000004 Td /F1.0 10.5 Tf -[<3c20737472696e67203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +[<4c6f6f7054> 29.78515625 <656d706c617465>] TJ ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 434.2160000000005 Td +48.24000000000001 434.2160000000004 Td /F2.0 13 Tf -<322e33352e322e2050726f6475636573> Tj +<322e33352e332e2050726f6475636573> Tj ET 0.000 0.000 0.000 SCN @@ -28395,7 +28087,7 @@ ET 0.200 0.200 0.200 SCN BT -56.88050000000001 407.5560000000005 Td +56.88050000000001 407.5560000000004 Td /F1.0 10.5 Tf Tj ET @@ -28408,20 +28100,96 @@ ET 0.694 0.129 0.275 SCN BT -66.24000000000001 409.7400000000005 Td +66.24000000000001 409.7400000000004 Td /F4.0 10.5 Tf <6170706c69636174696f6e2f6a736f6e> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24000000000001 372.0960000000005 Td -/F2.0 18 Tf -<322e33362e20474554202f76322f74656d706c617465732f7b74656d706c6174654e616d657d> Tj +49.24 14.388 Td +/F1.0 9 Tf +<3138> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +238 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 237 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 24 0 R +/F1.0 8 0 R +/F4.0 35 0 R +/F3.0 26 0 R +>> +/XObject << /Stamp1 676 0 R +>> +>> +/Annots [244 0 R] +>> +endobj +239 0 obj +[238 0 R /XYZ 0 792.0 null] +endobj +240 0 obj +[238 0 R /XYZ 0 702.1200000000001 null] +endobj +241 0 obj +[238 0 R /XYZ 0 662.0400000000002 null] +endobj +242 0 obj +<< /Limits [(_parameters_24) (_paths)] +/Names [(_parameters_24) 217 0 R (_parameters_25) 223 0 R (_parameters_26) 241 0 R (_parameters_3) 69 0 R (_parameters_4) 78 0 R (_parameters_5) 82 0 R (_parameters_6) 89 0 R (_parameters_7) 95 0 R (_parameters_8) 103 0 R (_parameters_9) 106 0 R (_paths) 30 0 R] +>> +endobj +243 0 obj +[238 0 R /XYZ 0 556.9200000000003 null] +endobj +244 0 obj +<< /Border [0 0 0] +/Dest (_looptemplate) +/Subtype /Link +/Rect [463.65600000000006 467.76700000000045 535.2997558593751 482.0470000000004] +/Type /Annot +>> +endobj +245 0 obj +[238 0 R /XYZ 0 451.8000000000004 null] +endobj +246 0 obj +<< /Length 17145 +>> +stream +q +/DeviceRGB cs +0.200 0.200 0.200 scn +/DeviceRGB CS +0.200 0.200 0.200 SCN + +BT +48.24 730.304 Td +/F2.0 22 Tf +<4368617074657220332e20446566696e6974696f6e73> Tj ET 0.000 0.000 0.000 SCN @@ -28430,59 +28198,67 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 337.85600000000045 Td -/F2.0 13 Tf -[<322e33362e312e20506172> 20.01953125 <616d6574657273>] TJ +48.24 688.656 Td +/F2.0 18 Tf +<332e312e20436c616d70496e666f726d6174696f6e> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 299.880 114.560 23.280 re +48.240 648.720 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 299.880 171.840 23.280 re +269.177 648.720 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 299.880 229.120 23.280 re +48.240 611.160 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 262.320 114.560 37.560 re +269.177 611.160 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 573.600 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 573.600 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -162.800 262.320 171.840 37.560 re +48.240 536.040 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -334.640 262.320 229.120 37.560 re +269.177 536.040 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 323.160 m -162.800 323.160 l +48.240 672.000 m +269.177 672.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 299.880 m -162.800 299.880 l +48.240 648.720 m +269.177 648.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 323.410 m -48.240 299.130 l +48.240 672.250 m +48.240 647.970 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 323.410 m -162.800 299.130 l +269.177 672.250 m +269.177 647.970 l S [ ] 0 d 1 w @@ -28490,34 +28266,34 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 307.4130000000004 Td +51.24 656.2529999999999 Td /F2.0 10.5 Tf -<54797065> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 323.160 m -334.640 323.160 l +269.177 672.000 m +563.760 672.000 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -162.800 299.880 m -334.640 299.880 l +269.177 648.720 m +563.760 648.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 323.410 m -162.800 299.130 l +269.177 672.250 m +269.177 647.970 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 323.410 m -334.640 299.130 l +563.760 672.250 m +563.760 647.970 l S [ ] 0 d 1 w @@ -28525,34 +28301,34 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 307.4130000000004 Td +272.17692192000004 656.2529999999999 Td /F2.0 10.5 Tf -<4e616d65> Tj +<536368656d61> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 323.160 m -563.760 323.160 l +48.240 648.720 m +269.177 648.720 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -334.640 299.880 m -563.760 299.880 l +48.240 611.160 m +269.177 611.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 323.410 m -334.640 299.130 l +48.240 648.970 m +48.240 610.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 323.410 m -563.760 299.130 l +269.177 648.970 m +269.177 610.910 l S [ ] 0 d 1 w @@ -28560,34 +28336,81 @@ S 0.200 0.200 0.200 scn BT -337.6397136 307.4130000000004 Td +51.24 632.473 Td /F2.0 10.5 Tf -<536368656d61> Tj +<616c6c5065726d697373696f6e73> Tj +ET + + +BT +51.24 618.193 Td +ET + + +BT +51.24 618.193 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 299.880 m -162.800 299.880 l +269.177 648.720 m +563.760 648.720 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 262.320 m -162.800 262.320 l +269.177 611.160 m +563.760 611.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 300.130 m -48.240 262.070 l +269.177 648.970 m +269.177 610.910 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 300.130 m -162.800 262.070 l +563.760 648.970 m +563.760 610.910 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 625.333 Td +/F1.0 10.5 Tf +[<3c20737472696e67203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 611.160 m +269.177 611.160 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 573.600 m +269.177 573.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 611.410 m +48.240 573.350 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 611.410 m +269.177 573.350 l S [ ] 0 d 1 w @@ -28595,34 +28418,81 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 276.49300000000045 Td +51.24 594.913 Td /F2.0 10.5 Tf -<50617468> Tj +[<636c647356> 60.05859375 <657273696f6e>] TJ +ET + + +BT +51.24 580.6329999999999 Td +ET + + +BT +51.24 580.6329999999999 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -162.800 299.880 m -334.640 299.880 l +269.177 611.160 m +563.760 611.160 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 262.320 m -334.640 262.320 l +269.177 573.600 m +563.760 573.600 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -162.800 300.130 m -162.800 262.070 l +269.177 611.410 m +269.177 573.350 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 300.130 m -334.640 262.070 l +563.760 611.410 m +563.760 573.350 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 587.7729999999999 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 573.600 m +269.177 573.600 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 536.040 m +269.177 536.040 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 573.850 m +48.240 535.790 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 573.850 m +269.177 535.790 l S [ ] 0 d 1 w @@ -28630,46 +28500,46 @@ S 0.200 0.200 0.200 scn BT -165.79988544000003 283.63300000000044 Td +51.24 557.3530000000001 Td /F2.0 10.5 Tf -<74656d706c6174654e616d65> Tj +<757365724e616d65> Tj ET BT -165.79988544000003 269.3530000000004 Td +51.24 543.073 Td ET BT -165.79988544000003 269.3530000000004 Td +51.24 543.073 Td /F3.0 10.5 Tf -<7265717569726564> Tj +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -334.640 299.880 m -563.760 299.880 l +269.177 573.600 m +563.760 573.600 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 262.320 m -563.760 262.320 l +269.177 536.040 m +563.760 536.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -334.640 300.130 m -334.640 262.070 l +269.177 573.850 m +269.177 535.790 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 300.130 m -563.760 262.070 l +563.760 573.850 m +563.760 535.790 l S [ ] 0 d 1 w @@ -28677,7 +28547,7 @@ S 0.200 0.200 0.200 scn BT -337.6397136 276.49300000000045 Td +272.17692192000004 550.213 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -28687,59 +28557,67 @@ ET 0.200 0.200 0.200 SCN BT -48.24000000000001 232.73600000000044 Td -/F2.0 13 Tf -<322e33362e322e20526573706f6e736573> Tj +48.24 500.61600000000004 Td +/F2.0 18 Tf +<332e322e20436c64734865616c7468436865636b> Tj ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 180.480 51.552 37.560 re +48.240 460.680 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 180.480 360.864 37.560 re +269.177 460.680 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 180.480 103.104 37.560 re +48.240 423.120 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 157.200 51.552 23.280 re +269.177 423.120 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 385.560 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 385.560 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -99.792 157.200 360.864 23.280 re +48.240 348.000 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -460.656 157.200 103.104 23.280 re +269.177 348.000 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 218.040 m -99.792 218.040 l +48.240 483.960 m +269.177 483.960 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 180.480 m -99.792 180.480 l +48.240 460.680 m +269.177 460.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 218.290 m -48.240 179.730 l +48.240 484.210 m +48.240 459.930 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 218.290 m -99.792 179.730 l +269.177 484.210 m +269.177 459.930 l S [ ] 0 d 1 w @@ -28747,41 +28625,34 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 202.29300000000043 Td -/F2.0 10.5 Tf -<48545450> Tj -ET - - -BT -51.24000000000001 188.01300000000043 Td +51.24 468.21299999999997 Td /F2.0 10.5 Tf -<436f6465> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 218.040 m -460.656 218.040 l +269.177 483.960 m +563.760 483.960 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -99.792 180.480 m -460.656 180.480 l +269.177 460.680 m +563.760 460.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 218.290 m -99.792 179.730 l +269.177 484.210 m +269.177 459.930 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 218.290 m -460.656 179.730 l +563.760 484.210 m +563.760 459.930 l S [ ] 0 d 1 w @@ -28789,34 +28660,34 @@ S 0.200 0.200 0.200 scn BT -102.792 202.29300000000043 Td +272.17692192000004 468.21299999999997 Td /F2.0 10.5 Tf -<4465736372697074696f6e> Tj +<536368656d61> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 218.040 m -563.760 218.040 l +48.240 460.680 m +269.177 460.680 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -460.656 180.480 m -563.760 180.480 l +48.240 423.120 m +269.177 423.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 218.290 m -460.656 179.730 l +48.240 460.930 m +48.240 422.870 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 218.290 m -563.760 179.730 l +269.177 460.930 m +269.177 422.870 l S [ ] 0 d 1 w @@ -28824,34 +28695,46 @@ S 0.200 0.200 0.200 scn BT -463.65600000000006 202.29300000000043 Td +51.24 444.43299999999994 Td /F2.0 10.5 Tf -<536368656d61> Tj +<6465736372697074696f6e> Tj +ET + + +BT +51.24 430.1529999999999 Td +ET + + +BT +51.24 430.1529999999999 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 180.480 m -99.792 180.480 l +269.177 460.680 m +563.760 460.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 157.200 m -99.792 157.200 l +269.177 423.120 m +563.760 423.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 180.730 m -48.240 156.950 l +269.177 460.930 m +269.177 422.870 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 180.730 m -99.792 156.950 l +563.760 460.930 m +563.760 422.870 l S [ ] 0 d 1 w @@ -28859,34 +28742,34 @@ S 0.200 0.200 0.200 scn BT -51.24000000000001 164.23300000000043 Td -/F2.0 10.5 Tf -<323030> Tj +272.17692192000004 437.29299999999995 Td +/F1.0 10.5 Tf +<737472696e67> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -99.792 180.480 m -460.656 180.480 l +48.240 423.120 m +269.177 423.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 157.200 m -460.656 157.200 l +48.240 385.560 m +269.177 385.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -99.792 180.730 m -99.792 156.950 l +48.240 423.370 m +48.240 385.310 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 180.730 m -460.656 156.950 l +269.177 423.370 m +269.177 385.310 l S [ ] 0 d 1 w @@ -28894,1454 +28777,56 @@ S 0.200 0.200 0.200 scn BT -102.792 164.23300000000043 Td -/F1.0 10.5 Tf -<4f75747075742074797065> Tj +51.24 406.873 Td +/F2.0 10.5 Tf +<6865616c7468436865636b436f6d706f6e656e74> Tj +ET + + +BT +51.24 392.59299999999996 Td +ET + + +BT +51.24 392.59299999999996 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -460.656 180.480 m -563.760 180.480 l +269.177 423.120 m +563.760 423.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 157.200 m -563.760 157.200 l +269.177 385.560 m +563.760 385.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -460.656 180.730 m -460.656 156.950 l +269.177 423.370 m +269.177 385.310 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 180.730 m -563.760 156.950 l +563.760 423.370 m +563.760 385.310 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -463.65600000000006 164.23300000000043 Td +272.17692192000004 399.733 Td /F1.0 10.5 Tf -[<4c6f6f7054> 29.78515625 <656d706c617465>] TJ -ET - -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24000000000001 127.6160000000004 Td -/F2.0 13 Tf -<322e33362e332e2050726f6475636573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - --0.500 Tc -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -56.88050000000001 100.95600000000039 Td -/F1.0 10.5 Tf - Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -0.000 Tc -0.694 0.129 0.275 scn -0.694 0.129 0.275 SCN - -BT -66.24000000000001 103.14000000000038 Td -/F4.0 10.5 Tf -<6170706c69636174696f6e2f6a736f6e> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -q -0.000 0.000 0.000 scn -0.000 0.000 0.000 SCN -1 w -0 J -0 j -[ ] 0 d -/Stamp1 Do -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -49.24 14.388 Td -/F1.0 9 Tf -<3138> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -Q -Q - -endstream -endobj -238 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 237 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F2.0 24 0 R -/F1.0 8 0 R -/F4.0 35 0 R -/F3.0 26 0 R ->> -/XObject << /Stamp1 702 0 R ->> ->> -/Annots [240 0 R 248 0 R] ->> -endobj -239 0 obj -[238 0 R /XYZ 0 792.0 null] -endobj -240 0 obj -<< /Border [0 0 0] -/Dest (_looptemplate) -/Subtype /Link -/Rect [463.65600000000006 669.2470000000002 535.2997558593751 683.5270000000002] -/Type /Annot ->> -endobj -241 0 obj -[238 0 R /XYZ 0 653.2800000000002 null] -endobj -242 0 obj -[238 0 R /XYZ 0 597.0000000000003 null] -endobj -243 0 obj -[238 0 R /XYZ 0 556.9200000000004 null] -endobj -244 0 obj -[238 0 R /XYZ 0 451.8000000000005 null] -endobj -245 0 obj -[238 0 R /XYZ 0 395.5200000000005 null] -endobj -246 0 obj -[238 0 R /XYZ 0 355.44000000000045 null] -endobj -247 0 obj -[238 0 R /XYZ 0 250.32000000000045 null] -endobj -248 0 obj -<< /Border [0 0 0] -/Dest (_looptemplate) -/Subtype /Link -/Rect [463.65600000000006 161.16700000000043 535.2997558593751 175.44700000000043] -/Type /Annot ->> -endobj -249 0 obj -[238 0 R /XYZ 0 145.20000000000041 null] -endobj -250 0 obj -<< /Length 7900 ->> -stream -q -/DeviceRGB cs -0.200 0.200 0.200 scn -/DeviceRGB CS -0.200 0.200 0.200 SCN - -BT -48.24 734.976 Td -/F2.0 18 Tf -<322e33372e20474554> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 706.8960000000001 Td -/F2.0 18 Tf -<2f76322f74656d706c617465732f7b74656d706c6174654e616d657d2f737667526570726573656e746174696f6e> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 672.6560000000002 Td -/F2.0 13 Tf -[<322e33372e312e20506172> 20.01953125 <616d6574657273>] TJ -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 634.680 114.560 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -162.800 634.680 171.840 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -334.640 634.680 229.120 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 597.120 114.560 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -162.800 597.120 171.840 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -334.640 597.120 229.120 37.560 re -f -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 657.960 m -162.800 657.960 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 634.680 m -162.800 634.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 658.210 m -48.240 633.930 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 658.210 m -162.800 633.930 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 642.2130000000002 Td -/F2.0 10.5 Tf -<54797065> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -162.800 657.960 m -334.640 657.960 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -162.800 634.680 m -334.640 634.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 658.210 m -162.800 633.930 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 658.210 m -334.640 633.930 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -165.79988544 642.2130000000002 Td -/F2.0 10.5 Tf -<4e616d65> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -334.640 657.960 m -563.760 657.960 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -334.640 634.680 m -563.760 634.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 658.210 m -334.640 633.930 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 658.210 m -563.760 633.930 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -337.6397136 642.2130000000002 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 634.680 m -162.800 634.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 597.120 m -162.800 597.120 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 634.930 m -48.240 596.870 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 634.930 m -162.800 596.870 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 611.2930000000002 Td -/F2.0 10.5 Tf -<50617468> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -162.800 634.680 m -334.640 634.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 597.120 m -334.640 597.120 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -162.800 634.930 m -162.800 596.870 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 634.930 m -334.640 596.870 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -165.79988544 618.4330000000002 Td -/F2.0 10.5 Tf -<74656d706c6174654e616d65> Tj -ET - - -BT -165.79988544 604.1530000000002 Td -ET - - -BT -165.79988544 604.1530000000002 Td -/F3.0 10.5 Tf -<7265717569726564> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -334.640 634.680 m -563.760 634.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 597.120 m -563.760 597.120 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -334.640 634.930 m -334.640 596.870 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 634.930 m -563.760 596.870 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -337.6397136 611.2930000000002 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 567.5360000000004 Td -/F2.0 13 Tf -<322e33372e322e20526573706f6e736573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 515.280 51.552 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -99.792 515.280 360.864 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -460.656 515.280 103.104 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 492.000 51.552 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -99.792 492.000 360.864 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -460.656 492.000 103.104 23.280 re -f -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 552.840 m -99.792 552.840 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 515.280 m -99.792 515.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 553.090 m -48.240 514.530 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 553.090 m -99.792 514.530 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 537.0930000000005 Td -/F2.0 10.5 Tf -<48545450> Tj -ET - - -BT -51.24 522.8130000000004 Td -/F2.0 10.5 Tf -<436f6465> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -99.792 552.840 m -460.656 552.840 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -99.792 515.280 m -460.656 515.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 553.090 m -99.792 514.530 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 553.090 m -460.656 514.530 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -102.792 537.0930000000005 Td -/F2.0 10.5 Tf -<4465736372697074696f6e> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -460.656 552.840 m -563.760 552.840 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -460.656 515.280 m -563.760 515.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 553.090 m -460.656 514.530 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 553.090 m -563.760 514.530 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -463.65600000000006 537.0930000000005 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 515.280 m -99.792 515.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 492.000 m -99.792 492.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 515.530 m -48.240 491.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 515.530 m -99.792 491.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 499.0330000000004 Td -/F2.0 10.5 Tf -<323030> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -99.792 515.280 m -460.656 515.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 492.000 m -460.656 492.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -99.792 515.530 m -99.792 491.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 515.530 m -460.656 491.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -102.792 499.0330000000004 Td -/F1.0 10.5 Tf -<4f75747075742074797065> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -460.656 515.280 m -563.760 515.280 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 492.000 m -563.760 492.000 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -460.656 515.530 m -460.656 491.750 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 515.530 m -563.760 491.750 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -463.65600000000006 499.0330000000004 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 462.41600000000045 Td -/F2.0 13 Tf -<322e33372e332e2050726f6475636573> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - --0.500 Tc -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -56.88050000000001 435.7560000000004 Td -/F1.0 10.5 Tf - Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn - -0.000 Tc -0.694 0.129 0.275 scn -0.694 0.129 0.275 SCN - -BT -66.24000000000001 437.94000000000045 Td -/F4.0 10.5 Tf -<6170706c69636174696f6e2f786d6c> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -q -0.000 0.000 0.000 scn -0.000 0.000 0.000 SCN -1 w -0 J -0 j -[ ] 0 d -/Stamp1 Do -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -552.698 14.388 Td -/F1.0 9 Tf -<3139> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -Q -Q - -endstream -endobj -251 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 250 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F2.0 24 0 R -/F3.0 26 0 R -/F1.0 8 0 R -/F4.0 35 0 R ->> -/XObject << /Stamp1 702 0 R ->> ->> ->> -endobj -252 0 obj -[251 0 R /XYZ 0 792.0 null] -endobj -253 0 obj -[251 0 R /XYZ 0 690.2400000000001 null] -endobj -254 0 obj -[251 0 R /XYZ 0 585.1200000000003 null] -endobj -255 0 obj -[251 0 R /XYZ 0 480.00000000000045 null] -endobj -256 0 obj -<< /Length 17143 ->> -stream -q -/DeviceRGB cs -0.200 0.200 0.200 scn -/DeviceRGB CS -0.200 0.200 0.200 SCN - -BT -48.24 730.304 Td -/F2.0 22 Tf -<4368617074657220332e20446566696e6974696f6e73> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 688.656 Td -/F2.0 18 Tf -<332e312e20436c616d70496e666f726d6174696f6e> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 648.720 220.937 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 648.720 294.583 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 611.160 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 611.160 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 573.600 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 573.600 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 536.040 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 536.040 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 672.000 m -269.177 672.000 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 648.720 m -269.177 648.720 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 672.250 m -48.240 647.970 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 672.250 m -269.177 647.970 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 656.2529999999999 Td -/F2.0 10.5 Tf -<4e616d65> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 672.000 m -563.760 672.000 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -269.177 648.720 m -563.760 648.720 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 672.250 m -269.177 647.970 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 672.250 m -563.760 647.970 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 656.2529999999999 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 648.720 m -269.177 648.720 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 611.160 m -269.177 611.160 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 648.970 m -48.240 610.910 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 648.970 m -269.177 610.910 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 632.473 Td -/F2.0 10.5 Tf -<616c6c5065726d697373696f6e73> Tj -ET - - -BT -51.24 618.193 Td -ET - - -BT -51.24 618.193 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 648.720 m -563.760 648.720 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 611.160 m -563.760 611.160 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 648.970 m -269.177 610.910 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 648.970 m -563.760 610.910 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 625.333 Td -/F1.0 10.5 Tf -[<3c20737472696e67203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 611.160 m -269.177 611.160 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 573.600 m -269.177 573.600 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 611.410 m -48.240 573.350 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 611.410 m -269.177 573.350 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 594.913 Td -/F2.0 10.5 Tf -[<636c647356> 60.05859375 <657273696f6e>] TJ -ET - - -BT -51.24 580.6329999999999 Td -ET - - -BT -51.24 580.6329999999999 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 611.160 m -563.760 611.160 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 573.600 m -563.760 573.600 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 611.410 m -269.177 573.350 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 611.410 m -563.760 573.350 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 587.7729999999999 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 573.600 m -269.177 573.600 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 536.040 m -269.177 536.040 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 573.850 m -48.240 535.790 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 573.850 m -269.177 535.790 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 557.3530000000001 Td -/F2.0 10.5 Tf -<757365724e616d65> Tj -ET - - -BT -51.24 543.073 Td -ET - - -BT -51.24 543.073 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 573.600 m -563.760 573.600 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 536.040 m -563.760 536.040 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 573.850 m -269.177 535.790 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 573.850 m -563.760 535.790 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 550.213 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 500.61600000000004 Td -/F2.0 18 Tf -<332e322e20436c64734865616c7468436865636b> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 460.680 220.937 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 460.680 294.583 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 423.120 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 423.120 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 385.560 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 385.560 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 348.000 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 348.000 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 483.960 m -269.177 483.960 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -48.240 460.680 m -269.177 460.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 484.210 m -48.240 459.930 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 484.210 m -269.177 459.930 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 468.21299999999997 Td -/F2.0 10.5 Tf -<4e616d65> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 483.960 m -563.760 483.960 l -S -[ ] 0 d -1.5 w -0.867 0.867 0.867 SCN -269.177 460.680 m -563.760 460.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 484.210 m -269.177 459.930 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 484.210 m -563.760 459.930 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 468.21299999999997 Td -/F2.0 10.5 Tf -<536368656d61> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 460.680 m -269.177 460.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 423.120 m -269.177 423.120 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 460.930 m -48.240 422.870 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 460.930 m -269.177 422.870 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 444.43299999999994 Td -/F2.0 10.5 Tf -<6465736372697074696f6e> Tj -ET - - -BT -51.24 430.1529999999999 Td -ET - - -BT -51.24 430.1529999999999 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 460.680 m -563.760 460.680 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 423.120 m -563.760 423.120 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 460.930 m -269.177 422.870 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 460.930 m -563.760 422.870 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 437.29299999999995 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 423.120 m -269.177 423.120 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 385.560 m -269.177 385.560 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 423.370 m -48.240 385.310 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 423.370 m -269.177 385.310 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 406.873 Td -/F2.0 10.5 Tf -<6865616c7468436865636b436f6d706f6e656e74> Tj -ET - - -BT -51.24 392.59299999999996 Td -ET - - -BT -51.24 392.59299999999996 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 423.120 m -563.760 423.120 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 385.560 m -563.760 385.560 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 423.370 m -269.177 385.310 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 423.370 m -563.760 385.310 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 399.733 Td -/F1.0 10.5 Tf -<737472696e67> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -31000,9 +29485,9 @@ q 0.200 0.200 0.200 SCN BT -49.24 14.388 Td +552.698 14.388 Td /F1.0 9 Tf -<3230> Tj +<3139> Tj ET 0.000 0.000 0.000 SCN @@ -31012,35 +29497,35 @@ Q endstream endobj -257 0 obj +247 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 256 0 R +/Contents 246 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [262 0 R] +/Annots [252 0 R] >> endobj -258 0 obj -[257 0 R /XYZ 0 792.0 null] +248 0 obj +[247 0 R /XYZ 0 792.0 null] endobj -259 0 obj -[257 0 R /XYZ 0 712.0799999999999 null] +249 0 obj +[247 0 R /XYZ 0 712.0799999999999 null] endobj -260 0 obj -[257 0 R /XYZ 0 524.04 null] +250 0 obj +[247 0 R /XYZ 0 524.04 null] endobj -261 0 obj -[257 0 R /XYZ 0 335.99999999999994 null] +251 0 obj +[247 0 R /XYZ 0 335.99999999999994 null] endobj -262 0 obj +252 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link @@ -31048,8 +29533,8 @@ endobj /Type /Annot >> endobj -263 0 obj -<< /Length 19853 +253 0 obj +<< /Length 19851 >> stream q @@ -32605,9 +31090,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3231> Tj +<3230> Tj ET 0.000 0.000 0.000 SCN @@ -32617,26 +31102,26 @@ Q endstream endobj -264 0 obj +254 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 263 0 R +/Contents 253 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [266 0 R] +/Annots [256 0 R] >> endobj -265 0 obj -[264 0 R /XYZ 0 608.04 null] +255 0 obj +[254 0 R /XYZ 0 608.04 null] endobj -266 0 obj +256 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link @@ -32644,16 +31129,16 @@ endobj /Type /Annot >> endobj -267 0 obj -[264 0 R /XYZ 0 157.07999999999998 null] +257 0 obj +[254 0 R /XYZ 0 157.07999999999998 null] endobj -268 0 obj +258 0 obj << /Limits [(_definitions) (_loop)] -/Names [(_definitions) 258 0 R (_dictionary) 261 0 R (_dictionaryelement) 265 0 R (_externalcomponent) 267 0 R (_externalcomponentstate) 272 0 R (_jsonarray) 273 0 R (_jsonnull) 281 0 R (_jsonobject) 289 0 R (_jsonprimitive) 299 0 R (_loop) 307 0 R] +/Names [(_definitions) 248 0 R (_dictionary) 251 0 R (_dictionaryelement) 255 0 R (_externalcomponent) 257 0 R (_externalcomponentstate) 262 0 R (_jsonarray) 263 0 R (_jsonnull) 271 0 R (_jsonobject) 279 0 R (_jsonprimitive) 289 0 R (_loop) 297 0 R] >> endobj -269 0 obj -<< /Length 20491 +259 0 obj +<< /Length 20493 >> stream q @@ -34211,9 +32696,9 @@ q 0.200 0.200 0.200 SCN BT -49.24 14.388 Td +552.698 14.388 Td /F1.0 9 Tf -<3232> Tj +<3231> Tj ET 0.000 0.000 0.000 SCN @@ -34223,23 +32708,23 @@ Q endstream endobj -270 0 obj +260 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 269 0 R +/Contents 259 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [271 0 R 274 0 R 275 0 R] +/Annots [261 0 R 264 0 R 265 0 R] >> endobj -271 0 obj +261 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link @@ -34247,13 +32732,13 @@ endobj /Type /Annot >> endobj -272 0 obj -[270 0 R /XYZ 0 683.1600000000001 null] +262 0 obj +[260 0 R /XYZ 0 683.1600000000001 null] endobj -273 0 obj -[270 0 R /XYZ 0 495.1200000000002 null] +263 0 obj +[260 0 R /XYZ 0 495.1200000000002 null] endobj -274 0 obj +264 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -34261,7 +32746,7 @@ endobj /Type /Annot >> endobj -275 0 obj +265 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -34269,8 +32754,8 @@ endobj /Type /Annot >> endobj -276 0 obj -<< /Length 21350 +266 0 obj +<< /Length 21348 >> stream q @@ -35919,9 +34404,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3233> Tj +<3232> Tj ET 0.000 0.000 0.000 SCN @@ -35931,23 +34416,23 @@ Q endstream endobj -277 0 obj +267 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 276 0 R +/Contents 266 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [278 0 R 279 0 R 280 0 R] +/Annots [268 0 R 269 0 R 270 0 R] >> endobj -278 0 obj +268 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -35955,7 +34440,7 @@ endobj /Type /Annot >> endobj -279 0 obj +269 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -35963,7 +34448,7 @@ endobj /Type /Annot >> endobj -280 0 obj +270 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -35971,11 +34456,11 @@ endobj /Type /Annot >> endobj -281 0 obj -[277 0 R /XYZ 0 345.1200000000003 null] +271 0 obj +[267 0 R /XYZ 0 345.1200000000003 null] endobj -282 0 obj -<< /Length 21774 +272 0 obj +<< /Length 21776 >> stream q @@ -37640,9 +36125,9 @@ q 0.200 0.200 0.200 SCN BT -49.24 14.388 Td +552.698 14.388 Td /F1.0 9 Tf -<3234> Tj +<3233> Tj ET 0.000 0.000 0.000 SCN @@ -37652,23 +36137,23 @@ Q endstream endobj -283 0 obj +273 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 282 0 R +/Contents 272 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [284 0 R 285 0 R 286 0 R 287 0 R 288 0 R] +/Annots [274 0 R 275 0 R 276 0 R 277 0 R 278 0 R] >> endobj -284 0 obj +274 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -37676,7 +36161,7 @@ endobj /Type /Annot >> endobj -285 0 obj +275 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -37684,7 +36169,7 @@ endobj /Type /Annot >> endobj -286 0 obj +276 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -37692,7 +36177,7 @@ endobj /Type /Annot >> endobj -287 0 obj +277 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -37700,7 +36185,7 @@ endobj /Type /Annot >> endobj -288 0 obj +278 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -37708,11 +36193,11 @@ endobj /Type /Annot >> endobj -289 0 obj -[283 0 R /XYZ 0 194.88000000000017 null] +279 0 obj +[273 0 R /XYZ 0 194.88000000000017 null] endobj -290 0 obj -<< /Length 22907 +280 0 obj +<< /Length 22905 >> stream q @@ -39468,9 +37953,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3235> Tj +<3234> Tj ET 0.000 0.000 0.000 SCN @@ -39480,23 +37965,23 @@ Q endstream endobj -291 0 obj +281 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 290 0 R +/Contents 280 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [292 0 R 293 0 R 294 0 R 295 0 R 296 0 R] +/Annots [282 0 R 283 0 R 284 0 R 285 0 R 286 0 R] >> endobj -292 0 obj +282 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -39504,7 +37989,7 @@ endobj /Type /Annot >> endobj -293 0 obj +283 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -39512,7 +37997,7 @@ endobj /Type /Annot >> endobj -294 0 obj +284 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -39520,7 +38005,7 @@ endobj /Type /Annot >> endobj -295 0 obj +285 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -39528,7 +38013,7 @@ endobj /Type /Annot >> endobj -296 0 obj +286 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -39536,8 +38021,8 @@ endobj /Type /Annot >> endobj -297 0 obj -<< /Length 21592 +287 0 obj +<< /Length 21594 >> stream q @@ -41214,9 +39699,9 @@ q 0.200 0.200 0.200 SCN BT -49.24 14.388 Td +552.698 14.388 Td /F1.0 9 Tf -<3236> Tj +<3235> Tj ET 0.000 0.000 0.000 SCN @@ -41226,26 +39711,26 @@ Q endstream endobj -298 0 obj +288 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 297 0 R +/Contents 287 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [300 0 R 301 0 R 302 0 R 303 0 R 304 0 R] +/Annots [290 0 R 291 0 R 292 0 R 293 0 R 294 0 R] >> endobj -299 0 obj -[298 0 R /XYZ 0 792.0 null] +289 0 obj +[288 0 R /XYZ 0 792.0 null] endobj -300 0 obj +290 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link @@ -41253,7 +39738,7 @@ endobj /Type /Annot >> endobj -301 0 obj +291 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link @@ -41261,7 +39746,7 @@ endobj /Type /Annot >> endobj -302 0 obj +292 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -41269,7 +39754,7 @@ endobj /Type /Annot >> endobj -303 0 obj +293 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link @@ -41277,7 +39762,7 @@ endobj /Type /Annot >> endobj -304 0 obj +294 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link @@ -41285,8 +39770,8 @@ endobj /Type /Annot >> endobj -305 0 obj -<< /Length 22745 +295 0 obj +<< /Length 22743 >> stream q @@ -43000,9 +41485,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3237> Tj +<3236> Tj ET 0.000 0.000 0.000 SCN @@ -43012,26 +41497,26 @@ Q endstream endobj -306 0 obj +296 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 305 0 R +/Contents 295 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [308 0 R 309 0 R 310 0 R 311 0 R 312 0 R] +/Annots [298 0 R 299 0 R 300 0 R 301 0 R 302 0 R] >> endobj -307 0 obj -[306 0 R /XYZ 0 495.3600000000003 null] +297 0 obj +[296 0 R /XYZ 0 495.3600000000003 null] endobj -308 0 obj +298 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link @@ -43039,7 +41524,7 @@ endobj /Type /Annot >> endobj -309 0 obj +299 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -43047,7 +41532,7 @@ endobj /Type /Annot >> endobj -310 0 obj +300 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link @@ -43055,7 +41540,7 @@ endobj /Type /Annot >> endobj -311 0 obj +301 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link @@ -43063,7 +41548,7 @@ endobj /Type /Annot >> endobj -312 0 obj +302 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link @@ -43071,8 +41556,8 @@ endobj /Type /Annot >> endobj -313 0 obj -<< /Length 21622 +303 0 obj +<< /Length 22218 >> stream q @@ -43125,14 +41610,6 @@ f 269.177 544.920 294.583 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 507.360 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 507.360 294.583 37.560 re -f -0.000 0.000 0.000 scn 0.5 w /DeviceRGB CS 0.867 0.867 0.867 SCN @@ -43511,7 +41988,7 @@ S BT 51.24 603.7930000000001 Td /F2.0 10.5 Tf -<737667526570726573656e746174696f6e> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET @@ -43593,7 +42070,7 @@ S BT 51.24 566.233 Td /F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ +<7570646174656444617465> Tj ET @@ -43640,88 +42117,6 @@ S BT 272.17692192000004 559.093 Td /F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 544.920 m -269.177 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 507.360 m -269.177 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 545.170 m -48.240 507.110 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 545.170 m -269.177 507.110 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 528.673 Td -/F2.0 10.5 Tf -<7570646174656444617465> Tj -ET - - -BT -51.24 514.393 Td -ET - - -BT -51.24 514.393 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 544.920 m -563.760 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 507.360 m -563.760 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 545.170 m -269.177 507.110 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 545.170 m -563.760 507.110 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 521.533 Td -/F1.0 10.5 Tf <696e74656765722028696e74363429> Tj ET @@ -43730,7 +42125,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 471.9360000000001 Td +48.24 509.49600000000015 Td /F2.0 18 Tf <332e31322e204c6f6f70456c656d656e744d6f64656c> Tj ET @@ -43738,115 +42133,123 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 432.000 220.937 23.280 re +48.240 469.560 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 432.000 294.583 23.280 re +269.177 469.560 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 394.440 220.937 37.560 re +48.240 432.000 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 394.440 294.583 37.560 re +269.177 432.000 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 356.880 220.937 37.560 re +48.240 394.440 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 356.880 294.583 37.560 re +269.177 394.440 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 319.320 220.937 37.560 re +48.240 356.880 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 319.320 294.583 37.560 re +269.177 356.880 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 281.760 220.937 37.560 re +48.240 319.320 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 281.760 294.583 37.560 re +269.177 319.320 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 244.200 220.937 37.560 re +48.240 281.760 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 244.200 294.583 37.560 re +269.177 281.760 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 206.640 220.937 37.560 re +48.240 244.200 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 206.640 294.583 37.560 re +269.177 244.200 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 169.080 220.937 37.560 re +48.240 206.640 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 169.080 294.583 37.560 re +269.177 206.640 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 131.520 220.937 37.560 re +48.240 169.080 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 131.520 294.583 37.560 re +269.177 169.080 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 93.960 220.937 37.560 re +48.240 131.520 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 93.960 294.583 37.560 re +269.177 131.520 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 56.400 220.937 37.560 re +48.240 93.960 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn +269.177 93.960 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 56.400 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn 269.177 56.400 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 455.280 m -269.177 455.280 l +48.240 492.840 m +269.177 492.840 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 432.000 m -269.177 432.000 l +48.240 469.560 m +269.177 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 455.530 m -48.240 431.250 l +48.240 493.090 m +48.240 468.810 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 455.530 m -269.177 431.250 l +269.177 493.090 m +269.177 468.810 l S [ ] 0 d 1 w @@ -43854,7 +42257,7 @@ S 0.200 0.200 0.200 scn BT -51.24 439.533 Td +51.24 477.0930000000001 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -43862,26 +42265,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 455.280 m -563.760 455.280 l +269.177 492.840 m +563.760 492.840 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 432.000 m -563.760 432.000 l +269.177 469.560 m +563.760 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 455.530 m -269.177 431.250 l +269.177 493.090 m +269.177 468.810 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 455.530 m -563.760 431.250 l +563.760 493.090 m +563.760 468.810 l S [ ] 0 d 1 w @@ -43889,11 +42292,93 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 439.533 Td +272.17692192000004 477.0930000000001 Td /F2.0 10.5 Tf <536368656d61> Tj ET +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 469.560 m +269.177 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 432.000 m +269.177 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 469.810 m +48.240 431.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.810 m +269.177 431.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 453.31300000000005 Td +/F2.0 10.5 Tf +<626c75657072696e74> Tj +ET + + +BT +51.24 439.033 Td +ET + + +BT +51.24 439.033 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 469.560 m +563.760 469.560 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 432.000 m +563.760 432.000 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 469.810 m +269.177 431.750 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 469.810 m +563.760 431.750 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 446.17300000000006 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -43924,19 +42409,19 @@ S 0.200 0.200 0.200 scn BT -51.24 415.753 Td +51.24 415.7530000000001 Td /F2.0 10.5 Tf -<626c75657072696e74> Tj +[<6372656174656442> 20.01953125 <79>] TJ ET BT -51.24 401.47299999999996 Td +51.24 401.47300000000007 Td ET BT -51.24 401.47299999999996 Td +51.24 401.47300000000007 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -43971,7 +42456,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 408.613 Td +272.17692192000004 408.6130000000001 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -44008,7 +42493,7 @@ S BT 51.24 378.19300000000004 Td /F2.0 10.5 Tf -[<6372656174656442> 20.01953125 <79>] TJ +<6372656174656444617465> Tj ET @@ -44055,7 +42540,7 @@ S BT 272.17692192000004 371.05300000000005 Td /F1.0 10.5 Tf -<737472696e67> Tj +<696e74656765722028696e74363429> Tj ET 0.000 0.000 0.000 scn @@ -44088,19 +42573,19 @@ S 0.200 0.200 0.200 scn BT -51.24 340.633 Td +51.24 340.6330000000001 Td /F2.0 10.5 Tf -<6372656174656444617465> Tj +<64636165426c75657072696e744964> Tj ET BT -51.24 326.35299999999995 Td +51.24 326.35300000000007 Td ET BT -51.24 326.35299999999995 Td +51.24 326.35300000000007 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44135,9 +42620,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 333.493 Td +272.17692192000004 333.4930000000001 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -44172,7 +42657,7 @@ S BT 51.24 303.07300000000004 Td /F2.0 10.5 Tf -<64636165426c75657072696e744964> Tj +<6c6f6f70456c656d656e7454797065> Tj ET @@ -44252,19 +42737,19 @@ S 0.200 0.200 0.200 scn BT -51.24 265.513 Td +51.24 265.5130000000001 Td /F2.0 10.5 Tf -<6c6f6f70456c656d656e7454797065> Tj +<6e616d65> Tj ET BT -51.24 251.23299999999998 Td +51.24 251.2330000000001 Td ET BT -51.24 251.23299999999998 Td +51.24 251.2330000000001 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44299,7 +42784,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 258.373 Td +272.17692192000004 258.3730000000001 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -44334,19 +42819,19 @@ S 0.200 0.200 0.200 scn BT -51.24 227.95300000000003 Td +51.24 227.9530000000001 Td /F2.0 10.5 Tf -<6e616d65> Tj +<706f6c6963794d6f64656c73> Tj ET BT -51.24 213.67300000000003 Td +51.24 213.6730000000001 Td ET BT -51.24 213.67300000000003 Td +51.24 213.6730000000001 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44379,11 +42864,33 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn BT -272.17692192000004 220.81300000000002 Td +272.17692192000004 220.81300000000007 Td /F1.0 10.5 Tf -<737472696e67> Tj +<3c20> Tj +ET + +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +280.76592192000004 220.81300000000007 Td +/F1.0 10.5 Tf +<506f6c6963794d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +342.0649219200001 220.81300000000007 Td +/F1.0 10.5 Tf +[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET 0.000 0.000 0.000 scn @@ -44416,19 +42923,19 @@ S 0.200 0.200 0.200 scn BT -51.24 190.39300000000003 Td +51.24 190.39300000000006 Td /F2.0 10.5 Tf -<706f6c6963794d6f64656c73> Tj +<73686f72744e616d65> Tj ET BT -51.24 176.11300000000003 Td +51.24 176.11300000000006 Td ET BT -51.24 176.11300000000003 Td +51.24 176.11300000000006 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44461,33 +42968,11 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn BT -272.17692192000004 183.25300000000001 Td +272.17692192000004 183.25300000000004 Td /F1.0 10.5 Tf -<3c20> Tj -ET - -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN - -BT -280.76592192000004 183.25300000000001 Td -/F1.0 10.5 Tf -<506f6c6963794d6f64656c> Tj -ET - -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -342.0649219200001 183.25300000000001 Td -/F1.0 10.5 Tf -[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -44520,19 +43005,19 @@ S 0.200 0.200 0.200 scn BT -51.24 152.833 Td +51.24 152.83300000000006 Td /F2.0 10.5 Tf -<73686f72744e616d65> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET BT -51.24 138.553 Td +51.24 138.55300000000005 Td ET BT -51.24 138.553 Td +51.24 138.55300000000005 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44565,290 +43050,36 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn - -BT -272.17692192000004 145.69299999999998 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 131.520 m -269.177 131.520 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 93.960 m -269.177 93.960 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 131.770 m -48.240 93.710 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 131.770 m -269.177 93.710 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 115.27299999999998 Td -/F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ -ET - - -BT -51.24 100.99299999999998 Td -ET - - -BT -51.24 100.99299999999998 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 131.520 m -563.760 131.520 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 93.960 m -563.760 93.960 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 131.770 m -269.177 93.710 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 131.770 m -563.760 93.710 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 108.13299999999998 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 93.960 m -269.177 93.960 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 56.400 m -269.177 56.400 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 94.210 m -48.240 56.150 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 94.210 m -269.177 56.150 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 77.71299999999998 Td -/F2.0 10.5 Tf -<7570646174656444617465> Tj -ET - - -BT -51.24 63.43299999999998 Td -ET - - -BT -51.24 63.43299999999998 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 93.960 m -563.760 93.960 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 56.400 m -563.760 56.400 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 94.210 m -269.177 56.150 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 94.210 m -563.760 56.150 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 70.57299999999998 Td -/F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj -ET - -0.000 0.000 0.000 scn -q -0.000 0.000 0.000 scn -0.000 0.000 0.000 SCN -1 w -0 J -0 j -[ ] 0 d -/Stamp1 Do -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -49.24 14.388 Td -/F1.0 9 Tf -<3238> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -Q -Q - -endstream -endobj -314 0 obj -<< /Type /Page -/Parent 3 0 R -/MediaBox [0 0 612.0 792.0] -/Contents 313 0 R -/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/Font << /F2.0 24 0 R -/F3.0 26 0 R -/F1.0 8 0 R ->> -/XObject << /Stamp1 702 0 R ->> ->> -/Annots [315 0 R 316 0 R 318 0 R] ->> -endobj -315 0 obj -<< /Border [0 0 0] -/Dest (_service) -/Subtype /Link -/Rect [272.17692192000004 706.267 308.65392192 720.547] -/Type /Annot ->> -endobj -316 0 obj -<< /Border [0 0 0] -/Dest (_operationalpolicy) -/Subtype /Link -/Rect [280.76592192000004 631.1470000000002 370.37271684187505 645.4270000000001] -/Type /Annot ->> -endobj -317 0 obj -[314 0 R /XYZ 0 495.36000000000007 null] -endobj -318 0 obj -<< /Border [0 0 0] -/Dest (_policymodel) -/Subtype /Link -/Rect [280.76592192000004 180.18700000000004 342.0649219200001 194.46700000000004] -/Type /Annot ->> -endobj -319 0 obj -<< /Length 20989 ->> -stream -q -/DeviceRGB cs -1.000 1.000 1.000 scn -48.240 732.720 220.937 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 732.720 294.583 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 695.160 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 695.160 294.583 37.560 re -f + +BT +272.17692192000004 145.69300000000004 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + 0.000 0.000 0.000 scn 0.5 w -/DeviceRGB CS 0.867 0.867 0.867 SCN -48.240 756.000 m -269.177 756.000 l +48.240 131.520 m +269.177 131.520 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -48.240 732.720 m -269.177 732.720 l +48.240 93.960 m +269.177 93.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 756.250 m -48.240 731.970 l +48.240 131.770 m +48.240 93.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 756.250 m -269.177 731.970 l +269.177 131.770 m +269.177 93.710 l S [ ] 0 d 1 w @@ -44856,34 +43087,46 @@ S 0.200 0.200 0.200 scn BT -51.24 740.2529999999999 Td +51.24 115.27300000000004 Td /F2.0 10.5 Tf -<4e616d65> Tj +<7570646174656444617465> Tj +ET + + +BT +51.24 100.99300000000004 Td +ET + + +BT +51.24 100.99300000000004 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 756.000 m -563.760 756.000 l +269.177 131.520 m +563.760 131.520 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN -269.177 732.720 m -563.760 732.720 l +269.177 93.960 m +563.760 93.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 756.250 m -269.177 731.970 l +269.177 131.770 m +269.177 93.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 756.250 m -563.760 731.970 l +563.760 131.770 m +563.760 93.710 l S [ ] 0 d 1 w @@ -44891,34 +43134,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 740.2529999999999 Td -/F2.0 10.5 Tf -<536368656d61> Tj +272.17692192000004 108.13300000000004 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 732.720 m -269.177 732.720 l +48.240 93.960 m +269.177 93.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 695.160 m -269.177 695.160 l +48.240 56.400 m +269.177 56.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 732.970 m -48.240 694.910 l +48.240 94.210 m +48.240 56.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 732.970 m -269.177 694.910 l +269.177 94.210 m +269.177 56.150 l S [ ] 0 d 1 w @@ -44926,19 +43169,19 @@ S 0.200 0.200 0.200 scn BT -51.24 716.473 Td +51.24 77.71300000000004 Td /F2.0 10.5 Tf [<7573656442> 20.01953125 <794c6f6f7054> 29.78515625 <656d706c61746573>] TJ ET BT -51.24 702.193 Td +51.24 63.433000000000035 Td ET BT -51.24 702.193 Td +51.24 63.433000000000035 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -44946,26 +43189,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 732.720 m -563.760 732.720 l +269.177 93.960 m +563.760 93.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 695.160 m -563.760 695.160 l +269.177 56.400 m +563.760 56.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 732.970 m -269.177 694.910 l +269.177 94.210 m +269.177 56.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 732.970 m -563.760 694.910 l +563.760 94.210 m +563.760 56.150 l S [ ] 0 d 1 w @@ -44977,7 +43220,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 709.333 Td +272.17692192000004 70.57300000000004 Td /F1.0 10.5 Tf <3c20> Tj ET @@ -44986,7 +43229,7 @@ ET 0.259 0.545 0.792 SCN BT -280.76592192000004 709.333 Td +280.76592192000004 70.57300000000004 Td /F1.0 10.5 Tf [<4c6f6f7054> 29.78515625 <656d706c6174654c6f6f70456c656d656e744d6f64656c>] TJ ET @@ -44995,17 +43238,99 @@ ET 0.200 0.200 0.200 scn BT -450.12267777937507 709.333 Td +450.12267777937507 70.57300000000004 Td /F1.0 10.5 Tf [<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET 0.000 0.000 0.000 scn +q +0.000 0.000 0.000 scn +0.000 0.000 0.000 SCN +1 w +0 J +0 j +[ ] 0 d +/Stamp1 Do 0.200 0.200 0.200 scn 0.200 0.200 0.200 SCN BT -48.24 659.7360000000001 Td +552.698 14.388 Td +/F1.0 9 Tf +<3237> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +Q +Q + +endstream +endobj +304 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 612.0 792.0] +/Contents 303 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 24 0 R +/F3.0 26 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 676 0 R +>> +>> +/Annots [305 0 R 306 0 R 308 0 R 309 0 R] +>> +endobj +305 0 obj +<< /Border [0 0 0] +/Dest (_service) +/Subtype /Link +/Rect [272.17692192000004 706.267 308.65392192 720.547] +/Type /Annot +>> +endobj +306 0 obj +<< /Border [0 0 0] +/Dest (_operationalpolicy) +/Subtype /Link +/Rect [280.76592192000004 631.1470000000002 370.37271684187505 645.4270000000001] +/Type /Annot +>> +endobj +307 0 obj +[304 0 R /XYZ 0 532.9200000000001 null] +endobj +308 0 obj +<< /Border [0 0 0] +/Dest (_policymodel) +/Subtype /Link +/Rect [280.76592192000004 217.7470000000001 342.0649219200001 232.0270000000001] +/Type /Annot +>> +endobj +309 0 obj +<< /Border [0 0 0] +/Dest (_looptemplateloopelementmodel) +/Subtype /Link +/Rect [280.76592192000004 67.50700000000003 450.12267777937507 81.78700000000003] +/Type /Annot +>> +endobj +310 0 obj +<< /Length 20618 +>> +stream +q +/DeviceRGB cs +0.200 0.200 0.200 scn +/DeviceRGB CS +0.200 0.200 0.200 SCN + +BT +48.24 734.976 Td /F2.0 18 Tf <332e31332e204c6f6f704c6f67> Tj ET @@ -45013,83 +43338,83 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 619.800 220.937 23.280 re +48.240 695.040 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 619.800 294.583 23.280 re +269.177 695.040 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 582.240 220.937 37.560 re +48.240 657.480 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 582.240 294.583 37.560 re +269.177 657.480 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 544.680 220.937 37.560 re +48.240 619.920 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 544.680 294.583 37.560 re +269.177 619.920 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 507.120 220.937 37.560 re +48.240 582.360 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 507.120 294.583 37.560 re +269.177 582.360 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 469.560 220.937 37.560 re +48.240 544.800 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 469.560 294.583 37.560 re +269.177 544.800 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 432.000 220.937 37.560 re +48.240 507.240 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 432.000 294.583 37.560 re +269.177 507.240 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 394.440 220.937 37.560 re +48.240 469.680 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 394.440 294.583 37.560 re +269.177 469.680 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 643.080 m -269.177 643.080 l +48.240 718.320 m +269.177 718.320 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 619.800 m -269.177 619.800 l +48.240 695.040 m +269.177 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 643.330 m -48.240 619.050 l +48.240 718.570 m +48.240 694.290 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 643.330 m -269.177 619.050 l +269.177 718.570 m +269.177 694.290 l S [ ] 0 d 1 w @@ -45097,7 +43422,7 @@ S 0.200 0.200 0.200 scn BT -51.24 627.3330000000001 Td +51.24 702.573 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -45105,26 +43430,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 643.080 m -563.760 643.080 l +269.177 718.320 m +563.760 718.320 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 619.800 m -563.760 619.800 l +269.177 695.040 m +563.760 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 643.330 m -269.177 619.050 l +269.177 718.570 m +269.177 694.290 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 643.330 m -563.760 619.050 l +563.760 718.570 m +563.760 694.290 l S [ ] 0 d 1 w @@ -45132,7 +43457,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 627.3330000000001 Td +272.17692192000004 702.573 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -45140,26 +43465,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 619.800 m -269.177 619.800 l +48.240 695.040 m +269.177 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 582.240 m -269.177 582.240 l +48.240 657.480 m +269.177 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 620.050 m -48.240 581.990 l +48.240 695.290 m +48.240 657.230 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 620.050 m -269.177 581.990 l +269.177 695.290 m +269.177 657.230 l S [ ] 0 d 1 w @@ -45167,19 +43492,19 @@ S 0.200 0.200 0.200 scn BT -51.24 603.5530000000001 Td +51.24 678.7930000000001 Td /F2.0 10.5 Tf <6964> Tj ET BT -51.24 589.2730000000001 Td +51.24 664.513 Td ET BT -51.24 589.2730000000001 Td +51.24 664.513 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45187,26 +43512,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 619.800 m -563.760 619.800 l +269.177 695.040 m +563.760 695.040 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 582.240 m -563.760 582.240 l +269.177 657.480 m +563.760 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 620.050 m -269.177 581.990 l +269.177 695.290 m +269.177 657.230 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 620.050 m -563.760 581.990 l +563.760 695.290 m +563.760 657.230 l S [ ] 0 d 1 w @@ -45214,7 +43539,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 596.4130000000001 Td +272.17692192000004 671.653 Td /F1.0 10.5 Tf <696e74656765722028696e74363429> Tj ET @@ -45222,26 +43547,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 582.240 m -269.177 582.240 l +48.240 657.480 m +269.177 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 544.680 m -269.177 544.680 l +48.240 619.920 m +269.177 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 582.490 m -48.240 544.430 l +48.240 657.730 m +48.240 619.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 582.490 m -269.177 544.430 l +269.177 657.730 m +269.177 619.670 l S [ ] 0 d 1 w @@ -45249,19 +43574,19 @@ S 0.200 0.200 0.200 scn BT -51.24 565.9930000000002 Td +51.24 641.233 Td /F2.0 10.5 Tf <6c6f67436f6d706f6e656e74> Tj ET BT -51.24 551.7130000000001 Td +51.24 626.953 Td ET BT -51.24 551.7130000000001 Td +51.24 626.953 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45269,26 +43594,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 582.240 m -563.760 582.240 l +269.177 657.480 m +563.760 657.480 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 544.680 m -563.760 544.680 l +269.177 619.920 m +563.760 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 582.490 m -269.177 544.430 l +269.177 657.730 m +269.177 619.670 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 582.490 m -563.760 544.430 l +563.760 657.730 m +563.760 619.670 l S [ ] 0 d 1 w @@ -45296,7 +43621,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 558.8530000000001 Td +272.17692192000004 634.093 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -45304,26 +43629,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 544.680 m -269.177 544.680 l +48.240 619.920 m +269.177 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 507.120 m -269.177 507.120 l +48.240 582.360 m +269.177 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 544.930 m -48.240 506.870 l +48.240 620.170 m +48.240 582.110 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 544.930 m -269.177 506.870 l +269.177 620.170 m +269.177 582.110 l S [ ] 0 d 1 w @@ -45331,19 +43656,19 @@ S 0.200 0.200 0.200 scn BT -51.24 528.4330000000002 Td +51.24 603.673 Td /F2.0 10.5 Tf <6c6f67496e7374616e74> Tj ET BT -51.24 514.1530000000001 Td +51.24 589.393 Td ET BT -51.24 514.1530000000001 Td +51.24 589.393 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45351,26 +43676,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 544.680 m -563.760 544.680 l +269.177 619.920 m +563.760 619.920 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 507.120 m -563.760 507.120 l +269.177 582.360 m +563.760 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 544.930 m -269.177 506.870 l +269.177 620.170 m +269.177 582.110 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 544.930 m -563.760 506.870 l +563.760 620.170 m +563.760 582.110 l S [ ] 0 d 1 w @@ -45378,7 +43703,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 521.2930000000001 Td +272.17692192000004 596.533 Td /F1.0 10.5 Tf <696e74656765722028696e74363429> Tj ET @@ -45386,26 +43711,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 507.120 m -269.177 507.120 l +48.240 582.360 m +269.177 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 469.560 m -269.177 469.560 l +48.240 544.800 m +269.177 544.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 507.370 m -48.240 469.310 l +48.240 582.610 m +48.240 544.550 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 507.370 m -269.177 469.310 l +269.177 582.610 m +269.177 544.550 l S [ ] 0 d 1 w @@ -45413,19 +43738,19 @@ S 0.200 0.200 0.200 scn BT -51.24 490.8730000000001 Td +51.24 566.113 Td /F2.0 10.5 Tf <6c6f6754797065> Tj ET BT -51.24 476.5930000000001 Td +51.24 551.833 Td ET BT -51.24 476.5930000000001 Td +51.24 551.833 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45433,26 +43758,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 507.120 m -563.760 507.120 l +269.177 582.360 m +563.760 582.360 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 469.560 m -563.760 469.560 l +269.177 544.800 m +563.760 544.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 507.370 m -269.177 469.310 l +269.177 582.610 m +269.177 544.550 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 507.370 m -563.760 469.310 l +563.760 582.610 m +563.760 544.550 l S [ ] 0 d 1 w @@ -45460,7 +43785,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 483.7330000000001 Td +272.17692192000004 558.973 Td /F1.0 10.5 Tf [<656e756d2028494e464f2c2057> 60.05859375 <41524e494e472c20455252> 20.01953125 <4f5229>] TJ ET @@ -45468,26 +43793,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 469.560 m -269.177 469.560 l +48.240 544.800 m +269.177 544.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 432.000 m -269.177 432.000 l +48.240 507.240 m +269.177 507.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 469.810 m -48.240 431.750 l +48.240 545.050 m +48.240 506.990 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 469.810 m -269.177 431.750 l +269.177 545.050 m +269.177 506.990 l S [ ] 0 d 1 w @@ -45495,19 +43820,19 @@ S 0.200 0.200 0.200 scn BT -51.24 453.31300000000016 Td +51.24 528.5530000000001 Td /F2.0 10.5 Tf <6c6f6f70> Tj ET BT -51.24 439.03300000000013 Td +51.24 514.273 Td ET BT -51.24 439.03300000000013 Td +51.24 514.273 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45515,26 +43840,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 469.560 m -563.760 469.560 l +269.177 544.800 m +563.760 544.800 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.000 m -563.760 432.000 l +269.177 507.240 m +563.760 507.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 469.810 m -269.177 431.750 l +269.177 545.050 m +269.177 506.990 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 469.810 m -563.760 431.750 l +563.760 545.050 m +563.760 506.990 l S [ ] 0 d 1 w @@ -45548,7 +43873,7 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 446.1730000000002 Td +272.17692192000004 521.413 Td /F1.0 10.5 Tf <4c6f6f70> Tj ET @@ -45558,26 +43883,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 432.000 m -269.177 432.000 l +48.240 507.240 m +269.177 507.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l +48.240 469.680 m +269.177 469.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 432.250 m -48.240 394.190 l +48.240 507.490 m +48.240 469.430 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.250 m -269.177 394.190 l +269.177 507.490 m +269.177 469.430 l S [ ] 0 d 1 w @@ -45585,19 +43910,19 @@ S 0.200 0.200 0.200 scn BT -51.24 415.7530000000001 Td +51.24 490.993 Td /F2.0 10.5 Tf <6d657373616765> Tj ET BT -51.24 401.47300000000007 Td +51.24 476.71299999999997 Td ET BT -51.24 401.47300000000007 Td +51.24 476.71299999999997 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45605,26 +43930,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 432.000 m -563.760 432.000 l +269.177 507.240 m +563.760 507.240 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 469.680 m +563.760 469.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.250 m -269.177 394.190 l +269.177 507.490 m +269.177 469.430 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 432.250 m -563.760 394.190 l +563.760 507.490 m +563.760 469.430 l S [ ] 0 d 1 w @@ -45632,7 +43957,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 408.6130000000001 Td +272.17692192000004 483.853 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -45642,7 +43967,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 359.01600000000013 Td +48.24 434.25600000000003 Td /F2.0 18 Tf [<332e31342e204c6f6f7054> 29.78515625 <656d706c617465>] TJ ET @@ -45650,91 +43975,107 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 319.080 220.937 23.280 re +48.240 394.320 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 319.080 294.583 23.280 re +269.177 394.320 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 281.520 220.937 37.560 re +48.240 356.760 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 281.520 294.583 37.560 re +269.177 356.760 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 243.960 220.937 37.560 re +48.240 319.200 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 243.960 294.583 37.560 re +269.177 319.200 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 206.400 220.937 37.560 re +48.240 281.640 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 206.400 294.583 37.560 re +269.177 281.640 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 168.840 220.937 37.560 re +48.240 244.080 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 168.840 294.583 37.560 re +269.177 244.080 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 131.280 220.937 37.560 re +48.240 206.520 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 131.280 294.583 37.560 re +269.177 206.520 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 93.720 220.937 37.560 re +48.240 168.960 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 93.720 294.583 37.560 re +269.177 168.960 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 56.160 220.937 37.560 re +48.240 131.400 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 56.160 294.583 37.560 re +269.177 131.400 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 93.840 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 93.840 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 56.280 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 56.280 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 342.360 m -269.177 342.360 l +48.240 417.600 m +269.177 417.600 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 319.080 m -269.177 319.080 l +48.240 394.320 m +269.177 394.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 342.610 m -48.240 318.330 l +48.240 417.850 m +48.240 393.570 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 342.610 m -269.177 318.330 l +269.177 417.850 m +269.177 393.570 l S [ ] 0 d 1 w @@ -45742,7 +44083,7 @@ S 0.200 0.200 0.200 scn BT -51.24 326.61300000000006 Td +51.24 401.85299999999995 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -45750,26 +44091,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 342.360 m -563.760 342.360 l +269.177 417.600 m +563.760 417.600 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 319.080 m -563.760 319.080 l +269.177 394.320 m +563.760 394.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 342.610 m -269.177 318.330 l +269.177 417.850 m +269.177 393.570 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 342.610 m -563.760 318.330 l +563.760 417.850 m +563.760 393.570 l S [ ] 0 d 1 w @@ -45777,7 +44118,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 326.61300000000006 Td +272.17692192000004 401.85299999999995 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -45785,26 +44126,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 319.080 m -269.177 319.080 l +48.240 394.320 m +269.177 394.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 281.520 m -269.177 281.520 l +48.240 356.760 m +269.177 356.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.330 m -48.240 281.270 l +48.240 394.570 m +48.240 356.510 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.330 m -269.177 281.270 l +269.177 394.570 m +269.177 356.510 l S [ ] 0 d 1 w @@ -45812,19 +44153,19 @@ S 0.200 0.200 0.200 scn BT -51.24 302.833 Td +51.24 378.0729999999999 Td /F2.0 10.5 Tf <616c6c6f7765644c6f6f7054797065> Tj ET BT -51.24 288.553 Td +51.24 363.7929999999999 Td ET BT -51.24 288.553 Td +51.24 363.7929999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45832,26 +44173,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 319.080 m -563.760 319.080 l +269.177 394.320 m +563.760 394.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 281.520 m -563.760 281.520 l +269.177 356.760 m +563.760 356.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.330 m -269.177 281.270 l +269.177 394.570 m +269.177 356.510 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 319.330 m -563.760 281.270 l +563.760 394.570 m +563.760 356.510 l S [ ] 0 d 1 w @@ -45859,7 +44200,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 295.69300000000004 Td +272.17692192000004 370.93299999999994 Td /F1.0 10.5 Tf <656e756d20284f50454e2c20434c4f5345442c2048594252494429> Tj ET @@ -45867,26 +44208,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 281.520 m -269.177 281.520 l +48.240 356.760 m +269.177 356.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 243.960 m -269.177 243.960 l +48.240 319.200 m +269.177 319.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 281.770 m -48.240 243.710 l +48.240 357.010 m +48.240 318.950 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 281.770 m -269.177 243.710 l +269.177 357.010 m +269.177 318.950 l S [ ] 0 d 1 w @@ -45894,19 +44235,19 @@ S 0.200 0.200 0.200 scn BT -51.24 265.2730000000001 Td +51.24 340.513 Td /F2.0 10.5 Tf <626c75657072696e74> Tj ET BT -51.24 250.99300000000008 Td +51.24 326.23299999999995 Td ET BT -51.24 250.99300000000008 Td +51.24 326.23299999999995 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45914,26 +44255,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 281.520 m -563.760 281.520 l +269.177 356.760 m +563.760 356.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 243.960 m -563.760 243.960 l +269.177 319.200 m +563.760 319.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 281.770 m -269.177 243.710 l +269.177 357.010 m +269.177 318.950 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 281.770 m -563.760 243.710 l +563.760 357.010 m +563.760 318.950 l S [ ] 0 d 1 w @@ -45941,7 +44282,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 258.1330000000001 Td +272.17692192000004 333.373 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -45949,26 +44290,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 243.960 m -269.177 243.960 l +48.240 319.200 m +269.177 319.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 206.400 m -269.177 206.400 l +48.240 281.640 m +269.177 281.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 244.210 m -48.240 206.150 l +48.240 319.450 m +48.240 281.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.210 m -269.177 206.150 l +269.177 319.450 m +269.177 281.390 l S [ ] 0 d 1 w @@ -45976,19 +44317,19 @@ S 0.200 0.200 0.200 scn BT -51.24 227.71300000000008 Td +51.24 302.9529999999999 Td /F2.0 10.5 Tf [<6372656174656442> 20.01953125 <79>] TJ ET BT -51.24 213.43300000000008 Td +51.24 288.6729999999999 Td ET BT -51.24 213.43300000000008 Td +51.24 288.6729999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -45996,26 +44337,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 243.960 m -563.760 243.960 l +269.177 319.200 m +563.760 319.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 206.400 m -563.760 206.400 l +269.177 281.640 m +563.760 281.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.210 m -269.177 206.150 l +269.177 319.450 m +269.177 281.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 244.210 m -563.760 206.150 l +563.760 319.450 m +563.760 281.390 l S [ ] 0 d 1 w @@ -46023,7 +44364,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 220.57300000000006 Td +272.17692192000004 295.81299999999993 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -46031,26 +44372,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 206.400 m -269.177 206.400 l +48.240 281.640 m +269.177 281.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 168.840 m -269.177 168.840 l +48.240 244.080 m +269.177 244.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 206.650 m -48.240 168.590 l +48.240 281.890 m +48.240 243.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 206.650 m -269.177 168.590 l +269.177 281.890 m +269.177 243.830 l S [ ] 0 d 1 w @@ -46058,19 +44399,19 @@ S 0.200 0.200 0.200 scn BT -51.24 190.15300000000008 Td +51.24 265.393 Td /F2.0 10.5 Tf <6372656174656444617465> Tj ET BT -51.24 175.87300000000008 Td +51.24 251.11299999999997 Td ET BT -51.24 175.87300000000008 Td +51.24 251.11299999999997 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -46078,26 +44419,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 206.400 m -563.760 206.400 l +269.177 281.640 m +563.760 281.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 168.840 m -563.760 168.840 l +269.177 244.080 m +563.760 244.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 206.650 m -269.177 168.590 l +269.177 281.890 m +269.177 243.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 206.650 m -563.760 168.590 l +563.760 281.890 m +563.760 243.830 l S [ ] 0 d 1 w @@ -46105,7 +44446,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 183.01300000000006 Td +272.17692192000004 258.253 Td /F1.0 10.5 Tf <696e74656765722028696e74363429> Tj ET @@ -46113,26 +44454,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 168.840 m -269.177 168.840 l +48.240 244.080 m +269.177 244.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 131.280 m -269.177 131.280 l +48.240 206.520 m +269.177 206.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 169.090 m -48.240 131.030 l +48.240 244.330 m +48.240 206.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 169.090 m -269.177 131.030 l +269.177 244.330 m +269.177 206.270 l S [ ] 0 d 1 w @@ -46140,19 +44481,19 @@ S 0.200 0.200 0.200 scn BT -51.24 152.59300000000007 Td +51.24 227.83299999999997 Td /F2.0 10.5 Tf <64636165426c75657072696e744964> Tj ET BT -51.24 138.31300000000007 Td +51.24 213.55299999999997 Td ET BT -51.24 138.31300000000007 Td +51.24 213.55299999999997 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -46160,26 +44501,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 168.840 m -563.760 168.840 l +269.177 244.080 m +563.760 244.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 131.280 m -563.760 131.280 l +269.177 206.520 m +563.760 206.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 169.090 m -269.177 131.030 l +269.177 244.330 m +269.177 206.270 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 169.090 m -563.760 131.030 l +563.760 244.330 m +563.760 206.270 l S [ ] 0 d 1 w @@ -46187,7 +44528,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 145.45300000000006 Td +272.17692192000004 220.69299999999996 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -46195,26 +44536,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 131.280 m -269.177 131.280 l +48.240 206.520 m +269.177 206.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 93.720 m -269.177 93.720 l +48.240 168.960 m +269.177 168.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 131.530 m -48.240 93.470 l +48.240 206.770 m +48.240 168.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 131.530 m -269.177 93.470 l +269.177 206.770 m +269.177 168.710 l S [ ] 0 d 1 w @@ -46222,19 +44563,19 @@ S 0.200 0.200 0.200 scn BT -51.24 115.03300000000006 Td +51.24 190.27299999999997 Td /F2.0 10.5 Tf <6c6f6f70456c656d656e744d6f64656c7355736564> Tj ET BT -51.24 100.75300000000006 Td +51.24 175.99299999999997 Td ET BT -51.24 100.75300000000006 Td +51.24 175.99299999999997 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -46242,26 +44583,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 131.280 m -563.760 131.280 l +269.177 206.520 m +563.760 206.520 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 93.720 m -563.760 93.720 l +269.177 168.960 m +563.760 168.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 131.530 m -269.177 93.470 l +269.177 206.770 m +269.177 168.710 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 131.530 m -563.760 93.470 l +563.760 206.770 m +563.760 168.710 l S [ ] 0 d 1 w @@ -46273,7 +44614,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 107.89300000000006 Td +272.17692192000004 183.13299999999995 Td /F1.0 10.5 Tf <3c20> Tj ET @@ -46282,7 +44623,7 @@ ET 0.259 0.545 0.792 SCN BT -280.76592192000004 107.89300000000006 Td +280.76592192000004 183.13299999999995 Td /F1.0 10.5 Tf [<4c6f6f7054> 29.78515625 <656d706c6174654c6f6f70456c656d656e744d6f64656c>] TJ ET @@ -46291,7 +44632,7 @@ ET 0.200 0.200 0.200 scn BT -450.12267777937507 107.89300000000006 Td +450.12267777937507 183.13299999999995 Td /F1.0 10.5 Tf [<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ ET @@ -46299,26 +44640,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 93.720 m -269.177 93.720 l +48.240 168.960 m +269.177 168.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 56.160 m -269.177 56.160 l +48.240 131.400 m +269.177 131.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 93.970 m -48.240 55.910 l +48.240 169.210 m +48.240 131.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 93.970 m -269.177 55.910 l +269.177 169.210 m +269.177 131.150 l S [ ] 0 d 1 w @@ -46326,19 +44667,19 @@ S 0.200 0.200 0.200 scn BT -51.24 77.47300000000006 Td +51.24 152.71299999999997 Td /F2.0 10.5 Tf <6d6178696d756d496e7374616e636573416c6c6f776564> Tj ET BT -51.24 63.193000000000055 Td +51.24 138.43299999999996 Td ET BT -51.24 63.193000000000055 Td +51.24 138.43299999999996 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -46346,26 +44687,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 93.720 m -563.760 93.720 l +269.177 168.960 m +563.760 168.960 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 56.160 m -563.760 56.160 l +269.177 131.400 m +563.760 131.400 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 93.970 m -269.177 55.910 l +269.177 169.210 m +269.177 131.150 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 93.970 m -563.760 55.910 l +563.760 169.210 m +563.760 131.150 l S [ ] 0 d 1 w @@ -46373,11 +44714,183 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 70.33300000000006 Td +272.17692192000004 145.57299999999995 Td /F1.0 10.5 Tf <696e74656765722028696e74333229> Tj ET +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 131.400 m +269.177 131.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 93.840 m +269.177 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 131.650 m +48.240 93.590 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.650 m +269.177 93.590 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 115.15299999999992 Td +/F2.0 10.5 Tf +<6d6f64656c53657276696365> Tj +ET + + +BT +51.24 100.87299999999992 Td +ET + + +BT +51.24 100.87299999999992 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 131.400 m +563.760 131.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 93.840 m +563.760 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 131.650 m +269.177 93.590 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 131.650 m +563.760 93.590 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +272.17692192000004 108.01299999999992 Td +/F1.0 10.5 Tf +<53657276696365> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 93.840 m +269.177 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 56.280 m +269.177 56.280 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 94.090 m +48.240 56.030 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.090 m +269.177 56.030 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 77.59299999999992 Td +/F2.0 10.5 Tf +<6e616d65> Tj +ET + + +BT +51.24 63.31299999999992 Td +ET + + +BT +51.24 63.31299999999992 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 93.840 m +563.760 93.840 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 56.280 m +563.760 56.280 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 94.090 m +269.177 56.030 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 94.090 m +563.760 56.030 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 70.45299999999992 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + 0.000 0.000 0.000 scn q 0.000 0.000 0.000 scn @@ -46391,9 +44904,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3239> Tj +<3238> Tj ET 0.000 0.000 0.000 SCN @@ -46403,54 +44916,54 @@ Q endstream endobj -320 0 obj +311 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 319 0 R +/Contents 310 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [321 0 R 323 0 R 325 0 R] +/Annots [313 0 R 315 0 R 316 0 R] >> endobj -321 0 obj +312 0 obj +[311 0 R /XYZ 0 792.0 null] +endobj +313 0 obj << /Border [0 0 0] -/Dest (_looptemplateloopelementmodel) +/Dest (_loop) /Subtype /Link -/Rect [280.76592192000004 706.267 450.12267777937507 720.547] +/Rect [272.17692192000004 518.3470000000001 297.27192192000007 532.6270000000001] /Type /Annot >> endobj -322 0 obj -[320 0 R /XYZ 0 683.1600000000001 null] +314 0 obj +[311 0 R /XYZ 0 457.68 null] endobj -323 0 obj +315 0 obj << /Border [0 0 0] -/Dest (_loop) +/Dest (_looptemplateloopelementmodel) /Subtype /Link -/Rect [272.17692192000004 443.10700000000014 297.27192192000007 457.38700000000017] +/Rect [280.76592192000004 180.06699999999998 450.12267777937507 194.34699999999998] /Type /Annot >> endobj -324 0 obj -[320 0 R /XYZ 0 382.4400000000001 null] -endobj -325 0 obj +316 0 obj << /Border [0 0 0] -/Dest (_looptemplateloopelementmodel) +/Dest (_service) /Subtype /Link -/Rect [280.76592192000004 104.82700000000006 450.12267777937507 119.10700000000006] +/Rect [272.17692192000004 104.94699999999992 308.65392192 119.22699999999992] /Type /Annot >> endobj -326 0 obj -<< /Length 20474 +317 0 obj +<< /Length 20611 >> stream q @@ -46468,47 +44981,23 @@ f f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 695.160 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 657.600 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 657.600 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 620.040 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 620.040 294.583 37.560 re +269.177 695.160 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 582.480 220.937 37.560 re +48.240 657.600 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 582.480 294.583 37.560 re +269.177 657.600 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 544.920 220.937 37.560 re +48.240 620.040 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 544.920 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 507.360 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 507.360 294.583 37.560 re +269.177 620.040 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w @@ -46611,19 +45100,19 @@ S 0.200 0.200 0.200 scn BT -51.24 716.473 Td +51.24 716.4730000000002 Td /F2.0 10.5 Tf -<6d6f64656c53657276696365> Tj +<756e69717565426c75657072696e74> Tj ET BT -51.24 702.193 Td +51.24 702.1930000000001 Td ET BT -51.24 702.193 Td +51.24 702.1930000000001 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -46656,21 +45145,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 709.333 Td +272.17692192000004 709.3330000000001 Td /F1.0 10.5 Tf -<53657276696365> Tj +<626f6f6c65616e> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -46703,7 +45184,7 @@ S BT 51.24 678.913 Td /F2.0 10.5 Tf -<6e616d65> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET @@ -46785,17 +45266,17 @@ S BT 51.24 641.3530000000001 Td /F2.0 10.5 Tf -<737667526570726573656e746174696f6e> Tj +<7570646174656444617465> Tj ET BT -51.24 627.073 Td +51.24 627.0730000000001 Td ET BT -51.24 627.073 Td +51.24 627.0730000000001 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -46830,253 +45311,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 634.213 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 620.040 m -269.177 620.040 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 582.480 m -269.177 582.480 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 620.290 m -48.240 582.230 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 620.290 m -269.177 582.230 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 603.7929999999999 Td -/F2.0 10.5 Tf -<756e69717565426c75657072696e74> Tj -ET - - -BT -51.24 589.5129999999999 Td -ET - - -BT -51.24 589.5129999999999 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 620.040 m -563.760 620.040 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 582.480 m -563.760 582.480 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 620.290 m -269.177 582.230 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 620.290 m -563.760 582.230 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 596.6529999999999 Td -/F1.0 10.5 Tf -<626f6f6c65616e> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 582.480 m -269.177 582.480 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 544.920 m -269.177 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 582.730 m -48.240 544.670 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 582.730 m -269.177 544.670 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 566.233 Td -/F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ -ET - - -BT -51.24 551.953 Td -ET - - -BT -51.24 551.953 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 582.480 m -563.760 582.480 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 544.920 m -563.760 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 582.730 m -269.177 544.670 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 582.730 m -563.760 544.670 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 559.093 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 544.920 m -269.177 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 507.360 m -269.177 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 545.170 m -48.240 507.110 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 545.170 m -269.177 507.110 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 528.673 Td -/F2.0 10.5 Tf -<7570646174656444617465> Tj -ET - - -BT -51.24 514.393 Td -ET - - -BT -51.24 514.393 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 544.920 m -563.760 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 507.360 m -563.760 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 545.170 m -269.177 507.110 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 545.170 m -563.760 507.110 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 521.533 Td +272.17692192000004 634.2130000000001 Td /F1.0 10.5 Tf <696e74656765722028696e74363429> Tj ET @@ -47086,7 +45321,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 471.9360000000001 Td +48.24 584.6160000000002 Td /F2.0 18 Tf [<332e31352e204c6f6f7054> 29.78515625 <656d706c6174654c6f6f70456c656d656e744d6f64656c>] TJ ET @@ -47094,59 +45329,59 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 432.000 220.937 23.280 re +48.240 544.680 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 432.000 294.583 23.280 re +269.177 544.680 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 394.440 220.937 37.560 re +48.240 507.120 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 394.440 294.583 37.560 re +269.177 507.120 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 356.880 220.937 37.560 re +48.240 469.560 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 356.880 294.583 37.560 re +269.177 469.560 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 319.320 220.937 37.560 re +48.240 432.000 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 319.320 294.583 37.560 re +269.177 432.000 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 455.280 m -269.177 455.280 l +48.240 567.960 m +269.177 567.960 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 432.000 m -269.177 432.000 l +48.240 544.680 m +269.177 544.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 455.530 m -48.240 431.250 l +48.240 568.210 m +48.240 543.930 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 455.530 m -269.177 431.250 l +269.177 568.210 m +269.177 543.930 l S [ ] 0 d 1 w @@ -47154,7 +45389,7 @@ S 0.200 0.200 0.200 scn BT -51.24 439.533 Td +51.24 552.2130000000002 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -47162,26 +45397,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 455.280 m -563.760 455.280 l +269.177 567.960 m +563.760 567.960 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 432.000 m -563.760 432.000 l +269.177 544.680 m +563.760 544.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 455.530 m -269.177 431.250 l +269.177 568.210 m +269.177 543.930 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 455.530 m -563.760 431.250 l +563.760 568.210 m +563.760 543.930 l S [ ] 0 d 1 w @@ -47189,7 +45424,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 439.533 Td +272.17692192000004 552.2130000000002 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -47197,26 +45432,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 432.000 m -269.177 432.000 l +48.240 544.680 m +269.177 544.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l +48.240 507.120 m +269.177 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 432.250 m -48.240 394.190 l +48.240 544.930 m +48.240 506.870 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.250 m -269.177 394.190 l +269.177 544.930 m +269.177 506.870 l S [ ] 0 d 1 w @@ -47224,19 +45459,19 @@ S 0.200 0.200 0.200 scn BT -51.24 415.753 Td +51.24 528.4330000000002 Td /F2.0 10.5 Tf <666c6f774f72646572> Tj ET BT -51.24 401.47299999999996 Td +51.24 514.1530000000002 Td ET BT -51.24 401.47299999999996 Td +51.24 514.1530000000002 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47244,26 +45479,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 432.000 m -563.760 432.000 l +269.177 544.680 m +563.760 544.680 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 507.120 m +563.760 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 432.250 m -269.177 394.190 l +269.177 544.930 m +269.177 506.870 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 432.250 m -563.760 394.190 l +563.760 544.930 m +563.760 506.870 l S [ ] 0 d 1 w @@ -47271,7 +45506,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 408.613 Td +272.17692192000004 521.2930000000002 Td /F1.0 10.5 Tf <696e74656765722028696e74333229> Tj ET @@ -47279,26 +45514,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l +48.240 507.120 m +269.177 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 356.880 m -269.177 356.880 l +48.240 469.560 m +269.177 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 394.690 m -48.240 356.630 l +48.240 507.370 m +48.240 469.310 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 507.370 m +269.177 469.310 l S [ ] 0 d 1 w @@ -47306,19 +45541,19 @@ S 0.200 0.200 0.200 scn BT -51.24 378.19300000000004 Td +51.24 490.8730000000002 Td /F2.0 10.5 Tf <6c6f6f70456c656d656e744d6f64656c> Tj ET BT -51.24 363.913 Td +51.24 476.5930000000002 Td ET BT -51.24 363.913 Td +51.24 476.5930000000002 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47326,26 +45561,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 507.120 m +563.760 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 356.880 m -563.760 356.880 l +269.177 469.560 m +563.760 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 507.370 m +269.177 469.310 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 394.690 m -563.760 356.630 l +563.760 507.370 m +563.760 469.310 l S [ ] 0 d 1 w @@ -47359,7 +45594,7 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 371.05300000000005 Td +272.17692192000004 483.73300000000023 Td /F1.0 10.5 Tf <4c6f6f70456c656d656e744d6f64656c> Tj ET @@ -47369,26 +45604,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 356.880 m -269.177 356.880 l +48.240 469.560 m +269.177 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.320 m -269.177 319.320 l +48.240 432.000 m +269.177 432.000 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 357.130 m -48.240 319.070 l +48.240 469.810 m +48.240 431.750 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.130 m -269.177 319.070 l +269.177 469.810 m +269.177 431.750 l S [ ] 0 d 1 w @@ -47396,19 +45631,19 @@ S 0.200 0.200 0.200 scn BT -51.24 340.633 Td +51.24 453.3130000000003 Td /F2.0 10.5 Tf [<6c6f6f7054> 29.78515625 <656d706c617465>] TJ ET BT -51.24 326.35299999999995 Td +51.24 439.03300000000024 Td ET BT -51.24 326.35299999999995 Td +51.24 439.03300000000024 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47416,26 +45651,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 356.880 m -563.760 356.880 l +269.177 469.560 m +563.760 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.320 m -563.760 319.320 l +269.177 432.000 m +563.760 432.000 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.130 m -269.177 319.070 l +269.177 469.810 m +269.177 431.750 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 357.130 m -563.760 319.070 l +563.760 469.810 m +563.760 431.750 l S [ ] 0 d 1 w @@ -47449,7 +45684,7 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 333.493 Td +272.17692192000004 446.1730000000003 Td /F1.0 10.5 Tf [<4c6f6f7054> 29.78515625 <656d706c617465>] TJ ET @@ -47461,7 +45696,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 283.896 Td +48.24 396.5760000000003 Td /F2.0 18 Tf <332e31362e204d6963726f53657276696365506f6c696379> Tj ET @@ -47469,75 +45704,99 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 243.960 220.937 23.280 re +48.240 356.640 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 243.960 294.583 23.280 re +269.177 356.640 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 206.400 220.937 37.560 re +48.240 319.080 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 206.400 294.583 37.560 re +269.177 319.080 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 168.840 220.937 37.560 re +48.240 281.520 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 168.840 294.583 37.560 re +269.177 281.520 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 131.280 220.937 37.560 re +48.240 243.960 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 131.280 294.583 37.560 re +269.177 243.960 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 93.720 220.937 37.560 re +48.240 206.400 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 93.720 294.583 37.560 re +269.177 206.400 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 56.160 220.937 37.560 re +48.240 168.840 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 168.840 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 131.280 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 131.280 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 93.720 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn +269.177 93.720 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 56.160 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn 269.177 56.160 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 267.240 m -269.177 267.240 l +48.240 379.920 m +269.177 379.920 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 243.960 m -269.177 243.960 l +48.240 356.640 m +269.177 356.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 267.490 m -48.240 243.210 l +48.240 380.170 m +48.240 355.890 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 267.490 m -269.177 243.210 l +269.177 380.170 m +269.177 355.890 l S [ ] 0 d 1 w @@ -47545,7 +45804,7 @@ S 0.200 0.200 0.200 scn BT -51.24 251.49299999999994 Td +51.24 364.17300000000023 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -47553,26 +45812,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 267.240 m -563.760 267.240 l +269.177 379.920 m +563.760 379.920 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 243.960 m -563.760 243.960 l +269.177 356.640 m +563.760 356.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 267.490 m -269.177 243.210 l +269.177 380.170 m +269.177 355.890 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 267.490 m -563.760 243.210 l +563.760 380.170 m +563.760 355.890 l S [ ] 0 d 1 w @@ -47580,7 +45839,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 251.49299999999994 Td +272.17692192000004 364.17300000000023 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -47588,26 +45847,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 243.960 m -269.177 243.960 l +48.240 356.640 m +269.177 356.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 206.400 m -269.177 206.400 l +48.240 319.080 m +269.177 319.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 244.210 m -48.240 206.150 l +48.240 356.890 m +48.240 318.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.210 m -269.177 206.150 l +269.177 356.890 m +269.177 318.830 l S [ ] 0 d 1 w @@ -47615,19 +45874,19 @@ S 0.200 0.200 0.200 scn BT -51.24 227.71299999999997 Td +51.24 340.3930000000002 Td /F2.0 10.5 Tf [<636f6e6669677572> 20.01953125 <6174696f6e734a736f6e>] TJ ET BT -51.24 213.43299999999996 Td +51.24 326.11300000000017 Td ET BT -51.24 213.43299999999996 Td +51.24 326.11300000000017 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47635,26 +45894,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 243.960 m -563.760 243.960 l +269.177 356.640 m +563.760 356.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 206.400 m -563.760 206.400 l +269.177 319.080 m +563.760 319.080 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.210 m -269.177 206.150 l +269.177 356.890 m +269.177 318.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 244.210 m -563.760 206.150 l +563.760 356.890 m +563.760 318.830 l S [ ] 0 d 1 w @@ -47668,13 +45927,259 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 220.57299999999995 Td +272.17692192000004 333.2530000000002 Td /F1.0 10.5 Tf <4a736f6e4f626a656374> Tj ET 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 319.080 m +269.177 319.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 281.520 m +269.177 281.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 319.330 m +48.240 281.270 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 319.330 m +269.177 281.270 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 302.83300000000025 Td +/F2.0 10.5 Tf +<636f6e74657874> Tj +ET + + +BT +51.24 288.5530000000002 Td +ET + + +BT +51.24 288.5530000000002 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 319.080 m +563.760 319.080 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 281.520 m +563.760 281.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 319.330 m +269.177 281.270 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 319.330 m +563.760 281.270 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 295.69300000000027 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 281.520 m +269.177 281.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 243.960 m +269.177 243.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 281.770 m +48.240 243.710 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 281.770 m +269.177 243.710 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 265.2730000000002 Td +/F2.0 10.5 Tf +[<6372656174656442> 20.01953125 <79>] TJ +ET + + +BT +51.24 250.9930000000002 Td +ET + + +BT +51.24 250.9930000000002 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 281.520 m +563.760 281.520 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 243.960 m +563.760 243.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 281.770 m +269.177 243.710 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 281.770 m +563.760 243.710 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 258.1330000000002 Td +/F1.0 10.5 Tf +<737472696e67> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 243.960 m +269.177 243.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 206.400 m +269.177 206.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 244.210 m +48.240 206.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 244.210 m +269.177 206.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +51.24 227.71300000000025 Td +/F2.0 10.5 Tf +<6372656174656444617465> Tj +ET + + +BT +51.24 213.43300000000025 Td +ET + + +BT +51.24 213.43300000000025 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +269.177 243.960 m +563.760 243.960 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 206.400 m +563.760 206.400 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 244.210 m +269.177 206.150 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 244.210 m +563.760 206.150 l +S +[ ] 0 d +1 w +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +272.17692192000004 220.57300000000023 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj +ET + 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -47705,19 +46210,19 @@ S 0.200 0.200 0.200 scn BT -51.24 190.15299999999996 Td +51.24 190.15300000000025 Td /F2.0 10.5 Tf -<636f6e74657874> Tj +<64636165426c75657072696e744964> Tj ET BT -51.24 175.87299999999996 Td +51.24 175.87300000000025 Td ET BT -51.24 175.87299999999996 Td +51.24 175.87300000000025 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47752,7 +46257,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 183.01299999999995 Td +272.17692192000004 183.01300000000023 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -47787,19 +46292,19 @@ S 0.200 0.200 0.200 scn BT -51.24 152.59299999999996 Td +51.24 152.59300000000025 Td /F2.0 10.5 Tf -[<6372656174656442> 20.01953125 <79>] TJ +[<646361654465706c6f> 20.01953125 <796d656e744964>] TJ ET BT -51.24 138.31299999999996 Td +51.24 138.31300000000024 Td ET BT -51.24 138.31299999999996 Td +51.24 138.31300000000024 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47834,7 +46339,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 145.45299999999995 Td +272.17692192000004 145.45300000000023 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -47869,19 +46374,19 @@ S 0.200 0.200 0.200 scn BT -51.24 115.03299999999994 Td +51.24 115.03300000000023 Td /F2.0 10.5 Tf -<6372656174656444617465> Tj +[<646361654465706c6f> 20.01953125 <796d656e7453746174757355726c>] TJ ET BT -51.24 100.75299999999994 Td +51.24 100.75300000000023 Td ET BT -51.24 100.75299999999994 Td +51.24 100.75300000000023 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47916,9 +46421,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 107.89299999999994 Td +272.17692192000004 107.89300000000023 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -47951,19 +46456,19 @@ S 0.200 0.200 0.200 scn BT -51.24 77.47299999999994 Td +51.24 77.4730000000002 Td /F2.0 10.5 Tf -<64636165426c75657072696e744964> Tj +<6465766963655479706553636f7065> Tj ET BT -51.24 63.19299999999994 Td +51.24 63.1930000000002 Td ET BT -51.24 63.19299999999994 Td +51.24 63.1930000000002 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -47998,7 +46503,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 70.33299999999994 Td +272.17692192000004 70.3330000000002 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -48016,9 +46521,9 @@ q 0.200 0.200 0.200 SCN BT -49.24 14.388 Td +552.698 14.388 Td /F1.0 9 Tf -<3330> Tj +<3239> Tj ET 0.000 0.000 0.000 SCN @@ -48028,67 +46533,59 @@ Q endstream endobj -327 0 obj +318 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 326 0 R +/Contents 317 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [328 0 R 331 0 R 332 0 R 334 0 R] +/Annots [321 0 R 322 0 R 324 0 R] >> endobj -328 0 obj -<< /Border [0 0 0] -/Dest (_service) -/Subtype /Link -/Rect [272.17692192000004 706.267 308.65392192 720.547] -/Type /Annot ->> -endobj -329 0 obj -[327 0 R /XYZ 0 495.36000000000007 null] +319 0 obj +[318 0 R /XYZ 0 608.0400000000002 null] endobj -330 0 obj +320 0 obj << /Limits [(_loopelementmodel) (_parameters_14)] -/Names [(_loopelementmodel) 317 0 R (_looplog) 322 0 R (_looptemplate) 324 0 R (_looptemplateloopelementmodel) 329 0 R (_microservicepolicy) 333 0 R (_number) 341 0 R (_operationalpolicy) 342 0 R (_overview) 21 0 R (_parameters) 50 0 R (_parameters_10) 116 0 R (_parameters_11) 121 0 R (_parameters_12) 128 0 R (_parameters_13) 135 0 R (_parameters_14) 141 0 R] +/Names [(_loopelementmodel) 307 0 R (_looplog) 312 0 R (_looptemplate) 314 0 R (_looptemplateloopelementmodel) 319 0 R (_microservicepolicy) 323 0 R (_number) 331 0 R (_operationalpolicy) 332 0 R (_overview) 21 0 R (_parameters) 50 0 R (_parameters_10) 116 0 R (_parameters_11) 121 0 R (_parameters_12) 129 0 R (_parameters_13) 136 0 R (_parameters_14) 141 0 R] >> endobj -331 0 obj +321 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link -/Rect [272.17692192000004 367.987 369.88992192000006 382.26700000000005] +/Rect [272.17692192000004 480.6670000000002 369.88992192000006 494.94700000000023] /Type /Annot >> endobj -332 0 obj +322 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link -/Rect [272.17692192000004 330.42699999999996 343.82067777937505 344.707] +/Rect [272.17692192000004 443.10700000000026 343.82067777937505 457.3870000000003] /Type /Annot >> endobj -333 0 obj -[327 0 R /XYZ 0 307.32 null] +323 0 obj +[318 0 R /XYZ 0 420.0000000000003 null] endobj -334 0 obj +324 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 217.50699999999998 325.32792192000005 231.78699999999998] +/Rect [272.17692192000004 330.1870000000002 325.32792192000005 344.4670000000002] /Type /Annot >> endobj -335 0 obj -<< /Length 18807 +325 0 obj +<< /Length 20167 >> stream q @@ -48189,30 +46686,6 @@ f 269.177 319.560 294.583 37.560 re f 0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 282.000 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 282.000 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 244.440 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 244.440 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 206.880 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 206.880 294.583 37.560 re -f -0.000 0.000 0.000 scn 0.5 w /DeviceRGB CS 0.867 0.867 0.867 SCN @@ -48315,7 +46788,7 @@ S BT 51.24 716.473 Td /F2.0 10.5 Tf -[<646361654465706c6f> 20.01953125 <796d656e744964>] TJ +<6a736f6e526570726573656e746174696f6e> Tj ET @@ -48358,13 +46831,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 272.17692192000004 709.333 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4a736f6e4f626a656374> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -48397,17 +46878,17 @@ S BT 51.24 678.913 Td /F2.0 10.5 Tf -[<646361654465706c6f> 20.01953125 <796d656e7453746174757355726c>] TJ +<6c6567616379> Tj ET BT -51.24 664.633 Td +51.24 664.6329999999999 Td ET BT -51.24 664.633 Td +51.24 664.6329999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -48442,9 +46923,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 671.773 Td +272.17692192000004 671.7729999999999 Td /F1.0 10.5 Tf -<737472696e67> Tj +<626f6f6c65616e> Tj ET 0.000 0.000 0.000 scn @@ -48477,19 +46958,19 @@ S 0.200 0.200 0.200 scn BT -51.24 641.3530000000001 Td +51.24 641.3529999999998 Td /F2.0 10.5 Tf -<6465766963655479706553636f7065> Tj +<6c6f6f70456c656d656e744d6f64656c> Tj ET BT -51.24 627.073 Td +51.24 627.0729999999999 Td ET BT -51.24 627.073 Td +51.24 627.0729999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -48522,13 +47003,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -272.17692192000004 634.213 Td +272.17692192000004 634.2129999999999 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4c6f6f70456c656d656e744d6f64656c> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -48561,7 +47050,7 @@ S BT 51.24 603.7929999999999 Td /F2.0 10.5 Tf -<6a736f6e526570726573656e746174696f6e> Tj +<6e616d65> Tj ET @@ -48604,21 +47093,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT 272.17692192000004 596.6529999999999 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -48651,7 +47132,7 @@ S BT 51.24 566.233 Td /F2.0 10.5 Tf -<6c6567616379> Tj +<70647047726f7570> Tj ET @@ -48698,7 +47179,7 @@ S BT 272.17692192000004 559.093 Td /F1.0 10.5 Tf -<626f6f6c65616e> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -48733,17 +47214,17 @@ S BT 51.24 528.673 Td /F2.0 10.5 Tf -<6c6f6f70456c656d656e744d6f64656c> Tj +<70647053756267726f7570> Tj ET BT -51.24 514.393 Td +51.24 514.3929999999999 Td ET BT -51.24 514.393 Td +51.24 514.3929999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -48776,21 +47257,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 521.533 Td +272.17692192000004 521.5329999999999 Td /F1.0 10.5 Tf -<4c6f6f70456c656d656e744d6f64656c> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -48821,19 +47294,19 @@ S 0.200 0.200 0.200 scn BT -51.24 491.113 Td +51.24 491.1129999999999 Td /F2.0 10.5 Tf -<6e616d65> Tj +<706f6c6963794d6f64656c> Tj ET BT -51.24 476.83299999999997 Td +51.24 476.83299999999986 Td ET BT -51.24 476.83299999999997 Td +51.24 476.83299999999986 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -48866,13 +47339,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -272.17692192000004 483.973 Td +272.17692192000004 483.9729999999999 Td /F1.0 10.5 Tf -<737472696e67> Tj +<506f6c6963794d6f64656c> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -48903,19 +47384,19 @@ S 0.200 0.200 0.200 scn BT -51.24 453.553 Td +51.24 453.55299999999994 Td /F2.0 10.5 Tf -<70647047726f7570> Tj +<736861726564> Tj ET BT -51.24 439.273 Td +51.24 439.2729999999999 Td ET BT -51.24 439.273 Td +51.24 439.2729999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -48950,9 +47431,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 446.413 Td +272.17692192000004 446.41299999999995 Td /F1.0 10.5 Tf -<737472696e67> Tj +<626f6f6c65616e> Tj ET 0.000 0.000 0.000 scn @@ -48987,7 +47468,7 @@ S BT 51.24 415.993 Td /F2.0 10.5 Tf -<70647053756267726f7570> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET @@ -49067,19 +47548,19 @@ S 0.200 0.200 0.200 scn BT -51.24 378.43299999999994 Td +51.24 378.43300000000005 Td /F2.0 10.5 Tf -<706f6c6963794d6f64656c> Tj +<7570646174656444617465> Tj ET BT -51.24 364.1529999999999 Td +51.24 364.153 Td ET BT -51.24 364.1529999999999 Td +51.24 364.153 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -49112,21 +47593,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 371.29299999999995 Td +272.17692192000004 371.29300000000006 Td /F1.0 10.5 Tf -<506f6c6963794d6f64656c> Tj +<696e74656765722028696e74363429> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -49157,19 +47630,19 @@ S 0.200 0.200 0.200 scn BT -51.24 340.873 Td +51.24 340.8730000000001 Td /F2.0 10.5 Tf -<736861726564> Tj +[<7573656442> 20.01953125 <794c6f6f7073>] TJ ET BT -51.24 326.59299999999996 Td +51.24 326.5930000000001 Td ET BT -51.24 326.59299999999996 Td +51.24 326.5930000000001 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -49202,36 +47675,134 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn BT -272.17692192000004 333.733 Td +272.17692192000004 333.7330000000001 Td /F1.0 10.5 Tf -<626f6f6c65616e> Tj +<3c20> Tj +ET + +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN + +BT +280.76592192000004 333.7330000000001 Td +/F1.0 10.5 Tf +<4c6f6f70> Tj +ET + +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn + +BT +305.86092192000007 333.7330000000001 Td +/F1.0 10.5 Tf +[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +ET + +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 284.13600000000014 Td +/F2.0 18 Tf +<332e31372e204e756d626572> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 255.51600000000008 Td +/F3.0 10.5 Tf +<54797065> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +71.4345 255.51600000000008 Td +/F1.0 10.5 Tf +<203a206f626a656374> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 216.27600000000007 Td +/F2.0 18 Tf +[<332e31382e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ ET +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 176.340 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 176.340 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 138.780 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 138.780 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 101.220 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 101.220 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 63.660 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 63.660 294.583 37.560 re +f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 319.560 m -269.177 319.560 l +48.240 199.620 m +269.177 199.620 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN -48.240 282.000 m -269.177 282.000 l +48.240 176.340 m +269.177 176.340 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.810 m -48.240 281.750 l +48.240 199.870 m +48.240 175.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.810 m -269.177 281.750 l +269.177 199.870 m +269.177 175.590 l S [ ] 0 d 1 w @@ -49239,46 +47810,34 @@ S 0.200 0.200 0.200 scn BT -51.24 303.31300000000005 Td +51.24 183.87300000000008 Td /F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ -ET - - -BT -51.24 289.033 Td -ET - - -BT -51.24 289.033 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 319.560 m -563.760 319.560 l +269.177 199.620 m +563.760 199.620 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN -269.177 282.000 m -563.760 282.000 l +269.177 176.340 m +563.760 176.340 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.810 m -269.177 281.750 l +269.177 199.870 m +269.177 175.590 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 319.810 m -563.760 281.750 l +563.760 199.870 m +563.760 175.590 l S [ ] 0 d 1 w @@ -49286,34 +47845,34 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 296.17300000000006 Td -/F1.0 10.5 Tf -<737472696e67> Tj +272.17692192000004 183.87300000000008 Td +/F2.0 10.5 Tf +<536368656d61> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 282.000 m -269.177 282.000 l +48.240 176.340 m +269.177 176.340 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 244.440 m -269.177 244.440 l +48.240 138.780 m +269.177 138.780 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 282.250 m -48.240 244.190 l +48.240 176.590 m +48.240 138.530 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 282.250 m -269.177 244.190 l +269.177 176.590 m +269.177 138.530 l S [ ] 0 d 1 w @@ -49321,19 +47880,19 @@ S 0.200 0.200 0.200 scn BT -51.24 265.7530000000001 Td +51.24 160.09300000000007 Td /F2.0 10.5 Tf -<7570646174656444617465> Tj +[<636f6e6669677572> 20.01953125 <6174696f6e734a736f6e>] TJ ET BT -51.24 251.4730000000001 Td +51.24 145.81300000000007 Td ET BT -51.24 251.4730000000001 Td +51.24 145.81300000000007 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -49341,61 +47900,69 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 282.000 m -563.760 282.000 l +269.177 176.340 m +563.760 176.340 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.440 m -563.760 244.440 l +269.177 138.780 m +563.760 138.780 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 282.250 m -269.177 244.190 l +269.177 176.590 m +269.177 138.530 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 282.250 m -563.760 244.190 l +563.760 176.590 m +563.760 138.530 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -272.17692192000004 258.6130000000001 Td +272.17692192000004 152.95300000000006 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<4a736f6e4f626a656374> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 244.440 m -269.177 244.440 l +48.240 138.780 m +269.177 138.780 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 206.880 m -269.177 206.880 l +48.240 101.220 m +269.177 101.220 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 244.690 m -48.240 206.630 l +48.240 139.030 m +48.240 100.970 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.690 m -269.177 206.630 l +269.177 139.030 m +269.177 100.970 l S [ ] 0 d 1 w @@ -49403,19 +47970,19 @@ S 0.200 0.200 0.200 scn BT -51.24 228.19300000000018 Td +51.24 122.53300000000007 Td /F2.0 10.5 Tf -[<7573656442> 20.01953125 <794c6f6f7073>] TJ +[<6372656174656442> 20.01953125 <79>] TJ ET BT -51.24 213.91300000000018 Td +51.24 108.25300000000007 Td ET BT -51.24 213.91300000000018 Td +51.24 108.25300000000007 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -49423,104 +47990,120 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 244.440 m -563.760 244.440 l +269.177 138.780 m +563.760 138.780 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 206.880 m -563.760 206.880 l +269.177 101.220 m +563.760 101.220 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.690 m -269.177 206.630 l +269.177 139.030 m +269.177 100.970 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 244.690 m -563.760 206.630 l +563.760 139.030 m +563.760 100.970 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 221.05300000000017 Td -/F1.0 10.5 Tf -<3c20> Tj -ET - -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -280.76592192000004 221.05300000000017 Td +272.17692192000004 115.39300000000007 Td /F1.0 10.5 Tf -<4c6f6f70> Tj +<737472696e67> Tj ET +0.000 0.000 0.000 scn +0.5 w +0.867 0.867 0.867 SCN +48.240 101.220 m +269.177 101.220 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 63.660 m +269.177 63.660 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +48.240 101.470 m +48.240 63.410 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 101.470 m +269.177 63.410 l +S +[ ] 0 d +1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn BT -305.86092192000007 221.05300000000017 Td -/F1.0 10.5 Tf -[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +51.24 84.97300000000006 Td +/F2.0 10.5 Tf +<6372656174656444617465> Tj ET -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -48.24 171.45600000000013 Td -/F2.0 18 Tf -<332e31372e204e756d626572> Tj +51.24 70.69300000000005 Td ET -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -48.24 142.83600000000015 Td +51.24 70.69300000000005 Td /F3.0 10.5 Tf -<54797065> Tj +<6f7074696f6e616c> Tj ET -0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -71.4345 142.83600000000015 Td -/F1.0 10.5 Tf -<203a206f626a656374> Tj -ET - +0.5 w +0.867 0.867 0.867 SCN +269.177 101.220 m +563.760 101.220 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 63.660 m +563.760 63.660 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +269.177 101.470 m +269.177 63.410 l +S +[ ] 0 d +0.5 w +0.867 0.867 0.867 SCN +563.760 101.470 m +563.760 63.410 l +S +[ ] 0 d +1 w 0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn 0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN BT -48.24 103.59600000000015 Td -/F2.0 18 Tf -[<332e31382e204f706572> 20.01953125 <6174696f6e616c506f6c696379>] TJ +272.17692192000004 77.83300000000006 Td +/F1.0 10.5 Tf +<696e74656765722028696e74363429> Tj ET -0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn q 0.000 0.000 0.000 scn @@ -49534,9 +48117,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3331> Tj +<3330> Tj ET 0.000 0.000 0.000 SCN @@ -49546,62 +48129,70 @@ Q endstream endobj -336 0 obj +326 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 335 0 R +/Contents 325 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [337 0 R 338 0 R 339 0 R 340 0 R] +/Annots [327 0 R 328 0 R 329 0 R 330 0 R 333 0 R] >> endobj -337 0 obj +327 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 593.587 325.32792192000005 607.867] +/Rect [272.17692192000004 706.267 325.32792192000005 720.547] /Type /Annot >> endobj -338 0 obj +328 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link -/Rect [272.17692192000004 518.4670000000001 369.88992192000006 532.7470000000001] +/Rect [272.17692192000004 631.1469999999999 369.88992192000006 645.4269999999999] /Type /Annot >> endobj -339 0 obj +329 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link -/Rect [272.17692192000004 368.2269999999999 333.47592192 382.50699999999995] +/Rect [272.17692192000004 480.90699999999987 333.47592192 495.1869999999999] /Type /Annot >> endobj -340 0 obj +330 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link -/Rect [280.76592192000004 217.9870000000002 305.86092192000007 232.26700000000017] +/Rect [280.76592192000004 330.6670000000001 305.86092192000007 344.9470000000001] /Type /Annot >> endobj -341 0 obj -[336 0 R /XYZ 0 194.88000000000017 null] +331 0 obj +[326 0 R /XYZ 0 307.5600000000001 null] endobj -342 0 obj -[336 0 R /XYZ 0 127.02000000000015 null] +332 0 obj +[326 0 R /XYZ 0 239.70000000000007 null] endobj -343 0 obj -<< /Length 21796 +333 0 obj +<< /Border [0 0 0] +/Dest (_jsonobject) +/Subtype /Link +/Rect [272.17692192000004 149.88700000000009 325.32792192000005 164.1670000000001] +/Type /Annot +>> +endobj +334 0 obj +<< /Length 21550 >> stream q @@ -49694,30 +48285,6 @@ f 269.177 357.120 294.583 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 319.560 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 319.560 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 282.000 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 282.000 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 244.440 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 244.440 294.583 37.560 re -f -0.000 0.000 0.000 scn 0.5 w /DeviceRGB CS 0.867 0.867 0.867 SCN @@ -49820,7 +48387,7 @@ S BT 51.24 716.473 Td /F2.0 10.5 Tf -[<636f6e6669677572> 20.01953125 <6174696f6e734a736f6e>] TJ +<6a736f6e526570726573656e746174696f6e> Tj ET @@ -49910,17 +48477,17 @@ S BT 51.24 678.913 Td /F2.0 10.5 Tf -[<6372656174656442> 20.01953125 <79>] TJ +<6c6567616379> Tj ET BT -51.24 664.6329999999999 Td +51.24 664.633 Td ET BT -51.24 664.6329999999999 Td +51.24 664.633 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -49955,9 +48522,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 671.7729999999999 Td +272.17692192000004 671.773 Td /F1.0 10.5 Tf -<737472696e67> Tj +<626f6f6c65616e> Tj ET 0.000 0.000 0.000 scn @@ -49992,7 +48559,7 @@ S BT 51.24 641.3530000000001 Td /F2.0 10.5 Tf -<6372656174656444617465> Tj +<6c6f6f70> Tj ET @@ -50035,13 +48602,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT 272.17692192000004 634.213 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<4c6f6f70> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -50072,19 +48647,19 @@ S 0.200 0.200 0.200 scn BT -51.24 603.7929999999999 Td +51.24 603.7930000000001 Td /F2.0 10.5 Tf -<6a736f6e526570726573656e746174696f6e> Tj +<6c6f6f70456c656d656e744d6f64656c> Tj ET BT -51.24 589.5129999999999 Td +51.24 589.513 Td ET BT -51.24 589.5129999999999 Td +51.24 589.513 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -50125,9 +48700,9 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 596.6529999999999 Td +272.17692192000004 596.653 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<4c6f6f70456c656d656e744d6f64656c> Tj ET 0.000 0.000 0.000 SCN @@ -50164,7 +48739,7 @@ S BT 51.24 566.233 Td /F2.0 10.5 Tf -<6c6567616379> Tj +<6e616d65> Tj ET @@ -50211,7 +48786,7 @@ S BT 272.17692192000004 559.093 Td /F1.0 10.5 Tf -<626f6f6c65616e> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -50246,17 +48821,17 @@ S BT 51.24 528.673 Td /F2.0 10.5 Tf -<6c6f6f70> Tj +<70647047726f7570> Tj ET BT -51.24 514.3929999999999 Td +51.24 514.393 Td ET BT -51.24 514.3929999999999 Td +51.24 514.393 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -50289,21 +48864,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 521.5329999999999 Td +272.17692192000004 521.533 Td /F1.0 10.5 Tf -<4c6f6f70> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -50336,7 +48903,7 @@ S BT 51.24 491.113 Td /F2.0 10.5 Tf -<6c6f6f70456c656d656e744d6f64656c> Tj +<70647053756267726f7570> Tj ET @@ -50379,21 +48946,13 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT 272.17692192000004 483.973 Td /F1.0 10.5 Tf -<4c6f6f70456c656d656e744d6f64656c> Tj +<737472696e67> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -50424,19 +48983,19 @@ S 0.200 0.200 0.200 scn BT -51.24 453.55299999999994 Td +51.24 453.553 Td /F2.0 10.5 Tf -<6e616d65> Tj +<706f6c6963794d6f64656c> Tj ET BT -51.24 439.2729999999999 Td +51.24 439.273 Td ET BT -51.24 439.2729999999999 Td +51.24 439.273 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -50469,13 +49028,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -272.17692192000004 446.41299999999995 Td +272.17692192000004 446.413 Td /F1.0 10.5 Tf -<737472696e67> Tj +<506f6c6963794d6f64656c> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -50506,9 +49073,9 @@ S 0.200 0.200 0.200 scn BT -51.24 415.99299999999994 Td +51.24 415.993 Td /F2.0 10.5 Tf -<70647047726f7570> Tj +[<7570646174656442> 20.01953125 <79>] TJ ET @@ -50553,7 +49120,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 408.85299999999995 Td +272.17692192000004 408.853 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -50588,19 +49155,19 @@ S 0.200 0.200 0.200 scn BT -51.24 378.43299999999994 Td +51.24 378.433 Td /F2.0 10.5 Tf -<70647053756267726f7570> Tj +<7570646174656444617465> Tj ET BT -51.24 364.1529999999999 Td +51.24 364.153 Td ET BT -51.24 364.1529999999999 Td +51.24 364.153 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -50635,34 +49202,101 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 371.29299999999995 Td +272.17692192000004 371.293 Td /F1.0 10.5 Tf -<737472696e67> Tj +<696e74656765722028696e74363429> Tj ET +0.000 0.000 0.000 scn +0.200 0.200 0.200 scn +0.200 0.200 0.200 SCN + +BT +48.24 321.696 Td +/F2.0 18 Tf +<332e31392e20506f6c6963794d6f64656c> Tj +ET + +0.000 0.000 0.000 SCN +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 281.760 220.937 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 281.760 294.583 23.280 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 244.200 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 244.200 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 206.640 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 206.640 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 169.080 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 169.080 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 131.520 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 131.520 294.583 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +48.240 93.960 220.937 37.560 re +f +0.000 0.000 0.000 scn +1.000 1.000 1.000 scn +269.177 93.960 294.583 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +48.240 56.400 220.937 37.560 re +f +0.000 0.000 0.000 scn +0.976 0.976 0.976 scn +269.177 56.400 294.583 37.560 re +f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 357.120 m -269.177 357.120 l +48.240 305.040 m +269.177 305.040 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN -48.240 319.560 m -269.177 319.560 l +48.240 281.760 m +269.177 281.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 357.370 m -48.240 319.310 l +48.240 305.290 m +48.240 281.010 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.370 m -269.177 319.310 l +269.177 305.290 m +269.177 281.010 l S [ ] 0 d 1 w @@ -50670,89 +49304,69 @@ S 0.200 0.200 0.200 scn BT -51.24 340.87299999999993 Td +51.24 289.29299999999995 Td /F2.0 10.5 Tf -<706f6c6963794d6f64656c> Tj -ET - - -BT -51.24 326.59299999999996 Td -ET - - -BT -51.24 326.59299999999996 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj +<4e616d65> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 357.120 m -563.760 357.120 l +269.177 305.040 m +563.760 305.040 l S [ ] 0 d -0.5 w +1.5 w 0.867 0.867 0.867 SCN -269.177 319.560 m -563.760 319.560 l +269.177 281.760 m +563.760 281.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.370 m -269.177 319.310 l +269.177 305.290 m +269.177 281.010 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 357.370 m -563.760 319.310 l +563.760 305.290 m +563.760 281.010 l S [ ] 0 d 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN BT -272.17692192000004 333.73299999999995 Td -/F1.0 10.5 Tf -<506f6c6963794d6f64656c> Tj +272.17692192000004 289.29299999999995 Td +/F2.0 10.5 Tf +<536368656d61> Tj ET -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 319.560 m -269.177 319.560 l +48.240 281.760 m +269.177 281.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 282.000 m -269.177 282.000 l +48.240 244.200 m +269.177 244.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.810 m -48.240 281.750 l +48.240 282.010 m +48.240 243.950 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.810 m -269.177 281.750 l +269.177 282.010 m +269.177 243.950 l S [ ] 0 d 1 w @@ -50760,19 +49374,19 @@ S 0.200 0.200 0.200 scn BT -51.24 303.31299999999993 Td +51.24 265.513 Td /F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ +[<6372656174656442> 20.01953125 <79>] TJ ET BT -51.24 289.0329999999999 Td +51.24 251.23299999999998 Td ET BT -51.24 289.0329999999999 Td +51.24 251.23299999999998 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -50780,26 +49394,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 319.560 m -563.760 319.560 l +269.177 281.760 m +563.760 281.760 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 282.000 m -563.760 282.000 l +269.177 244.200 m +563.760 244.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.810 m -269.177 281.750 l +269.177 282.010 m +269.177 243.950 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 319.810 m -563.760 281.750 l +563.760 282.010 m +563.760 243.950 l S [ ] 0 d 1 w @@ -50807,7 +49421,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 296.17299999999994 Td +272.17692192000004 258.373 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -50815,26 +49429,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 282.000 m -269.177 282.000 l +48.240 244.200 m +269.177 244.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 244.440 m -269.177 244.440 l +48.240 206.640 m +269.177 206.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 282.250 m -48.240 244.190 l +48.240 244.450 m +48.240 206.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 282.250 m -269.177 244.190 l +269.177 244.450 m +269.177 206.390 l S [ ] 0 d 1 w @@ -50842,19 +49456,19 @@ S 0.200 0.200 0.200 scn BT -51.24 265.75299999999993 Td +51.24 227.95299999999997 Td /F2.0 10.5 Tf -<7570646174656444617465> Tj +<6372656174656444617465> Tj ET BT -51.24 251.47299999999993 Td +51.24 213.67299999999997 Td ET BT -51.24 251.47299999999993 Td +51.24 213.67299999999997 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -50862,26 +49476,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 282.000 m -563.760 282.000 l +269.177 244.200 m +563.760 244.200 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.440 m -563.760 244.440 l +269.177 206.640 m +563.760 206.640 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 282.250 m -269.177 244.190 l +269.177 244.450 m +269.177 206.390 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 282.250 m -563.760 244.190 l +563.760 244.450 m +563.760 206.390 l S [ ] 0 d 1 w @@ -50889,62 +49503,19 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 258.61299999999994 Td +272.17692192000004 220.81299999999996 Td /F1.0 10.5 Tf <696e74656765722028696e74363429> Tj ET -0.000 0.000 0.000 scn -0.200 0.200 0.200 scn -0.200 0.200 0.200 SCN - -BT -48.24 209.01599999999993 Td -/F2.0 18 Tf -<332e31392e20506f6c6963794d6f64656c> Tj -ET - -0.000 0.000 0.000 SCN -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 169.080 220.937 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 169.080 294.583 23.280 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 131.520 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 131.520 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 93.960 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 93.960 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 56.400 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 56.400 294.583 37.560 re -f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 192.360 m -269.177 192.360 l +48.240 206.640 m +269.177 206.640 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN 48.240 169.080 m 269.177 169.080 l @@ -50952,14 +49523,14 @@ S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 192.610 m -48.240 168.330 l +48.240 206.890 m +48.240 168.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 192.610 m -269.177 168.330 l +269.177 206.890 m +269.177 168.830 l S [ ] 0 d 1 w @@ -50967,19 +49538,31 @@ S 0.200 0.200 0.200 scn BT -51.24 176.61299999999994 Td +51.24 190.39299999999997 Td /F2.0 10.5 Tf -<4e616d65> Tj +[<706f6c69637941> 20.01953125 <63726f6e> 20.01953125 <796d>] TJ +ET + + +BT +51.24 176.11299999999997 Td +ET + + +BT +51.24 176.11299999999997 Td +/F3.0 10.5 Tf +<6f7074696f6e616c> Tj ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 192.360 m -563.760 192.360 l +269.177 206.640 m +563.760 206.640 l S [ ] 0 d -1.5 w +0.5 w 0.867 0.867 0.867 SCN 269.177 169.080 m 563.760 169.080 l @@ -50987,14 +49570,14 @@ S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 192.610 m -269.177 168.330 l +269.177 206.890 m +269.177 168.830 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 192.610 m -563.760 168.330 l +563.760 206.890 m +563.760 168.830 l S [ ] 0 d 1 w @@ -51002,9 +49585,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 176.61299999999994 Td -/F2.0 10.5 Tf -<536368656d61> Tj +272.17692192000004 183.25299999999996 Td +/F1.0 10.5 Tf +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -51037,19 +49620,19 @@ S 0.200 0.200 0.200 scn BT -51.24 152.83299999999994 Td +51.24 152.83299999999997 Td /F2.0 10.5 Tf -[<6372656174656442> 20.01953125 <79>] TJ +[<706f6c6963794d6f64656c54> 29.78515625 <6f736361>] TJ ET BT -51.24 138.55299999999994 Td +51.24 138.55299999999997 Td ET BT -51.24 138.55299999999994 Td +51.24 138.55299999999997 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -51084,7 +49667,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 145.69299999999993 Td +272.17692192000004 145.69299999999996 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -51119,19 +49702,19 @@ S 0.200 0.200 0.200 scn BT -51.24 115.27299999999993 Td +51.24 115.27299999999995 Td /F2.0 10.5 Tf -<6372656174656444617465> Tj +<706f6c6963794d6f64656c54797065> Tj ET BT -51.24 100.99299999999992 Td +51.24 100.99299999999995 Td ET BT -51.24 100.99299999999992 Td +51.24 100.99299999999995 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -51166,9 +49749,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 108.13299999999992 Td +272.17692192000004 108.13299999999995 Td /F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj +<737472696e67> Tj ET 0.000 0.000 0.000 scn @@ -51201,19 +49784,19 @@ S 0.200 0.200 0.200 scn BT -51.24 77.71299999999992 Td +51.24 77.71299999999995 Td /F2.0 10.5 Tf -[<706f6c69637941> 20.01953125 <63726f6e> 20.01953125 <796d>] TJ +<706f6c69637950647047726f7570> Tj ET BT -51.24 63.43299999999992 Td +51.24 63.43299999999995 Td ET BT -51.24 63.43299999999992 Td +51.24 63.43299999999995 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -51246,13 +49829,21 @@ S 1 w 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn +0.259 0.545 0.792 scn +0.259 0.545 0.792 SCN BT -272.17692192000004 70.57299999999992 Td +272.17692192000004 70.57299999999995 Td /F1.0 10.5 Tf -<737472696e67> Tj +<4a736f6e4f626a656374> Tj ET +0.000 0.000 0.000 SCN +0.200 0.200 0.200 scn 0.000 0.000 0.000 scn q 0.000 0.000 0.000 scn @@ -51266,9 +49857,9 @@ q 0.200 0.200 0.200 SCN BT -49.24 14.388 Td +552.698 14.388 Td /F1.0 9 Tf -<3332> Tj +<3331> Tj ET 0.000 0.000 0.000 SCN @@ -51278,23 +49869,23 @@ Q endstream endobj -344 0 obj +335 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 343 0 R +/Contents 334 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R +/XObject << /Stamp1 676 0 R >> >> -/Annots [345 0 R 346 0 R 347 0 R 348 0 R 349 0 R] +/Annots [336 0 R 337 0 R 338 0 R 339 0 R 341 0 R] >> endobj -345 0 obj +336 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link @@ -51302,43 +49893,43 @@ endobj /Type /Annot >> endobj -346 0 obj +337 0 obj << /Border [0 0 0] -/Dest (_jsonobject) +/Dest (_loop) /Subtype /Link -/Rect [272.17692192000004 593.587 325.32792192000005 607.867] +/Rect [272.17692192000004 631.147 297.27192192000007 645.427] /Type /Annot >> endobj -347 0 obj +338 0 obj << /Border [0 0 0] -/Dest (_loop) +/Dest (_loopelementmodel) /Subtype /Link -/Rect [272.17692192000004 518.467 297.27192192000007 532.747] +/Rect [272.17692192000004 593.5870000000001 369.88992192000006 607.8670000000001] /Type /Annot >> endobj -348 0 obj +339 0 obj << /Border [0 0 0] -/Dest (_loopelementmodel) +/Dest (_policymodel) /Subtype /Link -/Rect [272.17692192000004 480.907 369.88992192000006 495.187] +/Rect [272.17692192000004 443.347 333.47592192 457.627] /Type /Annot >> endobj -349 0 obj +340 0 obj +[335 0 R /XYZ 0 345.12 null] +endobj +341 0 obj << /Border [0 0 0] -/Dest (_policymodel) +/Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 330.6669999999999 333.47592192 344.94699999999995] +/Rect [272.17692192000004 67.50699999999995 325.32792192000005 81.78699999999995] /Type /Annot >> endobj -350 0 obj -[344 0 R /XYZ 0 232.43999999999994 null] -endobj -351 0 obj -<< /Length 17013 +342 0 obj +<< /Length 13509 >> stream q @@ -51383,30 +49974,6 @@ f 269.177 582.480 294.583 37.560 re f 0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 544.920 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 544.920 294.583 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -48.240 507.360 220.937 37.560 re -f -0.000 0.000 0.000 scn -0.976 0.976 0.976 scn -269.177 507.360 294.583 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -48.240 469.800 220.937 37.560 re -f -0.000 0.000 0.000 scn -1.000 1.000 1.000 scn -269.177 469.800 294.583 37.560 re -f -0.000 0.000 0.000 scn 0.5 w /DeviceRGB CS 0.867 0.867 0.867 SCN @@ -51509,7 +50076,7 @@ S BT 51.24 716.473 Td /F2.0 10.5 Tf -[<706f6c6963794d6f64656c54> 29.78515625 <6f736361>] TJ +[<7570646174656442> 20.01953125 <79>] TJ ET @@ -51591,17 +50158,17 @@ S BT 51.24 678.913 Td /F2.0 10.5 Tf -<706f6c6963794d6f64656c54797065> Tj +<7570646174656444617465> Tj ET BT -51.24 664.633 Td +51.24 664.6329999999999 Td ET BT -51.24 664.633 Td +51.24 664.6329999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -51636,9 +50203,9 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 671.773 Td +272.17692192000004 671.7729999999999 Td /F1.0 10.5 Tf -<737472696e67> Tj +<696e74656765722028696e74363429> Tj ET 0.000 0.000 0.000 scn @@ -51671,19 +50238,19 @@ S 0.200 0.200 0.200 scn BT -51.24 641.3530000000001 Td +51.24 641.3529999999998 Td /F2.0 10.5 Tf -<706f6c69637950647047726f7570> Tj +[<7573656442> 20.01953125 <79456c656d656e744d6f64656c73>] TJ ET BT -51.24 627.073 Td +51.24 627.0729999999999 Td ET BT -51.24 627.073 Td +51.24 627.0729999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -51720,17 +50287,31 @@ S 0.259 0.545 0.792 SCN 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn + +BT +272.17692192000004 634.2129999999999 Td +/F1.0 10.5 Tf +<3c20> Tj +ET + 0.259 0.545 0.792 scn 0.259 0.545 0.792 SCN BT -272.17692192000004 634.213 Td +280.76592192000004 634.2129999999999 Td /F1.0 10.5 Tf -<4a736f6e4f626a656374> Tj +<4c6f6f70456c656d656e744d6f64656c> Tj ET 0.000 0.000 0.000 SCN 0.200 0.200 0.200 scn + +BT +378.47892192000006 634.2129999999999 Td +/F1.0 10.5 Tf +[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ +ET + 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN @@ -51761,19 +50342,19 @@ S 0.200 0.200 0.200 scn BT -51.24 603.7930000000001 Td +51.24 603.7929999999999 Td /F2.0 10.5 Tf -[<7570646174656442> 20.01953125 <79>] TJ +<76657273696f6e> Tj ET BT -51.24 589.513 Td +51.24 589.5129999999999 Td ET BT -51.24 589.513 Td +51.24 589.5129999999999 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -51808,275 +50389,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 596.653 Td -/F1.0 10.5 Tf -<737472696e67> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 582.480 m -269.177 582.480 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 544.920 m -269.177 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 582.730 m -48.240 544.670 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 582.730 m -269.177 544.670 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 566.233 Td -/F2.0 10.5 Tf -<7570646174656444617465> Tj -ET - - -BT -51.24 551.953 Td -ET - - -BT -51.24 551.953 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 582.480 m -563.760 582.480 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 544.920 m -563.760 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 582.730 m -269.177 544.670 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 582.730 m -563.760 544.670 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 559.093 Td -/F1.0 10.5 Tf -<696e74656765722028696e74363429> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 544.920 m -269.177 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 507.360 m -269.177 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 545.170 m -48.240 507.110 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 545.170 m -269.177 507.110 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 528.673 Td -/F2.0 10.5 Tf -[<7573656442> 20.01953125 <79456c656d656e744d6f64656c73>] TJ -ET - - -BT -51.24 514.393 Td -ET - - -BT -51.24 514.393 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 544.920 m -563.760 544.920 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 507.360 m -563.760 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 545.170 m -269.177 507.110 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 545.170 m -563.760 507.110 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 521.533 Td -/F1.0 10.5 Tf -<3c20> Tj -ET - -0.259 0.545 0.792 scn -0.259 0.545 0.792 SCN - -BT -280.76592192000004 521.533 Td -/F1.0 10.5 Tf -<4c6f6f70456c656d656e744d6f64656c> Tj -ET - -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -378.47892192000006 521.533 Td -/F1.0 10.5 Tf -[<203e20617272> 20.01953125 <61> 20.01953125 <79>] TJ -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -48.240 507.360 m -269.177 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 469.800 m -269.177 469.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -48.240 507.610 m -48.240 469.550 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 507.610 m -269.177 469.550 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -51.24 491.113 Td -/F2.0 10.5 Tf -<76657273696f6e> Tj -ET - - -BT -51.24 476.83299999999997 Td -ET - - -BT -51.24 476.83299999999997 Td -/F3.0 10.5 Tf -<6f7074696f6e616c> Tj -ET - -0.000 0.000 0.000 scn -0.5 w -0.867 0.867 0.867 SCN -269.177 507.360 m -563.760 507.360 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 469.800 m -563.760 469.800 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -269.177 507.610 m -269.177 469.550 l -S -[ ] 0 d -0.5 w -0.867 0.867 0.867 SCN -563.760 507.610 m -563.760 469.550 l -S -[ ] 0 d -1 w -0.000 0.000 0.000 SCN -0.200 0.200 0.200 scn - -BT -272.17692192000004 483.973 Td +272.17692192000004 596.6529999999999 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -52086,7 +50399,7 @@ ET 0.200 0.200 0.200 SCN BT -48.24 434.37600000000003 Td +48.24 547.056 Td /F2.0 18 Tf <332e32302e2053657276696365> Tj ET @@ -52094,75 +50407,75 @@ ET 0.000 0.000 0.000 SCN 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 394.440 220.937 23.280 re +48.240 507.120 220.937 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 394.440 294.583 23.280 re +269.177 507.120 294.583 23.280 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 356.880 220.937 37.560 re +48.240 469.560 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 356.880 294.583 37.560 re +269.177 469.560 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 319.320 220.937 37.560 re +48.240 432.000 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 319.320 294.583 37.560 re +269.177 432.000 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 281.760 220.937 37.560 re +48.240 394.440 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 281.760 294.583 37.560 re +269.177 394.440 294.583 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -48.240 244.200 220.937 37.560 re +48.240 356.880 220.937 37.560 re f 0.000 0.000 0.000 scn 0.976 0.976 0.976 scn -269.177 244.200 294.583 37.560 re +269.177 356.880 294.583 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -48.240 206.640 220.937 37.560 re +48.240 319.320 220.937 37.560 re f 0.000 0.000 0.000 scn 1.000 1.000 1.000 scn -269.177 206.640 294.583 37.560 re +269.177 319.320 294.583 37.560 re f 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 417.720 m -269.177 417.720 l +48.240 530.400 m +269.177 530.400 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l +48.240 507.120 m +269.177 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 417.970 m -48.240 393.690 l +48.240 530.650 m +48.240 506.370 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 417.970 m -269.177 393.690 l +269.177 530.650 m +269.177 506.370 l S [ ] 0 d 1 w @@ -52170,7 +50483,7 @@ S 0.200 0.200 0.200 scn BT -51.24 401.97299999999996 Td +51.24 514.653 Td /F2.0 10.5 Tf <4e616d65> Tj ET @@ -52178,26 +50491,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 417.720 m -563.760 417.720 l +269.177 530.400 m +563.760 530.400 l S [ ] 0 d 1.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 507.120 m +563.760 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 417.970 m -269.177 393.690 l +269.177 530.650 m +269.177 506.370 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 417.970 m -563.760 393.690 l +563.760 530.650 m +563.760 506.370 l S [ ] 0 d 1 w @@ -52205,7 +50518,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 401.97299999999996 Td +272.17692192000004 514.653 Td /F2.0 10.5 Tf <536368656d61> Tj ET @@ -52213,26 +50526,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 394.440 m -269.177 394.440 l +48.240 507.120 m +269.177 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 356.880 m -269.177 356.880 l +48.240 469.560 m +269.177 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 394.690 m -48.240 356.630 l +48.240 507.370 m +48.240 469.310 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 507.370 m +269.177 469.310 l S [ ] 0 d 1 w @@ -52240,19 +50553,19 @@ S 0.200 0.200 0.200 scn BT -51.24 378.1929999999999 Td +51.24 490.8730000000001 Td /F2.0 10.5 Tf <6e616d65> Tj ET BT -51.24 363.9129999999999 Td +51.24 476.5930000000001 Td ET BT -51.24 363.9129999999999 Td +51.24 476.5930000000001 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -52260,26 +50573,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 394.440 m -563.760 394.440 l +269.177 507.120 m +563.760 507.120 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 356.880 m -563.760 356.880 l +269.177 469.560 m +563.760 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 394.690 m -269.177 356.630 l +269.177 507.370 m +269.177 469.310 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 394.690 m -563.760 356.630 l +563.760 507.370 m +563.760 469.310 l S [ ] 0 d 1 w @@ -52287,7 +50600,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 371.05299999999994 Td +272.17692192000004 483.7330000000001 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -52295,26 +50608,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 356.880 m -269.177 356.880 l +48.240 469.560 m +269.177 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.320 m -269.177 319.320 l +48.240 432.000 m +269.177 432.000 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 357.130 m -48.240 319.070 l +48.240 469.810 m +48.240 431.750 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.130 m -269.177 319.070 l +269.177 469.810 m +269.177 431.750 l S [ ] 0 d 1 w @@ -52322,19 +50635,19 @@ S 0.200 0.200 0.200 scn BT -51.24 340.633 Td +51.24 453.31300000000005 Td /F2.0 10.5 Tf <7265736f7572636544657461696c73> Tj ET BT -51.24 326.35299999999995 Td +51.24 439.033 Td ET BT -51.24 326.35299999999995 Td +51.24 439.033 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -52342,26 +50655,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 356.880 m -563.760 356.880 l +269.177 469.560 m +563.760 469.560 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.320 m -563.760 319.320 l +269.177 432.000 m +563.760 432.000 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 357.130 m -269.177 319.070 l +269.177 469.810 m +269.177 431.750 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 357.130 m -563.760 319.070 l +563.760 469.810 m +563.760 431.750 l S [ ] 0 d 1 w @@ -52375,7 +50688,7 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 333.493 Td +272.17692192000004 446.17300000000006 Td /F1.0 10.5 Tf <4a736f6e4f626a656374> Tj ET @@ -52385,26 +50698,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 319.320 m -269.177 319.320 l +48.240 432.000 m +269.177 432.000 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 281.760 m -269.177 281.760 l +48.240 394.440 m +269.177 394.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 319.570 m -48.240 281.510 l +48.240 432.250 m +48.240 394.190 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.570 m -269.177 281.510 l +269.177 432.250 m +269.177 394.190 l S [ ] 0 d 1 w @@ -52412,19 +50725,19 @@ S 0.200 0.200 0.200 scn BT -51.24 303.0729999999999 Td +51.24 415.7530000000001 Td /F2.0 10.5 Tf <7365727669636544657461696c73> Tj ET BT -51.24 288.7929999999999 Td +51.24 401.47300000000007 Td ET BT -51.24 288.7929999999999 Td +51.24 401.47300000000007 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -52432,26 +50745,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 319.320 m -563.760 319.320 l +269.177 432.000 m +563.760 432.000 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 281.760 m -563.760 281.760 l +269.177 394.440 m +563.760 394.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 319.570 m -269.177 281.510 l +269.177 432.250 m +269.177 394.190 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 319.570 m -563.760 281.510 l +563.760 432.250 m +563.760 394.190 l S [ ] 0 d 1 w @@ -52465,7 +50778,7 @@ S 0.259 0.545 0.792 SCN BT -272.17692192000004 295.93299999999994 Td +272.17692192000004 408.6130000000001 Td /F1.0 10.5 Tf <4a736f6e4f626a656374> Tj ET @@ -52475,26 +50788,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 281.760 m -269.177 281.760 l +48.240 394.440 m +269.177 394.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 244.200 m -269.177 244.200 l +48.240 356.880 m +269.177 356.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 282.010 m -48.240 243.950 l +48.240 394.690 m +48.240 356.630 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 282.010 m -269.177 243.950 l +269.177 394.690 m +269.177 356.630 l S [ ] 0 d 1 w @@ -52502,19 +50815,19 @@ S 0.200 0.200 0.200 scn BT -51.24 265.513 Td +51.24 378.19300000000004 Td /F2.0 10.5 Tf <7365727669636555756964> Tj ET BT -51.24 251.23299999999998 Td +51.24 363.913 Td ET BT -51.24 251.23299999999998 Td +51.24 363.913 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -52522,26 +50835,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 281.760 m -563.760 281.760 l +269.177 394.440 m +563.760 394.440 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.200 m -563.760 244.200 l +269.177 356.880 m +563.760 356.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 282.010 m -269.177 243.950 l +269.177 394.690 m +269.177 356.630 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 282.010 m -563.760 243.950 l +563.760 394.690 m +563.760 356.630 l S [ ] 0 d 1 w @@ -52549,7 +50862,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 258.373 Td +272.17692192000004 371.05300000000005 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -52557,26 +50870,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -48.240 244.200 m -269.177 244.200 l +48.240 356.880 m +269.177 356.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 206.640 m -269.177 206.640 l +48.240 319.320 m +269.177 319.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -48.240 244.450 m -48.240 206.390 l +48.240 357.130 m +48.240 319.070 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.450 m -269.177 206.390 l +269.177 357.130 m +269.177 319.070 l S [ ] 0 d 1 w @@ -52584,19 +50897,19 @@ S 0.200 0.200 0.200 scn BT -51.24 227.95299999999997 Td +51.24 340.6330000000001 Td /F2.0 10.5 Tf <76657273696f6e> Tj ET BT -51.24 213.67299999999997 Td +51.24 326.35300000000007 Td ET BT -51.24 213.67299999999997 Td +51.24 326.35300000000007 Td /F3.0 10.5 Tf <6f7074696f6e616c> Tj ET @@ -52604,26 +50917,26 @@ ET 0.000 0.000 0.000 scn 0.5 w 0.867 0.867 0.867 SCN -269.177 244.200 m -563.760 244.200 l +269.177 356.880 m +563.760 356.880 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 206.640 m -563.760 206.640 l +269.177 319.320 m +563.760 319.320 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -269.177 244.450 m -269.177 206.390 l +269.177 357.130 m +269.177 319.070 l S [ ] 0 d 0.5 w 0.867 0.867 0.867 SCN -563.760 244.450 m -563.760 206.390 l +563.760 357.130 m +563.760 319.070 l S [ ] 0 d 1 w @@ -52631,7 +50944,7 @@ S 0.200 0.200 0.200 scn BT -272.17692192000004 220.81299999999996 Td +272.17692192000004 333.4930000000001 Td /F1.0 10.5 Tf <737472696e67> Tj ET @@ -52649,9 +50962,9 @@ q 0.200 0.200 0.200 SCN BT -552.698 14.388 Td +49.24 14.388 Td /F1.0 9 Tf -<3333> Tj +<3332> Tj ET 0.000 0.000 0.000 SCN @@ -52661,58 +50974,50 @@ Q endstream endobj -352 0 obj +343 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612.0 792.0] -/Contents 351 0 R +/Contents 342 0 R /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F2.0 24 0 R /F3.0 26 0 R /F1.0 8 0 R >> -/XObject << /Stamp1 702 0 R ->> +/XObject << /Stamp1 676 0 R >> -/Annots [353 0 R 354 0 R 356 0 R 357 0 R] >> -endobj -353 0 obj -<< /Border [0 0 0] -/Dest (_jsonobject) -/Subtype /Link -/Rect [272.17692192000004 631.147 325.32792192000005 645.427] -/Type /Annot +/Annots [344 0 R 346 0 R 347 0 R] >> endobj -354 0 obj +344 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link -/Rect [280.76592192000004 518.4670000000001 378.47892192000006 532.7470000000001] +/Rect [280.76592192000004 631.1469999999999 378.47892192000006 645.4269999999999] /Type /Annot >> endobj -355 0 obj -[352 0 R /XYZ 0 457.8 null] +345 0 obj +[343 0 R /XYZ 0 570.48 null] endobj -356 0 obj +346 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 330.42699999999996 325.32792192000005 344.707] +/Rect [272.17692192000004 443.107 325.32792192000005 457.38700000000006] /Type /Annot >> endobj -357 0 obj +347 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [272.17692192000004 292.8669999999999 325.32792192000005 307.14699999999993] +/Rect [272.17692192000004 405.5470000000001 325.32792192000005 419.8270000000001] /Type /Annot >> endobj -358 0 obj +348 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -52720,7 +51025,7 @@ endobj /Type /Annot >> endobj -359 0 obj +349 0 obj << /Border [0 0 0] /Dest (_overview) /Subtype /Link @@ -52728,7 +51033,7 @@ endobj /Type /Annot >> endobj -360 0 obj +350 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -52736,7 +51041,7 @@ endobj /Type /Annot >> endobj -361 0 obj +351 0 obj << /Border [0 0 0] /Dest (_version_information) /Subtype /Link @@ -52744,7 +51049,7 @@ endobj /Type /Annot >> endobj -362 0 obj +352 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -52752,7 +51057,7 @@ endobj /Type /Annot >> endobj -363 0 obj +353 0 obj << /Border [0 0 0] /Dest (_uri_scheme) /Subtype /Link @@ -52760,7 +51065,7 @@ endobj /Type /Annot >> endobj -364 0 obj +354 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -52768,7 +51073,7 @@ endobj /Type /Annot >> endobj -365 0 obj +355 0 obj << /Border [0 0 0] /Dest (_paths) /Subtype /Link @@ -52776,23 +51081,23 @@ endobj /Type /Annot >> endobj -366 0 obj +356 0 obj << /Border [0 0 0] -/Dest (_route113) +/Dest (_route35) /Subtype /Link /Rect [60.24000000000001 621.7799999999997 181.64100000000002 636.0599999999998] /Type /Annot >> endobj -367 0 obj +357 0 obj << /Border [0 0 0] -/Dest (_route113) +/Dest (_route35) /Subtype /Link /Rect [557.8905 621.7799999999997 563.76 636.0599999999998] /Type /Annot >> endobj -368 0 obj +358 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -52800,7 +51105,7 @@ endobj /Type /Annot >> endobj -369 0 obj +359 0 obj << /Border [0 0 0] /Dest (_responses) /Subtype /Link @@ -52808,7 +51113,7 @@ endobj /Type /Annot >> endobj -370 0 obj +360 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -52816,7 +51121,7 @@ endobj /Type /Annot >> endobj -371 0 obj +361 0 obj << /Border [0 0 0] /Dest (_produces) /Subtype /Link @@ -52824,23 +51129,23 @@ endobj /Type /Annot >> endobj -372 0 obj +362 0 obj << /Border [0 0 0] -/Dest (_route114) +/Dest (_route36) /Subtype /Link /Rect [60.24000000000001 566.3399999999997 183.8775 580.6199999999998] /Type /Annot >> endobj -373 0 obj +363 0 obj << /Border [0 0 0] -/Dest (_route114) +/Dest (_route36) /Subtype /Link /Rect [557.8905 566.3399999999997 563.76 580.6199999999998] /Type /Annot >> endobj -374 0 obj +364 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -52848,7 +51153,7 @@ endobj /Type /Annot >> endobj -375 0 obj +365 0 obj << /Border [0 0 0] /Dest (_responses_2) /Subtype /Link @@ -52856,7 +51161,7 @@ endobj /Type /Annot >> endobj -376 0 obj +366 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -52864,7 +51169,7 @@ endobj /Type /Annot >> endobj -377 0 obj +367 0 obj << /Border [0 0 0] /Dest (_produces_2) /Subtype /Link @@ -52872,23 +51177,23 @@ endobj /Type /Annot >> endobj -378 0 obj +368 0 obj << /Border [0 0 0] -/Dest (_route112) +/Dest (_route34) /Subtype /Link /Rect [60.24000000000001 510.89999999999975 212.98350000000002 525.1799999999997] /Type /Annot >> endobj -379 0 obj +369 0 obj << /Border [0 0 0] -/Dest (_route112) +/Dest (_route34) /Subtype /Link /Rect [557.8905 510.89999999999975 563.76 525.1799999999997] /Type /Annot >> endobj -380 0 obj +370 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -52896,7 +51201,7 @@ endobj /Type /Annot >> endobj -381 0 obj +371 0 obj << /Border [0 0 0] /Dest (_responses_3) /Subtype /Link @@ -52904,7 +51209,7 @@ endobj /Type /Annot >> endobj -382 0 obj +372 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -52912,7 +51217,7 @@ endobj /Type /Annot >> endobj -383 0 obj +373 0 obj << /Border [0 0 0] /Dest (_produces_3) /Subtype /Link @@ -52920,23 +51225,23 @@ endobj /Type /Annot >> endobj -384 0 obj +374 0 obj << /Border [0 0 0] -/Dest (_route96) +/Dest (_route19) /Subtype /Link /Rect [60.24000000000001 455.4599999999997 172.716 469.73999999999967] /Type /Annot >> endobj -385 0 obj +375 0 obj << /Border [0 0 0] -/Dest (_route96) +/Dest (_route19) /Subtype /Link /Rect [557.8905 455.4599999999997 563.76 469.73999999999967] /Type /Annot >> endobj -386 0 obj +376 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -52944,7 +51249,7 @@ endobj /Type /Annot >> endobj -387 0 obj +377 0 obj << /Border [0 0 0] /Dest (_responses_4) /Subtype /Link @@ -52952,7 +51257,7 @@ endobj /Type /Annot >> endobj -388 0 obj +378 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -52960,7 +51265,7 @@ endobj /Type /Annot >> endobj -389 0 obj +379 0 obj << /Border [0 0 0] /Dest (_produces_4) /Subtype /Link @@ -52968,23 +51273,23 @@ endobj /Type /Annot >> endobj -390 0 obj +380 0 obj << /Border [0 0 0] -/Dest (_route99) +/Dest (_route22) /Subtype /Link /Rect [60.24000000000001 400.01999999999964 172.548 414.2999999999996] /Type /Annot >> endobj -391 0 obj +381 0 obj << /Border [0 0 0] -/Dest (_route99) +/Dest (_route22) /Subtype /Link /Rect [557.8905 400.01999999999964 563.76 414.2999999999996] /Type /Annot >> endobj -392 0 obj +382 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -52992,7 +51297,7 @@ endobj /Type /Annot >> endobj -393 0 obj +383 0 obj << /Border [0 0 0] /Dest (_parameters) /Subtype /Link @@ -53000,7 +51305,7 @@ endobj /Type /Annot >> endobj -394 0 obj +384 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -53008,7 +51313,7 @@ endobj /Type /Annot >> endobj -395 0 obj +385 0 obj << /Border [0 0 0] /Dest (_responses_5) /Subtype /Link @@ -53016,7 +51321,7 @@ endobj /Type /Annot >> endobj -396 0 obj +386 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -53024,7 +51329,7 @@ endobj /Type /Annot >> endobj -397 0 obj +387 0 obj << /Border [0 0 0] /Dest (_consumes) /Subtype /Link @@ -53032,7 +51337,7 @@ endobj /Type /Annot >> endobj -398 0 obj +388 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -53040,7 +51345,7 @@ endobj /Type /Annot >> endobj -399 0 obj +389 0 obj << /Border [0 0 0] /Dest (_produces_5) /Subtype /Link @@ -53048,23 +51353,23 @@ endobj /Type /Annot >> endobj -400 0 obj +390 0 obj << /Border [0 0 0] -/Dest (_route97) +/Dest (_route20) /Subtype /Link /Rect [60.24000000000001 307.61999999999955 263.25750000000005 321.8999999999995] /Type /Annot >> endobj -401 0 obj +391 0 obj << /Border [0 0 0] -/Dest (_route97) +/Dest (_route20) /Subtype /Link /Rect [557.8905 307.61999999999955 563.76 321.8999999999995] /Type /Annot >> endobj -402 0 obj +392 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -53072,7 +51377,7 @@ endobj /Type /Annot >> endobj -403 0 obj +393 0 obj << /Border [0 0 0] /Dest (_responses_6) /Subtype /Link @@ -53080,7 +51385,7 @@ endobj /Type /Annot >> endobj -404 0 obj +394 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -53088,7 +51393,7 @@ endobj /Type /Annot >> endobj -405 0 obj +395 0 obj << /Border [0 0 0] /Dest (_produces_6) /Subtype /Link @@ -53096,23 +51401,23 @@ endobj /Type /Annot >> endobj -406 0 obj +396 0 obj << /Border [0 0 0] -/Dest (_route98) +/Dest (_route21) /Subtype /Link /Rect [60.24000000000001 252.17999999999947 265.76700000000005 266.45999999999947] /Type /Annot >> endobj -407 0 obj +397 0 obj << /Border [0 0 0] -/Dest (_route98) +/Dest (_route21) /Subtype /Link /Rect [557.8905 252.17999999999947 563.76 266.45999999999947] /Type /Annot >> endobj -408 0 obj +398 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -53120,7 +51425,7 @@ endobj /Type /Annot >> endobj -409 0 obj +399 0 obj << /Border [0 0 0] /Dest (_parameters_2) /Subtype /Link @@ -53128,7 +51433,7 @@ endobj /Type /Annot >> endobj -410 0 obj +400 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -53136,7 +51441,7 @@ endobj /Type /Annot >> endobj -411 0 obj +401 0 obj << /Border [0 0 0] /Dest (_responses_7) /Subtype /Link @@ -53144,7 +51449,7 @@ endobj /Type /Annot >> endobj -412 0 obj +402 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -53152,7 +51457,7 @@ endobj /Type /Annot >> endobj -413 0 obj +403 0 obj << /Border [0 0 0] /Dest (_produces_7) /Subtype /Link @@ -53160,23 +51465,23 @@ endobj /Type /Annot >> endobj -414 0 obj +404 0 obj << /Border [0 0 0] -/Dest (_route100) +/Dest (_route23) /Subtype /Link /Rect [60.24000000000001 178.2599999999995 212.763 192.5399999999995] /Type /Annot >> endobj -415 0 obj +405 0 obj << /Border [0 0 0] -/Dest (_route100) +/Dest (_route23) /Subtype /Link /Rect [557.8905 178.2599999999995 563.76 192.5399999999995] /Type /Annot >> endobj -416 0 obj +406 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -53184,7 +51489,7 @@ endobj /Type /Annot >> endobj -417 0 obj +407 0 obj << /Border [0 0 0] /Dest (_parameters_3) /Subtype /Link @@ -53192,7 +51497,7 @@ endobj /Type /Annot >> endobj -418 0 obj +408 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -53200,7 +51505,7 @@ endobj /Type /Annot >> endobj -419 0 obj +409 0 obj << /Border [0 0 0] /Dest (_responses_8) /Subtype /Link @@ -53208,7 +51513,7 @@ endobj /Type /Annot >> endobj -420 0 obj +410 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -53216,7 +51521,7 @@ endobj /Type /Annot >> endobj -421 0 obj +411 0 obj << /Border [0 0 0] /Dest (_consumes_2) /Subtype /Link @@ -53224,7 +51529,7 @@ endobj /Type /Annot >> endobj -422 0 obj +412 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -53232,7 +51537,7 @@ endobj /Type /Annot >> endobj -423 0 obj +413 0 obj << /Border [0 0 0] /Dest (_produces_8) /Subtype /Link @@ -53240,23 +51545,23 @@ endobj /Type /Annot >> endobj -424 0 obj +414 0 obj << /Border [0 0 0] -/Dest (_route101) +/Dest (_route24) /Subtype /Link /Rect [60.24000000000001 85.85999999999956 232.70250000000001 100.13999999999956] /Type /Annot >> endobj -425 0 obj +415 0 obj << /Border [0 0 0] -/Dest (_route101) +/Dest (_route24) /Subtype /Link /Rect [557.8905 85.85999999999956 563.76 100.13999999999956] /Type /Annot >> endobj -426 0 obj +416 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -53264,7 +51569,7 @@ endobj /Type /Annot >> endobj -427 0 obj +417 0 obj << /Border [0 0 0] /Dest (_parameters_4) /Subtype /Link @@ -53272,7 +51577,7 @@ endobj /Type /Annot >> endobj -428 0 obj +418 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -53280,7 +51585,7 @@ endobj /Type /Annot >> endobj -429 0 obj +419 0 obj << /Border [0 0 0] /Dest (_responses_9) /Subtype /Link @@ -53288,7 +51593,7 @@ endobj /Type /Annot >> endobj -430 0 obj +420 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -53296,7 +51601,7 @@ endobj /Type /Annot >> endobj -431 0 obj +421 0 obj << /Border [0 0 0] /Dest (_produces_9) /Subtype /Link @@ -53304,23 +51609,23 @@ endobj /Type /Annot >> endobj -432 0 obj +422 0 obj << /Border [0 0 0] -/Dest (_route102) +/Dest (_route25) /Subtype /Link /Rect [60.24000000000001 723.2399999999999 354.36600000000004 737.52] /Type /Annot >> endobj -433 0 obj +423 0 obj << /Border [0 0 0] -/Dest (_route102) +/Dest (_route25) /Subtype /Link /Rect [557.8905 723.2399999999999 563.76 737.52] /Type /Annot >> endobj -434 0 obj +424 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -53328,7 +51633,7 @@ endobj /Type /Annot >> endobj -435 0 obj +425 0 obj << /Border [0 0 0] /Dest (_parameters_5) /Subtype /Link @@ -53336,7 +51641,7 @@ endobj /Type /Annot >> endobj -436 0 obj +426 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -53344,7 +51649,7 @@ endobj /Type /Annot >> endobj -437 0 obj +427 0 obj << /Border [0 0 0] /Dest (_responses_10) /Subtype /Link @@ -53352,7 +51657,7 @@ endobj /Type /Annot >> endobj -438 0 obj +428 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -53360,7 +51665,7 @@ endobj /Type /Annot >> endobj -439 0 obj +429 0 obj << /Border [0 0 0] /Dest (_produces_10) /Subtype /Link @@ -53368,23 +51673,23 @@ endobj /Type /Annot >> endobj -440 0 obj +430 0 obj << /Border [0 0 0] -/Dest (_route93) +/Dest (_route16) /Subtype /Link /Rect [60.24000000000001 649.3199999999998 531.1851796875001 663.5999999999999] /Type /Annot >> endobj -441 0 obj +431 0 obj << /Border [0 0 0] -/Dest (_route93) +/Dest (_route16) /Subtype /Link /Rect [557.8905 649.3199999999998 563.76 663.5999999999999] /Type /Annot >> endobj -442 0 obj +432 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -53392,7 +51697,7 @@ endobj /Type /Annot >> endobj -443 0 obj +433 0 obj << /Border [0 0 0] /Dest (_parameters_6) /Subtype /Link @@ -53400,7 +51705,7 @@ endobj /Type /Annot >> endobj -444 0 obj +434 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -53408,7 +51713,7 @@ endobj /Type /Annot >> endobj -445 0 obj +435 0 obj << /Border [0 0 0] /Dest (_responses_11) /Subtype /Link @@ -53416,7 +51721,7 @@ endobj /Type /Annot >> endobj -446 0 obj +436 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -53424,7 +51729,7 @@ endobj /Type /Annot >> endobj -447 0 obj +437 0 obj << /Border [0 0 0] /Dest (_produces_11) /Subtype /Link @@ -53432,23 +51737,23 @@ endobj /Type /Annot >> endobj -448 0 obj +438 0 obj << /Border [0 0 0] -/Dest (_route95) +/Dest (_route18) /Subtype /Link /Rect [60.24000000000001 575.3999999999997 418.877794921875 589.6799999999998] /Type /Annot >> endobj -449 0 obj +439 0 obj << /Border [0 0 0] -/Dest (_route95) +/Dest (_route18) /Subtype /Link /Rect [557.8905 575.3999999999997 563.76 589.6799999999998] /Type /Annot >> endobj -450 0 obj +440 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -53456,7 +51761,7 @@ endobj /Type /Annot >> endobj -451 0 obj +441 0 obj << /Border [0 0 0] /Dest (_parameters_7) /Subtype /Link @@ -53464,7 +51769,7 @@ endobj /Type /Annot >> endobj -452 0 obj +442 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -53472,7 +51777,7 @@ endobj /Type /Annot >> endobj -453 0 obj +443 0 obj << /Border [0 0 0] /Dest (_responses_12) /Subtype /Link @@ -53480,7 +51785,7 @@ endobj /Type /Annot >> endobj -454 0 obj +444 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -53488,7 +51793,7 @@ endobj /Type /Annot >> endobj -455 0 obj +445 0 obj << /Border [0 0 0] /Dest (_consumes_3) /Subtype /Link @@ -53496,7 +51801,7 @@ endobj /Type /Annot >> endobj -456 0 obj +446 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -53504,7 +51809,7 @@ endobj /Type /Annot >> endobj -457 0 obj +447 0 obj << /Border [0 0 0] /Dest (_produces_12) /Subtype /Link @@ -53512,23 +51817,23 @@ endobj /Type /Annot >> endobj -458 0 obj +448 0 obj << /Border [0 0 0] -/Dest (_route91) +/Dest (_route14) /Subtype /Link /Rect [60.24000000000001 482.9999999999998 245.15550000000002 497.27999999999975] /Type /Annot >> endobj -459 0 obj +449 0 obj << /Border [0 0 0] -/Dest (_route91) +/Dest (_route14) /Subtype /Link /Rect [557.8905 482.9999999999998 563.76 497.27999999999975] /Type /Annot >> endobj -460 0 obj +450 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -53536,7 +51841,7 @@ endobj /Type /Annot >> endobj -461 0 obj +451 0 obj << /Border [0 0 0] /Dest (_parameters_8) /Subtype /Link @@ -53544,7 +51849,7 @@ endobj /Type /Annot >> endobj -462 0 obj +452 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -53552,7 +51857,7 @@ endobj /Type /Annot >> endobj -463 0 obj +453 0 obj << /Border [0 0 0] /Dest (_responses_13) /Subtype /Link @@ -53560,23 +51865,23 @@ endobj /Type /Annot >> endobj -464 0 obj +454 0 obj << /Border [0 0 0] -/Dest (_route84) +/Dest (_route7) /Subtype /Link /Rect [60.24000000000001 427.5599999999997 248.431294921875 441.8399999999997] /Type /Annot >> endobj -465 0 obj +455 0 obj << /Border [0 0 0] -/Dest (_route84) +/Dest (_route7) /Subtype /Link /Rect [557.8905 427.5599999999997 563.76 441.8399999999997] /Type /Annot >> endobj -466 0 obj +456 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -53584,7 +51889,7 @@ endobj /Type /Annot >> endobj -467 0 obj +457 0 obj << /Border [0 0 0] /Dest (_parameters_9) /Subtype /Link @@ -53592,7 +51897,7 @@ endobj /Type /Annot >> endobj -468 0 obj +458 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -53600,7 +51905,7 @@ endobj /Type /Annot >> endobj -469 0 obj +459 0 obj << /Border [0 0 0] /Dest (_responses_14) /Subtype /Link @@ -53608,7 +51913,7 @@ endobj /Type /Annot >> endobj -470 0 obj +460 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -53616,7 +51921,7 @@ endobj /Type /Annot >> endobj -471 0 obj +461 0 obj << /Border [0 0 0] /Dest (_produces_13) /Subtype /Link @@ -53624,23 +51929,23 @@ endobj /Type /Annot >> endobj -472 0 obj +462 0 obj << /Border [0 0 0] -/Dest (_route78) +/Dest (_route2) /Subtype /Link /Rect [60.24000000000001 353.63999999999965 214.8735 367.9199999999996] /Type /Annot >> endobj -473 0 obj +463 0 obj << /Border [0 0 0] -/Dest (_route78) +/Dest (_route2) /Subtype /Link /Rect [557.8905 353.63999999999965 563.76 367.9199999999996] /Type /Annot >> endobj -474 0 obj +464 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -53648,7 +51953,7 @@ endobj /Type /Annot >> endobj -475 0 obj +465 0 obj << /Border [0 0 0] /Dest (_responses_15) /Subtype /Link @@ -53656,7 +51961,7 @@ endobj /Type /Annot >> endobj -476 0 obj +466 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -53664,7 +51969,7 @@ endobj /Type /Annot >> endobj -477 0 obj +467 0 obj << /Border [0 0 0] /Dest (_produces_14) /Subtype /Link @@ -53672,23 +51977,23 @@ endobj /Type /Annot >> endobj -478 0 obj +468 0 obj << /Border [0 0 0] -/Dest (_route92) +/Dest (_route15) /Subtype /Link /Rect [60.24000000000001 298.1999999999996 259.467 312.47999999999956] /Type /Annot >> endobj -479 0 obj +469 0 obj << /Border [0 0 0] -/Dest (_route92) +/Dest (_route15) /Subtype /Link /Rect [557.8905 298.1999999999996 563.76 312.47999999999956] /Type /Annot >> endobj -480 0 obj +470 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -53696,7 +52001,7 @@ endobj /Type /Annot >> endobj -481 0 obj +471 0 obj << /Border [0 0 0] /Dest (_parameters_10) /Subtype /Link @@ -53704,7 +52009,7 @@ endobj /Type /Annot >> endobj -482 0 obj +472 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -53712,7 +52017,7 @@ endobj /Type /Annot >> endobj -483 0 obj +473 0 obj << /Border [0 0 0] /Dest (_responses_16) /Subtype /Link @@ -53720,7 +52025,7 @@ endobj /Type /Annot >> endobj -484 0 obj +474 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -53728,7 +52033,7 @@ endobj /Type /Annot >> endobj -485 0 obj +475 0 obj << /Border [0 0 0] /Dest (_produces_15) /Subtype /Link @@ -53736,23 +52041,23 @@ endobj /Type /Annot >> endobj -486 0 obj +476 0 obj << /Border [0 0 0] -/Dest (_route85) +/Dest (_route8) /Subtype /Link /Rect [60.24000000000001 224.27999999999952 544.9515000000001 238.55999999999952] /Type /Annot >> endobj -487 0 obj +477 0 obj << /Border [0 0 0] -/Dest (_route85) +/Dest (_route8) /Subtype /Link /Rect [557.8905 224.27999999999952 563.76 238.55999999999952] /Type /Annot >> endobj -488 0 obj +478 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -53760,7 +52065,7 @@ endobj /Type /Annot >> endobj -489 0 obj +479 0 obj << /Border [0 0 0] /Dest (_parameters_11) /Subtype /Link @@ -53768,7 +52073,7 @@ endobj /Type /Annot >> endobj -490 0 obj +480 0 obj << /Border [0 0 0] /Dest (_responses_17) /Subtype /Link @@ -53776,7 +52081,7 @@ endobj /Type /Annot >> endobj -491 0 obj +481 0 obj << /Border [0 0 0] /Dest (_responses_17) /Subtype /Link @@ -53784,7 +52089,7 @@ endobj /Type /Annot >> endobj -492 0 obj +482 0 obj << /Border [0 0 0] /Dest (_produces_16) /Subtype /Link @@ -53792,7 +52097,7 @@ endobj /Type /Annot >> endobj -493 0 obj +483 0 obj << /Border [0 0 0] /Dest (_produces_16) /Subtype /Link @@ -53800,23 +52105,23 @@ endobj /Type /Annot >> endobj -494 0 obj +484 0 obj << /Border [0 0 0] -/Dest (_route86) +/Dest (_route9) /Subtype /Link /Rect [60.24000000000001 150.35999999999956 530.5030898437501 164.63999999999956] /Type /Annot >> endobj -495 0 obj +485 0 obj << /Border [0 0 0] -/Dest (_route86) +/Dest (_route9) /Subtype /Link /Rect [557.8905 150.35999999999956 563.76 164.63999999999956] /Type /Annot >> endobj -496 0 obj +486 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -53824,7 +52129,7 @@ endobj /Type /Annot >> endobj -497 0 obj +487 0 obj << /Border [0 0 0] /Dest (_parameters_12) /Subtype /Link @@ -53832,7 +52137,7 @@ endobj /Type /Annot >> endobj -498 0 obj +488 0 obj << /Border [0 0 0] /Dest (_responses_18) /Subtype /Link @@ -53840,7 +52145,7 @@ endobj /Type /Annot >> endobj -499 0 obj +489 0 obj << /Border [0 0 0] /Dest (_responses_18) /Subtype /Link @@ -53848,7 +52153,7 @@ endobj /Type /Annot >> endobj -500 0 obj +490 0 obj << /Border [0 0 0] /Dest (_produces_17) /Subtype /Link @@ -53856,7 +52161,7 @@ endobj /Type /Annot >> endobj -501 0 obj +491 0 obj << /Border [0 0 0] /Dest (_produces_17) /Subtype /Link @@ -53864,39 +52169,39 @@ endobj /Type /Annot >> endobj -502 0 obj +492 0 obj << /Border [0 0 0] -/Dest (_route94) +/Dest (_route17) /Subtype /Link /Rect [60.24000000000001 76.4399999999996 106.10400000000001 90.7199999999996] /Type /Annot >> endobj -503 0 obj +493 0 obj << /Border [0 0 0] -/Dest (_route94) +/Dest (_route17) /Subtype /Link /Rect [60.24000000000001 57.959999999999596 553.6761796875 72.2399999999996] /Type /Annot >> endobj -504 0 obj +494 0 obj << /Border [0 0 0] -/Dest (_route94) +/Dest (_route17) /Subtype /Link /Rect [60.24 741.7199999999999 80.26350000000001 756.0] /Type /Annot >> endobj -505 0 obj +495 0 obj << /Border [0 0 0] -/Dest (_route94) +/Dest (_route17) /Subtype /Link /Rect [552.021 76.4399999999996 563.76 90.7199999999996] /Type /Annot >> endobj -506 0 obj +496 0 obj << /Border [0 0 0] /Dest (_parameters_13) /Subtype /Link @@ -53904,7 +52209,7 @@ endobj /Type /Annot >> endobj -507 0 obj +497 0 obj << /Border [0 0 0] /Dest (_parameters_13) /Subtype /Link @@ -53912,7 +52217,7 @@ endobj /Type /Annot >> endobj -508 0 obj +498 0 obj << /Border [0 0 0] /Dest (_responses_19) /Subtype /Link @@ -53920,7 +52225,7 @@ endobj /Type /Annot >> endobj -509 0 obj +499 0 obj << /Border [0 0 0] /Dest (_responses_19) /Subtype /Link @@ -53928,7 +52233,7 @@ endobj /Type /Annot >> endobj -510 0 obj +500 0 obj << /Border [0 0 0] /Dest (_produces_18) /Subtype /Link @@ -53936,7 +52241,7 @@ endobj /Type /Annot >> endobj -511 0 obj +501 0 obj << /Border [0 0 0] /Dest (_produces_18) /Subtype /Link @@ -53944,23 +52249,23 @@ endobj /Type /Annot >> endobj -512 0 obj +502 0 obj << /Border [0 0 0] -/Dest (_route89) +/Dest (_route12) /Subtype /Link /Rect [60.24000000000001 667.7999999999998 248.45250000000001 682.0799999999999] /Type /Annot >> endobj -513 0 obj +503 0 obj << /Border [0 0 0] -/Dest (_route89) +/Dest (_route12) /Subtype /Link /Rect [552.021 667.7999999999998 563.76 682.0799999999999] /Type /Annot >> endobj -514 0 obj +504 0 obj << /Border [0 0 0] /Dest (_parameters_14) /Subtype /Link @@ -53968,7 +52273,7 @@ endobj /Type /Annot >> endobj -515 0 obj +505 0 obj << /Border [0 0 0] /Dest (_parameters_14) /Subtype /Link @@ -53976,7 +52281,7 @@ endobj /Type /Annot >> endobj -516 0 obj +506 0 obj << /Border [0 0 0] /Dest (_responses_20) /Subtype /Link @@ -53984,7 +52289,7 @@ endobj /Type /Annot >> endobj -517 0 obj +507 0 obj << /Border [0 0 0] /Dest (_responses_20) /Subtype /Link @@ -53992,7 +52297,7 @@ endobj /Type /Annot >> endobj -518 0 obj +508 0 obj << /Border [0 0 0] /Dest (_produces_19) /Subtype /Link @@ -54000,7 +52305,7 @@ endobj /Type /Annot >> endobj -519 0 obj +509 0 obj << /Border [0 0 0] /Dest (_produces_19) /Subtype /Link @@ -54008,23 +52313,23 @@ endobj /Type /Annot >> endobj -520 0 obj +510 0 obj << /Border [0 0 0] -/Dest (_route88) +/Dest (_route11) /Subtype /Link /Rect [60.24000000000001 593.8799999999998 235.842 608.1599999999999] /Type /Annot >> endobj -521 0 obj +511 0 obj << /Border [0 0 0] -/Dest (_route88) +/Dest (_route11) /Subtype /Link /Rect [552.021 593.8799999999998 563.76 608.1599999999999] /Type /Annot >> endobj -522 0 obj +512 0 obj << /Border [0 0 0] /Dest (_parameters_15) /Subtype /Link @@ -54032,7 +52337,7 @@ endobj /Type /Annot >> endobj -523 0 obj +513 0 obj << /Border [0 0 0] /Dest (_parameters_15) /Subtype /Link @@ -54040,7 +52345,7 @@ endobj /Type /Annot >> endobj -524 0 obj +514 0 obj << /Border [0 0 0] /Dest (_responses_21) /Subtype /Link @@ -54048,7 +52353,7 @@ endobj /Type /Annot >> endobj -525 0 obj +515 0 obj << /Border [0 0 0] /Dest (_responses_21) /Subtype /Link @@ -54056,7 +52361,7 @@ endobj /Type /Annot >> endobj -526 0 obj +516 0 obj << /Border [0 0 0] /Dest (_produces_20) /Subtype /Link @@ -54064,7 +52369,7 @@ endobj /Type /Annot >> endobj -527 0 obj +517 0 obj << /Border [0 0 0] /Dest (_produces_20) /Subtype /Link @@ -54072,23 +52377,23 @@ endobj /Type /Annot >> endobj -528 0 obj +518 0 obj << /Border [0 0 0] -/Dest (_route90) +/Dest (_route13) /Subtype /Link /Rect [60.24000000000001 519.9599999999998 249.70200000000003 534.2399999999998] /Type /Annot >> endobj -529 0 obj +519 0 obj << /Border [0 0 0] -/Dest (_route90) +/Dest (_route13) /Subtype /Link /Rect [552.021 519.9599999999998 563.76 534.2399999999998] /Type /Annot >> endobj -530 0 obj +520 0 obj << /Border [0 0 0] /Dest (_parameters_16) /Subtype /Link @@ -54096,7 +52401,7 @@ endobj /Type /Annot >> endobj -531 0 obj +521 0 obj << /Border [0 0 0] /Dest (_parameters_16) /Subtype /Link @@ -54104,7 +52409,7 @@ endobj /Type /Annot >> endobj -532 0 obj +522 0 obj << /Border [0 0 0] /Dest (_responses_22) /Subtype /Link @@ -54112,7 +52417,7 @@ endobj /Type /Annot >> endobj -533 0 obj +523 0 obj << /Border [0 0 0] /Dest (_responses_22) /Subtype /Link @@ -54120,7 +52425,7 @@ endobj /Type /Annot >> endobj -534 0 obj +524 0 obj << /Border [0 0 0] /Dest (_produces_21) /Subtype /Link @@ -54128,7 +52433,7 @@ endobj /Type /Annot >> endobj -535 0 obj +525 0 obj << /Border [0 0 0] /Dest (_produces_21) /Subtype /Link @@ -54136,23 +52441,23 @@ endobj /Type /Annot >> endobj -536 0 obj +526 0 obj << /Border [0 0 0] -/Dest (_route80) +/Dest (_route10) /Subtype /Link -/Rect [60.24000000000001 446.03999999999974 307.641 460.3199999999997] +/Rect [60.24000000000001 446.03999999999974 261.860794921875 460.3199999999997] /Type /Annot >> endobj -537 0 obj +527 0 obj << /Border [0 0 0] -/Dest (_route80) +/Dest (_route10) /Subtype /Link /Rect [552.021 446.03999999999974 563.76 460.3199999999997] /Type /Annot >> endobj -538 0 obj +528 0 obj << /Border [0 0 0] /Dest (_parameters_17) /Subtype /Link @@ -54160,7 +52465,7 @@ endobj /Type /Annot >> endobj -539 0 obj +529 0 obj << /Border [0 0 0] /Dest (_parameters_17) /Subtype /Link @@ -54168,7 +52473,7 @@ endobj /Type /Annot >> endobj -540 0 obj +530 0 obj << /Border [0 0 0] /Dest (_responses_23) /Subtype /Link @@ -54176,7 +52481,7 @@ endobj /Type /Annot >> endobj -541 0 obj +531 0 obj << /Border [0 0 0] /Dest (_responses_23) /Subtype /Link @@ -54184,7 +52489,7 @@ endobj /Type /Annot >> endobj -542 0 obj +532 0 obj << /Border [0 0 0] /Dest (_produces_22) /Subtype /Link @@ -54192,7 +52497,7 @@ endobj /Type /Annot >> endobj -543 0 obj +533 0 obj << /Border [0 0 0] /Dest (_produces_22) /Subtype /Link @@ -54200,23 +52505,23 @@ endobj /Type /Annot >> endobj -544 0 obj +534 0 obj << /Border [0 0 0] -/Dest (_route87) +/Dest (_route4) /Subtype /Link -/Rect [60.24000000000001 372.11999999999966 261.860794921875 386.39999999999964] +/Rect [60.24000000000001 372.11999999999966 339.560794921875 386.39999999999964] /Type /Annot >> endobj -545 0 obj +535 0 obj << /Border [0 0 0] -/Dest (_route87) +/Dest (_route4) /Subtype /Link /Rect [552.021 372.11999999999966 563.76 386.39999999999964] /Type /Annot >> endobj -546 0 obj +536 0 obj << /Border [0 0 0] /Dest (_parameters_18) /Subtype /Link @@ -54224,7 +52529,7 @@ endobj /Type /Annot >> endobj -547 0 obj +537 0 obj << /Border [0 0 0] /Dest (_parameters_18) /Subtype /Link @@ -54232,7 +52537,7 @@ endobj /Type /Annot >> endobj -548 0 obj +538 0 obj << /Border [0 0 0] /Dest (_responses_24) /Subtype /Link @@ -54240,7 +52545,7 @@ endobj /Type /Annot >> endobj -549 0 obj +539 0 obj << /Border [0 0 0] /Dest (_responses_24) /Subtype /Link @@ -54248,247 +52553,247 @@ endobj /Type /Annot >> endobj -550 0 obj +540 0 obj << /Border [0 0 0] -/Dest (_produces_23) +/Dest (_consumes_4) /Subtype /Link -/Rect [72.24000000000001 316.6799999999996 152.27100000000002 330.9599999999996] +/Rect [72.24000000000001 316.6799999999996 157.2375 330.9599999999996] /Type /Annot >> endobj -551 0 obj +541 0 obj << /Border [0 0 0] -/Dest (_produces_23) +/Dest (_consumes_4) /Subtype /Link /Rect [552.021 316.6799999999996 563.76 330.9599999999996] /Type /Annot >> endobj -552 0 obj +542 0 obj << /Border [0 0 0] -/Dest (_route81) +/Dest (_produces_23) /Subtype /Link -/Rect [60.24000000000001 298.1999999999996 339.560794921875 312.47999999999956] +/Rect [72.24000000000001 298.1999999999996 152.27100000000002 312.47999999999956] /Type /Annot >> endobj -553 0 obj +543 0 obj << /Border [0 0 0] -/Dest (_route81) +/Dest (_produces_23) /Subtype /Link /Rect [552.021 298.1999999999996 563.76 312.47999999999956] /Type /Annot >> endobj -554 0 obj +544 0 obj << /Border [0 0 0] -/Dest (_parameters_19) +/Dest (_route6) /Subtype /Link -/Rect [72.24000000000001 279.7199999999996 163.71579492187502 293.99999999999955] +/Rect [60.24000000000001 279.7199999999996 350.38629492187505 293.99999999999955] /Type /Annot >> endobj -555 0 obj +545 0 obj << /Border [0 0 0] -/Dest (_parameters_19) +/Dest (_route6) /Subtype /Link /Rect [552.021 279.7199999999996 563.76 293.99999999999955] /Type /Annot >> endobj -556 0 obj +546 0 obj << /Border [0 0 0] -/Dest (_responses_25) +/Dest (_parameters_19) /Subtype /Link -/Rect [72.24000000000001 261.23999999999955 157.899 275.5199999999995] +/Rect [72.24000000000001 261.23999999999955 163.71579492187502 275.5199999999995] /Type /Annot >> endobj -557 0 obj +547 0 obj << /Border [0 0 0] -/Dest (_responses_25) +/Dest (_parameters_19) /Subtype /Link /Rect [552.021 261.23999999999955 563.76 275.5199999999995] /Type /Annot >> endobj -558 0 obj +548 0 obj << /Border [0 0 0] -/Dest (_consumes_4) +/Dest (_responses_25) /Subtype /Link -/Rect [72.24000000000001 242.7599999999995 157.2375 257.0399999999995] +/Rect [72.24000000000001 242.7599999999995 157.899 257.0399999999995] /Type /Annot >> endobj -559 0 obj +549 0 obj << /Border [0 0 0] -/Dest (_consumes_4) +/Dest (_responses_25) /Subtype /Link /Rect [552.021 242.7599999999995 563.76 257.0399999999995] /Type /Annot >> endobj -560 0 obj +550 0 obj << /Border [0 0 0] -/Dest (_produces_24) +/Dest (_consumes_5) /Subtype /Link -/Rect [72.24000000000001 224.27999999999952 152.27100000000002 238.55999999999952] +/Rect [72.24000000000001 224.27999999999952 157.2375 238.55999999999952] /Type /Annot >> endobj -561 0 obj +551 0 obj << /Border [0 0 0] -/Dest (_produces_24) +/Dest (_consumes_5) /Subtype /Link /Rect [552.021 224.27999999999952 563.76 238.55999999999952] /Type /Annot >> endobj -562 0 obj +552 0 obj << /Border [0 0 0] -/Dest (_route83) +/Dest (_produces_24) /Subtype /Link -/Rect [60.24000000000001 205.79999999999953 350.38629492187505 220.07999999999953] +/Rect [72.24000000000001 205.79999999999953 152.27100000000002 220.07999999999953] /Type /Annot >> endobj -563 0 obj +553 0 obj << /Border [0 0 0] -/Dest (_route83) +/Dest (_produces_24) /Subtype /Link /Rect [552.021 205.79999999999953 563.76 220.07999999999953] /Type /Annot >> endobj -564 0 obj +554 0 obj << /Border [0 0 0] -/Dest (_parameters_20) +/Dest (_route5) /Subtype /Link -/Rect [72.24000000000001 187.31999999999954 163.71579492187502 201.59999999999954] +/Rect [60.24000000000001 187.31999999999954 352.81158984375 201.59999999999954] /Type /Annot >> endobj -565 0 obj +555 0 obj << /Border [0 0 0] -/Dest (_parameters_20) +/Dest (_route5) /Subtype /Link /Rect [552.021 187.31999999999954 563.76 201.59999999999954] /Type /Annot >> endobj -566 0 obj +556 0 obj << /Border [0 0 0] -/Dest (_responses_26) +/Dest (_parameters_20) /Subtype /Link -/Rect [72.24000000000001 168.83999999999955 157.899 183.11999999999955] +/Rect [72.24000000000001 168.83999999999955 163.71579492187502 183.11999999999955] /Type /Annot >> endobj -567 0 obj +557 0 obj << /Border [0 0 0] -/Dest (_responses_26) +/Dest (_parameters_20) /Subtype /Link /Rect [552.021 168.83999999999955 563.76 183.11999999999955] /Type /Annot >> endobj -568 0 obj +558 0 obj << /Border [0 0 0] -/Dest (_consumes_5) +/Dest (_responses_26) /Subtype /Link -/Rect [72.24000000000001 150.35999999999956 157.2375 164.63999999999956] +/Rect [72.24000000000001 150.35999999999956 157.899 164.63999999999956] /Type /Annot >> endobj -569 0 obj +559 0 obj << /Border [0 0 0] -/Dest (_consumes_5) +/Dest (_responses_26) /Subtype /Link /Rect [552.021 150.35999999999956 563.76 164.63999999999956] /Type /Annot >> endobj -570 0 obj +560 0 obj << /Border [0 0 0] -/Dest (_produces_25) +/Dest (_consumes_6) /Subtype /Link -/Rect [72.24000000000001 131.87999999999957 152.27100000000002 146.15999999999957] +/Rect [72.24000000000001 131.87999999999957 157.2375 146.15999999999957] /Type /Annot >> endobj -571 0 obj +561 0 obj << /Border [0 0 0] -/Dest (_produces_25) +/Dest (_consumes_6) /Subtype /Link /Rect [552.021 131.87999999999957 563.76 146.15999999999957] /Type /Annot >> endobj -572 0 obj +562 0 obj << /Border [0 0 0] -/Dest (_route82) +/Dest (_produces_25) /Subtype /Link -/Rect [60.24000000000001 113.39999999999958 352.81158984375 127.67999999999958] +/Rect [72.24000000000001 113.39999999999958 152.27100000000002 127.67999999999958] /Type /Annot >> endobj -573 0 obj +563 0 obj << /Border [0 0 0] -/Dest (_route82) +/Dest (_produces_25) /Subtype /Link /Rect [552.021 113.39999999999958 563.76 127.67999999999958] /Type /Annot >> endobj -574 0 obj +564 0 obj << /Border [0 0 0] -/Dest (_parameters_21) +/Dest (_route3) /Subtype /Link -/Rect [72.24000000000001 94.91999999999959 163.71579492187502 109.19999999999959] +/Rect [60.24000000000001 94.91999999999959 212.0595 109.19999999999959] /Type /Annot >> endobj -575 0 obj +565 0 obj << /Border [0 0 0] -/Dest (_parameters_21) +/Dest (_route3) /Subtype /Link /Rect [552.021 94.91999999999959 563.76 109.19999999999959] /Type /Annot >> endobj -576 0 obj +566 0 obj << /Border [0 0 0] -/Dest (_responses_27) +/Dest (_parameters_21) /Subtype /Link -/Rect [72.24000000000001 76.4399999999996 157.899 90.7199999999996] +/Rect [72.24000000000001 76.4399999999996 163.71579492187502 90.7199999999996] /Type /Annot >> endobj -577 0 obj +567 0 obj << /Border [0 0 0] -/Dest (_responses_27) +/Dest (_parameters_21) /Subtype /Link /Rect [552.021 76.4399999999996 563.76 90.7199999999996] /Type /Annot >> endobj -578 0 obj +568 0 obj << /Border [0 0 0] -/Dest (_consumes_6) +/Dest (_responses_27) /Subtype /Link -/Rect [72.24000000000001 57.95999999999961 157.2375 72.23999999999961] +/Rect [72.24000000000001 57.95999999999961 157.899 72.23999999999961] /Type /Annot >> endobj -579 0 obj +569 0 obj << /Border [0 0 0] -/Dest (_consumes_6) +/Dest (_responses_27) /Subtype /Link /Rect [552.021 57.95999999999961 563.76 72.23999999999961] /Type /Annot >> endobj -580 0 obj +570 0 obj << /Border [0 0 0] /Dest (_produces_26) /Subtype /Link @@ -54496,7 +52801,7 @@ endobj /Type /Annot >> endobj -581 0 obj +571 0 obj << /Border [0 0 0] /Dest (_produces_26) /Subtype /Link @@ -54504,23 +52809,23 @@ endobj /Type /Annot >> endobj -582 0 obj +572 0 obj << /Border [0 0 0] -/Dest (_route79) +/Dest (_route29) /Subtype /Link -/Rect [60.24000000000001 723.2399999999999 212.0595 737.52] +/Rect [60.24000000000001 723.2399999999999 226.68805078125 737.52] /Type /Annot >> endobj -583 0 obj +573 0 obj << /Border [0 0 0] -/Dest (_route79) +/Dest (_route29) /Subtype /Link /Rect [552.021 723.2399999999999 563.76 737.52] /Type /Annot >> endobj -584 0 obj +574 0 obj << /Border [0 0 0] /Dest (_parameters_22) /Subtype /Link @@ -54528,7 +52833,7 @@ endobj /Type /Annot >> endobj -585 0 obj +575 0 obj << /Border [0 0 0] /Dest (_parameters_22) /Subtype /Link @@ -54536,7 +52841,7 @@ endobj /Type /Annot >> endobj -586 0 obj +576 0 obj << /Border [0 0 0] /Dest (_responses_28) /Subtype /Link @@ -54544,7 +52849,7 @@ endobj /Type /Annot >> endobj -587 0 obj +577 0 obj << /Border [0 0 0] /Dest (_responses_28) /Subtype /Link @@ -54552,55 +52857,55 @@ endobj /Type /Annot >> endobj -588 0 obj +578 0 obj << /Border [0 0 0] -/Dest (_produces_27) +/Dest (_consumes_7) /Subtype /Link -/Rect [72.24000000000001 667.7999999999998 152.27100000000002 682.0799999999999] +/Rect [72.24000000000001 667.7999999999998 157.2375 682.0799999999999] /Type /Annot >> endobj -589 0 obj +579 0 obj << /Border [0 0 0] -/Dest (_produces_27) +/Dest (_consumes_7) /Subtype /Link /Rect [552.021 667.7999999999998 563.76 682.0799999999999] /Type /Annot >> endobj -590 0 obj +580 0 obj << /Border [0 0 0] -/Dest (_route106) +/Dest (_produces_27) /Subtype /Link -/Rect [60.24000000000001 649.3199999999998 226.68805078125 663.5999999999999] +/Rect [72.24000000000001 649.3199999999998 152.27100000000002 663.5999999999999] /Type /Annot >> endobj -591 0 obj +581 0 obj << /Border [0 0 0] -/Dest (_route106) +/Dest (_produces_27) /Subtype /Link /Rect [552.021 649.3199999999998 563.76 663.5999999999999] /Type /Annot >> endobj -592 0 obj +582 0 obj << /Border [0 0 0] -/Dest (_parameters_23) +/Dest (_route26) /Subtype /Link -/Rect [72.24000000000001 630.8399999999998 163.71579492187502 645.1199999999999] +/Rect [60.24000000000001 630.8399999999998 221.091755859375 645.1199999999999] /Type /Annot >> endobj -593 0 obj +583 0 obj << /Border [0 0 0] -/Dest (_parameters_23) +/Dest (_route26) /Subtype /Link /Rect [552.021 630.8399999999998 563.76 645.1199999999999] /Type /Annot >> endobj -594 0 obj +584 0 obj << /Border [0 0 0] /Dest (_responses_29) /Subtype /Link @@ -54608,7 +52913,7 @@ endobj /Type /Annot >> endobj -595 0 obj +585 0 obj << /Border [0 0 0] /Dest (_responses_29) /Subtype /Link @@ -54616,55 +52921,55 @@ endobj /Type /Annot >> endobj -596 0 obj +586 0 obj << /Border [0 0 0] -/Dest (_consumes_7) +/Dest (_produces_28) /Subtype /Link -/Rect [72.24000000000001 593.8799999999998 157.2375 608.1599999999999] +/Rect [72.24000000000001 593.8799999999998 152.27100000000002 608.1599999999999] /Type /Annot >> endobj -597 0 obj +587 0 obj << /Border [0 0 0] -/Dest (_consumes_7) +/Dest (_produces_28) /Subtype /Link /Rect [552.021 593.8799999999998 563.76 608.1599999999999] /Type /Annot >> endobj -598 0 obj +588 0 obj << /Border [0 0 0] -/Dest (_produces_28) +/Dest (_route28) /Subtype /Link -/Rect [72.24000000000001 575.3999999999997 152.27100000000002 589.6799999999998] +/Rect [60.24000000000001 575.3999999999997 458.24414062500006 589.6799999999998] /Type /Annot >> endobj -599 0 obj +589 0 obj << /Border [0 0 0] -/Dest (_produces_28) +/Dest (_route28) /Subtype /Link /Rect [552.021 575.3999999999997 563.76 589.6799999999998] /Type /Annot >> endobj -600 0 obj +590 0 obj << /Border [0 0 0] -/Dest (_route103) +/Dest (_parameters_23) /Subtype /Link -/Rect [60.24000000000001 556.9199999999998 221.091755859375 571.1999999999998] +/Rect [72.24000000000001 556.9199999999998 163.71579492187502 571.1999999999998] /Type /Annot >> endobj -601 0 obj +591 0 obj << /Border [0 0 0] -/Dest (_route103) +/Dest (_parameters_23) /Subtype /Link /Rect [552.021 556.9199999999998 563.76 571.1999999999998] /Type /Annot >> endobj -602 0 obj +592 0 obj << /Border [0 0 0] /Dest (_responses_30) /Subtype /Link @@ -54672,7 +52977,7 @@ endobj /Type /Annot >> endobj -603 0 obj +593 0 obj << /Border [0 0 0] /Dest (_responses_30) /Subtype /Link @@ -54680,7 +52985,7 @@ endobj /Type /Annot >> endobj -604 0 obj +594 0 obj << /Border [0 0 0] /Dest (_produces_29) /Subtype /Link @@ -54688,7 +52993,7 @@ endobj /Type /Annot >> endobj -605 0 obj +595 0 obj << /Border [0 0 0] /Dest (_produces_29) /Subtype /Link @@ -54696,23 +53001,23 @@ endobj /Type /Annot >> endobj -606 0 obj +596 0 obj << /Border [0 0 0] -/Dest (_route105) +/Dest (_route27) /Subtype /Link -/Rect [60.24000000000001 501.4799999999998 458.24414062500006 515.7599999999998] +/Rect [60.24000000000001 501.4799999999998 430.23014062500005 515.7599999999998] /Type /Annot >> endobj -607 0 obj +597 0 obj << /Border [0 0 0] -/Dest (_route105) +/Dest (_route27) /Subtype /Link /Rect [552.021 501.4799999999998 563.76 515.7599999999998] /Type /Annot >> endobj -608 0 obj +598 0 obj << /Border [0 0 0] /Dest (_parameters_24) /Subtype /Link @@ -54720,7 +53025,7 @@ endobj /Type /Annot >> endobj -609 0 obj +599 0 obj << /Border [0 0 0] /Dest (_parameters_24) /Subtype /Link @@ -54728,7 +53033,7 @@ endobj /Type /Annot >> endobj -610 0 obj +600 0 obj << /Border [0 0 0] /Dest (_responses_31) /Subtype /Link @@ -54736,7 +53041,7 @@ endobj /Type /Annot >> endobj -611 0 obj +601 0 obj << /Border [0 0 0] /Dest (_responses_31) /Subtype /Link @@ -54744,7 +53049,7 @@ endobj /Type /Annot >> endobj -612 0 obj +602 0 obj << /Border [0 0 0] /Dest (_produces_30) /Subtype /Link @@ -54752,7 +53057,7 @@ endobj /Type /Annot >> endobj -613 0 obj +603 0 obj << /Border [0 0 0] /Dest (_produces_30) /Subtype /Link @@ -54760,23 +53065,23 @@ endobj /Type /Annot >> endobj -614 0 obj +604 0 obj << /Border [0 0 0] -/Dest (_route104) +/Dest (_route30) /Subtype /Link -/Rect [60.24000000000001 427.5599999999997 430.23014062500005 441.8399999999997] +/Rect [60.24000000000001 427.5599999999997 430.06214062500004 441.8399999999997] /Type /Annot >> endobj -615 0 obj +605 0 obj << /Border [0 0 0] -/Dest (_route104) +/Dest (_route30) /Subtype /Link /Rect [552.021 427.5599999999997 563.76 441.8399999999997] /Type /Annot >> endobj -616 0 obj +606 0 obj << /Border [0 0 0] /Dest (_parameters_25) /Subtype /Link @@ -54784,7 +53089,7 @@ endobj /Type /Annot >> endobj -617 0 obj +607 0 obj << /Border [0 0 0] /Dest (_parameters_25) /Subtype /Link @@ -54792,7 +53097,7 @@ endobj /Type /Annot >> endobj -618 0 obj +608 0 obj << /Border [0 0 0] /Dest (_responses_32) /Subtype /Link @@ -54800,7 +53105,7 @@ endobj /Type /Annot >> endobj -619 0 obj +609 0 obj << /Border [0 0 0] /Dest (_responses_32) /Subtype /Link @@ -54808,55 +53113,55 @@ endobj /Type /Annot >> endobj -620 0 obj +610 0 obj << /Border [0 0 0] -/Dest (_produces_31) +/Dest (_consumes_8) /Subtype /Link -/Rect [72.24000000000001 372.11999999999966 152.27100000000002 386.39999999999964] +/Rect [72.24000000000001 372.11999999999966 157.2375 386.39999999999964] /Type /Annot >> endobj -621 0 obj +611 0 obj << /Border [0 0 0] -/Dest (_produces_31) +/Dest (_consumes_8) /Subtype /Link /Rect [552.021 372.11999999999966 563.76 386.39999999999964] /Type /Annot >> endobj -622 0 obj +612 0 obj << /Border [0 0 0] -/Dest (_route107) +/Dest (_produces_31) /Subtype /Link -/Rect [60.24000000000001 353.63999999999965 430.06214062500004 367.9199999999996] +/Rect [72.24000000000001 353.63999999999965 152.27100000000002 367.9199999999996] /Type /Annot >> endobj -623 0 obj +613 0 obj << /Border [0 0 0] -/Dest (_route107) +/Dest (_produces_31) /Subtype /Link /Rect [552.021 353.63999999999965 563.76 367.9199999999996] /Type /Annot >> endobj -624 0 obj +614 0 obj << /Border [0 0 0] -/Dest (_parameters_26) +/Dest (_route31) /Subtype /Link -/Rect [72.24000000000001 335.1599999999996 163.71579492187502 349.4399999999996] +/Rect [60.24000000000001 335.1599999999996 175.8555 349.4399999999996] /Type /Annot >> endobj -625 0 obj +615 0 obj << /Border [0 0 0] -/Dest (_parameters_26) +/Dest (_route31) /Subtype /Link /Rect [552.021 335.1599999999996 563.76 349.4399999999996] /Type /Annot >> endobj -626 0 obj +616 0 obj << /Border [0 0 0] /Dest (_responses_33) /Subtype /Link @@ -54864,7 +53169,7 @@ endobj /Type /Annot >> endobj -627 0 obj +617 0 obj << /Border [0 0 0] /Dest (_responses_33) /Subtype /Link @@ -54872,599 +53177,471 @@ endobj /Type /Annot >> endobj -628 0 obj -<< /Border [0 0 0] -/Dest (_consumes_8) -/Subtype /Link -/Rect [72.24000000000001 298.1999999999996 157.2375 312.47999999999956] -/Type /Annot ->> -endobj -629 0 obj -<< /Border [0 0 0] -/Dest (_consumes_8) -/Subtype /Link -/Rect [552.021 298.1999999999996 563.76 312.47999999999956] -/Type /Annot ->> -endobj -630 0 obj +618 0 obj << /Border [0 0 0] /Dest (_produces_32) /Subtype /Link -/Rect [72.24000000000001 279.7199999999996 152.27100000000002 293.99999999999955] +/Rect [72.24000000000001 298.1999999999996 152.27100000000002 312.47999999999956] /Type /Annot >> endobj -631 0 obj +619 0 obj << /Border [0 0 0] /Dest (_produces_32) /Subtype /Link -/Rect [552.021 279.7199999999996 563.76 293.99999999999955] +/Rect [552.021 298.1999999999996 563.76 312.47999999999956] /Type /Annot >> endobj -632 0 obj +620 0 obj << /Border [0 0 0] -/Dest (_route108) +/Dest (_route33) /Subtype /Link -/Rect [60.24000000000001 261.23999999999955 175.8555 275.5199999999995] +/Rect [60.24000000000001 279.7199999999996 211.818 293.99999999999955] /Type /Annot >> endobj -633 0 obj +621 0 obj << /Border [0 0 0] -/Dest (_route108) +/Dest (_route33) /Subtype /Link -/Rect [552.021 261.23999999999955 563.76 275.5199999999995] +/Rect [552.021 279.7199999999996 563.76 293.99999999999955] /Type /Annot >> endobj -634 0 obj +622 0 obj << /Border [0 0 0] /Dest (_responses_34) /Subtype /Link -/Rect [72.24000000000001 242.7599999999995 157.899 257.0399999999995] +/Rect [72.24000000000001 261.23999999999955 157.899 275.5199999999995] /Type /Annot >> endobj -635 0 obj +623 0 obj << /Border [0 0 0] /Dest (_responses_34) /Subtype /Link -/Rect [552.021 242.7599999999995 563.76 257.0399999999995] +/Rect [552.021 261.23999999999955 563.76 275.5199999999995] /Type /Annot >> endobj -636 0 obj +624 0 obj << /Border [0 0 0] /Dest (_produces_33) /Subtype /Link -/Rect [72.24000000000001 224.27999999999952 152.27100000000002 238.55999999999952] +/Rect [72.24000000000001 242.7599999999995 152.27100000000002 257.0399999999995] /Type /Annot >> endobj -637 0 obj +625 0 obj << /Border [0 0 0] /Dest (_produces_33) /Subtype /Link -/Rect [552.021 224.27999999999952 563.76 238.55999999999952] -/Type /Annot ->> -endobj -638 0 obj -<< /Border [0 0 0] -/Dest (_route110) -/Subtype /Link -/Rect [60.24000000000001 205.79999999999953 211.818 220.07999999999953] -/Type /Annot ->> -endobj -639 0 obj -<< /Border [0 0 0] -/Dest (_route110) -/Subtype /Link -/Rect [552.021 205.79999999999953 563.76 220.07999999999953] -/Type /Annot ->> -endobj -640 0 obj -<< /Border [0 0 0] -/Dest (_responses_35) -/Subtype /Link -/Rect [72.24000000000001 187.31999999999954 157.899 201.59999999999954] -/Type /Annot ->> -endobj -641 0 obj -<< /Border [0 0 0] -/Dest (_responses_35) -/Subtype /Link -/Rect [552.021 187.31999999999954 563.76 201.59999999999954] -/Type /Annot ->> -endobj -642 0 obj -<< /Border [0 0 0] -/Dest (_produces_34) -/Subtype /Link -/Rect [72.24000000000001 168.83999999999955 152.27100000000002 183.11999999999955] -/Type /Annot ->> -endobj -643 0 obj -<< /Border [0 0 0] -/Dest (_produces_34) -/Subtype /Link -/Rect [552.021 168.83999999999955 563.76 183.11999999999955] -/Type /Annot ->> -endobj -644 0 obj -<< /Border [0 0 0] -/Dest (_route109) -/Subtype /Link -/Rect [60.24000000000001 150.35999999999956 261.44100000000003 164.63999999999956] -/Type /Annot ->> -endobj -645 0 obj -<< /Border [0 0 0] -/Dest (_route109) -/Subtype /Link -/Rect [552.021 150.35999999999956 563.76 164.63999999999956] -/Type /Annot ->> -endobj -646 0 obj -<< /Border [0 0 0] -/Dest (_parameters_27) -/Subtype /Link -/Rect [72.24000000000001 131.87999999999957 163.71579492187502 146.15999999999957] -/Type /Annot ->> -endobj -647 0 obj -<< /Border [0 0 0] -/Dest (_parameters_27) -/Subtype /Link -/Rect [552.021 131.87999999999957 563.76 146.15999999999957] -/Type /Annot ->> -endobj -648 0 obj -<< /Border [0 0 0] -/Dest (_responses_36) -/Subtype /Link -/Rect [72.24000000000001 113.39999999999958 157.899 127.67999999999958] -/Type /Annot ->> -endobj -649 0 obj -<< /Border [0 0 0] -/Dest (_responses_36) -/Subtype /Link -/Rect [552.021 113.39999999999958 563.76 127.67999999999958] -/Type /Annot ->> -endobj -650 0 obj -<< /Border [0 0 0] -/Dest (_produces_35) -/Subtype /Link -/Rect [72.24000000000001 94.91999999999959 152.27100000000002 109.19999999999959] -/Type /Annot ->> -endobj -651 0 obj -<< /Border [0 0 0] -/Dest (_produces_35) -/Subtype /Link -/Rect [552.021 94.91999999999959 563.76 109.19999999999959] +/Rect [552.021 242.7599999999995 563.76 257.0399999999995] /Type /Annot >> endobj -652 0 obj +626 0 obj << /Border [0 0 0] -/Dest (_route111) +/Dest (_route32) /Subtype /Link -/Rect [60.24000000000001 76.4399999999996 357.02250000000004 90.7199999999996] +/Rect [60.24000000000001 224.27999999999952 261.44100000000003 238.55999999999952] /Type /Annot >> endobj -653 0 obj +627 0 obj << /Border [0 0 0] -/Dest (_route111) +/Dest (_route32) /Subtype /Link -/Rect [552.021 76.4399999999996 563.76 90.7199999999996] +/Rect [552.021 224.27999999999952 563.76 238.55999999999952] /Type /Annot >> endobj -654 0 obj +628 0 obj << /Border [0 0 0] -/Dest (_parameters_28) +/Dest (_parameters_26) /Subtype /Link -/Rect [72.24000000000001 57.95999999999961 163.71579492187502 72.23999999999961] +/Rect [72.24000000000001 205.79999999999953 163.71579492187502 220.07999999999953] /Type /Annot >> endobj -655 0 obj +629 0 obj << /Border [0 0 0] -/Dest (_parameters_28) +/Dest (_parameters_26) /Subtype /Link -/Rect [552.021 57.95999999999961 563.76 72.23999999999961] +/Rect [552.021 205.79999999999953 563.76 220.07999999999953] /Type /Annot >> endobj -656 0 obj +630 0 obj << /Border [0 0 0] -/Dest (_responses_37) +/Dest (_responses_35) /Subtype /Link -/Rect [72.24000000000001 741.7199999999999 157.899 756.0] +/Rect [72.24000000000001 187.31999999999954 157.899 201.59999999999954] /Type /Annot >> endobj -657 0 obj +631 0 obj << /Border [0 0 0] -/Dest (_responses_37) +/Dest (_responses_35) /Subtype /Link -/Rect [552.021 741.7199999999999 563.76 756.0] +/Rect [552.021 187.31999999999954 563.76 201.59999999999954] /Type /Annot >> endobj -658 0 obj +632 0 obj << /Border [0 0 0] -/Dest (_produces_36) +/Dest (_produces_34) /Subtype /Link -/Rect [72.24000000000001 723.2399999999999 152.27100000000002 737.52] +/Rect [72.24000000000001 168.83999999999955 152.27100000000002 183.11999999999955] /Type /Annot >> endobj -659 0 obj +633 0 obj << /Border [0 0 0] -/Dest (_produces_36) +/Dest (_produces_34) /Subtype /Link -/Rect [552.021 723.2399999999999 563.76 737.52] +/Rect [552.021 168.83999999999955 563.76 183.11999999999955] /Type /Annot >> endobj -660 0 obj +634 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link -/Rect [48.24000000000001 704.7599999999999 114.66300000000001 719.04] +/Rect [48.24000000000001 150.35999999999956 114.66300000000001 164.63999999999956] /Type /Annot >> endobj -661 0 obj +635 0 obj << /Border [0 0 0] /Dest (_definitions) /Subtype /Link -/Rect [552.021 704.7599999999999 563.76 719.04] +/Rect [552.021 150.35999999999956 563.76 164.63999999999956] /Type /Annot >> endobj -662 0 obj +636 0 obj << /Border [0 0 0] /Dest (_clampinformation) /Subtype /Link -/Rect [60.24000000000001 686.2799999999999 173.08350000000002 700.56] +/Rect [60.24000000000001 131.87999999999957 173.08350000000002 146.15999999999957] /Type /Annot >> endobj -663 0 obj +637 0 obj << /Border [0 0 0] /Dest (_clampinformation) /Subtype /Link -/Rect [552.021 686.2799999999999 563.76 700.56] +/Rect [552.021 131.87999999999957 563.76 146.15999999999957] /Type /Annot >> endobj -664 0 obj +638 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link -/Rect [60.24000000000001 667.7999999999998 164.26350000000002 682.0799999999999] +/Rect [60.24000000000001 113.39999999999958 164.26350000000002 127.67999999999958] /Type /Annot >> endobj -665 0 obj +639 0 obj << /Border [0 0 0] /Dest (_cldshealthcheck) /Subtype /Link -/Rect [552.021 667.7999999999998 563.76 682.0799999999999] +/Rect [552.021 113.39999999999958 563.76 127.67999999999958] /Type /Annot >> endobj -666 0 obj +640 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link -/Rect [60.24000000000001 649.3199999999998 132.7425 663.5999999999999] +/Rect [60.24000000000001 94.91999999999959 132.7425 109.19999999999959] /Type /Annot >> endobj -667 0 obj +641 0 obj << /Border [0 0 0] /Dest (_dictionary) /Subtype /Link -/Rect [552.021 649.3199999999998 563.76 663.5999999999999] +/Rect [552.021 94.91999999999959 563.76 109.19999999999959] /Type /Annot >> endobj -668 0 obj +642 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link -/Rect [60.24000000000001 630.8399999999998 174.1545 645.1199999999999] +/Rect [60.24000000000001 76.4399999999996 174.1545 90.7199999999996] /Type /Annot >> endobj -669 0 obj +643 0 obj << /Border [0 0 0] /Dest (_dictionaryelement) /Subtype /Link -/Rect [552.021 630.8399999999998 563.76 645.1199999999999] +/Rect [552.021 76.4399999999996 563.76 90.7199999999996] /Type /Annot >> endobj -670 0 obj +644 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link -/Rect [60.24000000000001 612.3599999999998 180.507 626.6399999999999] +/Rect [60.24000000000001 57.95999999999961 180.507 72.23999999999961] /Type /Annot >> endobj -671 0 obj +645 0 obj << /Border [0 0 0] /Dest (_externalcomponent) /Subtype /Link -/Rect [552.021 612.3599999999998 563.76 626.6399999999999] +/Rect [552.021 57.95999999999961 563.76 72.23999999999961] /Type /Annot >> endobj -672 0 obj +646 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link -/Rect [60.24000000000001 593.8799999999998 205.11900000000003 608.1599999999999] +/Rect [60.24 741.7199999999999 205.11900000000003 756.0] /Type /Annot >> endobj -673 0 obj +647 0 obj << /Border [0 0 0] /Dest (_externalcomponentstate) /Subtype /Link -/Rect [552.021 593.8799999999998 563.76 608.1599999999999] +/Rect [552.021 741.7199999999999 563.76 756.0] /Type /Annot >> endobj -674 0 obj +648 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link -/Rect [60.24000000000001 575.3999999999997 129.94908984375002 589.6799999999998] +/Rect [60.24000000000001 723.2399999999999 129.94908984375002 737.52] /Type /Annot >> endobj -675 0 obj +649 0 obj << /Border [0 0 0] /Dest (_jsonarray) /Subtype /Link -/Rect [552.021 575.3999999999997 563.76 589.6799999999998] +/Rect [552.021 723.2399999999999 563.76 737.52] /Type /Annot >> endobj -676 0 obj +650 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link -/Rect [60.24000000000001 556.9199999999998 122.43150000000001 571.1999999999998] +/Rect [60.24000000000001 704.7599999999999 122.43150000000001 719.04] /Type /Annot >> endobj -677 0 obj +651 0 obj << /Border [0 0 0] /Dest (_jsonnull) /Subtype /Link -/Rect [552.021 556.9199999999998 563.76 571.1999999999998] +/Rect [552.021 704.7599999999999 563.76 719.04] /Type /Annot >> endobj -678 0 obj +652 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [60.24000000000001 538.4399999999998 133.09950000000003 552.7199999999998] +/Rect [60.24000000000001 686.2799999999999 133.09950000000003 700.56] /Type /Annot >> endobj -679 0 obj +653 0 obj << /Border [0 0 0] /Dest (_jsonobject) /Subtype /Link -/Rect [552.021 538.4399999999998 563.76 552.7199999999998] +/Rect [552.021 686.2799999999999 563.76 700.56] /Type /Annot >> endobj -680 0 obj +654 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link -/Rect [60.24000000000001 519.9599999999998 153.76350000000002 534.2399999999998] +/Rect [60.24000000000001 667.7999999999998 153.76350000000002 682.0799999999999] /Type /Annot >> endobj -681 0 obj +655 0 obj << /Border [0 0 0] /Dest (_jsonprimitive) /Subtype /Link -/Rect [552.021 519.9599999999998 563.76 534.2399999999998] +/Rect [552.021 667.7999999999998 563.76 682.0799999999999] /Type /Annot >> endobj -682 0 obj +656 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link -/Rect [60.24000000000001 501.4799999999998 110.91300000000001 515.7599999999998] +/Rect [60.24000000000001 649.3199999999998 110.91300000000001 663.5999999999999] /Type /Annot >> endobj -683 0 obj +657 0 obj << /Border [0 0 0] /Dest (_loop) /Subtype /Link -/Rect [552.021 501.4799999999998 563.76 515.7599999999998] +/Rect [552.021 649.3199999999998 563.76 663.5999999999999] /Type /Annot >> endobj -684 0 obj +658 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link -/Rect [60.24000000000001 482.9999999999998 183.531 497.27999999999975] +/Rect [60.24000000000001 630.8399999999998 183.531 645.1199999999999] /Type /Annot >> endobj -685 0 obj +659 0 obj << /Border [0 0 0] /Dest (_loopelementmodel) /Subtype /Link -/Rect [552.021 482.9999999999998 563.76 497.27999999999975] +/Rect [552.021 630.8399999999998 563.76 645.1199999999999] /Type /Annot >> endobj -686 0 obj +660 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link -/Rect [60.24000000000001 464.51999999999975 129.16200000000003 478.7999999999997] +/Rect [60.24000000000001 612.3599999999998 129.16200000000003 626.6399999999999] /Type /Annot >> endobj -687 0 obj +661 0 obj << /Border [0 0 0] /Dest (_looplog) /Subtype /Link -/Rect [552.021 464.51999999999975 563.76 478.7999999999997] +/Rect [552.021 612.3599999999998 563.76 626.6399999999999] /Type /Annot >> endobj -688 0 obj +662 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link -/Rect [60.24000000000001 446.03999999999974 157.46175585937502 460.3199999999997] +/Rect [60.24000000000001 593.8799999999998 157.46175585937502 608.1599999999999] /Type /Annot >> endobj -689 0 obj +663 0 obj << /Border [0 0 0] /Dest (_looptemplate) /Subtype /Link -/Rect [552.021 446.03999999999974 563.76 460.3199999999997] +/Rect [552.021 593.8799999999998 563.76 608.1599999999999] /Type /Annot >> endobj -690 0 obj +664 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link -/Rect [60.24000000000001 427.5599999999997 255.174755859375 441.8399999999997] +/Rect [60.24000000000001 575.3999999999997 255.174755859375 589.6799999999998] /Type /Annot >> endobj -691 0 obj +665 0 obj << /Border [0 0 0] /Dest (_looptemplateloopelementmodel) /Subtype /Link -/Rect [552.021 427.5599999999997 563.76 441.8399999999997] +/Rect [552.021 575.3999999999997 563.76 589.6799999999998] /Type /Annot >> endobj -692 0 obj +666 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link -/Rect [60.24000000000001 409.0799999999997 181.74600000000004 423.3599999999997] +/Rect [60.24000000000001 556.9199999999998 181.74600000000004 571.1999999999998] /Type /Annot >> endobj -693 0 obj +667 0 obj << /Border [0 0 0] /Dest (_microservicepolicy) /Subtype /Link -/Rect [552.021 409.0799999999997 563.76 423.3599999999997] +/Rect [552.021 556.9199999999998 563.76 571.1999999999998] /Type /Annot >> endobj -694 0 obj +668 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link -/Rect [60.24000000000001 390.5999999999997 127.39800000000001 404.87999999999965] +/Rect [60.24000000000001 538.4399999999998 127.39800000000001 552.7199999999998] /Type /Annot >> endobj -695 0 obj +669 0 obj << /Border [0 0 0] /Dest (_number) /Subtype /Link -/Rect [552.021 390.5999999999997 563.76 404.87999999999965] +/Rect [552.021 538.4399999999998 563.76 552.7199999999998] /Type /Annot >> endobj -696 0 obj +670 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link -/Rect [60.24000000000001 372.11999999999966 175.42479492187502 386.39999999999964] +/Rect [60.24000000000001 519.9599999999998 175.42479492187502 534.2399999999998] /Type /Annot >> endobj -697 0 obj +671 0 obj << /Border [0 0 0] /Dest (_operationalpolicy) /Subtype /Link -/Rect [552.021 372.11999999999966 563.76 386.39999999999964] +/Rect [552.021 519.9599999999998 563.76 534.2399999999998] /Type /Annot >> endobj -698 0 obj +672 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link -/Rect [60.24000000000001 353.63999999999965 147.11700000000002 367.9199999999996] +/Rect [60.24000000000001 501.4799999999998 147.11700000000002 515.7599999999998] /Type /Annot >> endobj -699 0 obj +673 0 obj << /Border [0 0 0] /Dest (_policymodel) /Subtype /Link -/Rect [552.021 353.63999999999965 563.76 367.9199999999996] +/Rect [552.021 501.4799999999998 563.76 515.7599999999998] /Type /Annot >> endobj -700 0 obj +674 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link -/Rect [60.24000000000001 335.1599999999996 122.29500000000002 349.4399999999996] +/Rect [60.24000000000001 482.9999999999998 122.29500000000002 497.27999999999975] /Type /Annot >> endobj -701 0 obj +675 0 obj << /Border [0 0 0] /Dest (_service) /Subtype /Link -/Rect [552.021 335.1599999999996 563.76 349.4399999999996] +/Rect [552.021 482.9999999999998 563.76 497.27999999999975] /Type /Annot >> endobj -702 0 obj +676 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 612.0 792.0] @@ -55492,1569 +53669,1497 @@ Q endstream endobj -703 0 obj +677 0 obj << /Type /Outlines -/Count 173 -/First 704 0 R -/Last 856 0 R +/Count 165 +/First 678 0 R +/Last 822 0 R >> endobj -704 0 obj +678 0 obj << /Title -/Parent 703 0 R +/Parent 677 0 R /Count 0 -/Next 705 0 R +/Next 679 0 R /Dest [7 0 R /XYZ 0 792.0 null] >> endobj -705 0 obj +679 0 obj << /Title -/Parent 703 0 R +/Parent 677 0 R /Count 0 -/Next 706 0 R -/Prev 704 0 R +/Next 680 0 R +/Prev 678 0 R /Dest [10 0 R /XYZ 0 792.0 null] >> endobj -706 0 obj +680 0 obj << /Title -/Parent 703 0 R +/Parent 677 0 R /Count 2 -/First 707 0 R -/Last 708 0 R -/Next 709 0 R -/Prev 705 0 R +/First 681 0 R +/Last 682 0 R +/Next 683 0 R +/Prev 679 0 R /Dest [20 0 R /XYZ 0 792.0 null] >> endobj -707 0 obj +681 0 obj << /Title -/Parent 706 0 R +/Parent 680 0 R /Count 0 -/Next 708 0 R +/Next 682 0 R /Dest [20 0 R /XYZ 0 712.0799999999999 null] >> endobj -708 0 obj +682 0 obj << /Title -/Parent 706 0 R +/Parent 680 0 R /Count 0 -/Prev 707 0 R +/Prev 681 0 R /Dest [20 0 R /XYZ 0 644.22 null] >> endobj -709 0 obj +683 0 obj << /Title -/Parent 703 0 R -/Count 146 -/First 710 0 R -/Last 852 0 R -/Next 856 0 R -/Prev 706 0 R +/Parent 677 0 R +/Count 138 +/First 684 0 R +/Last 818 0 R +/Next 822 0 R +/Prev 680 0 R /Dest [29 0 R /XYZ 0 792.0 null] >> endobj -710 0 obj +684 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 2 -/First 711 0 R -/Last 712 0 R -/Next 713 0 R +/First 685 0 R +/Last 686 0 R +/Next 687 0 R /Dest [29 0 R /XYZ 0 712.0799999999999 null] >> endobj -711 0 obj +685 0 obj << /Title -/Parent 710 0 R +/Parent 684 0 R /Count 0 -/Next 712 0 R +/Next 686 0 R /Dest [29 0 R /XYZ 0 672.0 null] >> endobj -712 0 obj +686 0 obj << /Title -/Parent 710 0 R +/Parent 684 0 R /Count 0 -/Prev 711 0 R +/Prev 685 0 R /Dest [29 0 R /XYZ 0 566.8800000000001 null] >> endobj -713 0 obj +687 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 2 -/First 714 0 R -/Last 715 0 R -/Next 716 0 R -/Prev 710 0 R +/First 688 0 R +/Last 689 0 R +/Next 690 0 R +/Prev 684 0 R /Dest [29 0 R /XYZ 0 510.60000000000025 null] >> endobj -714 0 obj +688 0 obj << /Title -/Parent 713 0 R +/Parent 687 0 R /Count 0 -/Next 715 0 R +/Next 689 0 R /Dest [29 0 R /XYZ 0 470.5200000000002 null] >> endobj -715 0 obj +689 0 obj << /Title -/Parent 713 0 R +/Parent 687 0 R /Count 0 -/Prev 714 0 R +/Prev 688 0 R /Dest [29 0 R /XYZ 0 379.6800000000002 null] >> endobj -716 0 obj +690 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 2 -/First 717 0 R -/Last 718 0 R -/Next 719 0 R -/Prev 713 0 R +/First 691 0 R +/Last 692 0 R +/Next 693 0 R +/Prev 687 0 R /Dest [29 0 R /XYZ 0 323.40000000000015 null] >> endobj -717 0 obj +691 0 obj << /Title -/Parent 716 0 R +/Parent 690 0 R /Count 0 -/Next 718 0 R +/Next 692 0 R /Dest [29 0 R /XYZ 0 283.3200000000001 null] >> endobj -718 0 obj +692 0 obj << /Title -/Parent 716 0 R +/Parent 690 0 R /Count 0 -/Prev 717 0 R +/Prev 691 0 R /Dest [29 0 R /XYZ 0 178.2000000000001 null] >> endobj -719 0 obj +693 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 2 -/First 720 0 R -/Last 721 0 R -/Next 722 0 R -/Prev 716 0 R +/First 694 0 R +/Last 695 0 R +/Next 696 0 R +/Prev 690 0 R /Dest [29 0 R /XYZ 0 121.92000000000007 null] >> endobj -720 0 obj +694 0 obj << /Title -/Parent 719 0 R +/Parent 693 0 R /Count 0 -/Next 721 0 R +/Next 695 0 R /Dest [45 0 R /XYZ 0 792.0 null] >> endobj -721 0 obj +695 0 obj << /Title -/Parent 719 0 R +/Parent 693 0 R /Count 0 -/Prev 720 0 R +/Prev 694 0 R /Dest [45 0 R /XYZ 0 653.2800000000002 null] >> endobj -722 0 obj +696 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 4 -/First 723 0 R -/Last 726 0 R -/Next 727 0 R -/Prev 719 0 R +/First 697 0 R +/Last 700 0 R +/Next 701 0 R +/Prev 693 0 R /Dest [45 0 R /XYZ 0 597.0000000000003 null] >> endobj -723 0 obj +697 0 obj << /Title -/Parent 722 0 R +/Parent 696 0 R /Count 0 -/Next 724 0 R +/Next 698 0 R /Dest [45 0 R /XYZ 0 556.9200000000004 null] >> endobj -724 0 obj +698 0 obj << /Title -/Parent 722 0 R +/Parent 696 0 R /Count 0 -/Next 725 0 R -/Prev 723 0 R +/Next 699 0 R +/Prev 697 0 R /Dest [45 0 R /XYZ 0 451.8000000000006 null] >> endobj -725 0 obj +699 0 obj << /Title -/Parent 722 0 R +/Parent 696 0 R /Count 0 -/Next 726 0 R -/Prev 724 0 R +/Next 700 0 R +/Prev 698 0 R /Dest [45 0 R /XYZ 0 346.6800000000005 null] >> endobj -726 0 obj +700 0 obj << /Title -/Parent 722 0 R +/Parent 696 0 R /Count 0 -/Prev 725 0 R +/Prev 699 0 R /Dest [45 0 R /XYZ 0 290.4000000000005 null] >> endobj -727 0 obj +701 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 2 -/First 728 0 R -/Last 729 0 R -/Next 730 0 R -/Prev 722 0 R +/First 702 0 R +/Last 703 0 R +/Next 704 0 R +/Prev 696 0 R /Dest [45 0 R /XYZ 0 234.12000000000046 null] >> endobj -728 0 obj +702 0 obj << /Title -/Parent 727 0 R +/Parent 701 0 R /Count 0 -/Next 729 0 R +/Next 703 0 R /Dest [45 0 R /XYZ 0 194.04000000000045 null] >> endobj -729 0 obj +703 0 obj << /Title -/Parent 727 0 R +/Parent 701 0 R /Count 0 -/Prev 728 0 R +/Prev 702 0 R /Dest [61 0 R /XYZ 0 792.0 null] >> endobj -730 0 obj +704 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 3 -/First 731 0 R -/Last 733 0 R -/Next 734 0 R -/Prev 727 0 R +/First 705 0 R +/Last 707 0 R +/Next 708 0 R +/Prev 701 0 R /Dest [61 0 R /XYZ 0 702.1200000000001 null] >> endobj -731 0 obj +705 0 obj << /Title -/Parent 730 0 R +/Parent 704 0 R /Count 0 -/Next 732 0 R +/Next 706 0 R /Dest [61 0 R /XYZ 0 662.0400000000002 null] >> endobj -732 0 obj +706 0 obj << /Title -/Parent 730 0 R +/Parent 704 0 R /Count 0 -/Next 733 0 R -/Prev 731 0 R +/Next 707 0 R +/Prev 705 0 R /Dest [61 0 R /XYZ 0 556.9200000000003 null] >> endobj -733 0 obj +707 0 obj << /Title -/Parent 730 0 R +/Parent 704 0 R /Count 0 -/Prev 732 0 R +/Prev 706 0 R /Dest [61 0 R /XYZ 0 451.8000000000004 null] >> endobj -734 0 obj +708 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 4 -/First 735 0 R -/Last 738 0 R -/Next 739 0 R -/Prev 730 0 R +/First 709 0 R +/Last 712 0 R +/Next 713 0 R +/Prev 704 0 R /Dest [61 0 R /XYZ 0 395.5200000000004 null] >> endobj -735 0 obj +709 0 obj << /Title -/Parent 734 0 R +/Parent 708 0 R /Count 0 -/Next 736 0 R +/Next 710 0 R /Dest [61 0 R /XYZ 0 355.44000000000034 null] >> endobj -736 0 obj +710 0 obj << /Title -/Parent 734 0 R +/Parent 708 0 R /Count 0 -/Next 737 0 R -/Prev 735 0 R +/Next 711 0 R +/Prev 709 0 R /Dest [61 0 R /XYZ 0 212.76000000000028 null] >> endobj -737 0 obj +711 0 obj << /Title -/Parent 734 0 R +/Parent 708 0 R /Count 0 -/Next 738 0 R -/Prev 736 0 R +/Next 712 0 R +/Prev 710 0 R /Dest [61 0 R /XYZ 0 107.64000000000024 null] >> endobj -738 0 obj +712 0 obj << /Title -/Parent 734 0 R +/Parent 708 0 R /Count 0 -/Prev 737 0 R +/Prev 711 0 R /Dest [75 0 R /XYZ 0 792.0 null] >> endobj -739 0 obj +713 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 3 -/First 740 0 R -/Last 742 0 R -/Next 743 0 R -/Prev 734 0 R +/First 714 0 R +/Last 716 0 R +/Next 717 0 R +/Prev 708 0 R /Dest [75 0 R /XYZ 0 702.1200000000001 null] >> endobj -740 0 obj +714 0 obj << /Title -/Parent 739 0 R +/Parent 713 0 R /Count 0 -/Next 741 0 R +/Next 715 0 R /Dest [75 0 R /XYZ 0 662.0400000000002 null] >> endobj -741 0 obj +715 0 obj << /Title -/Parent 739 0 R +/Parent 713 0 R /Count 0 -/Next 742 0 R -/Prev 740 0 R +/Next 716 0 R +/Prev 714 0 R /Dest [75 0 R /XYZ 0 556.9200000000003 null] >> endobj -742 0 obj +716 0 obj << /Title -/Parent 739 0 R +/Parent 713 0 R /Count 0 -/Prev 741 0 R +/Prev 715 0 R /Dest [75 0 R /XYZ 0 466.0800000000005 null] >> endobj -743 0 obj +717 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 3 -/First 744 0 R -/Last 746 0 R -/Next 747 0 R -/Prev 739 0 R +/First 718 0 R +/Last 720 0 R +/Next 721 0 R +/Prev 713 0 R /Dest [75 0 R /XYZ 0 409.80000000000047 null] >> endobj -744 0 obj +718 0 obj << /Title -/Parent 743 0 R +/Parent 717 0 R /Count 0 -/Next 745 0 R +/Next 719 0 R /Dest [75 0 R /XYZ 0 341.64000000000044 null] >> endobj -745 0 obj +719 0 obj << /Title -/Parent 743 0 R +/Parent 717 0 R /Count 0 -/Next 746 0 R -/Prev 744 0 R +/Next 720 0 R +/Prev 718 0 R /Dest [75 0 R /XYZ 0 198.9600000000004 null] >> endobj -746 0 obj +720 0 obj << /Title -/Parent 743 0 R +/Parent 717 0 R /Count 0 -/Prev 745 0 R +/Prev 719 0 R /Dest [75 0 R /XYZ 0 108.12000000000037 null] >> endobj -747 0 obj +721 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 3 -/First 748 0 R -/Last 750 0 R -/Next 751 0 R -/Prev 743 0 R +/First 722 0 R +/Last 724 0 R +/Next 725 0 R +/Prev 717 0 R /Dest [87 0 R /XYZ 0 792.0 null] >> endobj -748 0 obj +722 0 obj << /Title -/Parent 747 0 R +/Parent 721 0 R /Count 0 -/Next 749 0 R +/Next 723 0 R /Dest [87 0 R /XYZ 0 662.1600000000001 null] >> endobj -749 0 obj +723 0 obj << /Title -/Parent 747 0 R +/Parent 721 0 R /Count 0 -/Next 750 0 R -/Prev 748 0 R +/Next 724 0 R +/Prev 722 0 R /Dest [87 0 R /XYZ 0 481.92000000000024 null] >> endobj -750 0 obj +724 0 obj << /Title -/Parent 747 0 R +/Parent 721 0 R /Count 0 -/Prev 749 0 R +/Prev 723 0 R /Dest [87 0 R /XYZ 0 376.8000000000002 null] >> endobj -751 0 obj +725 0 obj << /Title -/Parent 709 0 R +/Parent 683 0 R /Count 4 -/First 752 0 R -/Last 755 0 R -/Next 756 0 R -/Prev 747 0 R +/First 726 0 R +/Last 729 0 R +/Next 730 0 R +/Prev 721 0 R /Dest [87 0 R /XYZ 0 320.52000000000015 null] >> endobj +726 0 obj +<< /Title +/Parent 725 0 R +/Count 0 +/Next 727 0 R +/Dest [87 0 R /XYZ 0 224.28000000000017 null] +>> +endobj +727 0 obj +<< /Title +/Parent 725 0 R +/Count 0 +/Next 728 0 R +/Prev 726 0 R +/Dest [87 0 R /XYZ 0 104.88000000000014 null] +>> +endobj +728 0 obj +<< /Title +/Parent 725 0 R +/Count 0 +/Next 729 0 R +/Prev 727 0 R +/Dest [98 0 R /XYZ 0 683.1600000000001 null] +>> +endobj +729 0 obj +<< /Title +/Parent 725 0 R +/Count 0 +/Prev 728 0 R +/Dest [98 0 R /XYZ 0 626.8800000000002 null] +>> +endobj +730 0 obj +<< /Title +/Parent 683 0 R +/Count 2 +/First 731 0 R +/Last 732 0 R +/Next 733 0 R +/Prev 725 0 R +/Dest [98 0 R /XYZ 0 570.6000000000004 null] +>> +endobj +731 0 obj +<< /Title +/Parent 730 0 R +/Count 0 +/Next 732 0 R +/Dest [98 0 R /XYZ 0 530.5200000000004 null] +>> +endobj +732 0 obj +<< /Title +/Parent 730 0 R +/Count 0 +/Prev 731 0 R +/Dest [98 0 R /XYZ 0 425.4000000000005 null] +>> +endobj +733 0 obj +<< /Title +/Parent 683 0 R +/Count 3 +/First 734 0 R +/Last 736 0 R +/Next 737 0 R +/Prev 730 0 R +/Dest [98 0 R /XYZ 0 334.5600000000005 null] +>> +endobj +734 0 obj +<< /Title +/Parent 733 0 R +/Count 0 +/Next 735 0 R +/Dest [98 0 R /XYZ 0 294.4800000000005 null] +>> +endobj +735 0 obj +<< /Title +/Parent 733 0 R +/Count 0 +/Next 736 0 R +/Prev 734 0 R +/Dest [98 0 R /XYZ 0 189.36000000000044 null] +>> +endobj +736 0 obj +<< /Title +/Parent 733 0 R +/Count 0 +/Prev 735 0 R +/Dest [110 0 R /XYZ 0 792.0 null] +>> +endobj +737 0 obj +<< /Title +/Parent 683 0 R +/Count 2 +/First 738 0 R +/Last 739 0 R +/Next 740 0 R +/Prev 733 0 R +/Dest [110 0 R /XYZ 0 702.1200000000001 null] +>> +endobj +738 0 obj +<< /Title +/Parent 737 0 R +/Count 0 +/Next 739 0 R +/Dest [110 0 R /XYZ 0 662.0400000000002 null] +>> +endobj +739 0 obj +<< /Title +/Parent 737 0 R +/Count 0 +/Prev 738 0 R +/Dest [110 0 R /XYZ 0 556.9200000000003 null] +>> +endobj +740 0 obj +<< /Title +/Parent 683 0 R +/Count 3 +/First 741 0 R +/Last 743 0 R +/Next 744 0 R +/Prev 737 0 R +/Dest [110 0 R /XYZ 0 500.64000000000044 null] +>> +endobj +741 0 obj +<< /Title +/Parent 740 0 R +/Count 0 +/Next 742 0 R +/Dest [110 0 R /XYZ 0 460.5600000000004 null] +>> +endobj +742 0 obj +<< /Title +/Parent 740 0 R +/Count 0 +/Next 743 0 R +/Prev 741 0 R +/Dest [110 0 R /XYZ 0 355.44000000000034 null] +>> +endobj +743 0 obj +<< /Title +/Parent 740 0 R +/Count 0 +/Prev 742 0 R +/Dest [110 0 R /XYZ 0 250.32000000000028 null] +>> +endobj +744 0 obj +<< /Title +/Parent 683 0 R +/Count 3 +/First 745 0 R +/Last 747 0 R +/Next 748 0 R +/Prev 740 0 R +/Dest [110 0 R /XYZ 0 194.04000000000025 null] +>> +endobj +745 0 obj +<< /Title +/Parent 744 0 R +/Count 0 +/Next 746 0 R +/Dest [110 0 R /XYZ 0 97.80000000000024 null] +>> +endobj +746 0 obj +<< /Title +/Parent 744 0 R +/Count 0 +/Next 747 0 R +/Prev 745 0 R +/Dest [123 0 R /XYZ 0 645.5999999999999 null] +>> +endobj +747 0 obj +<< /Title +/Parent 744 0 R +/Count 0 +/Prev 746 0 R +/Dest [123 0 R /XYZ 0 540.48 null] +>> +endobj +748 0 obj +<< /Title +/Parent 683 0 R +/Count 3 +/First 749 0 R +/Last 751 0 R +/Next 752 0 R +/Prev 744 0 R +/Dest [123 0 R /XYZ 0 484.20000000000016 null] +>> +endobj +749 0 obj +<< /Title +/Parent 748 0 R +/Count 0 +/Next 750 0 R +/Dest [123 0 R /XYZ 0 387.96000000000015 null] +>> +endobj +750 0 obj +<< /Title +/Parent 748 0 R +/Count 0 +/Next 751 0 R +/Prev 749 0 R +/Dest [123 0 R /XYZ 0 245.28000000000014 null] +>> +endobj +751 0 obj +<< /Title +/Parent 748 0 R +/Count 0 +/Prev 750 0 R +/Dest [123 0 R /XYZ 0 140.1600000000001 null] +>> +endobj 752 0 obj -<< /Title -/Parent 751 0 R -/Count 0 -/Next 753 0 R -/Dest [87 0 R /XYZ 0 224.28000000000017 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 753 0 R +/Last 755 0 R +/Next 756 0 R +/Prev 748 0 R +/Dest [134 0 R /XYZ 0 792.0 null] >> endobj 753 0 obj -<< /Title -/Parent 751 0 R +<< /Title +/Parent 752 0 R /Count 0 /Next 754 0 R -/Prev 752 0 R -/Dest [87 0 R /XYZ 0 104.88000000000014 null] +/Dest [134 0 R /XYZ 0 662.1600000000001 null] >> endobj 754 0 obj -<< /Title -/Parent 751 0 R +<< /Title +/Parent 752 0 R /Count 0 /Next 755 0 R /Prev 753 0 R -/Dest [98 0 R /XYZ 0 683.1600000000001 null] +/Dest [134 0 R /XYZ 0 444.3600000000002 null] >> endobj 755 0 obj -<< /Title -/Parent 751 0 R +<< /Title +/Parent 752 0 R /Count 0 /Prev 754 0 R -/Dest [98 0 R /XYZ 0 626.8800000000002 null] +/Dest [134 0 R /XYZ 0 339.2400000000001 null] >> endobj 756 0 obj -<< /Title -/Parent 709 0 R -/Count 2 +<< /Title +/Parent 683 0 R +/Count 3 /First 757 0 R -/Last 758 0 R -/Next 759 0 R -/Prev 751 0 R -/Dest [98 0 R /XYZ 0 570.6000000000004 null] +/Last 759 0 R +/Next 760 0 R +/Prev 752 0 R +/Dest [134 0 R /XYZ 0 282.9600000000001 null] >> endobj 757 0 obj -<< /Title +<< /Title /Parent 756 0 R /Count 0 /Next 758 0 R -/Dest [98 0 R /XYZ 0 530.5200000000004 null] +/Dest [134 0 R /XYZ 0 242.8800000000001 null] >> endobj 758 0 obj -<< /Title +<< /Title /Parent 756 0 R /Count 0 +/Next 759 0 R /Prev 757 0 R -/Dest [98 0 R /XYZ 0 425.4000000000005 null] +/Dest [134 0 R /XYZ 0 137.76000000000008 null] >> endobj 759 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 760 0 R -/Last 762 0 R -/Next 763 0 R -/Prev 756 0 R -/Dest [98 0 R /XYZ 0 334.5600000000005 null] +<< /Title +/Parent 756 0 R +/Count 0 +/Prev 758 0 R +/Dest [144 0 R /XYZ 0 683.1600000000001 null] >> endobj 760 0 obj -<< /Title -/Parent 759 0 R -/Count 0 -/Next 761 0 R -/Dest [98 0 R /XYZ 0 294.4800000000005 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 761 0 R +/Last 763 0 R +/Next 764 0 R +/Prev 756 0 R +/Dest [144 0 R /XYZ 0 626.8800000000002 null] >> endobj 761 0 obj -<< /Title -/Parent 759 0 R +<< /Title +/Parent 760 0 R /Count 0 /Next 762 0 R -/Prev 760 0 R -/Dest [98 0 R /XYZ 0 189.36000000000044 null] +/Dest [144 0 R /XYZ 0 586.8000000000003 null] >> endobj 762 0 obj -<< /Title -/Parent 759 0 R +<< /Title +/Parent 760 0 R /Count 0 +/Next 763 0 R /Prev 761 0 R -/Dest [110 0 R /XYZ 0 792.0 null] +/Dest [144 0 R /XYZ 0 481.68000000000046 null] >> endobj 763 0 obj -<< /Title -/Parent 709 0 R -/Count 2 -/First 764 0 R -/Last 765 0 R -/Next 766 0 R -/Prev 759 0 R -/Dest [110 0 R /XYZ 0 702.1200000000001 null] +<< /Title +/Parent 760 0 R +/Count 0 +/Prev 762 0 R +/Dest [144 0 R /XYZ 0 376.5600000000004 null] >> endobj 764 0 obj -<< /Title -/Parent 763 0 R -/Count 0 -/Next 765 0 R -/Dest [110 0 R /XYZ 0 662.0400000000002 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 765 0 R +/Last 767 0 R +/Next 768 0 R +/Prev 760 0 R +/Dest [144 0 R /XYZ 0 320.28000000000037 null] >> endobj 765 0 obj -<< /Title -/Parent 763 0 R +<< /Title +/Parent 764 0 R /Count 0 -/Prev 764 0 R -/Dest [110 0 R /XYZ 0 556.9200000000003 null] +/Next 766 0 R +/Dest [144 0 R /XYZ 0 280.20000000000033 null] >> endobj 766 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 767 0 R -/Last 769 0 R -/Next 770 0 R -/Prev 763 0 R -/Dest [110 0 R /XYZ 0 500.64000000000044 null] +<< /Title +/Parent 764 0 R +/Count 0 +/Next 767 0 R +/Prev 765 0 R +/Dest [144 0 R /XYZ 0 175.08000000000033 null] >> endobj 767 0 obj -<< /Title -/Parent 766 0 R +<< /Title +/Parent 764 0 R /Count 0 -/Next 768 0 R -/Dest [110 0 R /XYZ 0 460.5600000000004 null] +/Prev 766 0 R +/Dest [159 0 R /XYZ 0 792.0 null] >> endobj 768 0 obj -<< /Title -/Parent 766 0 R -/Count 0 -/Next 769 0 R -/Prev 767 0 R -/Dest [110 0 R /XYZ 0 355.44000000000034 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 769 0 R +/Last 771 0 R +/Next 772 0 R +/Prev 764 0 R +/Dest [159 0 R /XYZ 0 702.1200000000001 null] >> endobj 769 0 obj -<< /Title -/Parent 766 0 R +<< /Title +/Parent 768 0 R /Count 0 -/Prev 768 0 R -/Dest [110 0 R /XYZ 0 250.32000000000028 null] +/Next 770 0 R +/Dest [159 0 R /XYZ 0 662.0400000000002 null] >> endobj 770 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 771 0 R -/Last 773 0 R -/Next 774 0 R -/Prev 766 0 R -/Dest [110 0 R /XYZ 0 194.04000000000025 null] +<< /Title +/Parent 768 0 R +/Count 0 +/Next 771 0 R +/Prev 769 0 R +/Dest [159 0 R /XYZ 0 556.9200000000003 null] >> endobj 771 0 obj -<< /Title -/Parent 770 0 R +<< /Title +/Parent 768 0 R /Count 0 -/Next 772 0 R -/Dest [110 0 R /XYZ 0 97.80000000000024 null] +/Prev 770 0 R +/Dest [159 0 R /XYZ 0 451.8000000000004 null] >> endobj 772 0 obj -<< /Title -/Parent 770 0 R -/Count 0 -/Next 773 0 R -/Prev 771 0 R -/Dest [123 0 R /XYZ 0 645.5999999999999 null] +<< /Title +/Parent 683 0 R +/Count 4 +/First 773 0 R +/Last 776 0 R +/Next 777 0 R +/Prev 768 0 R +/Dest [159 0 R /XYZ 0 395.5200000000004 null] >> endobj 773 0 obj -<< /Title -/Parent 770 0 R +<< /Title +/Parent 772 0 R /Count 0 -/Prev 772 0 R -/Dest [123 0 R /XYZ 0 540.48 null] +/Next 774 0 R +/Dest [159 0 R /XYZ 0 355.44000000000034 null] >> endobj 774 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 775 0 R -/Last 777 0 R -/Next 778 0 R -/Prev 770 0 R -/Dest [123 0 R /XYZ 0 484.20000000000016 null] +<< /Title +/Parent 772 0 R +/Count 0 +/Next 775 0 R +/Prev 773 0 R +/Dest [159 0 R /XYZ 0 212.76000000000028 null] >> endobj 775 0 obj -<< /Title -/Parent 774 0 R +<< /Title +/Parent 772 0 R /Count 0 /Next 776 0 R -/Dest [123 0 R /XYZ 0 387.96000000000015 null] +/Prev 774 0 R +/Dest [159 0 R /XYZ 0 107.64000000000024 null] >> endobj 776 0 obj -<< /Title -/Parent 774 0 R +<< /Title +/Parent 772 0 R /Count 0 -/Next 777 0 R /Prev 775 0 R -/Dest [123 0 R /XYZ 0 245.28000000000014 null] +/Dest [173 0 R /XYZ 0 792.0 null] >> endobj 777 0 obj -<< /Title -/Parent 774 0 R -/Count 0 -/Prev 776 0 R -/Dest [123 0 R /XYZ 0 140.1600000000001 null] +<< /Title +/Parent 683 0 R +/Count 4 +/First 778 0 R +/Last 781 0 R +/Next 782 0 R +/Prev 772 0 R +/Dest [173 0 R /XYZ 0 702.1200000000001 null] >> endobj 778 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 779 0 R -/Last 781 0 R -/Next 782 0 R -/Prev 774 0 R -/Dest [133 0 R /XYZ 0 792.0 null] +<< /Title +/Parent 777 0 R +/Count 0 +/Next 779 0 R +/Dest [173 0 R /XYZ 0 633.9600000000002 null] >> endobj 779 0 obj -<< /Title -/Parent 778 0 R +<< /Title +/Parent 777 0 R /Count 0 /Next 780 0 R -/Dest [133 0 R /XYZ 0 662.1600000000001 null] +/Prev 778 0 R +/Dest [173 0 R /XYZ 0 491.28000000000026 null] >> endobj 780 0 obj -<< /Title -/Parent 778 0 R +<< /Title +/Parent 777 0 R /Count 0 /Next 781 0 R /Prev 779 0 R -/Dest [133 0 R /XYZ 0 444.3600000000002 null] +/Dest [173 0 R /XYZ 0 386.1600000000002 null] >> endobj 781 0 obj -<< /Title -/Parent 778 0 R +<< /Title +/Parent 777 0 R /Count 0 /Prev 780 0 R -/Dest [133 0 R /XYZ 0 339.2400000000001 null] +/Dest [173 0 R /XYZ 0 329.88000000000017 null] >> endobj 782 0 obj -<< /Title -/Parent 709 0 R -/Count 3 +<< /Title +/Parent 683 0 R +/Count 4 /First 783 0 R -/Last 785 0 R -/Next 786 0 R -/Prev 778 0 R -/Dest [133 0 R /XYZ 0 282.9600000000001 null] +/Last 786 0 R +/Next 787 0 R +/Prev 777 0 R +/Dest [173 0 R /XYZ 0 273.60000000000014 null] >> endobj 783 0 obj -<< /Title +<< /Title /Parent 782 0 R /Count 0 /Next 784 0 R -/Dest [133 0 R /XYZ 0 242.8800000000001 null] +/Dest [173 0 R /XYZ 0 205.44000000000014 null] >> endobj 784 0 obj -<< /Title +<< /Title /Parent 782 0 R /Count 0 /Next 785 0 R /Prev 783 0 R -/Dest [133 0 R /XYZ 0 137.76000000000008 null] +/Dest [186 0 R /XYZ 0 792.0 null] >> endobj 785 0 obj -<< /Title +<< /Title /Parent 782 0 R /Count 0 +/Next 786 0 R /Prev 784 0 R -/Dest [144 0 R /XYZ 0 683.1600000000001 null] +/Dest [186 0 R /XYZ 0 653.2800000000002 null] >> endobj 786 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 787 0 R -/Last 789 0 R -/Next 790 0 R -/Prev 782 0 R -/Dest [144 0 R /XYZ 0 626.8800000000002 null] +<< /Title +/Parent 782 0 R +/Count 0 +/Prev 785 0 R +/Dest [186 0 R /XYZ 0 597.0000000000003 null] >> endobj 787 0 obj -<< /Title -/Parent 786 0 R -/Count 0 -/Next 788 0 R -/Dest [144 0 R /XYZ 0 586.8000000000003 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 788 0 R +/Last 790 0 R +/Next 791 0 R +/Prev 782 0 R +/Dest [186 0 R /XYZ 0 540.7200000000005 null] >> endobj 788 0 obj -<< /Title -/Parent 786 0 R +<< /Title +/Parent 787 0 R /Count 0 /Next 789 0 R -/Prev 787 0 R -/Dest [144 0 R /XYZ 0 481.68000000000046 null] +/Dest [186 0 R /XYZ 0 500.6400000000005 null] >> endobj 789 0 obj -<< /Title -/Parent 786 0 R +<< /Title +/Parent 787 0 R /Count 0 +/Next 790 0 R /Prev 788 0 R -/Dest [144 0 R /XYZ 0 376.5600000000004 null] +/Dest [186 0 R /XYZ 0 395.5200000000005 null] >> endobj 790 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 791 0 R -/Last 793 0 R -/Next 794 0 R -/Prev 786 0 R -/Dest [144 0 R /XYZ 0 320.28000000000037 null] +<< /Title +/Parent 787 0 R +/Count 0 +/Prev 789 0 R +/Dest [186 0 R /XYZ 0 290.40000000000043 null] >> endobj 791 0 obj -<< /Title -/Parent 790 0 R -/Count 0 -/Next 792 0 R -/Dest [144 0 R /XYZ 0 280.20000000000033 null] +<< /Title +/Parent 683 0 R +/Count 4 +/First 792 0 R +/Last 795 0 R +/Next 796 0 R +/Prev 787 0 R +/Dest [186 0 R /XYZ 0 234.1200000000004 null] >> endobj 792 0 obj -<< /Title -/Parent 790 0 R +<< /Title +/Parent 791 0 R /Count 0 /Next 793 0 R -/Prev 791 0 R -/Dest [144 0 R /XYZ 0 175.08000000000033 null] +/Dest [186 0 R /XYZ 0 194.0400000000004 null] >> endobj 793 0 obj -<< /Title -/Parent 790 0 R +<< /Title +/Parent 791 0 R /Count 0 +/Next 794 0 R /Prev 792 0 R -/Dest [160 0 R /XYZ 0 792.0 null] +/Dest [199 0 R /XYZ 0 792.0 null] >> endobj 794 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 795 0 R -/Last 797 0 R -/Next 798 0 R -/Prev 790 0 R -/Dest [160 0 R /XYZ 0 702.1200000000001 null] +<< /Title +/Parent 791 0 R +/Count 0 +/Next 795 0 R +/Prev 793 0 R +/Dest [199 0 R /XYZ 0 653.2800000000002 null] >> endobj 795 0 obj -<< /Title -/Parent 794 0 R +<< /Title +/Parent 791 0 R /Count 0 -/Next 796 0 R -/Dest [160 0 R /XYZ 0 662.0400000000002 null] +/Prev 794 0 R +/Dest [199 0 R /XYZ 0 597.0000000000003 null] >> endobj 796 0 obj -<< /Title -/Parent 794 0 R -/Count 0 -/Next 797 0 R -/Prev 795 0 R -/Dest [160 0 R /XYZ 0 556.9200000000003 null] +<< /Title +/Parent 683 0 R +/Count 2 +/First 797 0 R +/Last 798 0 R +/Next 799 0 R +/Prev 791 0 R +/Dest [199 0 R /XYZ 0 540.7200000000005 null] >> endobj 797 0 obj -<< /Title -/Parent 794 0 R +<< /Title +/Parent 796 0 R /Count 0 -/Prev 796 0 R -/Dest [160 0 R /XYZ 0 451.8000000000004 null] +/Next 798 0 R +/Dest [199 0 R /XYZ 0 500.6400000000005 null] >> endobj 798 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 799 0 R -/Last 801 0 R -/Next 802 0 R -/Prev 794 0 R -/Dest [160 0 R /XYZ 0 395.5200000000004 null] +<< /Title +/Parent 796 0 R +/Count 0 +/Prev 797 0 R +/Dest [199 0 R /XYZ 0 395.52000000000044 null] >> endobj 799 0 obj -<< /Title -/Parent 798 0 R -/Count 0 -/Next 800 0 R -/Dest [160 0 R /XYZ 0 355.44000000000034 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 800 0 R +/Last 802 0 R +/Next 803 0 R +/Prev 796 0 R +/Dest [199 0 R /XYZ 0 339.2400000000004 null] >> endobj 800 0 obj -<< /Title -/Parent 798 0 R +<< /Title +/Parent 799 0 R /Count 0 /Next 801 0 R -/Prev 799 0 R -/Dest [160 0 R /XYZ 0 250.32000000000033 null] +/Dest [199 0 R /XYZ 0 243.00000000000043 null] >> endobj 801 0 obj -<< /Title -/Parent 798 0 R +<< /Title +/Parent 799 0 R /Count 0 +/Next 802 0 R /Prev 800 0 R -/Dest [160 0 R /XYZ 0 145.2000000000003 null] +/Dest [199 0 R /XYZ 0 100.32000000000039 null] >> endobj 802 0 obj -<< /Title -/Parent 709 0 R -/Count 4 -/First 803 0 R -/Last 806 0 R -/Next 807 0 R -/Prev 798 0 R -/Dest [172 0 R /XYZ 0 792.0 null] +<< /Title +/Parent 799 0 R +/Count 0 +/Prev 801 0 R +/Dest [214 0 R /XYZ 0 683.1600000000001 null] >> endobj 803 0 obj -<< /Title -/Parent 802 0 R -/Count 0 -/Next 804 0 R -/Dest [172 0 R /XYZ 0 718.32 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 804 0 R +/Last 806 0 R +/Next 807 0 R +/Prev 799 0 R +/Dest [214 0 R /XYZ 0 626.8800000000002 null] >> endobj 804 0 obj -<< /Title -/Parent 802 0 R +<< /Title +/Parent 803 0 R /Count 0 /Next 805 0 R -/Prev 803 0 R -/Dest [172 0 R /XYZ 0 575.6400000000001 null] +/Dest [214 0 R /XYZ 0 530.6400000000003 null] >> endobj 805 0 obj -<< /Title -/Parent 802 0 R +<< /Title +/Parent 803 0 R /Count 0 /Next 806 0 R /Prev 804 0 R -/Dest [172 0 R /XYZ 0 470.5200000000002 null] +/Dest [214 0 R /XYZ 0 387.9600000000003 null] >> endobj 806 0 obj -<< /Title -/Parent 802 0 R +<< /Title +/Parent 803 0 R /Count 0 /Prev 805 0 R -/Dest [172 0 R /XYZ 0 414.2400000000002 null] +/Dest [214 0 R /XYZ 0 282.84000000000026 null] >> endobj 807 0 obj -<< /Title -/Parent 709 0 R +<< /Title +/Parent 683 0 R /Count 4 /First 808 0 R /Last 811 0 R /Next 812 0 R -/Prev 802 0 R -/Dest [172 0 R /XYZ 0 357.96000000000015 null] +/Prev 803 0 R +/Dest [214 0 R /XYZ 0 226.56000000000026 null] >> endobj 808 0 obj -<< /Title +<< /Title /Parent 807 0 R /Count 0 /Next 809 0 R -/Dest [172 0 R /XYZ 0 289.8000000000001 null] +/Dest [214 0 R /XYZ 0 130.32000000000025 null] >> endobj 809 0 obj -<< /Title +<< /Title /Parent 807 0 R /Count 0 /Next 810 0 R /Prev 808 0 R -/Dest [172 0 R /XYZ 0 147.1200000000001 null] +/Dest [225 0 R /XYZ 0 608.04 null] >> endobj 810 0 obj -<< /Title +<< /Title /Parent 807 0 R /Count 0 /Next 811 0 R /Prev 809 0 R -/Dest [186 0 R /XYZ 0 792.0 null] +/Dest [225 0 R /XYZ 0 502.9200000000001 null] >> endobj 811 0 obj -<< /Title +<< /Title /Parent 807 0 R /Count 0 /Prev 810 0 R -/Dest [186 0 R /XYZ 0 702.1200000000001 null] +/Dest [225 0 R /XYZ 0 446.64000000000004 null] >> endobj 812 0 obj -<< /Title -/Parent 709 0 R -/Count 4 +<< /Title +/Parent 683 0 R +/Count 2 /First 813 0 R -/Last 816 0 R -/Next 817 0 R +/Last 814 0 R +/Next 815 0 R /Prev 807 0 R -/Dest [186 0 R /XYZ 0 645.8400000000003 null] +/Dest [225 0 R /XYZ 0 390.36 null] >> endobj 813 0 obj -<< /Title +<< /Title /Parent 812 0 R /Count 0 /Next 814 0 R -/Dest [186 0 R /XYZ 0 577.6800000000004 null] +/Dest [225 0 R /XYZ 0 350.28 null] >> endobj 814 0 obj -<< /Title +<< /Title /Parent 812 0 R /Count 0 -/Next 815 0 R /Prev 813 0 R -/Dest [186 0 R /XYZ 0 435.0000000000005 null] +/Dest [225 0 R /XYZ 0 245.15999999999997 null] >> endobj 815 0 obj -<< /Title -/Parent 812 0 R -/Count 0 -/Next 816 0 R -/Prev 814 0 R -/Dest [186 0 R /XYZ 0 329.88000000000045 null] +<< /Title +/Parent 683 0 R +/Count 2 +/First 816 0 R +/Last 817 0 R +/Next 818 0 R +/Prev 812 0 R +/Dest [225 0 R /XYZ 0 188.87999999999994 null] >> endobj 816 0 obj -<< /Title -/Parent 812 0 R +<< /Title +/Parent 815 0 R /Count 0 -/Prev 815 0 R -/Dest [186 0 R /XYZ 0 273.6000000000004 null] +/Next 817 0 R +/Dest [225 0 R /XYZ 0 148.79999999999993 null] >> endobj 817 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 818 0 R -/Last 820 0 R -/Next 821 0 R -/Prev 812 0 R -/Dest [186 0 R /XYZ 0 217.32000000000042 null] +<< /Title +/Parent 815 0 R +/Count 0 +/Prev 816 0 R +/Dest [238 0 R /XYZ 0 792.0 null] >> endobj 818 0 obj -<< /Title -/Parent 817 0 R -/Count 0 -/Next 819 0 R -/Dest [186 0 R /XYZ 0 177.2400000000004 null] +<< /Title +/Parent 683 0 R +/Count 3 +/First 819 0 R +/Last 821 0 R +/Prev 815 0 R +/Dest [238 0 R /XYZ 0 702.1200000000001 null] >> endobj 819 0 obj -<< /Title -/Parent 817 0 R +<< /Title +/Parent 818 0 R /Count 0 /Next 820 0 R -/Prev 818 0 R -/Dest [199 0 R /XYZ 0 792.0 null] +/Dest [238 0 R /XYZ 0 662.0400000000002 null] >> endobj 820 0 obj -<< /Title -/Parent 817 0 R +<< /Title +/Parent 818 0 R /Count 0 +/Next 821 0 R /Prev 819 0 R -/Dest [199 0 R /XYZ 0 653.2800000000002 null] +/Dest [238 0 R /XYZ 0 556.9200000000003 null] >> endobj 821 0 obj -<< /Title -/Parent 709 0 R -/Count 4 -/First 822 0 R -/Last 825 0 R -/Next 826 0 R -/Prev 817 0 R -/Dest [199 0 R /XYZ 0 597.0000000000003 null] +<< /Title +/Parent 818 0 R +/Count 0 +/Prev 820 0 R +/Dest [238 0 R /XYZ 0 451.8000000000004 null] >> endobj 822 0 obj -<< /Title -/Parent 821 0 R -/Count 0 -/Next 823 0 R -/Dest [199 0 R /XYZ 0 556.9200000000004 null] +<< /Title +/Parent 677 0 R +/Count 20 +/First 823 0 R +/Last 842 0 R +/Prev 683 0 R +/Dest [247 0 R /XYZ 0 792.0 null] >> endobj 823 0 obj -<< /Title -/Parent 821 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 824 0 R -/Prev 822 0 R -/Dest [199 0 R /XYZ 0 451.8000000000006 null] +/Dest [247 0 R /XYZ 0 712.0799999999999 null] >> endobj 824 0 obj -<< /Title -/Parent 821 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 825 0 R /Prev 823 0 R -/Dest [199 0 R /XYZ 0 346.6800000000005 null] +/Dest [247 0 R /XYZ 0 524.04 null] >> endobj 825 0 obj -<< /Title -/Parent 821 0 R +<< /Title +/Parent 822 0 R /Count 0 +/Next 826 0 R /Prev 824 0 R -/Dest [199 0 R /XYZ 0 290.4000000000005 null] +/Dest [247 0 R /XYZ 0 335.99999999999994 null] >> endobj 826 0 obj -<< /Title -/Parent 709 0 R -/Count 2 -/First 827 0 R -/Last 828 0 R -/Next 829 0 R -/Prev 821 0 R -/Dest [199 0 R /XYZ 0 234.12000000000046 null] +<< /Title +/Parent 822 0 R +/Count 0 +/Next 827 0 R +/Prev 825 0 R +/Dest [254 0 R /XYZ 0 608.04 null] >> endobj 827 0 obj -<< /Title -/Parent 826 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 828 0 R -/Dest [199 0 R /XYZ 0 194.04000000000045 null] +/Prev 826 0 R +/Dest [254 0 R /XYZ 0 157.07999999999998 null] >> endobj 828 0 obj -<< /Title -/Parent 826 0 R +<< /Title +/Parent 822 0 R /Count 0 +/Next 829 0 R /Prev 827 0 R -/Dest [213 0 R /XYZ 0 792.0 null] +/Dest [260 0 R /XYZ 0 683.1600000000001 null] >> endobj 829 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 830 0 R -/Last 832 0 R -/Next 833 0 R -/Prev 826 0 R -/Dest [213 0 R /XYZ 0 702.1200000000001 null] +<< /Title +/Parent 822 0 R +/Count 0 +/Next 830 0 R +/Prev 828 0 R +/Dest [260 0 R /XYZ 0 495.1200000000002 null] >> endobj 830 0 obj -<< /Title -/Parent 829 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 831 0 R -/Dest [213 0 R /XYZ 0 605.8800000000002 null] +/Prev 829 0 R +/Dest [267 0 R /XYZ 0 345.1200000000003 null] >> endobj 831 0 obj -<< /Title -/Parent 829 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 832 0 R /Prev 830 0 R -/Dest [213 0 R /XYZ 0 463.20000000000033 null] +/Dest [273 0 R /XYZ 0 194.88000000000017 null] >> endobj 832 0 obj -<< /Title -/Parent 829 0 R +<< /Title +/Parent 822 0 R /Count 0 +/Next 833 0 R /Prev 831 0 R -/Dest [213 0 R /XYZ 0 358.08000000000027 null] +/Dest [288 0 R /XYZ 0 792.0 null] >> endobj 833 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 834 0 R -/Last 836 0 R -/Next 837 0 R -/Prev 829 0 R -/Dest [213 0 R /XYZ 0 301.80000000000024 null] +<< /Title +/Parent 822 0 R +/Count 0 +/Next 834 0 R +/Prev 832 0 R +/Dest [296 0 R /XYZ 0 495.3600000000003 null] >> endobj 834 0 obj -<< /Title -/Parent 833 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 835 0 R -/Dest [213 0 R /XYZ 0 205.56000000000026 null] +/Prev 833 0 R +/Dest [304 0 R /XYZ 0 532.9200000000001 null] >> endobj 835 0 obj -<< /Title -/Parent 833 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 836 0 R /Prev 834 0 R -/Dest [225 0 R /XYZ 0 792.0 null] +/Dest [311 0 R /XYZ 0 792.0 null] >> endobj 836 0 obj -<< /Title -/Parent 833 0 R +<< /Title +/Parent 822 0 R /Count 0 +/Next 837 0 R /Prev 835 0 R -/Dest [225 0 R /XYZ 0 653.2800000000002 null] +/Dest [311 0 R /XYZ 0 457.68 null] >> endobj 837 0 obj -<< /Title -/Parent 709 0 R -/Count 4 -/First 838 0 R -/Last 841 0 R -/Next 842 0 R -/Prev 833 0 R -/Dest [225 0 R /XYZ 0 597.0000000000003 null] +<< /Title +/Parent 822 0 R +/Count 0 +/Next 838 0 R +/Prev 836 0 R +/Dest [318 0 R /XYZ 0 608.0400000000002 null] >> endobj 838 0 obj -<< /Title -/Parent 837 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 839 0 R -/Dest [225 0 R /XYZ 0 500.7600000000004 null] +/Prev 837 0 R +/Dest [318 0 R /XYZ 0 420.0000000000003 null] >> endobj 839 0 obj -<< /Title -/Parent 837 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 840 0 R /Prev 838 0 R -/Dest [225 0 R /XYZ 0 320.5200000000004 null] +/Dest [326 0 R /XYZ 0 307.5600000000001 null] >> endobj 840 0 obj -<< /Title -/Parent 837 0 R +<< /Title +/Parent 822 0 R /Count 0 /Next 841 0 R /Prev 839 0 R -/Dest [225 0 R /XYZ 0 215.40000000000035 null] +/Dest [326 0 R /XYZ 0 239.70000000000007 null] >> endobj 841 0 obj -<< /Title -/Parent 837 0 R +<< /Title +/Parent 822 0 R /Count 0 +/Next 842 0 R /Prev 840 0 R -/Dest [225 0 R /XYZ 0 159.12000000000032 null] +/Dest [335 0 R /XYZ 0 345.12 null] >> endobj 842 0 obj -<< /Title -/Parent 709 0 R -/Count 2 -/First 843 0 R -/Last 844 0 R -/Next 845 0 R -/Prev 837 0 R -/Dest [225 0 R /XYZ 0 102.84000000000029 null] ->> -endobj -843 0 obj -<< /Title -/Parent 842 0 R -/Count 0 -/Next 844 0 R -/Dest [238 0 R /XYZ 0 792.0 null] ->> -endobj -844 0 obj -<< /Title -/Parent 842 0 R -/Count 0 -/Prev 843 0 R -/Dest [238 0 R /XYZ 0 653.2800000000002 null] ->> -endobj -845 0 obj -<< /Title -/Parent 709 0 R -/Count 2 -/First 846 0 R -/Last 847 0 R -/Next 848 0 R -/Prev 842 0 R -/Dest [238 0 R /XYZ 0 597.0000000000003 null] ->> -endobj -846 0 obj -<< /Title -/Parent 845 0 R -/Count 0 -/Next 847 0 R -/Dest [238 0 R /XYZ 0 556.9200000000004 null] ->> -endobj -847 0 obj -<< /Title -/Parent 845 0 R -/Count 0 -/Prev 846 0 R -/Dest [238 0 R /XYZ 0 451.8000000000005 null] ->> -endobj -848 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 849 0 R -/Last 851 0 R -/Next 852 0 R -/Prev 845 0 R -/Dest [238 0 R /XYZ 0 395.5200000000005 null] ->> -endobj -849 0 obj -<< /Title -/Parent 848 0 R -/Count 0 -/Next 850 0 R -/Dest [238 0 R /XYZ 0 355.44000000000045 null] ->> -endobj -850 0 obj -<< /Title -/Parent 848 0 R -/Count 0 -/Next 851 0 R -/Prev 849 0 R -/Dest [238 0 R /XYZ 0 250.32000000000045 null] ->> -endobj -851 0 obj -<< /Title -/Parent 848 0 R -/Count 0 -/Prev 850 0 R -/Dest [238 0 R /XYZ 0 145.20000000000041 null] ->> -endobj -852 0 obj -<< /Title -/Parent 709 0 R -/Count 3 -/First 853 0 R -/Last 855 0 R -/Prev 848 0 R -/Dest [251 0 R /XYZ 0 792.0 null] ->> -endobj -853 0 obj -<< /Title -/Parent 852 0 R -/Count 0 -/Next 854 0 R -/Dest [251 0 R /XYZ 0 690.2400000000001 null] ->> -endobj -854 0 obj -<< /Title -/Parent 852 0 R -/Count 0 -/Next 855 0 R -/Prev 853 0 R -/Dest [251 0 R /XYZ 0 585.1200000000003 null] ->> -endobj -855 0 obj -<< /Title -/Parent 852 0 R -/Count 0 -/Prev 854 0 R -/Dest [251 0 R /XYZ 0 480.00000000000045 null] ->> -endobj -856 0 obj -<< /Title -/Parent 703 0 R -/Count 20 -/First 857 0 R -/Last 876 0 R -/Prev 709 0 R -/Dest [257 0 R /XYZ 0 792.0 null] ->> -endobj -857 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 858 0 R -/Dest [257 0 R /XYZ 0 712.0799999999999 null] ->> -endobj -858 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 859 0 R -/Prev 857 0 R -/Dest [257 0 R /XYZ 0 524.04 null] ->> -endobj -859 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 860 0 R -/Prev 858 0 R -/Dest [257 0 R /XYZ 0 335.99999999999994 null] ->> -endobj -860 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 861 0 R -/Prev 859 0 R -/Dest [264 0 R /XYZ 0 608.04 null] ->> -endobj -861 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 862 0 R -/Prev 860 0 R -/Dest [264 0 R /XYZ 0 157.07999999999998 null] ->> -endobj -862 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 863 0 R -/Prev 861 0 R -/Dest [270 0 R /XYZ 0 683.1600000000001 null] ->> -endobj -863 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 864 0 R -/Prev 862 0 R -/Dest [270 0 R /XYZ 0 495.1200000000002 null] ->> -endobj -864 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 865 0 R -/Prev 863 0 R -/Dest [277 0 R /XYZ 0 345.1200000000003 null] ->> -endobj -865 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 866 0 R -/Prev 864 0 R -/Dest [283 0 R /XYZ 0 194.88000000000017 null] ->> -endobj -866 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 867 0 R -/Prev 865 0 R -/Dest [298 0 R /XYZ 0 792.0 null] ->> -endobj -867 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 868 0 R -/Prev 866 0 R -/Dest [306 0 R /XYZ 0 495.3600000000003 null] ->> -endobj -868 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 869 0 R -/Prev 867 0 R -/Dest [314 0 R /XYZ 0 495.36000000000007 null] ->> -endobj -869 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 870 0 R -/Prev 868 0 R -/Dest [320 0 R /XYZ 0 683.1600000000001 null] ->> -endobj -870 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 871 0 R -/Prev 869 0 R -/Dest [320 0 R /XYZ 0 382.4400000000001 null] ->> -endobj -871 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 872 0 R -/Prev 870 0 R -/Dest [327 0 R /XYZ 0 495.36000000000007 null] ->> -endobj -872 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 873 0 R -/Prev 871 0 R -/Dest [327 0 R /XYZ 0 307.32 null] ->> -endobj -873 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 874 0 R -/Prev 872 0 R -/Dest [336 0 R /XYZ 0 194.88000000000017 null] ->> -endobj -874 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 875 0 R -/Prev 873 0 R -/Dest [336 0 R /XYZ 0 127.02000000000015 null] ->> -endobj -875 0 obj -<< /Title -/Parent 856 0 R -/Count 0 -/Next 876 0 R -/Prev 874 0 R -/Dest [344 0 R /XYZ 0 232.43999999999994 null] ->> -endobj -876 0 obj << /Title -/Parent 856 0 R +/Parent 822 0 R /Count 0 -/Prev 875 0 R -/Dest [352 0 R /XYZ 0 457.8 null] +/Prev 841 0 R +/Dest [343 0 R /XYZ 0 570.48 null] >> endobj -877 0 obj +843 0 obj << /Nums [0 << /P (i) >> 1 << /P (ii) >> 2 << /P (iii) @@ -57084,7 +55189,7 @@ endobj >> 26 << /P (21) >> 27 << /P (22) >> 28 << /P (23) ->> 29 << /P (24) +>> 30 << /P (25) >> 31 << /P (26) >> 32 << /P (27) >> 33 << /P (28) @@ -57092,11 +55197,10 @@ endobj >> 35 << /P (30) >> 36 << /P (31) >> 37 << /P (32) ->> 38 << /P (33) >>] >> endobj -878 0 obj +844 0 obj << /Length1 12332 /Length 7916 /Filter [/FlateDecode] @@ -57133,10 +55237,10 @@ MR .Zbh endstream endobj -879 0 obj +845 0 obj << /Type /FontDescriptor /FontName /AAAAAA+NotoSerif -/FontFile2 878 0 R +/FontFile2 844 0 R /FontBBox [-212 -250 1246 1047] /Flags 6 /StemV 0 @@ -57147,7 +55251,7 @@ endobj /XHeight 1098 >> endobj -880 0 obj +846 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -57157,10 +55261,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -881 0 obj +847 0 obj [259 1000 1000 1000 1000 1000 1000 1000 346 346 1000 1000 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 1000 559 559 559 500 1000 705 653 613 727 623 589 713 792 367 356 1000 623 937 763 742 604 1000 655 543 612 716 674 1046 1000 625 1000 1000 1000 1000 1000 458 1000 562 613 492 613 535 369 538 634 319 299 584 310 944 645 577 613 1000 471 451 352 634 579 861 578 564 1000 428 1000 428 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -882 0 obj +848 0 obj << /Length1 11528 /Length 7660 /Filter [/FlateDecode] @@ -57202,10 +55306,10 @@ g za\n;vd'"ML#13ʦJ+]&Avr3@i+k,+fXLȺ)!򵧥gȹH0g"41? endstream endobj -883 0 obj +849 0 obj << /Type /FontDescriptor /FontName /AAAAAB+NotoSerif-Bold -/FontFile2 882 0 R +/FontFile2 848 0 R /FontBBox [-212 -250 1306 1058] /Flags 6 /StemV 0 @@ -57216,7 +55320,7 @@ endobj /XHeight 1098 >> endobj -884 0 obj +850 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -57226,10 +55330,10 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -885 0 obj +851 0 obj [259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 293 288 559 559 559 559 559 559 559 559 559 559 1000 1000 1000 559 1000 549 1000 752 671 667 767 652 621 769 818 400 368 1000 653 952 788 787 638 1000 707 585 652 747 698 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 345 636 352 985 666 612 645 647 522 487 404 666 605 855 645 579 1000 441 1000 441 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -886 0 obj +852 0 obj << /Length1 5116 /Length 3170 /Filter [/FlateDecode] @@ -57249,10 +55353,10 @@ a :2]^5w,º*Ӌ58mgnk7cB4aD[NaU> endobj -888 0 obj +854 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -57273,28 +55377,31 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -889 0 obj +855 0 obj [1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 653 1000 1000 1000 1000 1000 792 1000 1000 1000 1000 1000 1000 1000 620 1000 1000 543 612 1000 674 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 579 1000 486 579 493 1000 1000 599 304 1000 1000 304 895 599 574 577 560 467 463 368 599 1000 1000 1000 527 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj -890 0 obj -<< /Length1 3280 -/Length 2112 +856 0 obj +<< /Length1 3188 +/Length 2052 /Filter [/FlateDecode] >> stream -xV{L?糱yy|<ۄb^! 1pH*ݦj ]vZUujQeT_HTMh:eY/iT%ms?d&}{ι{ @hRc5gNOOXI?cѼ{j;CO*!u%h+L||t%VxLxh2cť4~}UxBt>{䯃TmM;NI Bm:93l .;q0o*@`I4q?|l dR:<[@icݤHīxy?X[_Nح]-(ԫ]n\-ԫ N/=9kj80 - %BG[ C;΃naFrɍׂCPW`bf&~,հ= -S2EϠd?P>w}455D0!awά o,-( J',Gj:?:VVVo`t ٱzHө3\ Zb)Cozܯ$3;Mtv;˙ '|{#Cu`IXWʭRO&Z;=F]P]&s>&\*S"P7zށhULAAu%٩QU7jwKckصX}f?={? VGPP){5)񴰄 -%S'׿mo-uϽóٵ]RANST֡"75'My#uG=#Cߨ?Xt5}m=J'/pXe\jHvF.W.56hTtdo5tvbO/)ax2arsϏrΟF~De>j&!o»p6[03bP@Nyxhh:>m=v)akL#I40#n[w%ew?[64#_pԷۚ{73A3σ -[4)?${㿾Q  C!cpikv¬g*M,GjZ#,稗Wd9G7,W~X -r%b,WB-V<(A,σ*mBKNt+\ *\~$bTu5nDs(렔z.əDzolhjn$|C#|04nX$H@B OgB iQ݇#D^%Ya!YH)NT(| ibj&;lM|3S9]8VEIaBakR86 -$W"k8 Vi<!N..Ͷ&W+uX:j Z;cO-/UFN6][)%r*ffRT6e|Q!gɝE/iR~L z!RSzd3T2hʱ$5EeM"FJh@|f #DA΄-VQˎAOqXG٧΄Y(YSBF-!c^vua[0CaaE—c]GZD>&Vk}[DR]hߑz?+w_ +xWmL[>'_6Ӕ%_`cC ƀ;gHbkpȖVS+]vRmj򧺡MٟHڬK,˲:CYbtӤEs9yι{ +8X5& so(@ֱ+n+ӔZʮ?q@6]T26'Qo^FR%r,% q`2Q77@r\JPy ~Op7)+KwA^Ʊ + +_  ;a7;z7ZśՆ\zz:yX$2p4]co +fzz=bn}kP-;8bYK΅+ c]=k TDS8v"[9MDu ].#SCAG1.Ɏtu~z4HDMF- tww]$0y*"W|{ $LnG_lC͗Ź_av.`UUW5K"Onn{OENob]X׉ g#~6v֑x,I8 rrb?~q*whh1+ ?H\MNz<'=~#i|] {[RVvswgY$4Ji]yW׳OȁqG6ō>̷ӓCν=pT6j[-aC_w.p[e#rka{&rϛR_wB؉{*WKVU|Onq̙nЙ3Q⹞p:yh G!]5}rTwF'a+7Fh` +o/uN<=;#.ǽKŕ܁v©K2E 8NuÿZ( B.H$^G4"a80߂L!8 ӢG-iءifd'X՜d'%;x]siC`/lJvLے]R&H%*[+%HrȪS~dׂe|KB9Xu/_oE&Odͧ=AI&'h82쟄~X4 yHAZ!{hv@i,8c؉ q O"fҲKIί-3D5lv2l`%3N{0)9m%Ze "$E:v$D{ +̣Y$'xmdz/C걕enoswKUΊ.pCW,KŵUDIȩl6pfj_]Y$stBZq{ [BiS"9U̱fN`6.]Tlx׊h0rkAvy}^&u8zcJK$hc!A2  VBpT ?U1\~(*{M VzS(D&Ȭ #/fVjMߍyDx#Cǒ\A*vTGs\2h2Ō9Q5NkԚJ[CPaC(G̯e4Gr89^L3pX3$S0F#fQg2FAIt􆔜Є$X49Fr|Cb1葷 +ȱ/> endobj -892 0 obj +858 0 obj << /Length 1286 /Filter [/FlateDecode] >> @@ -57315,910 +55422,876 @@ x JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O endstream endobj -893 0 obj -[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 1000 1000 1000 500 500 1000 500 500 500 500 500 1000 1000 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +859 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 1000 1000 1000 500 500 1000 500 1000 500 500 500 1000 1000 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] endobj xref -0 894 +0 860 0000000000 65535 f 0000000015 00000 n 0000000264 00000 n 0000000467 00000 n -0000000817 00000 n -0000000868 00000 n -0000001022 00000 n -0000001266 00000 n -0000001444 00000 n -0000001611 00000 n -0000032851 00000 n -0000033629 00000 n -0000064840 00000 n -0000065630 00000 n -0000097093 00000 n -0000097883 00000 n -0000129902 00000 n -0000130700 00000 n -0000150372 00000 n -0000150930 00000 n -0000153362 00000 n -0000153599 00000 n -0000153642 00000 n -0000153691 00000 n -0000153829 00000 n -0000154002 00000 n -0000154057 00000 n -0000154232 00000 n -0000154276 00000 n -0000166481 00000 n -0000166742 00000 n -0000166785 00000 n -0000166840 00000 n -0000166883 00000 n -0000167055 00000 n -0000167110 00000 n -0000167285 00000 n -0000167341 00000 n -0000167396 00000 n -0000167451 00000 n -0000167507 00000 n -0000167562 00000 n -0000167727 00000 n -0000167782 00000 n -0000167838 00000 n -0000184313 00000 n -0000184594 00000 n -0000184637 00000 n -0000184793 00000 n -0000184848 00000 n -0000184903 00000 n -0000184958 00000 n -0000185113 00000 n -0000185168 00000 n -0000185326 00000 n -0000185381 00000 n -0000185436 00000 n -0000185738 00000 n -0000186048 00000 n -0000186104 00000 n -0000186160 00000 n -0000204445 00000 n -0000204726 00000 n -0000204769 00000 n -0000204824 00000 n -0000204879 00000 n -0000204934 00000 n -0000205091 00000 n -0000205146 00000 n -0000205201 00000 n -0000205257 00000 n -0000205413 00000 n -0000205469 00000 n -0000205627 00000 n -0000205683 00000 n -0000221411 00000 n -0000221661 00000 n -0000221704 00000 n -0000221759 00000 n -0000221814 00000 n -0000221869 00000 n -0000221924 00000 n -0000221980 00000 n -0000222036 00000 n -0000222091 00000 n -0000222449 00000 n -0000222505 00000 n -0000238608 00000 n -0000238875 00000 n -0000238918 00000 n -0000238973 00000 n -0000239291 00000 n -0000239347 00000 n -0000239508 00000 n -0000239563 00000 n -0000239619 00000 n -0000239675 00000 n -0000239731 00000 n -0000257627 00000 n -0000257902 00000 n -0000258053 00000 n -0000258109 00000 n -0000258165 00000 n -0000258221 00000 n -0000258277 00000 n -0000258333 00000 n -0000258389 00000 n -0000258445 00000 n -0000258502 00000 n -0000258664 00000 n -0000272321 00000 n -0000272591 00000 n -0000272636 00000 n -0000272693 00000 n -0000272750 00000 n -0000272807 00000 n -0000272865 00000 n -0000272922 00000 n -0000272980 00000 n -0000273142 00000 n -0000273200 00000 n -0000273258 00000 n -0000273315 00000 n -0000292462 00000 n -0000292740 00000 n -0000292797 00000 n -0000292939 00000 n -0000292985 00000 n -0000293043 00000 n -0000293101 00000 n -0000293159 00000 n -0000293323 00000 n -0000293380 00000 n -0000310686 00000 n -0000310956 00000 n -0000311001 00000 n -0000311058 00000 n -0000311115 00000 n -0000311279 00000 n -0000311336 00000 n -0000311393 00000 n -0000311723 00000 n -0000311780 00000 n -0000311838 00000 n -0000330966 00000 n -0000331252 00000 n -0000331404 00000 n -0000331461 00000 n -0000331518 00000 n -0000331575 00000 n -0000331633 00000 n -0000331944 00000 n -0000332107 00000 n -0000332164 00000 n -0000332464 00000 n -0000332522 00000 n -0000332580 00000 n -0000332904 00000 n -0000332962 00000 n -0000333125 00000 n -0000349397 00000 n -0000349667 00000 n -0000349712 00000 n -0000349769 00000 n -0000349826 00000 n -0000349883 00000 n -0000349940 00000 n -0000349997 00000 n -0000350055 00000 n -0000350113 00000 n -0000350277 00000 n -0000350334 00000 n -0000370033 00000 n -0000370327 00000 n -0000370372 00000 n -0000370418 00000 n -0000370573 00000 n -0000370630 00000 n -0000370793 00000 n -0000370850 00000 n -0000370907 00000 n -0000370965 00000 n -0000371022 00000 n -0000371187 00000 n -0000371244 00000 n -0000371421 00000 n -0000386929 00000 n -0000387207 00000 n -0000387252 00000 n -0000387309 00000 n -0000387366 00000 n -0000387423 00000 n -0000387581 00000 n -0000387638 00000 n -0000387801 00000 n -0000387859 00000 n -0000387916 00000 n -0000387974 00000 n -0000388031 00000 n -0000404492 00000 n -0000404778 00000 n -0000404823 00000 n -0000404985 00000 n -0000405042 00000 n -0000405099 00000 n -0000405156 00000 n -0000405213 00000 n -0000405374 00000 n -0000405431 00000 n -0000405488 00000 n -0000405546 00000 n -0000405604 00000 n -0000405765 00000 n -0000422207 00000 n -0000422459 00000 n -0000422504 00000 n -0000422561 00000 n -0000422618 00000 n -0000422676 00000 n -0000423135 00000 n -0000423193 00000 n -0000423637 00000 n -0000423695 00000 n -0000423968 00000 n -0000424026 00000 n -0000440732 00000 n -0000441010 00000 n -0000441055 00000 n -0000441214 00000 n -0000441271 00000 n -0000441328 00000 n -0000441385 00000 n -0000441757 00000 n -0000441814 00000 n -0000441975 00000 n -0000442033 00000 n -0000442091 00000 n -0000442149 00000 n -0000458510 00000 n -0000458788 00000 n -0000458833 00000 n -0000459003 00000 n -0000459060 00000 n -0000459117 00000 n -0000459174 00000 n -0000459231 00000 n -0000459288 00000 n -0000459346 00000 n -0000459404 00000 n -0000459576 00000 n -0000459634 00000 n -0000467588 00000 n -0000467840 00000 n -0000467885 00000 n -0000467942 00000 n -0000467999 00000 n -0000468057 00000 n -0000485255 00000 n -0000485512 00000 n -0000485557 00000 n -0000485614 00000 n -0000485660 00000 n -0000485718 00000 n -0000485896 00000 n -0000505804 00000 n -0000506061 00000 n -0000506107 00000 n -0000506261 00000 n -0000506319 00000 n -0000506625 00000 n -0000527171 00000 n -0000527444 00000 n -0000527605 00000 n -0000527662 00000 n -0000527719 00000 n -0000527889 00000 n -0000528056 00000 n -0000549461 00000 n -0000549734 00000 n -0000549883 00000 n -0000550054 00000 n -0000550213 00000 n -0000550270 00000 n -0000572099 00000 n -0000572388 00000 n -0000572556 00000 n -0000572703 00000 n -0000572852 00000 n -0000573003 00000 n +0000000809 00000 n +0000000860 00000 n +0000001014 00000 n +0000001258 00000 n +0000001436 00000 n +0000001603 00000 n +0000032843 00000 n +0000033621 00000 n +0000064832 00000 n +0000065622 00000 n +0000097121 00000 n +0000097911 00000 n +0000129998 00000 n +0000130796 00000 n +0000143652 00000 n +0000144082 00000 n +0000146514 00000 n +0000146751 00000 n +0000146794 00000 n +0000146843 00000 n +0000146981 00000 n +0000147154 00000 n +0000147209 00000 n +0000147384 00000 n +0000147428 00000 n +0000159633 00000 n +0000159894 00000 n +0000159937 00000 n +0000159992 00000 n +0000160035 00000 n +0000160207 00000 n +0000160262 00000 n +0000160437 00000 n +0000160493 00000 n +0000160548 00000 n +0000160603 00000 n +0000160659 00000 n +0000160714 00000 n +0000160879 00000 n +0000160934 00000 n +0000160990 00000 n +0000177465 00000 n +0000177746 00000 n +0000177789 00000 n +0000177945 00000 n +0000178000 00000 n +0000178055 00000 n +0000178110 00000 n +0000178265 00000 n +0000178320 00000 n +0000178478 00000 n +0000178533 00000 n +0000178588 00000 n +0000178890 00000 n +0000179200 00000 n +0000179256 00000 n +0000179312 00000 n +0000197597 00000 n +0000197878 00000 n +0000197921 00000 n +0000197976 00000 n +0000198031 00000 n +0000198086 00000 n +0000198243 00000 n +0000198298 00000 n +0000198353 00000 n +0000198409 00000 n +0000198565 00000 n +0000198621 00000 n +0000198779 00000 n +0000198835 00000 n +0000214563 00000 n +0000214813 00000 n +0000214856 00000 n +0000214911 00000 n +0000214966 00000 n +0000215021 00000 n +0000215076 00000 n +0000215132 00000 n +0000215188 00000 n +0000215243 00000 n +0000215524 00000 n +0000215580 00000 n +0000231683 00000 n +0000231950 00000 n +0000231993 00000 n +0000232048 00000 n +0000232366 00000 n +0000232422 00000 n +0000232583 00000 n +0000232638 00000 n +0000232694 00000 n +0000232750 00000 n +0000232806 00000 n +0000250702 00000 n +0000250977 00000 n +0000251128 00000 n +0000251184 00000 n +0000251240 00000 n +0000251296 00000 n +0000251352 00000 n +0000251408 00000 n +0000251464 00000 n +0000251520 00000 n +0000251577 00000 n +0000251739 00000 n +0000265396 00000 n +0000265666 00000 n +0000265711 00000 n +0000265768 00000 n +0000265825 00000 n +0000265882 00000 n +0000265940 00000 n +0000265997 00000 n +0000266055 00000 n +0000266217 00000 n +0000266275 00000 n +0000266333 00000 n +0000266390 00000 n +0000285537 00000 n +0000285815 00000 n +0000285872 00000 n +0000286199 00000 n +0000286341 00000 n +0000286387 00000 n +0000286445 00000 n +0000286503 00000 n +0000286561 00000 n +0000286725 00000 n +0000286782 00000 n +0000304088 00000 n +0000304358 00000 n +0000304403 00000 n +0000304460 00000 n +0000304517 00000 n +0000304681 00000 n +0000304738 00000 n +0000304795 00000 n +0000304852 00000 n +0000304910 00000 n +0000324038 00000 n +0000324324 00000 n +0000324476 00000 n +0000324533 00000 n +0000324590 00000 n +0000324647 00000 n +0000324705 00000 n +0000324868 00000 n +0000324925 00000 n +0000325225 00000 n +0000325283 00000 n +0000325341 00000 n +0000325665 00000 n +0000325723 00000 n +0000325886 00000 n +0000344236 00000 n +0000344522 00000 n +0000344567 00000 n +0000344624 00000 n +0000344681 00000 n +0000344738 00000 n +0000344901 00000 n +0000344958 00000 n +0000345015 00000 n +0000345073 00000 n +0000345230 00000 n +0000345288 00000 n +0000345452 00000 n +0000345510 00000 n +0000362601 00000 n +0000362887 00000 n +0000362932 00000 n +0000362989 00000 n +0000363046 00000 n +0000363209 00000 n +0000363267 00000 n +0000363444 00000 n +0000363501 00000 n +0000363559 00000 n +0000363617 00000 n +0000363675 00000 n +0000363832 00000 n +0000380166 00000 n +0000380444 00000 n +0000380489 00000 n +0000380651 00000 n +0000380708 00000 n +0000380765 00000 n +0000380822 00000 n +0000380879 00000 n +0000380936 00000 n +0000381099 00000 n +0000381157 00000 n +0000381214 00000 n +0000381271 00000 n +0000396510 00000 n +0000396788 00000 n +0000396833 00000 n +0000397189 00000 n +0000397348 00000 n +0000397405 00000 n +0000397462 00000 n +0000397519 00000 n +0000397903 00000 n +0000397960 00000 n +0000398120 00000 n +0000398178 00000 n +0000398235 00000 n +0000398293 00000 n +0000398351 00000 n +0000413099 00000 n +0000413369 00000 n +0000413426 00000 n +0000413483 00000 n +0000413540 00000 n +0000413597 00000 n +0000413756 00000 n +0000413814 00000 n +0000414212 00000 n +0000414270 00000 n +0000414328 00000 n +0000433589 00000 n +0000433867 00000 n +0000433913 00000 n +0000434062 00000 n +0000434119 00000 n +0000434177 00000 n +0000434223 00000 n +0000434269 00000 n +0000434440 00000 n +0000434498 00000 n +0000434556 00000 n +0000434614 00000 n +0000434891 00000 n +0000443543 00000 n +0000443813 00000 n +0000443858 00000 n +0000443915 00000 n +0000443972 00000 n +0000444294 00000 n +0000444351 00000 n +0000444522 00000 n +0000444579 00000 n +0000461779 00000 n +0000462036 00000 n +0000462081 00000 n +0000462138 00000 n +0000462184 00000 n +0000462242 00000 n +0000462420 00000 n +0000482326 00000 n +0000482583 00000 n +0000482629 00000 n +0000482783 00000 n +0000482841 00000 n +0000483147 00000 n +0000503695 00000 n +0000503968 00000 n +0000504129 00000 n +0000504186 00000 n +0000504243 00000 n +0000504413 00000 n +0000504580 00000 n +0000525983 00000 n +0000526256 00000 n +0000526405 00000 n +0000526576 00000 n +0000526735 00000 n +0000526792 00000 n +0000548623 00000 n +0000548912 00000 n +0000549080 00000 n +0000549227 00000 n +0000549376 00000 n +0000549527 00000 n +0000549687 00000 n +0000549745 00000 n +0000572705 00000 n +0000572994 00000 n 0000573163 00000 n -0000573221 00000 n -0000596183 00000 n -0000596472 00000 n -0000596641 00000 n -0000596809 00000 n -0000596979 00000 n -0000597151 00000 n -0000597311 00000 n -0000618958 00000 n -0000619247 00000 n -0000619292 00000 n -0000619451 00000 n -0000619609 00000 n -0000619769 00000 n -0000619920 00000 n -0000620070 00000 n -0000642870 00000 n -0000643159 00000 n -0000643216 00000 n -0000643386 00000 n -0000643557 00000 n -0000643724 00000 n -0000643896 00000 n -0000644071 00000 n -0000665748 00000 n -0000666021 00000 n -0000666161 00000 n -0000666337 00000 n -0000666395 00000 n -0000666566 00000 n -0000687610 00000 n -0000687883 00000 n -0000688050 00000 n -0000688107 00000 n -0000688272 00000 n -0000688329 00000 n -0000688518 00000 n -0000709047 00000 n -0000709328 00000 n -0000709468 00000 n -0000709526 00000 n -0000709958 00000 n -0000710124 00000 n -0000710286 00000 n -0000710332 00000 n -0000710503 00000 n -0000729365 00000 n -0000729646 00000 n -0000729795 00000 n -0000729970 00000 n -0000730135 00000 n -0000730299 00000 n -0000730357 00000 n -0000730415 00000 n -0000752266 00000 n -0000752555 00000 n -0000752704 00000 n -0000752853 00000 n -0000752996 00000 n -0000753151 00000 n -0000753316 00000 n -0000753374 00000 n -0000770442 00000 n -0000770723 00000 n -0000770872 00000 n -0000771047 00000 n -0000771092 00000 n -0000771252 00000 n -0000771422 00000 n -0000771566 00000 n -0000771711 00000 n -0000771876 00000 n -0000772032 00000 n -0000772190 00000 n -0000772337 00000 n -0000772499 00000 n -0000772641 00000 n -0000772807 00000 n -0000772952 00000 n -0000773109 00000 n -0000773255 00000 n -0000773411 00000 n -0000773556 00000 n -0000773712 00000 n -0000773857 00000 n -0000774016 00000 n -0000774164 00000 n -0000774322 00000 n -0000774469 00000 n -0000774636 00000 n -0000774782 00000 n -0000774942 00000 n -0000775091 00000 n -0000775249 00000 n -0000775396 00000 n -0000775551 00000 n -0000775696 00000 n -0000775856 00000 n -0000776005 00000 n -0000776165 00000 n -0000776314 00000 n -0000776469 00000 n -0000776614 00000 n -0000776782 00000 n -0000776929 00000 n -0000777088 00000 n -0000777236 00000 n -0000777392 00000 n -0000777538 00000 n -0000777698 00000 n -0000777847 00000 n -0000778013 00000 n -0000778158 00000 n -0000778318 00000 n -0000778467 00000 n -0000778625 00000 n -0000778772 00000 n -0000778939 00000 n -0000779085 00000 n -0000779257 00000 n -0000779408 00000 n -0000779567 00000 n -0000779715 00000 n -0000779873 00000 n -0000780020 00000 n -0000780175 00000 n -0000780320 00000 n -0000780492 00000 n -0000780643 00000 n -0000780804 00000 n -0000780954 00000 n -0000781113 00000 n -0000781262 00000 n -0000781422 00000 n -0000781571 00000 n -0000781738 00000 n -0000781884 00000 n -0000782054 00000 n -0000782203 00000 n -0000782362 00000 n -0000782510 00000 n -0000782656 00000 n -0000782791 00000 n -0000782946 00000 n -0000783080 00000 n -0000783239 00000 n -0000783377 00000 n +0000573331 00000 n +0000573501 00000 n +0000573673 00000 n +0000573833 00000 n +0000595482 00000 n +0000595771 00000 n +0000595816 00000 n +0000595975 00000 n +0000596133 00000 n +0000596293 00000 n +0000596444 00000 n +0000596594 00000 n +0000619392 00000 n +0000619681 00000 n +0000619738 00000 n +0000619908 00000 n +0000620079 00000 n +0000620246 00000 n +0000620418 00000 n +0000620593 00000 n +0000642866 00000 n +0000643147 00000 n +0000643287 00000 n +0000643463 00000 n +0000643520 00000 n +0000643689 00000 n +0000643876 00000 n +0000664549 00000 n +0000664822 00000 n +0000664867 00000 n +0000665030 00000 n +0000665076 00000 n +0000665265 00000 n +0000665427 00000 n +0000686093 00000 n +0000686366 00000 n +0000686423 00000 n +0000686855 00000 n +0000687031 00000 n +0000687203 00000 n +0000687260 00000 n +0000687429 00000 n +0000707651 00000 n +0000707940 00000 n +0000708089 00000 n +0000708264 00000 n +0000708429 00000 n +0000708592 00000 n +0000708649 00000 n +0000708707 00000 n +0000708877 00000 n +0000730482 00000 n +0000730771 00000 n +0000730920 00000 n +0000731063 00000 n +0000731238 00000 n +0000731382 00000 n +0000731428 00000 n +0000731597 00000 n +0000745161 00000 n +0000745434 00000 n +0000745609 00000 n +0000745655 00000 n +0000745815 00000 n +0000745984 00000 n +0000746128 00000 n +0000746273 00000 n +0000746438 00000 n +0000746594 00000 n +0000746752 00000 n +0000746899 00000 n +0000747061 00000 n +0000747203 00000 n +0000747368 00000 n +0000747512 00000 n +0000747669 00000 n +0000747815 00000 n +0000747971 00000 n +0000748116 00000 n +0000748271 00000 n +0000748415 00000 n +0000748574 00000 n +0000748722 00000 n +0000748880 00000 n +0000749027 00000 n +0000749193 00000 n +0000749338 00000 n +0000749498 00000 n +0000749647 00000 n +0000749805 00000 n +0000749952 00000 n +0000750107 00000 n +0000750252 00000 n +0000750412 00000 n +0000750561 00000 n +0000750721 00000 n +0000750870 00000 n +0000751025 00000 n +0000751170 00000 n +0000751338 00000 n +0000751485 00000 n +0000751644 00000 n +0000751792 00000 n +0000751948 00000 n +0000752094 00000 n +0000752254 00000 n +0000752403 00000 n +0000752569 00000 n +0000752714 00000 n +0000752874 00000 n +0000753023 00000 n +0000753181 00000 n +0000753328 00000 n +0000753495 00000 n +0000753641 00000 n +0000753813 00000 n +0000753964 00000 n +0000754123 00000 n +0000754271 00000 n +0000754429 00000 n +0000754576 00000 n +0000754730 00000 n +0000754874 00000 n +0000755046 00000 n +0000755197 00000 n +0000755358 00000 n +0000755508 00000 n +0000755667 00000 n +0000755816 00000 n +0000755976 00000 n +0000756125 00000 n +0000756291 00000 n +0000756436 00000 n +0000756606 00000 n +0000756755 00000 n +0000756914 00000 n +0000757062 00000 n +0000757208 00000 n +0000757343 00000 n +0000757497 00000 n +0000757630 00000 n +0000757789 00000 n +0000757927 00000 n +0000758075 00000 n +0000758213 00000 n +0000758382 00000 n +0000758530 00000 n +0000758694 00000 n +0000758838 00000 n +0000759008 00000 n +0000759157 00000 n +0000759316 00000 n +0000759465 00000 n +0000759634 00000 n +0000759782 00000 n +0000759945 00000 n +0000760089 00000 n +0000760259 00000 n +0000760408 00000 n +0000760567 00000 n +0000760716 00000 n +0000760874 00000 n +0000761021 00000 n +0000761190 00000 n +0000761338 00000 n +0000761504 00000 n +0000761649 00000 n +0000761820 00000 n +0000761970 00000 n +0000762130 00000 n +0000762280 00000 n +0000762442 00000 n +0000762585 00000 n +0000762755 00000 n +0000762904 00000 n +0000763064 00000 n +0000763214 00000 n +0000763385 00000 n +0000763535 00000 n +0000763690 00000 n +0000763834 00000 n +0000763993 00000 n +0000764142 00000 n +0000764311 00000 n +0000764459 00000 n +0000764614 00000 n +0000764759 00000 n +0000764931 00000 n +0000765082 00000 n +0000765242 00000 n +0000765392 00000 n +0000765561 00000 n +0000765709 00000 n +0000765874 00000 n +0000766019 00000 n +0000766192 00000 n +0000766344 00000 n +0000766505 00000 n +0000766656 00000 n +0000766827 00000 n +0000766977 00000 n +0000767142 00000 n +0000767287 00000 n +0000767460 00000 n +0000767612 00000 n +0000767773 00000 n +0000767924 00000 n +0000768094 00000 n +0000768243 00000 n +0000768406 00000 n +0000768567 00000 n +0000768707 00000 n +0000768848 00000 n +0000769008 00000 n +0000769146 00000 n +0000769294 00000 n +0000769431 00000 n +0000769589 00000 n +0000769725 00000 n +0000769890 00000 n +0000770033 00000 n +0000770204 00000 n +0000770353 00000 n +0000770512 00000 n +0000770660 00000 n +0000770829 00000 n +0000770976 00000 n +0000771130 00000 n +0000771273 00000 n +0000771444 00000 n +0000771593 00000 n +0000771752 00000 n +0000771900 00000 n +0000772069 00000 n +0000772216 00000 n +0000772381 00000 n +0000772524 00000 n +0000772695 00000 n +0000772844 00000 n +0000773004 00000 n +0000773153 00000 n +0000773323 00000 n +0000773471 00000 n +0000773635 00000 n +0000773779 00000 n +0000773950 00000 n +0000774099 00000 n +0000774258 00000 n +0000774406 00000 n +0000774576 00000 n +0000774724 00000 n +0000774888 00000 n +0000775032 00000 n +0000775204 00000 n +0000775354 00000 n +0000775513 00000 n +0000775661 00000 n +0000775819 00000 n +0000775965 00000 n +0000776135 00000 n +0000776283 00000 n +0000776448 00000 n +0000776591 00000 n +0000776763 00000 n +0000776913 00000 n +0000777072 00000 n +0000777220 00000 n +0000777380 00000 n +0000777528 00000 n +0000777699 00000 n +0000777848 00000 n +0000778011 00000 n +0000778155 00000 n +0000778328 00000 n +0000778479 00000 n +0000778640 00000 n +0000778790 00000 n +0000778950 00000 n +0000779098 00000 n +0000779269 00000 n +0000779418 00000 n +0000779573 00000 n +0000779716 00000 n +0000779885 00000 n +0000780032 00000 n +0000780191 00000 n +0000780339 00000 n +0000780496 00000 n +0000780631 00000 n +0000780782 00000 n +0000780914 00000 n +0000781074 00000 n +0000781212 00000 n +0000781360 00000 n +0000781497 00000 n +0000781655 00000 n +0000781801 00000 n +0000781970 00000 n +0000782117 00000 n +0000782280 00000 n +0000782423 00000 n +0000782582 00000 n +0000782730 00000 n +0000782899 00000 n +0000783046 00000 n +0000783211 00000 n +0000783354 00000 n 0000783525 00000 n -0000783663 00000 n -0000783832 00000 n -0000783980 00000 n -0000784144 00000 n -0000784288 00000 n -0000784458 00000 n -0000784607 00000 n -0000784766 00000 n -0000784915 00000 n -0000785084 00000 n -0000785232 00000 n -0000785395 00000 n -0000785539 00000 n -0000785709 00000 n -0000785858 00000 n -0000786017 00000 n -0000786166 00000 n -0000786324 00000 n -0000786471 00000 n -0000786640 00000 n -0000786788 00000 n -0000786954 00000 n -0000787099 00000 n -0000787270 00000 n -0000787420 00000 n -0000787580 00000 n -0000787730 00000 n -0000787893 00000 n -0000788037 00000 n -0000788207 00000 n -0000788356 00000 n -0000788516 00000 n -0000788666 00000 n -0000788837 00000 n -0000788987 00000 n -0000789143 00000 n -0000789288 00000 n -0000789447 00000 n -0000789596 00000 n -0000789765 00000 n -0000789913 00000 n -0000790068 00000 n -0000790213 00000 n -0000790385 00000 n -0000790536 00000 n -0000790696 00000 n -0000790846 00000 n -0000791015 00000 n -0000791163 00000 n -0000791329 00000 n -0000791475 00000 n -0000791648 00000 n -0000791800 00000 n -0000791961 00000 n -0000792112 00000 n -0000792283 00000 n -0000792433 00000 n -0000792599 00000 n -0000792745 00000 n -0000792918 00000 n -0000793070 00000 n -0000793231 00000 n -0000793382 00000 n -0000793552 00000 n -0000793701 00000 n -0000793864 00000 n -0000794025 00000 n -0000794165 00000 n -0000794306 00000 n -0000794466 00000 n -0000794604 00000 n -0000794752 00000 n -0000794889 00000 n -0000795047 00000 n -0000795183 00000 n -0000795348 00000 n -0000795491 00000 n -0000795662 00000 n -0000795811 00000 n -0000795970 00000 n -0000796118 00000 n -0000796287 00000 n -0000796434 00000 n -0000796588 00000 n -0000796731 00000 n -0000796902 00000 n -0000797051 00000 n -0000797210 00000 n -0000797358 00000 n -0000797527 00000 n -0000797674 00000 n -0000797839 00000 n -0000797982 00000 n +0000783674 00000 n +0000783833 00000 n +0000783981 00000 n +0000784150 00000 n +0000784297 00000 n +0000784462 00000 n +0000784605 00000 n +0000784777 00000 n +0000784927 00000 n +0000785087 00000 n +0000785236 00000 n +0000785406 00000 n +0000785554 00000 n +0000785719 00000 n +0000785862 00000 n +0000786033 00000 n +0000786182 00000 n +0000786342 00000 n +0000786491 00000 n +0000786651 00000 n +0000786799 00000 n +0000786969 00000 n +0000787117 00000 n +0000787272 00000 n +0000787415 00000 n +0000787574 00000 n +0000787722 00000 n +0000787892 00000 n +0000788040 00000 n +0000788195 00000 n +0000788339 00000 n +0000788499 00000 n +0000788648 00000 n +0000788817 00000 n +0000788964 00000 n +0000789131 00000 n +0000789276 00000 n +0000789449 00000 n +0000789600 00000 n +0000789761 00000 n +0000789911 00000 n +0000790082 00000 n +0000790231 00000 n +0000790402 00000 n +0000790551 00000 n +0000790727 00000 n +0000790881 00000 n +0000791056 00000 n +0000791209 00000 n +0000791368 00000 n +0000791515 00000 n +0000791678 00000 n +0000791829 00000 n +0000791993 00000 n +0000792146 00000 n +0000792302 00000 n +0000792448 00000 n +0000792604 00000 n +0000792738 00000 n +0000792893 00000 n +0000793026 00000 n +0000793183 00000 n +0000793318 00000 n +0000793489 00000 n +0000793638 00000 n +0000793800 00000 n +0000793940 00000 n +0000794103 00000 n +0000794255 00000 n +0000794420 00000 n +0000794563 00000 n +0000794733 00000 n +0000794881 00000 n +0000795065 00000 n +0000795229 00000 n +0000795405 00000 n +0000795559 00000 n +0000795723 00000 n +0000795865 00000 n +0000796040 00000 n +0000796193 00000 n +0000796362 00000 n +0000796509 00000 n +0000796675 00000 n +0000796819 00000 n +0000797104 00000 n +0000797183 00000 n +0000797347 00000 n +0000797538 00000 n +0000797766 00000 n +0000797983 00000 n 0000798153 00000 n -0000798302 00000 n -0000798462 00000 n -0000798611 00000 n -0000798781 00000 n -0000798929 00000 n -0000799084 00000 n -0000799228 00000 n -0000799399 00000 n -0000799548 00000 n -0000799707 00000 n -0000799855 00000 n -0000800025 00000 n -0000800173 00000 n -0000800338 00000 n -0000800483 00000 n -0000800655 00000 n -0000800805 00000 n -0000800964 00000 n -0000801112 00000 n -0000801281 00000 n -0000801428 00000 n -0000801592 00000 n -0000801736 00000 n -0000801908 00000 n -0000802058 00000 n -0000802218 00000 n -0000802367 00000 n -0000802525 00000 n -0000802671 00000 n -0000802842 00000 n -0000802991 00000 n -0000803158 00000 n -0000803303 00000 n -0000803476 00000 n -0000803627 00000 n -0000803788 00000 n -0000803938 00000 n -0000804098 00000 n -0000804246 00000 n -0000804417 00000 n -0000804566 00000 n -0000804730 00000 n -0000804875 00000 n -0000805047 00000 n -0000805197 00000 n -0000805354 00000 n -0000805500 00000 n -0000805658 00000 n -0000805804 00000 n -0000805961 00000 n -0000806096 00000 n -0000806240 00000 n -0000806372 00000 n -0000806532 00000 n -0000806670 00000 n -0000806818 00000 n -0000806955 00000 n -0000807124 00000 n -0000807271 00000 n -0000807434 00000 n -0000807578 00000 n -0000807749 00000 n -0000807898 00000 n -0000808057 00000 n -0000808205 00000 n -0000808363 00000 n -0000808509 00000 n -0000808678 00000 n -0000808825 00000 n -0000808989 00000 n -0000809133 00000 n -0000809292 00000 n -0000809440 00000 n -0000809609 00000 n -0000809756 00000 n -0000809922 00000 n -0000810066 00000 n -0000810238 00000 n -0000810388 00000 n -0000810548 00000 n -0000810697 00000 n -0000810867 00000 n -0000811015 00000 n -0000811181 00000 n -0000811325 00000 n -0000811496 00000 n -0000811645 00000 n -0000811805 00000 n -0000811954 00000 n -0000812125 00000 n -0000812274 00000 n -0000812441 00000 n -0000812586 00000 n -0000812757 00000 n -0000812906 00000 n -0000813065 00000 n -0000813213 00000 n -0000813372 00000 n -0000813519 00000 n -0000813689 00000 n -0000813837 00000 n -0000813994 00000 n -0000814139 00000 n -0000814298 00000 n -0000814446 00000 n -0000814617 00000 n -0000814766 00000 n -0000814923 00000 n -0000815069 00000 n -0000815230 00000 n -0000815380 00000 n -0000815551 00000 n -0000815700 00000 n -0000815868 00000 n -0000816014 00000 n -0000816187 00000 n -0000816338 00000 n -0000816499 00000 n -0000816649 00000 n -0000816819 00000 n -0000816967 00000 n -0000817131 00000 n -0000817273 00000 n -0000817444 00000 n -0000817593 00000 n -0000817740 00000 n -0000817876 00000 n -0000818034 00000 n -0000818170 00000 n -0000818328 00000 n -0000818464 00000 n -0000818627 00000 n -0000818768 00000 n -0000818941 00000 n -0000819092 00000 n -0000819250 00000 n -0000819396 00000 n -0000819561 00000 n -0000819714 00000 n -0000819878 00000 n -0000820031 00000 n -0000820211 00000 n -0000820369 00000 n -0000820536 00000 n -0000820681 00000 n -0000820847 00000 n -0000820991 00000 n -0000821159 00000 n -0000821305 00000 n -0000821476 00000 n -0000821625 00000 n -0000821787 00000 n -0000821927 00000 n -0000822091 00000 n -0000822244 00000 n -0000822410 00000 n -0000822554 00000 n -0000822725 00000 n -0000822874 00000 n -0000823058 00000 n -0000823222 00000 n -0000823398 00000 n -0000823552 00000 n -0000823717 00000 n -0000823860 00000 n -0000824037 00000 n -0000824192 00000 n -0000824362 00000 n -0000824510 00000 n -0000824675 00000 n -0000824818 00000 n -0000825103 00000 n -0000825182 00000 n -0000825346 00000 n -0000825537 00000 n -0000825765 00000 n -0000825982 00000 n -0000826152 00000 n -0000826370 00000 n -0000826616 00000 n -0000826789 00000 n -0000826970 00000 n -0000827235 00000 n -0000827420 00000 n -0000827601 00000 n -0000827882 00000 n -0000828067 00000 n -0000828248 00000 n -0000828505 00000 n -0000828678 00000 n -0000828859 00000 n -0000829115 00000 n -0000829304 00000 n -0000829503 00000 n -0000829698 00000 n -0000829879 00000 n -0000830200 00000 n -0000830386 00000 n -0000830555 00000 n -0000830879 00000 n -0000831068 00000 n -0000831267 00000 n -0000831448 00000 n -0000831732 00000 n -0000831922 00000 n +0000798371 00000 n +0000798617 00000 n +0000798790 00000 n +0000798971 00000 n +0000799236 00000 n +0000799421 00000 n +0000799602 00000 n +0000799883 00000 n +0000800068 00000 n +0000800249 00000 n +0000800506 00000 n +0000800679 00000 n +0000800860 00000 n +0000801116 00000 n +0000801305 00000 n +0000801504 00000 n +0000801699 00000 n +0000801880 00000 n +0000802201 00000 n +0000802387 00000 n +0000802556 00000 n +0000802880 00000 n +0000803069 00000 n +0000803268 00000 n +0000803449 00000 n +0000803733 00000 n +0000803923 00000 n +0000804123 00000 n +0000804319 00000 n +0000804488 00000 n +0000804784 00000 n +0000804973 00000 n +0000805172 00000 n +0000805353 00000 n +0000805738 00000 n +0000805932 00000 n +0000806135 00000 n +0000806321 00000 n +0000806833 00000 n +0000807026 00000 n +0000807230 00000 n +0000807415 00000 n +0000807840 00000 n +0000808034 00000 n +0000808238 00000 n +0000808437 00000 n +0000808622 00000 n +0000808930 00000 n +0000809123 00000 n +0000809312 00000 n +0000809620 00000 n +0000809813 00000 n +0000810017 00000 n +0000810191 00000 n +0000810476 00000 n +0000810666 00000 n +0000810852 00000 n +0000811174 00000 n +0000811368 00000 n +0000811573 00000 n +0000811760 00000 n +0000812286 00000 n +0000812480 00000 n +0000812684 00000 n +0000812859 00000 n +0000813377 00000 n +0000813572 00000 n +0000813777 00000 n +0000813963 00000 n +0000814540 00000 n +0000814734 00000 n +0000814938 00000 n +0000815124 00000 n +0000815437 00000 n +0000815631 00000 n +0000815836 00000 n +0000816022 00000 n +0000816323 00000 n +0000816517 00000 n +0000816722 00000 n +0000816908 00000 n +0000817218 00000 n +0000817413 00000 n +0000817618 00000 n +0000817792 00000 n +0000818109 00000 n +0000818303 00000 n +0000818507 00000 n +0000818693 00000 n +0000819070 00000 n +0000819265 00000 n +0000819470 00000 n +0000819671 00000 n +0000819845 00000 n +0000820230 00000 n +0000820424 00000 n +0000820629 00000 n +0000820829 00000 n +0000821016 00000 n +0000821406 00000 n +0000821601 00000 n +0000821793 00000 n +0000821993 00000 n +0000822179 00000 n +0000822460 00000 n +0000822654 00000 n +0000822858 00000 n +0000823045 00000 n +0000823338 00000 n +0000823532 00000 n +0000823724 00000 n +0000823924 00000 n +0000824110 00000 n +0000824399 00000 n +0000824589 00000 n +0000824776 00000 n +0000825241 00000 n +0000825436 00000 n +0000825641 00000 n +0000825827 00000 n +0000826272 00000 n +0000826466 00000 n +0000826670 00000 n +0000826857 00000 n +0000827303 00000 n +0000827498 00000 n +0000827691 00000 n +0000827891 00000 n +0000828078 00000 n +0000828324 00000 n +0000828503 00000 n +0000828690 00000 n +0000828972 00000 n +0000829163 00000 n +0000829337 00000 n +0000829640 00000 n +0000829834 00000 n +0000830038 00000 n +0000830224 00000 n +0000830452 00000 n +0000830658 00000 n +0000830863 00000 n +0000831060 00000 n +0000831273 00000 n +0000831498 00000 n +0000831742 00000 n +0000831934 00000 n 0000832122 00000 n -0000832318 00000 n -0000832487 00000 n -0000832783 00000 n -0000832972 00000 n -0000833171 00000 n -0000833352 00000 n -0000833737 00000 n -0000833931 00000 n -0000834134 00000 n -0000834320 00000 n -0000834832 00000 n -0000835025 00000 n -0000835229 00000 n -0000835414 00000 n -0000835839 00000 n -0000836033 00000 n -0000836237 00000 n -0000836436 00000 n -0000836621 00000 n -0000836929 00000 n -0000837122 00000 n -0000837311 00000 n -0000837619 00000 n -0000837812 00000 n -0000838016 00000 n -0000838190 00000 n -0000838475 00000 n -0000838665 00000 n -0000838851 00000 n -0000839173 00000 n -0000839367 00000 n -0000839572 00000 n -0000839759 00000 n -0000840285 00000 n -0000840479 00000 n -0000840683 00000 n -0000840858 00000 n -0000841376 00000 n -0000841571 00000 n -0000841776 00000 n -0000841962 00000 n -0000842539 00000 n -0000842733 00000 n -0000842937 00000 n -0000843123 00000 n -0000843436 00000 n -0000843630 00000 n -0000843835 00000 n -0000844021 00000 n -0000844322 00000 n -0000844516 00000 n -0000844721 00000 n -0000844907 00000 n -0000845217 00000 n -0000845412 00000 n -0000845617 00000 n -0000845791 00000 n -0000846144 00000 n -0000846338 00000 n -0000846542 00000 n -0000846728 00000 n -0000847045 00000 n -0000847240 00000 n -0000847445 00000 n -0000847631 00000 n -0000847996 00000 n -0000848179 00000 n -0000848383 00000 n -0000848583 00000 n -0000848769 00000 n -0000849155 00000 n -0000849349 00000 n -0000849553 00000 n -0000849741 00000 n -0000849927 00000 n -0000850316 00000 n -0000850510 00000 n -0000850714 00000 n -0000850915 00000 n -0000851101 00000 n -0000851383 00000 n -0000851577 00000 n -0000851769 00000 n -0000851955 00000 n -0000852248 00000 n -0000852442 00000 n -0000852646 00000 n -0000852846 00000 n -0000853032 00000 n -0000853322 00000 n -0000853513 00000 n -0000853687 00000 n -0000854152 00000 n -0000854346 00000 n -0000854551 00000 n -0000854738 00000 n -0000855184 00000 n -0000855379 00000 n -0000855571 00000 n -0000855757 00000 n -0000856202 00000 n -0000856396 00000 n -0000856600 00000 n -0000856801 00000 n -0000856988 00000 n -0000857246 00000 n -0000857424 00000 n -0000857610 00000 n -0000857891 00000 n -0000858081 00000 n -0000858267 00000 n -0000858584 00000 n -0000858779 00000 n -0000858984 00000 n -0000859171 00000 n -0000859534 00000 n -0000859728 00000 n -0000859932 00000 n -0000860119 00000 n -0000860347 00000 n -0000860553 00000 n -0000860758 00000 n -0000860955 00000 n -0000861168 00000 n -0000861393 00000 n -0000861637 00000 n -0000861829 00000 n -0000862017 00000 n -0000862214 00000 n -0000862414 00000 n -0000862590 00000 n -0000862815 00000 n -0000863003 00000 n -0000863211 00000 n -0000863484 00000 n -0000863705 00000 n -0000863890 00000 n -0000864119 00000 n -0000864324 00000 n -0000864486 00000 n -0000865143 00000 n -0000873151 00000 n -0000873367 00000 n -0000874730 00000 n -0000875797 00000 n -0000883549 00000 n -0000883770 00000 n -0000885133 00000 n -0000886210 00000 n -0000889471 00000 n -0000889697 00000 n -0000891060 00000 n -0000892176 00000 n -0000894379 00000 n -0000894593 00000 n -0000895956 00000 n +0000832319 00000 n +0000832519 00000 n +0000832695 00000 n +0000832919 00000 n +0000833095 00000 n +0000833292 00000 n +0000833564 00000 n +0000833796 00000 n +0000833980 00000 n +0000834209 00000 n +0000834402 00000 n +0000834565 00000 n +0000835205 00000 n +0000843213 00000 n +0000843429 00000 n +0000844792 00000 n +0000845859 00000 n +0000853611 00000 n +0000853832 00000 n +0000855195 00000 n +0000856272 00000 n +0000859533 00000 n +0000859759 00000 n +0000861122 00000 n +0000862238 00000 n +0000864381 00000 n +0000864595 00000 n +0000865958 00000 n trailer -<< /Size 894 +<< /Size 860 /Root 2 0 R /Info 1 0 R >> startxref -897081 +867084 %%EOF diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index b4c5bf309..111a4058e 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -68,7 +68,6 @@ blueprint_yaml MEDIUMTEXT, dcae_blueprint_id varchar(255), maximum_instances_allowed integer, - svg_representation MEDIUMTEXT, unique_blueprint boolean default false, service_uuid varchar(255), primary key (name) @@ -91,7 +90,6 @@ dcae_deployment_status_url varchar(255), global_properties_json json, last_computed_state varchar(255) not null, - svg_representation MEDIUMTEXT, loop_template_name varchar(255) not null, service_uuid varchar(255), primary key (name) diff --git a/extra/sql/dump/test-data.sql b/extra/sql/dump/test-data.sql index 636c52b7a..e5385ac8f 100644 --- a/extra/sql/dump/test-data.sql +++ b/extra/sql/dump/test-data.sql @@ -26,8 +26,8 @@ USE `cldsdb4`; LOCK TABLES `dictionary` WRITE; /*!40000 ALTER TABLE `dictionary` DISABLE KEYS */; -INSERT INTO `dictionary` VALUES ('DefaultActors','Not found','2020-05-13 00:39:21.684583','Not found','2020-05-13 00:39:21.684583',0,''); -INSERT INTO `dictionary` VALUES ('DefaultOperations','Not found','2020-05-13 00:39:21.727475','Not found','2020-05-13 00:39:21.727475',0,''); +INSERT INTO `dictionary` VALUES ('DefaultActors','admin','2020-06-03 14:05:16.852993','admin','2020-06-03 14:05:16.852993',0,''); +INSERT INTO `dictionary` VALUES ('DefaultOperations','admin','2020-06-03 14:05:16.921758','admin','2020-06-03 14:05:16.921758',0,''); /*!40000 ALTER TABLE `dictionary` ENABLE KEYS */; UNLOCK TABLES; @@ -37,20 +37,20 @@ UNLOCK TABLES; LOCK TABLES `dictionary_elements` WRITE; /*!40000 ALTER TABLE `dictionary_elements` DISABLE KEYS */; -INSERT INTO `dictionary_elements` VALUES ('APPC','Not found','2020-05-13 00:39:21.706160','Not found','2020-05-13 00:39:21.706160','APPC component','APPC',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('BandwidthOnDemand (SDNC operation)','Not found','2020-05-13 00:39:21.730457','Not found','2020-05-13 00:39:21.730457','SDNC operation','BandwidthOnDemand',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('Health-Check (APPC operation)','Not found','2020-05-13 00:39:21.750947','Not found','2020-05-13 00:39:21.750947','APPC operation','Health-Check',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('Migrate (APPC operation)','Not found','2020-05-13 00:39:21.748635','Not found','2020-05-13 00:39:21.748635','APPC operation','Migrate',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('ModifyConfig (APPC/VFC operation)','Not found','2020-05-13 00:39:21.742800','Not found','2020-05-13 00:39:21.742800','APPC/VFC operation','ModifyConfig',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('Rebuild (APPC operation)','Not found','2020-05-13 00:39:21.740789','Not found','2020-05-13 00:39:21.740789','APPC operation','Rebuild',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('Reroute (SDNC operation)','Not found','2020-05-13 00:39:21.735319','Not found','2020-05-13 00:39:21.735319','SDNC operation','Reroute',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('Restart (APPC operation)','Not found','2020-05-13 00:39:21.744961','Not found','2020-05-13 00:39:21.744961','APPC operation','Restart',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('SDNC','Not found','2020-05-13 00:39:21.698771','Not found','2020-05-13 00:39:21.698771','SDNC component','SDNC',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('SDNR','Not found','2020-05-13 00:39:21.696124','Not found','2020-05-13 00:39:21.696124','SDNR component','SDNR',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('SO','Not found','2020-05-13 00:39:21.703223','Not found','2020-05-13 00:39:21.703223','SO component','SO',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('VF Module Create (SO operation)','Not found','2020-05-13 00:39:21.737705','Not found','2020-05-13 00:39:21.737705','SO operation','VF Module Create',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('VF Module Delete (SO operation)','Not found','2020-05-13 00:39:21.733089','Not found','2020-05-13 00:39:21.733089','SO operation','VF Module Delete',NULL,'string'); -INSERT INTO `dictionary_elements` VALUES ('VFC','Not found','2020-05-13 00:39:21.701068','Not found','2020-05-13 00:39:21.701068','VFC component','VFC',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('APPC','admin','2020-06-03 14:05:16.887643','admin','2020-06-03 14:05:16.887643','APPC component','APPC',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('BandwidthOnDemand (SDNC operation)','admin','2020-06-03 14:05:16.924229','admin','2020-06-03 14:05:16.924229','SDNC operation','BandwidthOnDemand',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('Health-Check (APPC operation)','admin','2020-06-03 14:05:17.000215','admin','2020-06-03 14:05:17.000215','APPC operation','Health-Check',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('Migrate (APPC operation)','admin','2020-06-03 14:05:16.986903','admin','2020-06-03 14:05:16.986903','APPC operation','Migrate',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('ModifyConfig (APPC/VFC operation)','admin','2020-06-03 14:05:16.975310','admin','2020-06-03 14:05:16.975310','APPC/VFC operation','ModifyConfig',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('Rebuild (APPC operation)','admin','2020-06-03 14:05:16.971992','admin','2020-06-03 14:05:16.971992','APPC operation','Rebuild',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('Reroute (SDNC operation)','admin','2020-06-03 14:05:16.938995','admin','2020-06-03 14:05:16.938995','SDNC operation','Reroute',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('Restart (APPC operation)','admin','2020-06-03 14:05:16.978661','admin','2020-06-03 14:05:16.978661','APPC operation','Restart',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('SDNC','admin','2020-06-03 14:05:16.869223','admin','2020-06-03 14:05:16.869223','SDNC component','SDNC',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('SDNR','admin','2020-06-03 14:05:16.865836','admin','2020-06-03 14:05:16.865836','SDNR component','SDNR',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('SO','admin','2020-06-03 14:05:16.881475','admin','2020-06-03 14:05:16.881475','SO component','SO',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('VF Module Create (SO operation)','admin','2020-06-03 14:05:16.969132','admin','2020-06-03 14:05:16.969132','SO operation','VF Module Create',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('VF Module Delete (SO operation)','admin','2020-06-03 14:05:16.931383','admin','2020-06-03 14:05:16.931383','SO operation','VF Module Delete',NULL,'string'); +INSERT INTO `dictionary_elements` VALUES ('VFC','admin','2020-06-03 14:05:16.877754','admin','2020-06-03 14:05:16.877754','VFC component','VFC',NULL,'string'); /*!40000 ALTER TABLE `dictionary_elements` ENABLE KEYS */; UNLOCK TABLES; @@ -93,7 +93,7 @@ UNLOCK TABLES; LOCK TABLES `loop_element_models` WRITE; /*!40000 ALTER TABLE `loop_element_models` DISABLE KEYS */; -INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-05-13 00:38:22.973525','Not found','2020-05-13 00:38:23.546236',NULL,NULL,'MICRO_SERVICE_TYPE',NULL); +INSERT INTO `loop_element_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app',NULL,'2020-06-03 14:04:06.098383','Not found','2020-06-03 14:04:06.630494',NULL,NULL,'MICRO_SERVICE_TYPE',NULL); /*!40000 ALTER TABLE `loop_element_models` ENABLE KEYS */; UNLOCK TABLES; @@ -112,9 +112,9 @@ UNLOCK TABLES; LOCK TABLES `loop_templates` WRITE; /*!40000 ALTER TABLE `loop_templates` DISABLE KEYS */; -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_dgY2q_v1_0_ResourceInstanceName1_tca','Not found','2020-05-13 00:38:23.491855','Not found','2020-05-13 00:38:23.491855','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-4a9b8aa2-23f2-4d44-a654-94ffc6081287',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_dgY2q_v1_0_ResourceInstanceName1_tca_3','Not found','2020-05-13 00:38:23.288562','Not found','2020-05-13 00:38:23.288562','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml\n - \"https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/k8splugin/1.7.2/k8splugin_types.yaml\"\n - \"https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/clamppolicyplugin/1.1.0/clamppolicyplugin_types.yaml\"\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: \"true\"\n dmaap_host:\n type: string\n default: \"message-router.onap.svc.cluster.local\"\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: \"false\"\n redisHosts:\n type: string\n default: \"dcae-redis.onap.svc.cluster.local:6379\"\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.2.2\"\n consul_host:\n type: string\n default: \"consul-server.onap\"\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n #tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT: \"3904\"\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT: \"8443\"\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT: \"8500\"\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT: \"10000\"\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id:\n get_input: policy_model_id\n','typeId-512c56ae-8082-4c62-8883-d3c5b5a46fa5',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); -INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_dgY2q_v1_0_ResourceInstanceName2_tca_2','Not found','2020-05-13 00:38:22.942798','Not found','2020-05-13 00:38:22.942798','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-6e215282-92bc-4523-b1b2-578ab51fb487',0,'VESapp',1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_e5S23_v1_0_ResourceInstanceName1_tca','Not found','2020-06-03 14:04:06.518804','Not found','2020-06-03 14:04:06.518804','CLOSED','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n location_id:\n type: string\n service_id:\n type: string\n policy_id:\n type: string\nnode_templates:\n policy_0:\n type: dcae.nodes.policy\n properties:\n policy_id: \n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n cdap_host_host:\n type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n properties:\n location_id:\n get_input: location_id\n scn_override: cdap_broker.solutioning-central.dcae.onap.org\n interfaces:\n cloudify.interfaces.lifecycle: {\n }\n tca_tca:\n type: dcae.nodes.MicroService.cdap\n properties:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n publisherContentType: application/json\n publisherHostName: mrlocal-mtnjftle01.onap.org\n publisherHostPort: \'3905\'\n publisherMaxBatchSize: \'10\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: https\n publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n publisherUserName: test@tca.af.dcae.onap.org\n publisherUserPassword: password\n subscriberConsumerGroup: OpenDCAE-c12\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName: mrlocal-mtnjftle01.onap.org\n subscriberHostPort: \'3905\'\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'20000\'\n subscriberProtocol: https\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n subscriberUserName: test@tca.af.dcae.onap.org\n subscriberUserPassword: password\n tca_policy: null\n artifact_name: dcae-analytics-tca\n artifact_version: 1.0.0\n connections:\n streams_publishes: [\n ]\n streams_subscribes: [\n ]\n jar_url: http://somejar\n location_id:\n get_input: location_id\n namespace: cdap_tca_hi_lo\n programs:\n - program_id: TCAVESCollectorFlow\n program_type: flows\n - program_id: TCADMaaPMRSubscriberWorker\n program_type: workers\n - program_id: TCADMaaPMRPublisherWorker\n program_type: workers\n service_component_type: cdap_app_tca\n service_id:\n get_input: service_id\n streamname: TCASubscriberOutputStream\n relationships:\n - target: topic0\n type: dcae.relationships.subscribe_to_events\n - target: topic1\n type: dcae.relationships.publish_events\n - target: cdap_host_host\n type: dcae.relationships.component_contained_in\n - target: policy_0\n type: dcae.relationships.depends_on\n topic0:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n topic1:\n type: dcae.nodes.Topic\n properties:\n topic_name: \'\'\n \n','typeId-35dff45f-4389-4c86-a8ac-4c7a0d5f0f5b',0,1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_e5S23_v1_0_ResourceInstanceName1_tca_3','Not found','2020-06-03 14:04:06.332383','Not found','2020-06-03 14:04:06.332383','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml\n - \"https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/k8splugin/1.7.2/k8splugin_types.yaml\"\n - \"https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/clamppolicyplugin/1.1.0/clamppolicyplugin_types.yaml\"\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: \"true\"\n dmaap_host:\n type: string\n default: \"message-router.onap.svc.cluster.local\"\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: \"false\"\n redisHosts:\n type: string\n default: \"dcae-redis.onap.svc.cluster.local:6379\"\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.2.2\"\n consul_host:\n type: string\n default: \"consul-server.onap\"\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-service\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n #tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n tca_policy: \'\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT: \"3904\"\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT: \"8443\"\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT: \"8500\"\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT: \"10000\"\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id:\n get_input: policy_model_id\n','typeId-7094eedc-367e-42b9-87ad-9809c146debc',0,1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); +INSERT INTO `loop_templates` VALUES ('LOOP_TEMPLATE_e5S23_v1_0_ResourceInstanceName2_tca_2','Not found','2020-06-03 14:04:06.029077','Not found','2020-06-03 14:04:06.029077','CLOSED','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n# - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n aaiEnrichmentHost:\n type: string\n default: \"aai.onap.svc.cluster.local\"\n aaiEnrichmentPort:\n type: string\n default: \"8443\"\n enableAAIEnrichment:\n type: string\n default: true\n dmaap_host:\n type: string\n default: message-router.onap\n dmaap_port:\n type: string\n default: \"3904\"\n enableRedisCaching:\n type: string\n default: false\n redisHosts:\n type: string\n default: dcae-redis.onap.svc.cluster.local:6379\n tag_version:\n type: string\n default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n consul_host:\n type: string\n default: consul-server.onap\n consul_port:\n type: string\n default: \"8500\"\n cbs_host:\n type: string\n default: \"config-binding-servicel\"\n cbs_port:\n type: string\n default: \"10000\"\n policy_id:\n type: string\n default: \"onap.restart.tca\"\n external_port:\n type: string\n description: Kubernetes node port on which CDAPgui is exposed\n default: \"32012\"\n policy_model_id:\n type: string\n default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n tca_k8s:\n type: dcae.nodes.ContainerizedServiceComponent\n relationships:\n - target: tca_policy\n type: cloudify.relationships.depends_on\n properties:\n service_component_type: \'dcaegen2-analytics-tca\'\n application_config: {}\n docker_config: {}\n image:\n get_input: tag_version\n log_info:\n log_directory: \"/opt/app/TCAnalytics/logs\"\n application_config:\n app_config:\n appDescription: DCAE Analytics Threshold Crossing Alert Application\n appName: dcae-tca\n tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n tcaVESAlertsTableName: TCAVESAlertsTable\n tcaVESAlertsTableTTLSeconds: \'1728000\'\n tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n tcaVESMessageStatusTableTTLSeconds: \'86400\'\n thresholdCalculatorFlowletInstances: \'2\'\n app_preferences:\n aaiEnrichmentHost:\n get_input: aaiEnrichmentHost\n aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n aaiEnrichmentPortNumber: \'8443\'\n aaiEnrichmentProtocol: https\n aaiEnrichmentUserName: dcae@dcae.onap.org\n aaiEnrichmentUserPassword: demo123456!\n aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n enableAAIEnrichment:\n get_input: enableAAIEnrichment\n enableRedisCaching:\n get_input: enableRedisCaching\n redisHosts:\n get_input: redisHosts\n enableAlertCEFFormat: \'false\'\n publisherContentType: application/json\n publisherHostName:\n get_input: dmaap_host\n publisherHostPort:\n get_input: dmaap_port\n publisherMaxBatchSize: \'1\'\n publisherMaxRecoveryQueueSize: \'100000\'\n publisherPollingInterval: \'20000\'\n publisherProtocol: http\n publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n subscriberConsumerGroup: OpenDCAE-clamp\n subscriberConsumerId: c12\n subscriberContentType: application/json\n subscriberHostName:\n get_input: dmaap_host\n subscriberHostPort:\n get_input: dmaap_port\n subscriberMessageLimit: \'-1\'\n subscriberPollingInterval: \'30000\'\n subscriberProtocol: http\n subscriberTimeoutMS: \'-1\'\n subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n# tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"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\"}]}]}\'\n service_component_type: dcaegen2-analytics_tca\n interfaces:\n cloudify.interfaces.lifecycle:\n start:\n inputs:\n envs:\n DMAAPHOST:\n { get_input: dmaap_host }\n DMAAPPORT:\n { get_input: dmaap_port }\n DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n AAIHOST:\n { get_input: aaiEnrichmentHost }\n AAIPORT:\n { get_input: aaiEnrichmentPort }\n CONSUL_HOST:\n { get_input: consul_host }\n CONSUL_PORT:\n { get_input: consul_port }\n CBS_HOST:\n { get_input: cbs_host }\n CBS_PORT:\n { get_input: cbs_port }\n CONFIG_BINDING_SERVICE: \"config_binding_service\"\n ports:\n - concat: [\"11011:\", { get_input: external_port }]\n tca_policy:\n type: clamp.nodes.policy\n properties:\n policy_id:\n get_input: policy_id\n policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-4e07b9c1-3c50-4d02-aba8-4dc3baf3e2f3',0,1,'63cac700-ab9a-4115-a74f-7eac85e3fce0'); /*!40000 ALTER TABLE `loop_templates` ENABLE KEYS */; UNLOCK TABLES; @@ -152,9 +152,9 @@ UNLOCK TABLES; LOCK TABLES `looptemplates_to_loopelementmodels` WRITE; /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` DISABLE KEYS */; -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_dgY2q_v1_0_ResourceInstanceName1_tca',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_dgY2q_v1_0_ResourceInstanceName1_tca_3',0); -INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_dgY2q_v1_0_ResourceInstanceName2_tca_2',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_e5S23_v1_0_ResourceInstanceName1_tca',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_e5S23_v1_0_ResourceInstanceName1_tca_3',0); +INSERT INTO `looptemplates_to_loopelementmodels` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','LOOP_TEMPLATE_e5S23_v1_0_ResourceInstanceName2_tca_2',0); /*!40000 ALTER TABLE `looptemplates_to_loopelementmodels` ENABLE KEYS */; UNLOCK TABLES; @@ -182,13 +182,13 @@ UNLOCK TABLES; LOCK TABLES `policy_models` WRITE; /*!40000 ALTER TABLE `policy_models` DISABLE KEYS */; -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.common.Blacklist','1.0.0','Not found','2020-05-13 00:38:30.330076','Not found','2020-05-13 00:38:31.031970','Blacklist','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.guard.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n This is the base Policy Type for Guard policies that guard the execution of Operational\n Policies.\n properties:\n actor:\n type: string\n description: Specifies the Actor the guard applies to.\n required: true\n operation:\n type: string\n description: Specified the operation that the actor is performing\n the guard applies to.\n required: true\n timeRange:\n type: tosca.datatypes.TimeInterval\n description: |\n An optional range of time during the day the guard policy is valid for.\n required: false\n id:\n type: string\n description: The Control Loop id this applies to.\n required: false\n onap.policies.controlloop.guard.common.Blacklist:\n derived_from: onap.policies.controlloop.guard.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Supports blacklist of entity id\'s from performing control loop\n actions on.\n properties:\n blacklist:\n type: list\n description: List of entity id\'s\n required: true\n entry_schema:\n type: string\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"xacml\"\n ]\n }\n ]\n}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.common.FrequencyLimiter','1.0.0','Not found','2020-05-13 00:38:30.198655','Not found','2020-05-13 00:38:31.067646','FrequencyLimiter','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.guard.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n This is the base Policy Type for Guard policies that guard the execution of Operational\n Policies.\n properties:\n actor:\n type: string\n description: Specifies the Actor the guard applies to.\n required: true\n operation:\n type: string\n description: Specified the operation that the actor is performing\n the guard applies to.\n required: true\n timeRange:\n type: tosca.datatypes.TimeInterval\n description: |\n An optional range of time during the day the guard policy is valid for.\n required: false\n id:\n type: string\n description: The Control Loop id this applies to.\n required: false\n onap.policies.controlloop.guard.common.FrequencyLimiter:\n derived_from: onap.policies.controlloop.guard.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Supports limiting the frequency of actions being taken by a Actor.\n properties:\n timeWindow:\n type: integer\n description: The time window to count the actions against.\n required: true\n timeUnits:\n type: string\n description: The units of time the window is counting.\n constraints:\n - valid_values:\n - second\n - minute\n - hour\n - day\n - week\n - month\n - year\n limit:\n type: integer\n description: The limit\n required: true\n constraints:\n - greater_than: 0\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"xacml\"\n ]\n }\n ]\n}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.common.MinMax','2.0.0','Not found','2020-05-13 00:38:30.512064','Not found','2020-05-13 00:38:30.512064','MinMax','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.guard.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n This is the base Policy Type for Guard policies that guard the execution of Operational\n Policies.\n properties:\n actor:\n type: string\n description: Specifies the Actor the guard applies to.\n required: true\n operation:\n type: string\n description: Specified the operation that the actor is performing\n the guard applies to.\n required: true\n timeRange:\n type: tosca.datatypes.TimeInterval\n description: |\n An optional range of time during the day the guard policy is valid for.\n required: false\n id:\n type: string\n description: The Control Loop id this applies to.\n required: false\n onap.policies.controlloop.guard.common.MinMax:\n derived_from: onap.policies.controlloop.guard.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Supports Min/Max number of entity for scaling operations\n properties:\n min:\n type: integer\n required: true\n description: The minimum instances of this entity\n max:\n type: integer\n required: false\n description: The maximum instances of this entity\n',NULL); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Operational','1.0.0','Not found','2020-05-13 00:37:31.959971','Not found','2020-05-13 00:38:31.098274','OperationalPolicyLegacy','','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"apex\",\n \"drools\"\n ]\n }\n ]\n}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.operational.common.Apex','1.0.0','Not found','2020-05-13 00:38:29.983627','Not found','2020-05-13 00:38:31.125210','Apex','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.operational.Common:\n properties:\n abatement:\n name: abatement\n type: boolean\n typeVersion: 0.0.0\n description: Whether an abatement event message will be expected for\n the control loop from DCAE.\n default: \'false\'\n required: true\n constraints: [\n ]\n metadata: {\n }\n operations:\n name: operations\n type: list\n typeVersion: 0.0.0\n description: List of operations to be performed when Control Loop\n is triggered.\n required: true\n constraints: [\n ]\n entry_schema:\n type: onap.datatype.controlloop.Operation\n typeVersion: 0.0.0\n constraints: [\n ]\n metadata: {\n }\n trigger:\n name: trigger\n type: string\n typeVersion: 0.0.0\n description: Initial operation to execute upon receiving an Onset\n event message for the Control Loop.\n required: true\n constraints: [\n ]\n metadata: {\n }\n timeout:\n name: timeout\n type: integer\n typeVersion: 0.0.0\n description: |\n Overall timeout for executing all the operations. This timeout should equal or exceed the total\n timeout for each operation listed.\n required: true\n constraints: [\n ]\n metadata: {\n }\n id:\n name: id\n type: string\n typeVersion: 0.0.0\n description: The unique control loop id.\n required: true\n constraints: [\n ]\n metadata: {\n }\n name: onap.policies.controlloop.operational.Common\n version: 1.0.0\n derived_from: tosca.policies.Root\n metadata: {\n }\n description: |\n Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant\n Policy Types. This does NOT support the legacy Policy YAML policy type.\n onap.policies.controlloop.operational.common.Apex:\n properties:\n engineServiceParameters:\n name: engineServiceParameters\n type: string\n typeVersion: 0.0.0\n description: The engine parameters like name, instanceCount, policy\n implementation, parameters etc.\n required: true\n constraints: [\n ]\n metadata: {\n }\n eventOutputParameters:\n name: eventOutputParameters\n type: string\n typeVersion: 0.0.0\n description: The event output parameters.\n required: true\n constraints: [\n ]\n metadata: {\n }\n javaProperties:\n name: javaProperties\n type: string\n typeVersion: 0.0.0\n description: Name/value pairs of properties to be set for APEX if\n needed.\n required: false\n constraints: [\n ]\n metadata: {\n }\n eventInputParameters:\n name: eventInputParameters\n type: string\n typeVersion: 0.0.0\n description: The event input parameters.\n required: true\n constraints: [\n ]\n metadata: {\n }\n name: onap.policies.controlloop.operational.common.Apex\n version: 1.0.0\n derived_from: onap.policies.controlloop.operational.Common\n metadata: {\n }\n description: Operational policies for Apex PDP\ndata_types:\n onap.datatype.controlloop.Actor:\n constraints: [\n ]\n properties:\n payload:\n name: payload\n type: map\n typeVersion: 0.0.0\n description: Name/value pairs of payload information passed by Policy\n to the actor\n required: false\n constraints: [\n ]\n entry_schema:\n type: string\n typeVersion: 0.0.0\n constraints: [\n ]\n metadata:\n clamp_possible_values: ClampExecution:CDS/payload\n target:\n name: target\n type: onap.datatype.controlloop.Target\n typeVersion: 0.0.0\n description: The resource the operation should be performed on.\n required: true\n constraints: [\n ]\n metadata: {\n }\n actor:\n name: actor\n type: string\n typeVersion: 0.0.0\n description: The actor performing the operation.\n required: true\n constraints: [\n ]\n metadata:\n clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor\n operation:\n name: operation\n type: string\n typeVersion: 0.0.0\n description: The operation the actor is performing.\n required: true\n constraints: [\n ]\n metadata:\n clamp_possible_values: Dictionary:DefaultOperations, ClampExecution:CDS/operation\n name: onap.datatype.controlloop.Actor\n version: 0.0.0\n derived_from: tosca.datatypes.Root\n metadata: {\n }\n description: An actor/operation/target definition\n onap.datatype.controlloop.Operation:\n constraints: [\n ]\n properties:\n failure_retries:\n name: failure_retries\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the current operation\n has exceeded its max retries.\n default: final_failure_retries\n required: false\n constraints: [\n ]\n metadata: {\n }\n id:\n name: id\n type: string\n typeVersion: 0.0.0\n description: Unique identifier for the operation\n required: true\n constraints: [\n ]\n metadata: {\n }\n failure_timeout:\n name: failure_timeout\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the time out for\n the operation occurs.\n default: final_failure_timeout\n required: false\n constraints: [\n ]\n metadata: {\n }\n failure:\n name: failure\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke on Actor operation\n failure.\n default: final_failure\n required: false\n constraints: [\n ]\n metadata: {\n }\n operation:\n name: operation\n type: onap.datatype.controlloop.Actor\n typeVersion: 0.0.0\n description: The definition of the operation to be performed.\n required: true\n constraints: [\n ]\n metadata: {\n }\n failure_guard:\n name: failure_guard\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the current operation\n is blocked due to guard policy enforcement.\n default: final_failure_guard\n required: false\n constraints: [\n ]\n metadata: {\n }\n retries:\n name: retries\n type: integer\n typeVersion: 0.0.0\n description: The number of retries the actor should attempt to perform\n the operation.\n default: \'0\'\n required: true\n constraints: [\n ]\n metadata: {\n }\n timeout:\n name: timeout\n type: integer\n typeVersion: 0.0.0\n description: The amount of time for the actor to perform the operation.\n required: true\n constraints: [\n ]\n metadata: {\n }\n failure_exception:\n name: failure_exception\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the current operation\n causes an exception.\n default: final_failure_exception\n required: false\n constraints: [\n ]\n metadata: {\n }\n description:\n name: description\n type: string\n typeVersion: 0.0.0\n description: A user-friendly description of the intent for the operation\n required: false\n constraints: [\n ]\n metadata: {\n }\n success:\n name: success\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke on success. A value\n of \"final_success\" indicates and end to the operation.\n default: final_success\n required: false\n constraints: [\n ]\n metadata: {\n }\n name: onap.datatype.controlloop.Operation\n version: 0.0.0\n derived_from: tosca.datatypes.Root\n metadata: {\n }\n description: An operation supported by an actor\n onap.datatype.controlloop.Target:\n constraints: [\n ]\n properties:\n entityIds:\n name: entityIds\n type: map\n typeVersion: 0.0.0\n description: |\n Map of values that identify the resource. If none are provided, it is assumed that the\n entity that generated the ONSET event will be the target.\n required: false\n constraints: [\n ]\n entry_schema:\n type: string\n typeVersion: 0.0.0\n constraints: [\n ]\n metadata:\n clamp_possible_values: ClampExecution:CSAR_RESOURCES\n targetType:\n name: targetType\n type: string\n typeVersion: 0.0.0\n description: Category for the target type\n required: true\n constraints:\n - valid_values:\n - VNF\n - VM\n - VFMODULE\n - PNF\n metadata: {\n }\n name: onap.datatype.controlloop.Target\n version: 0.0.0\n derived_from: tosca.datatypes.Root\n metadata: {\n }\n description: Definition for a entity in A&AI to perform a control loop operation\n on\nname: ToscaServiceTemplateSimple\nversion: 1.0.0\nmetadata: {\n }\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"drools\"\n ]\n }\n ]\n}'); -INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.operational.common.Drools','1.0.0','Not found','2020-05-13 00:38:29.673383','Not found','2020-05-13 00:38:31.172263','Drools','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.operational.common.Drools:\n derived_from: onap.policies.controlloop.operational.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Operational policies for Drools PDP\n properties:\n controllerName:\n type: string\n description: Drools controller properties\n required: false\n onap.policies.controlloop.operational.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant\n Policy Types. This does NOT support the legacy Policy YAML policy type.\n properties:\n id:\n type: string\n description: The unique control loop id.\n required: true\n timeout:\n type: integer\n description: |\n Overall timeout for executing all the operations. This timeout should equal or exceed the total\n timeout for each operation listed.\n required: true\n abatement:\n type: boolean\n description: Whether an abatement event message will be expected for\n the control loop from DCAE.\n required: true\n default: false\n trigger:\n type: string\n description: Initial operation to execute upon receiving an Onset\n event message for the Control Loop.\n required: true\n operations:\n type: list\n description: List of operations to be performed when Control Loop\n is triggered.\n required: true\n entry_schema:\n type: onap.datatype.controlloop.Operation\ndata_types:\n onap.datatype.controlloop.Target:\n derived_from: tosca.datatypes.Root\n description: Definition for a entity in A&AI to perform a control loop operation\n on\n properties:\n targetType:\n type: string\n description: Category for the target type\n required: true\n constraints:\n - valid_values:\n - VNF\n - VM\n - VFMODULE\n - PNF\n entityIds:\n type: map\n description: |\n Map of values that identify the resource. If none are provided, it is assumed that the\n entity that generated the ONSET event will be the target.\n required: false\n metadata:\n clamp_possible_values: ClampExecution:CSAR_RESOURCES\n entry_schema:\n type: string\n onap.datatype.controlloop.Actor:\n derived_from: tosca.datatypes.Root\n description: An actor/operation/target definition\n properties:\n actor:\n type: string\n description: The actor performing the operation.\n required: true\n metadata:\n clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor\n operation:\n type: string\n description: The operation the actor is performing.\n required: true\n metadata:\n clamp_possible_values: Dictionary:DefaultOperations, ClampExecution:CDS/operations\n target:\n type: onap.datatype.controlloop.Target\n description: The resource the operation should be performed on.\n required: true\n payload:\n type: map\n description: Name/value pairs of payload information passed by Policy\n to the actor\n required: false\n metadata:\n clamp_possible_values: ClampExecution:CDS/payload\n entry_schema:\n type: string\n onap.datatype.controlloop.Operation:\n derived_from: tosca.datatypes.Root\n description: An operation supported by an actor\n properties:\n id:\n type: string\n description: Unique identifier for the operation\n required: true\n description:\n type: string\n description: A user-friendly description of the intent for the operation\n required: false\n operation:\n type: onap.datatype.controlloop.Actor\n description: The definition of the operation to be performed.\n required: true\n timeout:\n type: integer\n description: The amount of time for the actor to perform the operation.\n required: true\n retries:\n type: integer\n description: The number of retries the actor should attempt to perform\n the operation.\n required: true\n default: 0\n success:\n type: string\n description: Points to the operation to invoke on success. A value\n of \"final_success\" indicates and end to the operation.\n required: false\n default: final_success\n failure:\n type: string\n description: Points to the operation to invoke on Actor operation\n failure.\n required: false\n default: final_failure\n failure_timeout:\n type: string\n description: Points to the operation to invoke when the time out for\n the operation occurs.\n required: false\n default: final_failure_timeout\n failure_retries:\n type: string\n description: Points to the operation to invoke when the current operation\n has exceeded its max retries.\n required: false\n default: final_failure_retries\n failure_exception:\n type: string\n description: Points to the operation to invoke when the current operation\n causes an exception.\n required: false\n default: final_failure_exception\n failure_guard:\n type: string\n description: Points to the operation to invoke when the current operation\n is blocked due to guard policy enforcement.\n required: false\n default: final_failure_guard\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"drools\"\n ]\n }\n ]\n}'); -INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0','Not found','2020-05-13 00:38:21.671851','Not found','2020-05-13 00:38:31.224392','app','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: a base policy type for all policies that govern monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: onap.datatypes.monitoring.tca_policy\n description: TCA Policy JSON\n required: true\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name\n e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to\n be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be\n analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','{\n \"supportedPdpGroups\": [\n {\n \"monitoring\": [\n \"xacml\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.common.Blacklist','1.0.0','Not found','2020-06-03 14:04:18.182997','Not found','2020-06-03 14:04:19.026229','Blacklist','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.guard.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n This is the base Policy Type for Guard policies that guard the execution of Operational\n Policies.\n properties:\n actor:\n type: string\n description: Specifies the Actor the guard applies to.\n required: true\n operation:\n type: string\n description: Specified the operation that the actor is performing\n the guard applies to.\n required: true\n timeRange:\n type: tosca.datatypes.TimeInterval\n description: |\n An optional range of time during the day the guard policy is valid for.\n required: false\n id:\n type: string\n description: The Control Loop id this applies to.\n required: false\n onap.policies.controlloop.guard.common.Blacklist:\n derived_from: onap.policies.controlloop.guard.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Supports blacklist of entity id\'s from performing control loop\n actions on.\n properties:\n blacklist:\n type: list\n description: List of entity id\'s\n required: true\n entry_schema:\n type: string\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"xacml\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.common.FrequencyLimiter','1.0.0','Not found','2020-06-03 14:04:17.886356','Not found','2020-06-03 14:04:19.085312','FrequencyLimiter','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.guard.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n This is the base Policy Type for Guard policies that guard the execution of Operational\n Policies.\n properties:\n actor:\n type: string\n description: Specifies the Actor the guard applies to.\n required: true\n operation:\n type: string\n description: Specified the operation that the actor is performing\n the guard applies to.\n required: true\n timeRange:\n type: tosca.datatypes.TimeInterval\n description: |\n An optional range of time during the day the guard policy is valid for.\n required: false\n id:\n type: string\n description: The Control Loop id this applies to.\n required: false\n onap.policies.controlloop.guard.common.FrequencyLimiter:\n derived_from: onap.policies.controlloop.guard.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Supports limiting the frequency of actions being taken by a Actor.\n properties:\n timeWindow:\n type: integer\n description: The time window to count the actions against.\n required: true\n timeUnits:\n type: string\n description: The units of time the window is counting.\n constraints:\n - valid_values:\n - second\n - minute\n - hour\n - day\n - week\n - month\n - year\n limit:\n type: integer\n description: The limit\n required: true\n constraints:\n - greater_than: 0\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"xacml\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.guard.common.MinMax','2.0.0','Not found','2020-06-03 14:04:18.404717','Not found','2020-06-03 14:04:18.404717','MinMax','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.guard.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n This is the base Policy Type for Guard policies that guard the execution of Operational\n Policies.\n properties:\n actor:\n type: string\n description: Specifies the Actor the guard applies to.\n required: true\n operation:\n type: string\n description: Specified the operation that the actor is performing\n the guard applies to.\n required: true\n timeRange:\n type: tosca.datatypes.TimeInterval\n description: |\n An optional range of time during the day the guard policy is valid for.\n required: false\n id:\n type: string\n description: The Control Loop id this applies to.\n required: false\n onap.policies.controlloop.guard.common.MinMax:\n derived_from: onap.policies.controlloop.guard.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Supports Min/Max number of entity for scaling operations\n properties:\n min:\n type: integer\n required: true\n description: The minimum instances of this entity\n max:\n type: integer\n required: false\n description: The maximum instances of this entity\n',NULL); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.Operational','1.0.0','Not found','2020-06-03 14:02:52.957260','Not found','2020-06-03 14:04:19.146870','OperationalPolicyLegacy','','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"apex\",\n \"drools\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.operational.common.Apex','1.0.0','Not found','2020-06-03 14:04:17.684523','Not found','2020-06-03 14:04:19.188496','Apex','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.operational.Common:\n properties:\n abatement:\n name: abatement\n type: boolean\n typeVersion: 0.0.0\n description: Whether an abatement event message will be expected for\n the control loop from DCAE.\n default: \'false\'\n required: true\n constraints: [\n ]\n metadata: {\n }\n operations:\n name: operations\n type: list\n typeVersion: 0.0.0\n description: List of operations to be performed when Control Loop\n is triggered.\n required: true\n constraints: [\n ]\n entry_schema:\n type: onap.datatype.controlloop.Operation\n typeVersion: 0.0.0\n constraints: [\n ]\n metadata: {\n }\n trigger:\n name: trigger\n type: string\n typeVersion: 0.0.0\n description: Initial operation to execute upon receiving an Onset\n event message for the Control Loop.\n required: true\n constraints: [\n ]\n metadata: {\n }\n timeout:\n name: timeout\n type: integer\n typeVersion: 0.0.0\n description: |\n Overall timeout for executing all the operations. This timeout should equal or exceed the total\n timeout for each operation listed.\n required: true\n constraints: [\n ]\n metadata: {\n }\n id:\n name: id\n type: string\n typeVersion: 0.0.0\n description: The unique control loop id.\n required: true\n constraints: [\n ]\n metadata: {\n }\n name: onap.policies.controlloop.operational.Common\n version: 1.0.0\n derived_from: tosca.policies.Root\n metadata: {\n }\n description: |\n Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant\n Policy Types. This does NOT support the legacy Policy YAML policy type.\n onap.policies.controlloop.operational.common.Apex:\n properties:\n engineServiceParameters:\n name: engineServiceParameters\n type: string\n typeVersion: 0.0.0\n description: The engine parameters like name, instanceCount, policy\n implementation, parameters etc.\n required: true\n constraints: [\n ]\n metadata: {\n }\n eventOutputParameters:\n name: eventOutputParameters\n type: string\n typeVersion: 0.0.0\n description: The event output parameters.\n required: true\n constraints: [\n ]\n metadata: {\n }\n javaProperties:\n name: javaProperties\n type: string\n typeVersion: 0.0.0\n description: Name/value pairs of properties to be set for APEX if\n needed.\n required: false\n constraints: [\n ]\n metadata: {\n }\n eventInputParameters:\n name: eventInputParameters\n type: string\n typeVersion: 0.0.0\n description: The event input parameters.\n required: true\n constraints: [\n ]\n metadata: {\n }\n name: onap.policies.controlloop.operational.common.Apex\n version: 1.0.0\n derived_from: onap.policies.controlloop.operational.Common\n metadata: {\n }\n description: Operational policies for Apex PDP\ndata_types:\n onap.datatype.controlloop.Actor:\n constraints: [\n ]\n properties:\n payload:\n name: payload\n type: map\n typeVersion: 0.0.0\n description: Name/value pairs of payload information passed by Policy\n to the actor\n required: false\n constraints: [\n ]\n entry_schema:\n type: string\n typeVersion: 0.0.0\n constraints: [\n ]\n metadata:\n clamp_possible_values: ClampExecution:CDS/payload\n target:\n name: target\n type: onap.datatype.controlloop.Target\n typeVersion: 0.0.0\n description: The resource the operation should be performed on.\n required: true\n constraints: [\n ]\n metadata: {\n }\n actor:\n name: actor\n type: string\n typeVersion: 0.0.0\n description: The actor performing the operation.\n required: true\n constraints: [\n ]\n metadata:\n clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor\n operation:\n name: operation\n type: string\n typeVersion: 0.0.0\n description: The operation the actor is performing.\n required: true\n constraints: [\n ]\n metadata:\n clamp_possible_values: Dictionary:DefaultOperations, ClampExecution:CDS/operation\n name: onap.datatype.controlloop.Actor\n version: 0.0.0\n derived_from: tosca.datatypes.Root\n metadata: {\n }\n description: An actor/operation/target definition\n onap.datatype.controlloop.Operation:\n constraints: [\n ]\n properties:\n failure_retries:\n name: failure_retries\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the current operation\n has exceeded its max retries.\n default: final_failure_retries\n required: false\n constraints: [\n ]\n metadata: {\n }\n id:\n name: id\n type: string\n typeVersion: 0.0.0\n description: Unique identifier for the operation\n required: true\n constraints: [\n ]\n metadata: {\n }\n failure_timeout:\n name: failure_timeout\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the time out for\n the operation occurs.\n default: final_failure_timeout\n required: false\n constraints: [\n ]\n metadata: {\n }\n failure:\n name: failure\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke on Actor operation\n failure.\n default: final_failure\n required: false\n constraints: [\n ]\n metadata: {\n }\n operation:\n name: operation\n type: onap.datatype.controlloop.Actor\n typeVersion: 0.0.0\n description: The definition of the operation to be performed.\n required: true\n constraints: [\n ]\n metadata: {\n }\n failure_guard:\n name: failure_guard\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the current operation\n is blocked due to guard policy enforcement.\n default: final_failure_guard\n required: false\n constraints: [\n ]\n metadata: {\n }\n retries:\n name: retries\n type: integer\n typeVersion: 0.0.0\n description: The number of retries the actor should attempt to perform\n the operation.\n default: \'0\'\n required: true\n constraints: [\n ]\n metadata: {\n }\n timeout:\n name: timeout\n type: integer\n typeVersion: 0.0.0\n description: The amount of time for the actor to perform the operation.\n required: true\n constraints: [\n ]\n metadata: {\n }\n failure_exception:\n name: failure_exception\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke when the current operation\n causes an exception.\n default: final_failure_exception\n required: false\n constraints: [\n ]\n metadata: {\n }\n description:\n name: description\n type: string\n typeVersion: 0.0.0\n description: A user-friendly description of the intent for the operation\n required: false\n constraints: [\n ]\n metadata: {\n }\n success:\n name: success\n type: string\n typeVersion: 0.0.0\n description: Points to the operation to invoke on success. A value\n of \"final_success\" indicates and end to the operation.\n default: final_success\n required: false\n constraints: [\n ]\n metadata: {\n }\n name: onap.datatype.controlloop.Operation\n version: 0.0.0\n derived_from: tosca.datatypes.Root\n metadata: {\n }\n description: An operation supported by an actor\n onap.datatype.controlloop.Target:\n constraints: [\n ]\n properties:\n entityIds:\n name: entityIds\n type: map\n typeVersion: 0.0.0\n description: |\n Map of values that identify the resource. If none are provided, it is assumed that the\n entity that generated the ONSET event will be the target.\n required: false\n constraints: [\n ]\n entry_schema:\n type: string\n typeVersion: 0.0.0\n constraints: [\n ]\n metadata:\n clamp_possible_values: ClampExecution:CSAR_RESOURCES\n targetType:\n name: targetType\n type: string\n typeVersion: 0.0.0\n description: Category for the target type\n required: true\n constraints:\n - valid_values:\n - VNF\n - VM\n - VFMODULE\n - PNF\n metadata: {\n }\n name: onap.datatype.controlloop.Target\n version: 0.0.0\n derived_from: tosca.datatypes.Root\n metadata: {\n }\n description: Definition for a entity in A&AI to perform a control loop operation\n on\nname: ToscaServiceTemplateSimple\nversion: 1.0.0\nmetadata: {\n }\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"drools\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.controlloop.operational.common.Drools','1.0.0','Not found','2020-06-03 14:04:17.228336','Not found','2020-06-03 14:04:19.272538','Drools','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.controlloop.operational.common.Drools:\n derived_from: onap.policies.controlloop.operational.Common\n type_version: 1.0.0\n version: 1.0.0\n description: Operational policies for Drools PDP\n properties:\n controllerName:\n type: string\n description: Drools controller properties\n required: false\n onap.policies.controlloop.operational.Common:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: |\n Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant\n Policy Types. This does NOT support the legacy Policy YAML policy type.\n properties:\n id:\n type: string\n description: The unique control loop id.\n required: true\n timeout:\n type: integer\n description: |\n Overall timeout for executing all the operations. This timeout should equal or exceed the total\n timeout for each operation listed.\n required: true\n abatement:\n type: boolean\n description: Whether an abatement event message will be expected for\n the control loop from DCAE.\n required: true\n default: false\n trigger:\n type: string\n description: Initial operation to execute upon receiving an Onset\n event message for the Control Loop.\n required: true\n operations:\n type: list\n description: List of operations to be performed when Control Loop\n is triggered.\n required: true\n entry_schema:\n type: onap.datatype.controlloop.Operation\ndata_types:\n onap.datatype.controlloop.Target:\n derived_from: tosca.datatypes.Root\n description: Definition for a entity in A&AI to perform a control loop operation\n on\n properties:\n targetType:\n type: string\n description: Category for the target type\n required: true\n constraints:\n - valid_values:\n - VNF\n - VM\n - VFMODULE\n - PNF\n entityIds:\n type: map\n description: |\n Map of values that identify the resource. If none are provided, it is assumed that the\n entity that generated the ONSET event will be the target.\n required: false\n metadata:\n clamp_possible_values: ClampExecution:CSAR_RESOURCES\n entry_schema:\n type: string\n onap.datatype.controlloop.Actor:\n derived_from: tosca.datatypes.Root\n description: An actor/operation/target definition\n properties:\n actor:\n type: string\n description: The actor performing the operation.\n required: true\n metadata:\n clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor\n operation:\n type: string\n description: The operation the actor is performing.\n required: true\n metadata:\n clamp_possible_values: Dictionary:DefaultOperations, ClampExecution:CDS/operations\n target:\n type: onap.datatype.controlloop.Target\n description: The resource the operation should be performed on.\n required: true\n payload:\n type: map\n description: Name/value pairs of payload information passed by Policy\n to the actor\n required: false\n metadata:\n clamp_possible_values: ClampExecution:CDS/payload\n entry_schema:\n type: string\n onap.datatype.controlloop.Operation:\n derived_from: tosca.datatypes.Root\n description: An operation supported by an actor\n properties:\n id:\n type: string\n description: Unique identifier for the operation\n required: true\n description:\n type: string\n description: A user-friendly description of the intent for the operation\n required: false\n operation:\n type: onap.datatype.controlloop.Actor\n description: The definition of the operation to be performed.\n required: true\n timeout:\n type: integer\n description: The amount of time for the actor to perform the operation.\n required: true\n retries:\n type: integer\n description: The number of retries the actor should attempt to perform\n the operation.\n required: true\n default: 0\n success:\n type: string\n description: Points to the operation to invoke on success. A value\n of \"final_success\" indicates and end to the operation.\n required: false\n default: final_success\n failure:\n type: string\n description: Points to the operation to invoke on Actor operation\n failure.\n required: false\n default: final_failure\n failure_timeout:\n type: string\n description: Points to the operation to invoke when the time out for\n the operation occurs.\n required: false\n default: final_failure_timeout\n failure_retries:\n type: string\n description: Points to the operation to invoke when the current operation\n has exceeded its max retries.\n required: false\n default: final_failure_retries\n failure_exception:\n type: string\n description: Points to the operation to invoke when the current operation\n causes an exception.\n required: false\n default: final_failure_exception\n failure_guard:\n type: string\n description: Points to the operation to invoke when the current operation\n is blocked due to guard policy enforcement.\n required: false\n default: final_failure_guard\n','{\n \"supportedPdpGroups\": [\n {\n \"controlloop\": [\n \"drools\"\n ]\n }\n ]\n}'); +INSERT INTO `policy_models` VALUES ('onap.policies.monitoring.cdap.tca.hi.lo.app','1.0.0','Not found','2020-06-03 14:04:05.678714','Not found','2020-06-03 14:04:19.340805','app','tosca_definitions_version: tosca_simple_yaml_1_1_0\npolicy_types:\n onap.policies.Monitoring:\n derived_from: tosca.policies.Root\n version: 1.0.0\n description: a base policy type for all policies that govern monitoring provisioning\n onap.policies.monitoring.cdap.tca.hi.lo.app:\n derived_from: onap.policies.Monitoring\n version: 1.0.0\n properties:\n tca_policy:\n type: onap.datatypes.monitoring.tca_policy\n description: TCA Policy JSON\n required: true\ndata_types:\n onap.datatypes.monitoring.metricsPerEventName:\n derived_from: tosca.datatypes.Root\n properties:\n controlLoopSchemaType:\n type: string\n required: true\n description: Specifies Control Loop Schema Type for the event Name\n e.g. VNF, VM\n constraints:\n - valid_values:\n - VM\n - VNF\n eventName:\n type: string\n required: true\n description: Event name to which thresholds need to be applied\n policyName:\n type: string\n required: true\n description: TCA Policy Scope Name\n policyScope:\n type: string\n required: true\n description: TCA Policy Scope\n policyVersion:\n type: string\n required: true\n description: TCA Policy Scope Version\n thresholds:\n type: list\n required: true\n description: Thresholds associated with eventName\n entry_schema:\n type: onap.datatypes.monitoring.thresholds\n onap.datatypes.monitoring.tca_policy:\n derived_from: tosca.datatypes.Root\n properties:\n domain:\n type: string\n required: true\n description: Domain name to which TCA needs to be applied\n default: measurementsForVfScaling\n constraints:\n - equal: measurementsForVfScaling\n metricsPerEventName:\n type: list\n required: true\n description: Contains eventName and threshold details that need to\n be applied to given eventName\n entry_schema:\n type: onap.datatypes.monitoring.metricsPerEventName\n onap.datatypes.monitoring.thresholds:\n derived_from: tosca.datatypes.Root\n properties:\n closedLoopControlName:\n type: string\n required: true\n description: Closed Loop Control Name associated with the threshold\n closedLoopEventStatus:\n type: string\n required: true\n description: Closed Loop Event Status of the threshold\n constraints:\n - valid_values:\n - ONSET\n - ABATED\n direction:\n type: string\n required: true\n description: Direction of the threshold\n constraints:\n - valid_values:\n - LESS\n - LESS_OR_EQUAL\n - GREATER\n - GREATER_OR_EQUAL\n - EQUAL\n fieldPath:\n type: string\n required: true\n description: Json field Path as per CEF message which needs to be\n analyzed for TCA\n constraints:\n - valid_values:\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n - $.event.measurementsForVfScalingFields.meanRequestLatency\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n severity:\n type: string\n required: true\n description: Threshold Event Severity\n constraints:\n - valid_values:\n - CRITICAL\n - MAJOR\n - MINOR\n - WARNING\n - NORMAL\n thresholdValue:\n type: integer\n required: true\n description: Threshold value for the field Path inside CEF message\n version:\n type: string\n required: true\n description: Version number associated with the threshold\n','{\n \"supportedPdpGroups\": [\n {\n \"monitoring\": [\n \"xacml\"\n ]\n }\n ]\n}'); /*!40000 ALTER TABLE `policy_models` ENABLE KEYS */; UNLOCK TABLES; @@ -210,4 +210,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-05-12 22:40:19 +-- Dump completed on 2020-06-03 12:06:26 diff --git a/src/main/resources/META-INF/resources/swagger.html b/src/main/resources/META-INF/resources/swagger.html index 0c83b137e..3e71e0ac4 100644 --- a/src/main/resources/META-INF/resources/swagger.html +++ b/src/main/resources/META-INF/resources/swagger.html @@ -444,31 +444,31 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
      • 2. Paths @@ -743,7 +729,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

        1.2. URI scheme

        -

        Host : localhost:37033
        +

        Host : localhost:44217
        BasePath : /restservices/clds/
        Schemes : HTTP

        @@ -754,7 +740,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

        2. Paths

      • JsonObject

        legacy
        +optional

        boolean

        loop
        optional

        Loop

        @@ -791,7 +777,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -825,7 +811,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -862,7 +848,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -899,7 +885,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -971,7 +957,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1008,7 +994,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1070,7 +1056,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1148,7 +1134,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1207,7 +1193,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1272,7 +1258,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1346,7 +1332,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1418,7 +1404,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1467,7 +1453,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1529,7 +1515,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1566,7 +1552,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1628,7 +1614,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1696,7 +1682,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1764,7 +1750,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1844,7 +1830,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1906,7 +1892,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -1968,7 +1954,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2030,7 +2016,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        @@ -2075,75 +2061,13 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b - - - -

        200

        Output type

        string

        -
        -
        -

        2.23.3. Produces

        -
        -
          -
        • -

          application/xml

          -
        • -
        -
        -
        -
        -
        -

        2.24. PUT /v2/loop/undeploy/{loopName}

        -
        -

        2.24.1. Parameters

        - ----- - - - - - - - - - - - - - - -
        TypeNameSchema

        Path

        loopName
        -required

        string

        -
        -
        -

        2.24.2. Responses

        - ----- - - - - - - - - - - -
        HTTP CodeDescriptionSchema

        200

        Output type

        Loop

        -

        2.24.3. Produces

        +

        2.23.3. Produces

        • @@ -2154,9 +2078,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.25. POST /v2/loop/updateGlobalProperties/{loopName}

        +

        2.24. POST /v2/loop/updateGlobalProperties/{loopName}

        -

        2.25.1. Parameters

        +

        2.24.1. Parameters

        @@ -2187,7 +2111,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.25.2. Responses

        +

        2.24.2. Responses

        @@ -2211,7 +2135,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.25.3. Consumes

        +

        2.24.3. Consumes

        • @@ -2221,7 +2145,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.25.4. Produces

        +

        2.24.4. Produces

        • @@ -2232,9 +2156,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.26. POST /v2/loop/updateMicroservicePolicy/{loopName}

        +

        2.25. POST /v2/loop/updateMicroservicePolicy/{loopName}

        -

        2.26.1. Parameters

        +

        2.25.1. Parameters

        @@ -2265,7 +2189,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.26.2. Responses

        +

        2.25.2. Responses

        @@ -2289,7 +2213,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.26.3. Consumes

        +

        2.25.3. Consumes

        • @@ -2299,7 +2223,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.26.4. Produces

        +

        2.25.4. Produces

        • @@ -2310,9 +2234,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.27. POST /v2/loop/updateOperationalPolicies/{loopName}

        +

        2.26. POST /v2/loop/updateOperationalPolicies/{loopName}

        -

        2.27.1. Parameters

        +

        2.26.1. Parameters

        @@ -2343,7 +2267,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.27.2. Responses

        +

        2.26.2. Responses

        @@ -2367,7 +2291,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.27.3. Consumes

        +

        2.26.3. Consumes

        • @@ -2377,7 +2301,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.27.4. Produces

        +

        2.26.4. Produces

        • @@ -2388,9 +2312,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.28. GET /v2/loop/{loopName}

        +

        2.27. GET /v2/loop/{loopName}

        -

        2.28.1. Parameters

        +

        2.27.1. Parameters

        @@ -2415,7 +2339,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.28.2. Responses

        +

        2.27.2. Responses

        @@ -2439,7 +2363,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.28.3. Produces

        +

        2.27.3. Produces

        • @@ -2450,9 +2374,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.29. POST /v2/policyToscaModels

        +

        2.28. POST /v2/policyToscaModels

        -

        2.29.1. Parameters

        +

        2.28.1. Parameters

        @@ -2477,7 +2401,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.29.2. Responses

        +

        2.28.2. Responses

        @@ -2501,7 +2425,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.29.3. Consumes

        +

        2.28.3. Consumes

        • @@ -2511,7 +2435,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.29.4. Produces

        +

        2.28.4. Produces

        • @@ -2522,9 +2446,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.30. GET /v2/policyToscaModels

        +

        2.29. GET /v2/policyToscaModels

        -

        2.30.1. Responses

        +

        2.29.1. Responses

        @@ -2548,7 +2472,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.30.2. Produces

        +

        2.29.2. Produces

        • @@ -2559,9 +2483,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.31. GET /v2/policyToscaModels/yaml/{policyModelType}/{policyModelVersion}

        +

        2.30. GET /v2/policyToscaModels/yaml/{policyModelType}/{policyModelVersion}

        -

        2.31.1. Parameters

        +

        2.30.1. Parameters

        @@ -2592,7 +2516,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.31.2. Responses

        +

        2.30.2. Responses

        @@ -2616,7 +2540,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.31.3. Produces

        +

        2.30.3. Produces

        • @@ -2627,9 +2551,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.32. GET /v2/policyToscaModels/{policyModelType}/{policyModelVersion}

        +

        2.31. GET /v2/policyToscaModels/{policyModelType}/{policyModelVersion}

        -

        2.32.1. Parameters

        +

        2.31.1. Parameters

        @@ -2660,7 +2584,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.32.2. Responses

        +

        2.31.2. Responses

        @@ -2684,7 +2608,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.32.3. Produces

        +

        2.31.3. Produces

        • @@ -2695,9 +2619,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.33. PUT /v2/policyToscaModels/{policyModelType}/{policyModelVersion}

        +

        2.32. PUT /v2/policyToscaModels/{policyModelType}/{policyModelVersion}

        -

        2.33.1. Parameters

        +

        2.32.1. Parameters

        @@ -2734,7 +2658,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.33.2. Responses

        +

        2.32.2. Responses

        @@ -2758,7 +2682,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.33.3. Consumes

        +

        2.32.3. Consumes

        • @@ -2768,7 +2692,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.33.4. Produces

        +

        2.32.4. Produces

        • @@ -2779,9 +2703,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.34. GET /v2/templates

        +

        2.33. GET /v2/templates

        -

        2.34.1. Responses

        +

        2.33.1. Responses

        @@ -2805,7 +2729,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.34.2. Produces

        +

        2.33.2. Produces

        • @@ -2816,9 +2740,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.35. GET /v2/templates/names

        +

        2.34. GET /v2/templates/names

        -

        2.35.1. Responses

        +

        2.34.1. Responses

        @@ -2842,7 +2766,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.35.2. Produces

        +

        2.34.2. Produces

        • @@ -2853,9 +2777,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.36. GET /v2/templates/{templateName}

        +

        2.35. GET /v2/templates/{templateName}

        -

        2.36.1. Parameters

        +

        2.35.1. Parameters

        @@ -2880,7 +2804,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.36.2. Responses

        +

        2.35.2. Responses

        @@ -2904,7 +2828,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -

        2.36.3. Produces

        +

        2.35.3. Produces

        • @@ -2914,68 +2838,6 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
        -
        -

        2.37. GET /v2/templates/{templateName}/svgRepresentation

        -
        -

        2.37.1. Parameters

        - ----- - - - - - - - - - - - - - - -
        TypeNameSchema

        Path

        templateName
        -required

        string

        -
        -
        -

        2.37.2. Responses

        - ----- - - - - - - - - - - - - - - -
        HTTP CodeDescriptionSchema

        200

        Output type

        string

        -
        -
        -

        2.37.3. Produces

        -
        -
          -
        • -

          application/xml

          -
        • -
        -
        -
        -
        @@ -3791,11 +3653,6 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

        < OperationalPolicy > array

        -

        svgRepresentation
        -optional

        -

        string

        - -

        updatedBy
        optional

        string

        @@ -3987,11 +3844,6 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

        string

        -

        svgRepresentation
        -optional

        -

        string

        - -

        uniqueBlueprint
        optional

        boolean

        -- cgit 1.2.3-korg