aboutsummaryrefslogtreecommitdiffstats
path: root/controlloop/common/controller-usecases
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-06-03 09:26:33 -0400
committerJim Hahn <jrh3@att.com>2020-07-14 10:29:49 -0400
commite87b18923c23a1a0fbfaae1c75645a577b96c892 (patch)
tree5b7b0e4d52dca3f81b7c9add036b5f6816d5bf78 /controlloop/common/controller-usecases
parentc3879a50de6473b8673faa9f958a0c646a4b8ca9 (diff)
Remove usecases and legacy actor code
Made the following changes to remove usescase and legacy actor code: - deleted the usecases controller and feature - deleted code associated with legacy actors, with the exception of AaiManager, which is needed by RestControlLoopManager - moved the contents of the "guard" project into the m2/guard project, as that is the only thing that still needs it - modified the m2/GuardContext to get the name of its persistence unit from the properties so it could be overridden by junit tests - used eclipselink constants Also fixed a bug in the properties for the VFC actor. Addressed review comment: - removed usecases from Dockerfile Issue-ID: POLICY-2558 Change-Id: I677d68c9efed9247c3d55773abdcc736b577a6b4 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'controlloop/common/controller-usecases')
-rw-r--r--controlloop/common/controller-usecases/pom.xml236
-rw-r--r--controlloop/common/controller-usecases/src/main/resources/META-INF/kmodule.xml27
-rw-r--r--controlloop/common/controller-usecases/src/main/resources/usecases.drl1711
-rw-r--r--controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java120
-rw-r--r--controlloop/common/controller-usecases/src/test/resources/META-INF/persistence.xml43
-rw-r--r--controlloop/common/controller-usecases/src/test/resources/config/controlloop-system.properties21
-rw-r--r--controlloop/common/controller-usecases/src/test/resources/config/controlloop.properties.environment54
-rw-r--r--controlloop/common/controller-usecases/src/test/resources/config/usecases-controller.properties77
-rw-r--r--controlloop/common/controller-usecases/src/test/resources/usecases.pom30
9 files changed, 0 insertions, 2319 deletions
diff --git a/controlloop/common/controller-usecases/pom.xml b/controlloop/common/controller-usecases/pom.xml
deleted file mode 100644
index 5ab5d346e..000000000
--- a/controlloop/common/controller-usecases/pom.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ============LICENSE_START=======================================================
- ONAP
- ================================================================================
- Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
- Modifications Copyright (C) 2019 Nordix Foundation.
- Modifications Copyright (C) 2019-2020 Bell Canada.
- ================================================================================
- 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=========================================================
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
- <artifactId>drools-applications-common</artifactId>
- <version>1.7.1-SNAPSHOT</version>
- </parent>
-
- <artifactId>controller-usecases</artifactId>
- <packaging>kjar</packaging>
-
- <name>${project.artifactId}</name>
- <description>Usecases Experimental Controller</description>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.kie</groupId>
- <artifactId>kie-maven-plugin</artifactId>
- <extensions>true</extensions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>events</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>appc</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>appclcm</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>sdnr</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>vfc</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>sdnc</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>so</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>aai</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>sdc</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
- <artifactId>cds</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
- <artifactId>eventmanager</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
- <artifactId>guard</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actorServiceProvider</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actor.appc</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actor.appclcm</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actor.sdnr</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actor.so</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actor.vfc</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actor.sdnc</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
- <artifactId>actor.cds</artifactId>
- <version>${policy.models.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.models.policy-models-interactions</groupId>
- <artifactId>model-yaml</artifactId>
- <version>${policy.models.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.drools-pdp</groupId>
- <artifactId>policy-management</artifactId>
- <version>${version.policy.drools-pdp}</version>
- <scope>provided</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
- <artifactId>rules-test</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <profiles>
- <profile>
- <!--This profile is used to store Eclipse m2e settings only. It has no
- influence on the Maven build itself. -->
- <id>only-eclipse</id>
- <activation>
- <property>
- <name>m2e.version</name>
- </property>
- </activation>
- <build>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.eclipse.m2e</groupId>
- <artifactId>lifecycle-mapping</artifactId>
- <version>1.0.0</version>
- <configuration>
- <lifecycleMappingMetadata>
- <pluginExecutions>
- <pluginExecution>
- <pluginExecutionFilter>
- <groupId>org.kie</groupId>
- <artifactId>kie-maven-plugin</artifactId>
- <goals>
- <goal>build</goal>
- </goals>
- </pluginExecutionFilter>
- <action>
- <ignore />
- </action>
- </pluginExecution>
- </pluginExecutions>
- </lifecycleMappingMetadata>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
- </profile>
- </profiles>
-</project>
diff --git a/controlloop/common/controller-usecases/src/main/resources/META-INF/kmodule.xml b/controlloop/common/controller-usecases/src/main/resources/META-INF/kmodule.xml
deleted file mode 100644
index e1a23863a..000000000
--- a/controlloop/common/controller-usecases/src/main/resources/META-INF/kmodule.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ============LICENSE_START=======================================================
- ONAP
- ================================================================================
- Copyright (C) 2018-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=========================================================
- -->
-<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
- <kbase name="onap.policies.controlloop.operational.common.Drools" default="false" equalsBehavior="equality"/>
- <kbase name="onap.policies.controlloop.Operational" equalsBehavior="equality"
- packages="org.onap.policy.controlloop" includes="onap.policies.controlloop.operational.common.Drools">
- <ksession name="usecases"/>
- </kbase>
-</kmodule>
diff --git a/controlloop/common/controller-usecases/src/main/resources/usecases.drl b/controlloop/common/controller-usecases/src/main/resources/usecases.drl
deleted file mode 100644
index 95260fc91..000000000
--- a/controlloop/common/controller-usecases/src/main/resources/usecases.drl
+++ /dev/null
@@ -1,1711 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 Bell Canada.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.controlloop;
-
-import org.apache.commons.lang3.tuple.Pair;
-
-import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput;
-import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
-import org.onap.policy.controlloop.CanonicalOnset;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.controlloop.ControlLoopEventStatus;
-import org.onap.policy.controlloop.ControlLoopException;
-import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.onap.policy.controlloop.ControlLoopResponse;
-import org.onap.policy.controlloop.policy.PolicyResult;
-import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.controlloop.policy.Policy;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NewEventStatus;
-import org.onap.policy.controlloop.eventmanager.ControlLoopOperationManager;
-import org.onap.policy.controlloop.eventmanager.LockCallbackWorkingMemory;
-import org.onap.policy.controlloop.utils.ControlLoopUtils;
-import org.onap.policy.controlloop.actor.so.SoActor;
-import org.onap.policy.controlloop.actor.cds.CdsActor;
-import org.onap.policy.controlloop.actor.cds.CdsActor.CdsActorServiceManager;
-import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
-import org.onap.policy.aai.AaiCqResponse;
-import org.onap.policy.appc.Request;
-import org.onap.policy.appc.Response;
-import org.onap.policy.appc.CommonHeader;
-import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
-import org.onap.policy.cds.CdsResponse;
-import org.onap.policy.cds.client.CdsProcessorGrpcClient;
-import org.onap.policy.cds.properties.CdsServerProperties;
-import org.onap.policy.sdnr.PciRequestWrapper;
-import org.onap.policy.sdnr.PciResponseWrapper;
-import org.onap.policy.sdnr.PciRequest;
-import org.onap.policy.sdnr.PciResponse;
-import org.onap.policy.vfc.VfcRequest;
-import org.onap.policy.vfc.VfcResponse;
-import org.onap.policy.vfc.VfcManager;
-import org.onap.policy.so.SoManager;
-import org.onap.policy.so.SoRequest;
-import org.onap.policy.so.SoResponseWrapper;
-import org.onap.policy.sdnc.SdncRequest;
-import org.onap.policy.sdnc.SdncManager;
-import org.onap.policy.sdnc.SdncResponse;
-import org.onap.policy.drools.core.lock.Lock;
-import org.onap.policy.guard.PolicyGuardRequest;
-import org.onap.policy.guard.PolicyGuardResponse;
-import org.onap.policy.guard.PolicyGuardXacmlRequestAttributes;
-import org.onap.policy.guard.PolicyGuardXacmlHelper;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
-
-import org.slf4j.LoggerFactory;
-import org.slf4j.Logger;
-
-import java.time.Instant;
-import java.util.LinkedList;
-import java.util.Iterator;
-
-
-import org.onap.policy.drools.system.PolicyEngineConstants;
-
-/*
- * This object is to provide support for timeouts
- * due to a bug in drools' built-in timers
- */
-declare ControlLoopTimer
- closedLoopControlName : String
- requestId : String
- delay : String
- expired : boolean
- //timerType is the type of timer: either "ClosedLoop" or "Operation"
- timerType : String
-end
-
-/*
-*
-* Called when the ControlLoopParams object has been inserted into working memory from the BRMSGW.
-*
-*/
-rule "INSERT.PARAMS"
- when
- $params : ControlLoopParams()
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {} : TOSCA-POLICY=[{}]", $params.getClosedLoopControlName(), $params.getPolicyName() + "."
- + drools.getRule().getName(), $params.getToscaPolicy());
-end
-
-/*
-*
-* Called when a Tosca Policy is present.
-*
-*/
-rule "NEW.TOSCA.POLICY"
- when
- $policy : ToscaPolicy()
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: [{}|{}|{}|{}]: CONTENT: {}", drools.getRule().getName(),
- $policy.getType(), $policy.getTypeVersion(), $policy.getName(),
- $policy.getVersion(), $policy);
-
- ControlLoopParams params = ControlLoopUtils.toControlLoopParams($policy);
- if (params != null) {
- insert(params);
- }
-end
-
-/*
- * Remove Control Loop Parameters.
- */
-rule "REMOVE.PARAMS"
- when
- $params : ControlLoopParams( $policyName : getPolicyName(), $policyVersion : getPolicyVersion() )
- not ( ToscaPolicy( getName() == $policyName, getVersion() == $policyVersion ) )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: [{}|{}|{}]", drools.getRule().getName(),
- $params.getPolicyScope(), $params.getPolicyName(), $params.getPolicyVersion());
-
- retract($params);
-end
-
-/*
-*
-* This rule responds to DCAE Events where there is no manager yet. Either it is
-* the first ONSET, or a subsequent badly formed Event (i.e. Syntax error, or is-closed-loop-disabled)
-*
-*/
-rule "EVENT"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- not ( ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() ) )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
- try {
-
- //
- // Check the event, because we need it to not be null when
- // we create the ControlLoopEventManager. The ControlLoopEventManager
- // will do extra syntax checking as well check if the closed loop is disabled.
- //
- if ($event.getRequestId() == null) {
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.REJECTED);
- notification.setFrom("policy");
- notification.setMessage("Missing requestId");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- //
- // Let interested parties know
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- //
- // Retract it from memory
- //
- retract($event);
- } else {
- //
- // Create an EventManager
- //
- ControlLoopEventManager manager = new ControlLoopEventManager($clName, $event.getRequestId());
- //
- // Determine if EventManager can actively process the event
- // (i.e. syntax, is_closed_loop_disabled checks etc.)
- //
- VirtualControlLoopNotification notification = manager.activate($params.getToscaPolicy(), $event);
- notification.setFrom("pdp-0001-controller=controlloop"); // Engine.getInstanceName()
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- //
- // Are we actively pursuing this event?
- //
- if (notification.getNotification() == ControlLoopNotificationType.ACTIVE) {
- //
- // Insert Event Manager into memory, this will now kick off processing.
- //
- insert(manager);
- //
- // Let interested parties know
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Setup the Overall Control Loop timer
- //
- ControlLoopTimer clTimer = new ControlLoopTimer();
- clTimer.setTimerType("ClosedLoop");
- clTimer.setClosedLoopControlName($event.getClosedLoopControlName());
- clTimer.setRequestId($event.getRequestId().toString());
- clTimer.setDelay(manager.getControlLoopTimeout(1500) + "s");
- //
- // Insert it
- //
- insert(clTimer);
- } else {
- //
- // Let interested parties know
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Retract it from memory
- //
- retract($event);
- }
-
- //
- // Now that the manager is inserted into Drools working memory, we'll wait for
- // another rule to fire in order to continue processing. This way we can also
- // then screen for additional ONSET and ABATED events for this RequestId.
- //
- }
- } catch (Exception e) {
- logger.warn("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName(), e);
-
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.REJECTED);
- notification.setMessage("Exception occurred: " + e.getMessage());
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- //
- //
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Retract the event
- //
- retract($event);
- }
-end
-
-/*
-*
-* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager
-* is now created. We can start processing the yaml specification via the Event Manager.
-*
-*/
-rule "EVENT.MANAGER"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $clTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "ClosedLoop", !expired )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} clTimer={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $clTimer);
-
- try {
- //
- // Check which event this is.
- //
- ControlLoopEventManager.NewEventStatus eventStatus = $manager.onNewEvent($event);
- //
- // Check what kind of event this is
- //
- if (eventStatus == NewEventStatus.SUBSEQUENT_ONSET) {
- //
- // We don't care about subsequent onsets
- //
- logger.info("{}: {}: subsequent onset",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- retract($event);
- return;
- }
- if (eventStatus == NewEventStatus.SYNTAX_ERROR) {
- //
- // Ignore any bad syntax events
- //
- logger.warn("{}: {}: syntax error",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- retract($event);
- return;
- }
- //
- // We only want the initial ONSET event in memory,
- // all the other events need to be retracted to support
- // cleanup and avoid the other rules being fired for this event.
- //
- if (eventStatus != NewEventStatus.FIRST_ONSET) {
- logger.warn("{}: {}: no first onset",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- retract($event);
- }
-
- logger.debug("{}: {}: target={}", $clName,
- $params.getPolicyName() + "." + drools.getRule().getName(), $event.getTarget());
- //
- // Now start seeing if we need to process this event
- //
-
- //
- // Check if this is a Final Event
- //
- VirtualControlLoopNotification notification = $manager.isControlLoopFinal();
-
-
- if (notification != null) {
- //
- // Its final, but are we waiting for abatement?
- //
- if ($manager.getNumAbatements() > 0) {
- logger.info("{}: {}: abatement received for {}. Closing the control loop",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event.getRequestId());
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- //
- // In this case, we are done
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Unlock the target
- //
- Lock lock = $manager.unlockCurrentOperation();
- if(lock != null) {
- logger.debug("{}: {}.{}: retracting lock={}", $clName,
- $params.getPolicyName(), drools.getRule().getName(), lock);
- retract(lock);
- }
- //
- // Retract everything from memory
- //
- logger.info("{}: {}: retracting onset, manager, and timer",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
- retract($manager.getOnsetEvent());
-
- // don't retract manager, etc. - a clean-up rule will do that
-
- //
- // TODO - what if we get subsequent Events for this RequestId?
- // By default, it will all start over again. May be confusing for Ruby.
- // Or, we could track this and then subsequently ignore the events
- //
- } else {
- //
- // Check whether we need to wait for abatement
- //
- if ($manager.getProcessor().getControlLoop().getAbatement() == true && notification.getNotification() == ControlLoopNotificationType.FINAL_SUCCESS) {
- logger.info("{}: {}: waiting for abatement ..",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- } else {
- logger.info("{}: {}: no abatement expect for {}. Closing the control loop",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event.getRequestId());
-
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- //
- // In this case, we are done
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Unlock the target
- //
- Lock lock = $manager.unlockCurrentOperation();
- if(lock != null) {
- logger.debug("{}: {}.{}: retracting lock={}", $clName,
- $params.getPolicyName(), drools.getRule().getName(), lock);
- retract(lock);
- }
- //
- // Retract everything from memory
- //
- logger.info("{}: {}: retracting onset, manager, and timer",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
- retract($manager.getOnsetEvent());
-
- // don't retract manager, etc. - a clean-up rule will do that
- }
- }
- } else {
- //
- // NOT final, so let's ask for the next operation
- //
- ControlLoopOperationManager operation = $manager.processControlLoop();
- if (operation != null) {
- //
- // Let's ask for a lock right away
- //
- logger.info("{}: {}.{}: requesting lock for operation={}",
- $clName, $params.getPolicyName(), drools.getRule().getName(),
- operation);
-
- Pair<Lock,Lock> oldNew = $manager.lockCurrentOperation(
- new LockCallbackWorkingMemory($params.getClosedLoopControlName(), drools.getWorkingMemory()));
- if(oldNew.getLeft() != null) {
- logger.debug("{}: {}.{}: retracting lock={}", $clName,
- $params.getPolicyName(), drools.getRule().getName(), oldNew.getLeft());
- retract(oldNew.getLeft());
- }
- if(oldNew.getRight() != null) {
- logger.debug("{}: {}.{}: inserting lock={}", $clName,
- $params.getPolicyName(), drools.getRule().getName(), oldNew.getRight());
- insert(oldNew.getRight());
- }
-
- //
- // insert the operation into memory
- //
- insert(operation);
-
- //
- // insert operation timeout object
- //
- ControlLoopTimer opTimer = new ControlLoopTimer();
- opTimer.setTimerType("Operation");
- opTimer.setClosedLoopControlName($event.getClosedLoopControlName());
- opTimer.setRequestId($event.getRequestId().toString());
- Integer timeout = operation.getOperationTimeout();
- opTimer.setDelay(timeout > 0 ? timeout.toString() + "s" : $clTimer.getDelay());
- insert(opTimer);
-
- } else {
- //
- // Probably waiting for abatement
- //
- logger.info("{}: {}: no operation, probably waiting for abatement",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- }
- }
- } catch (Exception e) {
- logger.warn("{}: {}: unexpected",
- $clName,
- $params.getPolicyName() + "." + drools.getRule().getName(), e);
-
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
- notification.setMessage(e.getMessage());
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- retract($event);
-
- // don't retract manager, etc. - a clean-up rule will do that
- }
-
-end
-
-/*
-*
-* Lock denied
-*
-*/
-rule "EVENT.MANAGER.OPERATION.LOCK.DENIED"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId(), "None".equalsIgnoreCase(getGuardApprovalStatus()) )
- $lock : Lock (ownerKey == $event.getRequestId().toString(), isUnavailable())
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}.{}: event={} manager={} operation={} lock={}",
- $clName, $params.getPolicyName(), drools.getRule().getName(),
- $event, $manager, $operation, $lock);
-
- logger.debug("The target resource {} is already processing", $event.getAai().get($event.getTarget()));
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.REJECTED);
- notification.setMessage("The target " + $event.getAai().get($event.getTarget()) + " is already locked");
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- retract($event);
-
- // don't retract manager, etc. - a clean-up rule will do that
-end
-
-/*
-*
-* Guard Permitted, let's send request to the actor.
-*
-*/
-rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId(), "Permit".equalsIgnoreCase(getGuardApprovalStatus()) )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} operation={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation);
-
- Object request = null;
- boolean caughtException = false;
-
- try {
- request = $operation.startOperation($event);
-
- if (request != null) {
- logger.debug("{}: {}: starting operation ..",
- $clName,
- $params.getPolicyName() + "." + drools.getRule().getName());
- //
- // Tell interested parties we are performing this Operation
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.OPERATION);
- notification.setMessage($operation.getOperationMessage());
- notification.setHistory($operation.getHistory());
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- switch ($operation.policy.getActor()){
-
- case "APPC":
-
- if (request instanceof Request) {
- PolicyEngineConstants.getManager().deliver("APPC-CL", request);
- }
- else if (request instanceof AppcLcmDmaapWrapper) {
- PolicyEngineConstants.getManager().deliver("APPC-LCM-READ", request);
- }
- break;
- case "SO":
- // at this point the AAI named query request should have already been made, the response
- // recieved and used in the construction of the SO Request which is stored in operationRequest
-
- if(request instanceof SoRequest) {
- // Call SO. The response will be inserted into memory once it's received
- class mySoCallback implements SoManager.SoCallback {
- public void onSoResponseWrapper(SoResponseWrapper wrapper) {
- drools.getWorkingMemory().insert(wrapper);
- }
- }
- SoActor.sendRequest($event.getRequestId().toString(),
- new mySoCallback(),
- request,
- PolicyEngineConstants.getManager().getEnvironmentProperty("so.url"),
- PolicyEngineConstants.getManager().getEnvironmentProperty("so.username"),
- PolicyEngineConstants.getManager().getEnvironmentProperty("so.password"));
- }
- break;
- case "VFC":
- if (request instanceof VfcRequest) {
- class myVfcCallback implements VfcManager.VfcCallback {
-
- public void onResponse(VfcResponse responseError) {
- drools.getWorkingMemory().insert(responseError);
- }
- };
- // Start VFC thread
- Thread t = new Thread(new VfcManager(new myVfcCallback(),
- (VfcRequest)request,
- PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.url"),
- PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.username"),
- PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.password")));
- t.start();
- }
- break;
- case "SDNR":
- if (request instanceof PciRequestWrapper) {
- PolicyEngineConstants.getManager().deliver("SDNR-CL", request);
- }
- break;
-
- case "SDNC":
- if (request instanceof SdncRequest) {
- class mySdncCallback implements SdncManager.SdncCallback {
- public void onCallback(SdncResponse response) {
- drools.getWorkingMemory().insert(response);
- }
- }
- // Start SDNC thread
- Thread t = new Thread(new SdncManager(new mySdncCallback(),
- (SdncRequest)request,
- PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.url"),
- PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.username"),
- PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.password")));
- t.start();
- }
- break;
-
- case "CDS":
-
- if(request instanceof ExecutionServiceInput) {
-
- // Instantiate cds actor, service manager and grpc properties
-
- CdsActor cdsActor = new CdsActor();
- CdsActor.CdsActorServiceManager cdsActorServiceManager = cdsActor.new CdsActorServiceManager();
-
- CdsServerProperties props = new CdsServerProperties();
- props.setHost(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcHost"));
- props.setPort(Integer.parseInt(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcPort")));
- props.setUsername(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcUsername"));
- props.setPassword(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcPassword"));
- props.setTimeout(Integer.parseInt(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcTimeout")));
-
- // Send cds grpc request
- try (CdsProcessorGrpcClient client = new CdsProcessorGrpcClient(cdsActorServiceManager, props)) {
- CdsResponse response =
- cdsActorServiceManager.sendRequestToCds(client, props, (ExecutionServiceInput) request);
- logger.info("CDS response: {}", response);
- insert(response);
- }
- }
- break;
- }
- } else {
- //
- // What happens if its null?
- //
- logger.warn("{}: {}: unexpected null operation request",
- $clName,
- $params.getPolicyName() + "." + drools.getRule().getName());
- if ("SO".equals($operation.policy.getActor())) {
- retract($opTimer);
- retract($operation);
- modify($manager) {finishOperation($operation)};
- }
- else if ("vfc".equalsIgnoreCase($operation.policy.getActor())) {
- retract($opTimer);
- retract($operation);
- modify($manager) {finishOperation($operation)};
- }
- else if ("sdnc".equalsIgnoreCase($operation.policy.getActor())) {
- retract($opTimer);
- retract($operation);
- modify($manager) {finishOperation($operation)};
- }
- }
-
- } catch (Exception e) {
- String msg = e.getMessage();
- logger.warn("{}: {}: operation={}: AAI failure: {}",
- $clName,
- $params.getPolicyName() + "." + drools.getRule().getName(),
- $operation, msg, e);
- $operation.setOperationHasException(msg);
-
- if(request != null) {
- //
- // Create a notification for it ("DB Write - end operation")
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
-
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- }
-
- retract($opTimer);
- retract($operation);
- caughtException = true;
- }
-
- // Having the modify statement in the catch clause doesn't work for whatever reason
- if (caughtException) {
- modify($manager) {finishOperation($operation)};
- }
-end
-
-
-/*
-*
-* We were able to acquire a lock so now let's ask Xacml Guard whether
-* we are allowed to proceed with the request to the actor.
-*
-*/
-rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId(), "None".equalsIgnoreCase(getGuardApprovalStatus()) )
- $lock : Lock (ownerKey == $event.getRequestId().toString(), isActive())
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} operation={} lock={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $lock);
-
- //
- // Sending notification that we are about to query Guard ("DB write - start operation")
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.OPERATION);
- notification.setMessage("Sending guard query for " + $operation.policy.getActor() + " "
- + $operation.policy.getRecipe());
- notification.setHistory($operation.getHistory());
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- //
- // Now send Guard Request to XACML Guard. In order to bypass the call to Guard,
- // just change guardEnabled to false.
- //
- // In order to use REST XACML, provide a URL instead of "" as a second argument
- // to the CallGuardTask() and set the first argument to null
- // (instead of XacmlPdpEngine).
- //
-
- // NOTE: The environment properties uses "guard.disabled" but the boolean is guardEnabled
- boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngineConstants.getManager().getEnvironmentProperty("guard.disabled"));
-
- if(guardEnabled){
-
- Thread t = new Thread(new org.onap.policy.guard.CallGuardTask(
- drools.getWorkingMemory(),
- $event.getClosedLoopControlName(),
- $operation.policy.getActor().toString(),
- $operation.policy.getRecipe(),
- $operation.getTargetEntity(),
- $event.getRequestId().toString(),
- () -> {
- try {
- AaiCqResponse resp_cq = $manager.getCqResponse($event);
- if (resp_cq == null){
- return null;
- } else {
- String custId = $operation.policy.getTarget().getModelCustomizationId();
- String invId = $operation.policy.getTarget().getModelInvariantId();
- String verId = $operation.policy.getTarget().getModelVersionId();
- return resp_cq.getVfModuleCount(custId, invId, verId);
- }
- } catch (Exception e){
- logger.warn("{}: {}", $params.getClosedLoopControlName(), drools.getRule().getName(), e);
- }
- return null;
- }));
- t.start();
- }
- else{
- insert(new PolicyGuardResponse("Permit", $event.getRequestId(), $operation.policy.getRecipe()));
- }
-
-end
-
-//
-// This rule will be triggered when a thread talking to the XACML Guard inserts a
-// guardResponse object into the working memory
-//
-rule "GUARD.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $guardResponse : PolicyGuardResponse(requestId == $event.getRequestId(), $operation.policy.recipe == operation)
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} operation={} opTimer={} guardResponse={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $opTimer, $guardResponse);
-
-
- //we will permit the operation if there was no Guard for it
- if("Indeterminate".equalsIgnoreCase($guardResponse.getResult())){
- $guardResponse.setResult("Permit");
- }
-
- //
- // This notification has Guard result in "message". ("DB write - end operation in case of Guard Deny")
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.OPERATION);
- notification.setMessage("Guard result for " + $operation.policy.getActor() + " " + $operation.policy.getRecipe()
- + " is " + $guardResponse.getResult());
- notification.setHistory($operation.getHistory());
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- if("Permit".equalsIgnoreCase($guardResponse.getResult())){
-
- modify($operation){setGuardApprovalStatus($guardResponse.getResult())};
- }
- else {
- //This is the Deny case
- $operation.startOperation($event);
- $operation.setOperationHasGuardDeny();
- retract($opTimer);
- retract($operation);
- modify($manager) {finishOperation($operation)};
- }
-
- retract($guardResponse);
-
-end
-
-/*
-*
-* This rule responds to APPC Response Events
-*
-* I would have like to be consistent and write the Response like this:
-* $response : Response( CommonHeader.RequestId == $onset.getRequestId() )
-*
-* However, no compile error was given. But a runtime error was given. I think
-* because drools is confused between the classname CommonHeader vs the property CommonHeader.
-*
-*/
-rule "APPC.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $response : Response( getCommonHeader().RequestId == $event.getRequestId() )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $opTimer, $response);
- //
- // Get the result of the operation
- //
- PolicyResult policyResult = $operation.onResponse($response);
- if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- policyResult);
- //
- // This Operation has completed, construct a notification showing our results. (DB write - end operation)
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- if (policyResult.equals(PolicyResult.SUCCESS)) {
- notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
- //
- // Let interested parties know
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- } else {
- notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
- //
- // Let interested parties know
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- }
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete() == true) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- //
- retract($opTimer);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
- } else {
- //
- // Its not finished yet (i.e. expecting more Response objects)
- //
- // Or possibly it is a leftover response that we timed the request out previously
- //
- }
- //
- // We are going to retract these objects from memory
- //
- retract($response);
-end
-
-/*
-*
-* The problem with Responses is that they don't have a controlLoopControlName
-* field in them, so the only way to attach them is via RequestId. If we have multiple
-* control loop .drl's loaded in the same container, we need to be sure the cleanup
-* rules don't remove Responses for other control loops.
-*
-*/
-rule "APPC.RESPONSE.CLEANUP"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $response : Response($id : getCommonHeader().RequestId )
- not ( CanonicalOnset( requestId == $id ) )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: orphan appc response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
-
- //
- // Retract it
- //
- retract($response);
-end
-
-/*
-*
-* This rule responds to APPC Response Events using the new LCM interface provided by appc
-*
-*/
-rule "APPC.LCM.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $response : AppcLcmDmaapWrapper( getBody().getOutput().getCommonHeader().getRequestId() == $event.getRequestId() )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $operation, $opTimer, $response);
-
- //
- // Get the result of the operation
- //
- PolicyResult policyResult = $operation.onResponse($response);
- if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- policyResult);
-
- //
- // This Operation has completed, construct a notification showing our results. (DB write - end operation)
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- if (policyResult.equals(PolicyResult.SUCCESS)) {
- notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
- } else {
- notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
- }
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete() == true) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- //
- retract($opTimer);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
- } else {
- //
- // Its not finished yet (i.e. expecting more Response objects)
- //
- // Or possibly it is a leftover response that we timed the request out previously
- //
- }
- //
- // We are going to retract these objects from memory
- //
- retract($response);
-end
-
-/*
-*
-* Clean Up any lingering LCM reponses
-*
-*/
-rule "APPC.LCM.RESPONSE.CLEANUP"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $response : AppcLcmDmaapWrapper($id : getBody().getOutput().getCommonHeader().getRequestId() )
- not ( CanonicalOnset( requestId == $id ) )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: orphan appc response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
- //
- // Retract it
- //
- retract($response);
-end
-
-/*
-*
-* This rule responds to SO Response Events
-*
-*/
-rule "SO.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $response : SoResponseWrapper(requestId.toString() == $event.getRequestId().toString() )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $operation, $opTimer, $response);
-
- // Get the result of the operation
- //
- PolicyResult policyResult = $operation.onResponse($response);
- if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- policyResult);
-
- //
- // This Operation has completed, construct a notification showing our results
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- if (policyResult.equals(PolicyResult.SUCCESS)) {
- notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
- } else {
- notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
-
- }
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete() == true) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- //
- retract($opTimer);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
- } else {
- //
- // Its not finished yet (i.e. expecting more Response objects)
- //
- // Or possibly it is a leftover response that we timed the request out previously
- //
- }
- //
- // We are going to retract these objects from memory
- //
- retract($response);
-
-end
-
-/*
-*
-* This rule responds to VFC Response Events
-*
-*/
-rule "VFC.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $response : VfcResponse( requestId.toString() == $event.getRequestId().toString() )
- then
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $operation, $opTimer, $response);
-
- // Get the result of the operation
- //
- PolicyResult policyResult = $operation.onResponse($response);
- if (policyResult != null) {
- //
- // This Operation has completed, construct a notification showing our results
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete() == true) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- //
- retract($opTimer);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
- } else {
- //
- // Its not finished yet (i.e. expecting more Response objects)
- //
- // Or possibly it is a leftover response that we timed the request out previously
- //
- }
- //
- // We are going to retract these objects from memory
- //
- retract($response);
-
-end
-
-/*
-*
-* This rule responds to SDNC Response Events
-*
-*/
-rule "SDNC.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $response : SdncResponse( requestId.toString() == $event.getRequestId().toString() )
- then
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $operation, $opTimer, $response);
-
- // Get the result of the operation
- //
- PolicyResult policyResult = $operation.onResponse($response);
- if (policyResult != null) {
- //
- // This Operation has completed, construct a notification showing our results
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete()) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- //
- retract($opTimer);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
- } else {
- //
- // Its not finished yet (i.e. expecting more Response objects)
- //
- // Or possibly it is a leftover response that we timed the request out previously
- //
- }
- //
- // We are going to retract these objects from memory
- //
- retract($response);
-
-end
-
-
-/**
- * This rule responds to CDS Response Events
- */
-rule "${policyName}.CDS.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $params.getClosedLoopControlName() )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $response : CdsResponse( requestId == $event.getRequestId().toString() )
-
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $params.getClosedLoopControlName(), drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
- $params.getClosedLoopControlName(), drools.getRule().getName(),
- $event, $manager, $operation, $operation, $opTimer, $response);
-
- // Get the result of the operation
- PolicyResult policyResult = $operation.onResponse($response);
-
- if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
- $params.getClosedLoopControlName(), drools.getRule().getName(),
- policyResult);
-
- // The operation has completed, construct a notification showing our results
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName(drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- notification.setNotification(
- ($response != null && CdsActorConstants.SUCCESS.equals($response.getStatus()))
- ? ControlLoopNotificationType.OPERATION_SUCCESS : ControlLoopNotificationType.OPERATION_FAILURE);
-
- // Send the notification
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- // Ensure the operation is complete
- if ($operation.isOperationComplete()) {
-
- // It is complete, remove it from memory
- retract($operation);
-
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- retract($opTimer);
-
- // Complete the operation
- modify($manager) {finishOperation($operation)};
-
- } else {
- // Just doing this will kick off the LOCKED rule again
- modify($operation) {};
- }
- } else {
- // Its not finished yet (i.e. expecting more Response objects)
- // Or possibly it is a leftover response that we timed the request out previously
- logger.info(
- "policyResult is null"
- + "\nIt's not finished yet (i.e. expecting more Response objects)"
- + "\nOr possibly it is a leftover response that we timed the request out previously");
- }
-
- // We are going to retract these objects from memory
- retract($response);
-
-end
-
-/*
-/*
-*
-* This manages a single timer.
-* Due to a bug in the drools code, the drools timer needed to be split from most of the objects in the when clause
-*
-*/
-rule "TIMER.FIRED"
- timer (expr: $timeout)
- when
- $timer : ControlLoopTimer($timeout : delay, !expired)
- then
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("This is TIMER.FIRED");
- modify($timer){setExpired(true)};
- end
-
-/*
-*
-* This is the timer that manages the timeout for an individual operation.
-*
-*/
-rule "EVENT.MANAGER.OPERATION.TIMEOUT"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", expired )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $operation, $opTimer);
-
- //
- // Tell it its timed out
- //
- $operation.setOperationHasTimedOut();
- //
- // Create a notification for it ("DB Write - end operation")
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- //
- // Let interested parties know
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- //
- // Get rid of the timer
- //
- retract($opTimer);
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete() == true) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
-end
-
-/*
-*
-* This is the timer that manages the overall control loop timeout.
-*
-*/
-rule "EVENT.MANAGER.TIMEOUT"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $clTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "ClosedLoop", expired )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
- logger.debug("{}: {}: event={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event);
- //
- // Tell the Event Manager it has timed out
- //
- VirtualControlLoopNotification notification = $manager.setControlLoopTimedOut();
- if (notification != null) {
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- //
- // Let interested parties know
- //
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
- }
- //
- // Retract the event
- //
- retract($event);
-end
-
-/*
-*
-* This rule cleans up the manager and other objects after an event has
-* been retracted.
-*
-*/
-rule "EVENT.MANAGER.CLEANUP"
- when
- $manager : ControlLoopEventManager( $clName : getClosedLoopControlName(), $requestId : getRequestId() )
- $operations : LinkedList()
- from collect( ControlLoopOperationManager( onset.closedLoopControlName == $clName,
- onset.getRequestId() == $requestId ) )
- $timers : LinkedList()
- from collect( ControlLoopTimer( closedLoopControlName == $clName,
- requestId == $requestId.toString() ) )
- not( VirtualControlLoopEvent( closedLoopControlName == $clName, requestId == $requestId ) )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, drools.getRule().getName());
-
- logger.debug("{}: {}: manager={} timers={} operations={}",
- $clName, drools.getRule().getName(),
- $manager, $timers.size(), $operations.size());
-
- //
- // Retract lock by invoking unlock()
- //
- Lock lock = $manager.unlockCurrentOperation();
- if(lock != null) {
- retract(lock);
- }
-
- //
- // Retract EVERYTHING
- //
- retract($manager);
-
- for(Object manager: $operations) {
- retract((ControlLoopOperationManager) manager);
- }
- for(Object timer: $timers) {
- retract((ControlLoopTimer) timer);
- }
-end
-
-/*
-*
-* This rule will clean up any rogue onsets where there is no
-* ControlLoopParams object corresponding to the onset event.
-*
-*/
-rule "EVENT.CLEANUP"
- when
- $event : VirtualControlLoopEvent( $clName: closedLoopControlName )
- not ( ControlLoopParams( getClosedLoopControlName() == $clName) )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, drools.getRule().getName());
- logger.debug("{}: {}: orphan onset event={}",
- $clName, drools.getRule().getName(), $event);
-
- retract($event);
-end
-
-/*
-*
-* This rule responds to SDNR Response Events.
-*
-*/
-rule "SDNR.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : CanonicalOnset( closedLoopControlName == $clName )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
- onset.getRequestId() == $event.getRequestId() )
- $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
- $response : PciResponseWrapper( getBody().getCommonHeader().getRequestId() == $event.getRequestId() )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $operation, $opTimer, $response);
-
- //
- // Get the result of the operation
- //
- PolicyResult policyResult = $operation.onResponse($response);
- if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- policyResult);
-
- //
- // This Operation has completed, construct a notification showing our results. (DB write - end operation)
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- if (policyResult.equals(PolicyResult.SUCCESS)) {
- notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
- } else {
- notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
- }
- PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
- ControlLoopResponse clResponse = $operation.getControlLoopResponse($response, $event);
- PolicyEngineConstants.getManager().deliver("DCAE_CL_RSP", clResponse);
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete() == true) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- //
- retract($opTimer);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
- } else {
- //
- // Its not finished yet (i.e. expecting more Response objects)
- //
- // Or possibly it is a leftover response that we timed the request out previously
- //
- }
- //
- // We are going to retract these objects from memory
- //
- retract($response);
-end
-
-/*
-*
-* Clean Up any lingering SDNR reponses.
-*
-*/
-rule "SDNR.RESPONSE.CLEANUP"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $response : PciResponseWrapper($id : getBody().getCommonHeader().getRequestId )
- not ( CanonicalOnset( requestId == $id ) )
- then
-
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: orphan sdnr response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
- //
- // Retract it
- //
- retract($response);
-end
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java
deleted file mode 100644
index 1250dc80f..000000000
--- a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * 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.policy.controlloop;
-
-import lombok.Getter;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.runner.RunWith;
-import org.onap.policy.controlloop.common.rules.test.BaseRuleTest;
-import org.onap.policy.controlloop.common.rules.test.Listener;
-import org.onap.policy.controlloop.common.rules.test.NamedRunner;
-import org.onap.policy.controlloop.common.rules.test.TestNames;
-import org.onap.policy.drools.utils.PropertyUtil;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.simulators.Util;
-
-/**
- * Tests use case rules. Only a subset of available tests will work with these rules, thus
- * a "FilterRunner" is used to filter out the other test cases.
- *
- * <p/>
- * Note: this only runs tests whose names start with "testV" (e.g., testVcpe(),
- * testVdns()).
- */
-@RunWith(NamedRunner.class)
-@TestNames(prefixes = {"testV"})
-
-public class UsecasesTest extends BaseRuleTest {
-
- @Getter()
- protected static final String CONTROLLER_NAME = "usecases";
-
- /**
- * Sets up statics.
- */
- @BeforeClass
- public static void setUpBeforeClass() {
- initStatics(CONTROLLER_NAME);
-
- rules.configure("src/main/resources");
- PropertyUtil.setSystemProperties(rules.getPdpdRepo().getSystemProperties("controlloop"));
- rules.getPdpd().setEnvironment(rules.getPdpdRepo().getEnvironmentProperties("controlloop.properties"));
-
- rules.start();
- simulators.start(Util::buildAaiSim, Util::buildSoSim, Util::buildVfcSim, Util::buildGuardSim,
- Util::buildSdncSim);
- }
-
- /**
- * Cleans up statics.
- */
- @AfterClass
- public static void tearDownAfterClass() {
- finishStatics();
- }
-
- /**
- * Sets up.
- */
- @Before
- public void setUp() {
- init();
- }
-
- /**
- * Tears down.
- */
- @After
- public void tearDown() {
- finish();
- }
-
- @Override
- protected void waitForLockAndPermit(ToscaPolicy policy, Listener<VirtualControlLoopNotification> policyClMgt) {
- String policyName = policy.getIdentifier().getName();
-
- policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.ACTIVE
- && (policyName + ".EVENT").equals(notif.getPolicyName()));
-
- policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
- && (policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED")
- .equals(notif.getPolicyName()));
-
- policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
- && (policyName + ".GUARD.RESPONSE").equals(notif.getPolicyName())
- && notif.getMessage().startsWith("Guard result") && notif.getMessage().endsWith("Permit"));
-
- policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
- && (policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED")
- .equals(notif.getPolicyName()));
- }
-
- @Override
- protected VirtualControlLoopNotification waitForFinal(ToscaPolicy policy,
- Listener<VirtualControlLoopNotification> policyClMgt, ControlLoopNotificationType finalType) {
-
- return policyClMgt.await(notif -> notif.getNotification() == finalType
- && (notif.getPolicyName().contains(policy.getIdentifier().getName() + ".EVENT.MANAGER")));
- }
-}
diff --git a/controlloop/common/controller-usecases/src/test/resources/META-INF/persistence.xml b/controlloop/common/controller-usecases/src/test/resources/META-INF/persistence.xml
deleted file mode 100644
index 5589713be..000000000
--- a/controlloop/common/controller-usecases/src/test/resources/META-INF/persistence.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ============LICENSE_START=======================================================
- drools-applications
- ================================================================================
- 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=========================================================
- -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
-
- <!-- In-mem DB for junit -->
- <persistence-unit name="OperationsHistoryPUTest" transaction-type="RESOURCE_LOCAL">
- <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
- <class>org.onap.policy.guard.OperationsHistory</class>
-
- <properties>
- <property name="eclipselink.ddl-generation" value="create-tables" />
- <property name="eclipselink.logging.level" value="INFO" />
- <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
- <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
- <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb;DATABASE_TO_UPPER=FALSE" />
- <property name="javax.persistence.jdbc.user" value="policy" />
- <property name="javax.persistence.jdbc.password" value="P01icY" />
- <property name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
- <property name="javax.persistence.schema-generation.create-source" value="metadata" />
- </properties>
- </persistence-unit>
-
-</persistence>
diff --git a/controlloop/common/controller-usecases/src/test/resources/config/controlloop-system.properties b/controlloop/common/controller-usecases/src/test/resources/config/controlloop-system.properties
deleted file mode 100644
index ff6658526..000000000
--- a/controlloop/common/controller-usecases/src/test/resources/config/controlloop-system.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# ============LICENSE_START=======================================================
-# ONAP
-# ================================================================================
-# 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=========================================================
-#
-
-OperationsHistoryPU=OperationsHistoryPUTest \ No newline at end of file
diff --git a/controlloop/common/controller-usecases/src/test/resources/config/controlloop.properties.environment b/controlloop/common/controller-usecases/src/test/resources/config/controlloop.properties.environment
deleted file mode 100644
index d0b5448c4..000000000
--- a/controlloop/common/controller-usecases/src/test/resources/config/controlloop.properties.environment
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# ============LICENSE_START=======================================================
-# ONAP
-# ================================================================================
-# Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
-# Modifications Copyright (C) 2019 Bell Canada.
-# ================================================================================
-# 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=========================================================
-#
-
-sql.db.host=
-sql.db.username=
-sql.db.password=
-
-aai.url=http://localhost:6666
-aai.username=AAI
-aai.password=AAI
-
-so.url=http://localhost:6667
-so.username=SO
-so.password=SO
-
-vfc.url=http://localhost:6668/api/nslcm/v1
-vfc.username=VFC
-vfc.password=VFC
-
-pdpx.host=localhost
-pdpx.username=pdpx
-pdpx.password=pdpx
-
-guard.url=http://localhost:6669/policy/pdpx/v1/decision
-guard.jdbc.url=jdbc:mariadb://localhost:3306/operationshistory
-guard.disabled=false
-
-sdnc.url=sdnc
-sdnc.username=sdnc
-sdnc.password=sdnc
-
-cds.grpcHost=localhost
-cds.grpcPort=7878
-cds.grpcUsername=grpc-username
-cds.grpcPassword=grpc-password
-cds.grpcTimeout=10 \ No newline at end of file
diff --git a/controlloop/common/controller-usecases/src/test/resources/config/usecases-controller.properties b/controlloop/common/controller-usecases/src/test/resources/config/usecases-controller.properties
deleted file mode 100644
index a8d202cd5..000000000
--- a/controlloop/common/controller-usecases/src/test/resources/config/usecases-controller.properties
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# ============LICENSE_START=======================================================
-# ONAP
-# ================================================================================
-# Copyright (C) 2019-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=========================================================
-#
-
-controller.name=usecases
-
-rules.groupId=org.onap.policy.controlloop
-rules.artifactId=usecases
-rules.version=1.0.0
-
-noop.source.topics=DCAE_TOPIC,APPC-CL,APPC-LCM-WRITE,SDNR-CL-RSP,POLICY-CL-MGT,APPC-LCM-READ,SDNR-CL,DCAE_CL_RSP
-
-noop.source.topics.DCAE_TOPIC.events=\
- org.onap.policy.controlloop.CanonicalOnset,org.onap.policy.controlloop.CanonicalAbated
-noop.source.topics.DCAE_TOPIC.events.org.onap.policy.controlloop.CanonicalOnset.\
- filter=[?($.closedLoopEventStatus == 'ONSET')]
-noop.source.topics.DCAE_TOPIC.events.org.onap.policy.controlloop.CanonicalAbated.\
- filter=[?($.closedLoopEventStatus == 'ABATED')]
-noop.source.topics.DCAE_TOPIC.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gson
-
-noop.source.topics.APPC-CL.events=org.onap.policy.appc.Response,org.onap.policy.appc.Request
-noop.source.topics.APPC-CL.events.org.onap.policy.appc.Response.filter=[?($.CommonHeader && $.Status)]
-noop.source.topics.APPC-CL.events.org.onap.policy.appc.Request.filter=[?($.CommonHeader && $.Action)]
-noop.source.topics.APPC-CL.events.custom.gson=org.onap.policy.appc.util.Serialization,gsonPretty
-
-noop.source.topics.APPC-LCM-WRITE.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-noop.source.topics.APPC-LCM-WRITE.events.org.onap.policy.appclcm.AppcLcmDmaapWrapper.filter=[?($.type == 'response')]
-noop.source.topics.APPC-LCM-WRITE.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-noop.source.topics.SDNR-CL-RSP.events=org.onap.policy.sdnr.PciResponseWrapper
-noop.source.topics.SDNR-CL-RSP.events.org.onap.policy.sdnr.PciResponseWrapper.filter=[?($.type == 'response')]
-noop.source.topics.SDNR-CL-RSP.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-noop.source.topics.POLICY-CL-MGT.events=org.onap.policy.controlloop.VirtualControlLoopNotification
-noop.source.topics.POLICY-CL-MGT.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-noop.source.topics.APPC-LCM-READ.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-noop.source.topics.APPC-LCM-READ.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-noop.source.topics.SDNR-CL.events=org.onap.policy.sdnr.PciRequestWrapper
-noop.source.topics.SDNR-CL.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-noop.source.topics.DCAE_CL_RSP.events=org.onap.policy.controlloop.ControlLoopResponse
-noop.source.topics.DCAE_CL_RSP.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-noop.sink.topics=APPC-CL,APPC-LCM-READ,POLICY-CL-MGT,SDNR-CL,DCAE_CL_RSP
-
-noop.sink.topics.APPC-CL.events=org.onap.policy.appc.Request
-noop.sink.topics.APPC-CL.events.custom.gson=org.onap.policy.appc.util.Serialization,gsonPretty
-
-noop.sink.topics.APPC-LCM-READ.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-noop.sink.topics.APPC-LCM-READ.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-noop.sink.topics.POLICY-CL-MGT.events=org.onap.policy.controlloop.VirtualControlLoopNotification
-noop.sink.topics.POLICY-CL-MGT.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-noop.sink.topics.SDNR-CL.events=org.onap.policy.sdnr.PciRequestWrapper
-noop.sink.topics.SDNR-CL.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-noop.sink.topics.DCAE_CL_RSP.events=org.onap.policy.controlloop.ControlLoopResponse
-noop.sink.topics.DCAE_CL_RSP.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
diff --git a/controlloop/common/controller-usecases/src/test/resources/usecases.pom b/controlloop/common/controller-usecases/src/test/resources/usecases.pom
deleted file mode 100644
index aebbf3e68..000000000
--- a/controlloop/common/controller-usecases/src/test/resources/usecases.pom
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ============LICENSE_START=======================================================
- ONAP
- ================================================================================
- 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=========================================================
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>org.onap.policy.controlloop</groupId>
- <artifactId>usecases</artifactId>
- <version>1.0.0</version>
-</project> \ No newline at end of file