aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/clamp/clamp/clamp.rst2
-rw-r--r--docs/clamp/controlloop/design-impl/clamp-controlloop-runtime.rst248
-rw-r--r--docs/clamp/controlloop/design-impl/participants/participant-intermediary.rst118
-rw-r--r--docs/clamp/controlloop/design-impl/participants/participant-simulator.rst15
-rw-r--r--docs/clamp/controlloop/design-impl/participants/swagger/participant-sim.json478
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_metrics_after_72h.txt173
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_metrics_before_72h.txt173
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_perf_jmeter_results.JPGbin0 -> 139518 bytes
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_s3p_logs.zipbin8364 -> 0 bytes
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_s3p_results.zipbin2245749 -> 0 bytes
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_stability_jmeter_results.JPGbin0 -> 171549 bytes
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_top_after_72h.JPGbin0 -> 51328 bytes
-rw-r--r--docs/development/devtools/apex-s3p-results/apex_top_before_72h.JPGbin0 -> 72787 bytes
-rw-r--r--docs/development/devtools/apex-s3p.rst219
-rw-r--r--docs/development/devtools/api-s3p-results/api-response-time-distribution_I.pngbin0 -> 614064 bytes
-rw-r--r--docs/development/devtools/api-s3p-results/api-response-time-distribution_performance_I.pngbin0 -> 646005 bytes
-rw-r--r--docs/development/devtools/api-s3p-results/api-response-time-overtime_I.pngbin0 -> 1015620 bytes
-rw-r--r--docs/development/devtools/api-s3p-results/api-response-time-overtime_performance_I.pngbin0 -> 1079769 bytes
-rw-r--r--docs/development/devtools/api-s3p-results/api-s3p-jm-1_I.pngbin0 -> 842239 bytes
-rw-r--r--docs/development/devtools/api-s3p-results/api-s3p-jm-2_I.pngbin0 -> 825434 bytes
-rw-r--r--docs/development/devtools/api-s3p-results/api_top_after_72h.JPGbin0 -> 734132 bytes
-rw-r--r--docs/development/devtools/api-s3p-results/api_top_before_72h.JPGbin0 -> 708386 bytes
-rw-r--r--docs/development/devtools/api-s3p.rst38
-rw-r--r--docs/development/devtools/clamp-cl-participant-protocol-smoke.rst144
-rw-r--r--docs/development/devtools/clamp-s3p-results/Stability_after_stats.pngbin0 -> 24482 bytes
-rw-r--r--docs/development/devtools/clamp-s3p-results/Stability_before_stats.pngbin0 -> 24290 bytes
-rw-r--r--docs/development/devtools/clamp-s3p-results/cl-s3p-performance-result-jmeter.pngbin0 -> 62523 bytes
-rw-r--r--docs/development/devtools/clamp-s3p-results/controlloop_stability_jmeter.pngbin0 -> 81751 bytes
-rw-r--r--docs/development/devtools/clamp-s3p-results/controlloop_stability_table.pngbin0 -> 216697 bytes
-rw-r--r--docs/development/devtools/clamp-s3p.rst197
-rw-r--r--docs/development/devtools/devtools.rst10
-rw-r--r--docs/development/devtools/distribution-s3p.rst216
-rw-r--r--docs/development/devtools/drools-s3p.rst175
-rwxr-xr-xdocs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-monitor.pngbin50243 -> 0 bytes
-rwxr-xr-xdocs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-threads.pngbin68058 -> 0 bytes
-rw-r--r--docs/development/devtools/images/apex-s3p-vvm-sample.jpgbin147909 -> 0 bytes
-rw-r--r--docs/development/devtools/images/apex_perf_jm_1.PNGbin91204 -> 0 bytes
-rw-r--r--docs/development/devtools/images/apex_perf_jm_2.PNGbin222814 -> 0 bytes
-rw-r--r--docs/development/devtools/images/apex_s3p_jm-1.pngbin39898 -> 0 bytes
-rw-r--r--docs/development/devtools/images/apex_s3p_jm-2.pngbin166975 -> 0 bytes
-rw-r--r--docs/development/devtools/images/dist_perf_statistics.PNGbin48205 -> 0 bytes
-rw-r--r--docs/development/devtools/images/dist_perf_threshold.PNGbin26252 -> 0 bytes
-rw-r--r--docs/development/devtools/images/distribution/dist_stability_monitor.PNG (renamed from docs/development/devtools/images/dist_stability_monitor.PNG)bin81517 -> 81517 bytes
-rw-r--r--docs/development/devtools/images/distribution/dist_stability_statistics.PNG (renamed from docs/development/devtools/images/dist_stability_statistics.PNG)bin53205 -> 53205 bytes
-rw-r--r--docs/development/devtools/images/distribution/dist_stability_threads.PNG (renamed from docs/development/devtools/images/dist_stability_threads.PNG)bin77025 -> 77025 bytes
-rw-r--r--docs/development/devtools/images/distribution/dist_stability_threshold.PNG (renamed from docs/development/devtools/images/dist_stability_threshold.PNG)bin28238 -> 28238 bytes
-rw-r--r--docs/development/devtools/images/distribution/distribution-s3p-testplan.png (renamed from docs/development/devtools/images/distribution-s3p-testplan.png)bin53609 -> 53609 bytes
-rw-r--r--docs/development/devtools/images/distribution/distribution-s3p-vvm-sample.png (renamed from docs/development/devtools/images/distribution-s3p-vvm-sample.png)bin139259 -> 139259 bytes
-rw-r--r--docs/development/devtools/images/distribution/performance-monitor.pngbin0 -> 27349 bytes
-rw-r--r--docs/development/devtools/images/distribution/performance-statistics.pngbin0 -> 93384 bytes
-rwxr-xr-xdocs/development/devtools/images/distribution/performance-threads.pngbin0 -> 43635 bytes
-rw-r--r--docs/development/devtools/images/distribution/performance-threshold.pngbin0 -> 62947 bytes
-rw-r--r--docs/development/devtools/images/frankfurt/apex_s3p_jm-1.pngbin149789 -> 0 bytes
-rw-r--r--docs/development/devtools/images/frankfurt/apex_s3p_jm-2.pngbin311321 -> 0 bytes
-rw-r--r--docs/development/devtools/images/frankfurt/apex_s3p_vm-1.pngbin176069 -> 0 bytes
-rw-r--r--docs/development/devtools/images/frankfurt/apex_s3p_vm-2.pngbin146018 -> 0 bytes
-rw-r--r--docs/development/devtools/images/gui/ChangeState.pngbin0 -> 46354 bytes
-rw-r--r--docs/development/devtools/images/gui/CommissioningMessageOnParticipant.pngbin0 -> 262986 bytes
-rw-r--r--docs/development/devtools/images/gui/CommissioningModal.pngbin0 -> 32450 bytes
-rw-r--r--docs/development/devtools/images/gui/CommissioningUpload.pngbin0 -> 178005 bytes
-rw-r--r--docs/development/devtools/images/gui/CommonPropertiesModal.pngbin0 -> 85152 bytes
-rw-r--r--docs/development/devtools/images/gui/CreateInstancePropsModal.pngbin0 -> 171771 bytes
-rw-r--r--docs/development/devtools/images/gui/InstanceUninitialised.pngbin0 -> 141431 bytes
-rw-r--r--docs/development/devtools/images/gui/ManageInstancesModal.pngbin0 -> 102277 bytes
-rw-r--r--docs/development/devtools/images/gui/PassiveState.pngbin0 -> 129266 bytes
-rw-r--r--docs/development/devtools/images/gui/PolicySuccess.pngbin0 -> 53489 bytes
-rw-r--r--docs/development/devtools/images/gui/PolicyTypeNotPresent.pngbin0 -> 26727 bytes
-rw-r--r--docs/development/devtools/images/gui/PolicyTypeSuccess.pngbin0 -> 39730 bytes
-rw-r--r--docs/development/devtools/images/gui/ViewEditedCommonProperties.pngbin0 -> 163809 bytes
-rw-r--r--docs/development/devtools/images/pap-s3p-mem-at.pngbin0 -> 10689 bytes
-rw-r--r--docs/development/devtools/images/pap-s3p-mem-bt.pngbin0 -> 20106 bytes
-rw-r--r--docs/development/devtools/images/pap-s3p-performance-result-jmeter.pngbin0 -> 269858 bytes
-rw-r--r--docs/development/devtools/images/pap-s3p-stability-result-jmeter.pngbin0 -> 276802 bytes
-rw-r--r--docs/development/devtools/pap-s3p.rst29
-rw-r--r--docs/development/devtools/policy-gui-controlloop-smoke.rst277
-rw-r--r--docs/development/devtools/tosca/tosca-for-gui-smoke-tests.yaml2986
-rw-r--r--docs/release-notes.rst344
77 files changed, 5551 insertions, 291 deletions
diff --git a/docs/clamp/clamp/clamp.rst b/docs/clamp/clamp/clamp.rst
index 186d9c09..ddb1de61 100644
--- a/docs/clamp/clamp/clamp.rst
+++ b/docs/clamp/clamp/clamp.rst
@@ -12,4 +12,4 @@ CLAMP supports the definition, deployment, and life cycle management of control
clamp-architecture
clamp-description
- user-guide \ No newline at end of file
+ user-guide
diff --git a/docs/clamp/controlloop/design-impl/clamp-controlloop-runtime.rst b/docs/clamp/controlloop/design-impl/clamp-controlloop-runtime.rst
index 5bea627f..0077b3de 100644
--- a/docs/clamp/controlloop/design-impl/clamp-controlloop-runtime.rst
+++ b/docs/clamp/controlloop/design-impl/clamp-controlloop-runtime.rst
@@ -5,4 +5,250 @@
The CLAMP Control Loop Runtime
##############################
-To be completed.
+.. contents::
+ :depth: 3
+
+
+This article explains how CLAMP Control Loop Runtime is implemented.
+
+Terminology
+***********
+- Broadcast message: a message for all participants (participantId=null and participantType=null)
+- Message to a participant: a message only for a participant (participantId and participantType properly filled)
+- ThreadPoolExecutor: ThreadPoolExecutor executes the given task, into SupervisionAspect class is configured to execute tasks in ordered manner, one by one
+- Spring Scheduling: into SupervisionAspect class, the @Scheduled annotation invokes "schedule()" method every "runtime.participantParameters.heartBeatMs" milliseconds with a fixed delay
+- MessageIntercept: "@MessageIntercept" annotation is used into SupervisionHandler class to intercept "handleParticipantMessage" method calls using spring aspect oriented programming
+- GUI: graphical user interface, Postman or a Front-End Application
+
+Design of Rest Api
+******************
+
+Create of a Control Loop Type
++++++++++++++++++++++++++++++
+- GUI calls POST "/commission" endpoint with a Control Loop Type Definition (Tosca Service Template) as body
+- CL-runtime receives the call by Rest-Api (CommissioningController)
+- It saves to DB the Tosca Service Template using PolicyModelsProvider
+- if there are participants registered, it triggers the execution to send a broadcast PARTICIPANT_UPDATE message
+- the message is built by ParticipantUpdatePublisher using Tosca Service Template data (to fill the list of ParticipantDefinition)
+
+Delete of a Control Loop Type
++++++++++++++++++++++++++++++
+- GUI calls DELETE "/commission" endpoint
+- CL-runtime receives the call by Rest-Api (CommissioningController)
+- if there are participants registered, CL-runtime triggers the execution to send a broadcast PARTICIPANT_UPDATE message
+- the message is built by ParticipantUpdatePublisher with an empty list of ParticipantDefinition
+- It deletes the Control Loop Type from DB
+
+Create of a Control Loop
+++++++++++++++++++++++++
+- GUI calls POST "/instantiation" endpoint with a Control Loop as body
+- CL-runtime receives the call by Rest-Api (InstantiationController)
+- It validates the Control Loop
+- It saves the Control Loop to DB
+- Design of an update of a Control Loop
+- GUI calls PUT "/instantiation" endpoint with a Control Loop as body
+- CL-runtime receives the call by Rest-Api (InstantiationController)
+- It validates the Control Loop
+- It saves the Control Loop to DB
+
+Delete of a Control Loop
+++++++++++++++++++++++++
+- GUI calls DELETE "/instantiation" endpoint
+- CL-runtime receives the call by Rest-Api (InstantiationController)
+- It checks that Control Loop is in UNINITIALISED status
+- It deletes the Control Loop from DB
+
+"issues control loop commands to control loops"
++++++++++++++++++++++++++++++++++++++++++++++++
+
+case **UNINITIALISED to PASSIVE**
+
+- GUI calls "/instantiation/command" endpoint with PASSIVE as orderedState
+- CL-runtime checks if participants registered are matching with the list of control Loop Element
+- It updates control loop and control loop elements to DB (orderedState = PASSIVE)
+- It validates the status order issued
+- It triggers the execution to send a broadcast CONTROL_LOOP_UPDATE message
+- the message is built by ControlLoopUpdatePublisher using Tosca Service Template data and ControlLoop data. (with startPhase = 0)
+- It updates control loop and control loop elements to DB (state = UNINITIALISED2PASSIVE)
+
+case **PASSIVE to UNINITIALISED**
+
+- GUI calls "/instantiation/command" endpoint with UNINITIALISED as orderedState
+- CL-runtime checks if participants registered are matching with the list of control Loop Element
+- It updates control loop and control loop elements to DB (orderedState = UNINITIALISED)
+- It validates the status order issued
+- It triggers the execution to send a broadcast CONTROL_LOOP_STATE_CHANGE message
+- the message is built by ControlLoopStateChangePublisher with controlLoopId
+- It updates control loop and control loop elements to DB (state = PASSIVE2UNINITIALISED)
+
+case **PASSIVE to RUNNING**
+
+- GUI calls "/instantiation/command" endpoint with RUNNING as orderedState
+- CL-runtime checks if participants registered are matching with the list of control Loop Element.
+- It updates control loop and control loop elements to DB (orderedState = RUNNING)
+- It validates the status order issued
+- It triggers the execution to send a broadcast CONTROL_LOOP_STATE_CHANGE message
+- the message is built by ControlLoopStateChangePublisher with controlLoopId
+- It updates control loop and control loop elements to DB (state = PASSIVE2RUNNING)
+
+case **RUNNING to PASSIVE**
+
+- GUI calls "/instantiation/command" endpoint with UNINITIALISED as orderedState
+- CL-runtime checks if participants registered are matching with the list of control Loop Element
+- It updates control loop and control loop elements to db (orderedState = RUNNING)
+- It validates the status order issued
+- It triggers the execution to send a broadcast CONTROL_LOOP_STATE_CHANGE message
+- the message is built by ControlLoopStateChangePublisher with controlLoopId
+- It updates control loop and control loop elements to db (state = RUNNING2PASSIVE)
+
+StartPhase
+**********
+The startPhase is particularly important in control loop update and control loop state changes because sometime the user wishes to control the order in which the state changes in Control Loop Elements in a control loop.
+
+How to define StartPhase
+++++++++++++++++++++++++
+StartPhase is defined as shown below in the Definition of TOSCA fundamental Control Loop Types yaml file.
+
+.. code-block:: YAML
+
+ startPhase:
+ type: integer
+ required: false
+ constraints:
+ - greater-or-equal: 0
+ description: A value indicating the start phase in which this control loop element will be started, the
+ first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
+ in reverse start phase order. Control Loop Elements with the same start phase are started and
+ stopped simultaneously
+ metadata:
+ common: true
+
+The "common: true" value in the metadata of the startPhase property identifies that property as being a common property.
+This property will be set on the CLAMP GUI during control loop commissioning.
+Example where it could be used:
+
+.. code-block:: YAML
+
+ org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement:
+ # Consul http config for PMSH.
+ version: 1.2.3
+ type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the http requests of PMSH microservice
+ properties:
+ provider: ONAP
+ participant_id:
+ name: HttpParticipant0
+ version: 1.0.0
+ participantType:
+ name: org.onap.k8s.controlloop.HttpControlLoopParticipant
+ version: 2.3.4
+ uninitializedToPassiveTimeout: 180
+ startPhase: 1
+
+How StartPhase works
+++++++++++++++++++++
+In state changes from UNITITIALISED → PASSIVE, control loop elements are started in increasing order of their startPhase.
+
+Example with Http_PMSHMicroserviceControlLoopElement with startPhase to 1 and PMSH_K8SMicroserviceControlLoopElement with startPhase to 0
+
+- CL-runtime sends a broadcast CONTROL_LOOP_UPDATE message to all participants with startPhase = 0
+- participant receives the CONTROL_LOOP_UPDATE message and runs to PASSIVE state (only CL elements defined as startPhase = 0)
+- CL-runtime receives CONTROL_LOOP_UPDATE_ACT messages from participants and set the state (from the CL element of the message) to PASSIVE
+- CL-runtime calculates that all CL elements with startPhase = 0 are set to proper state and sends a broadcast CONTROL_LOOP_UPDATE message with startPhase = 1
+- participant receives the CONTROL_LOOP_UPDATE message and runs to PASSIVE state (only CL elements defined as startPhase = 1)
+- CL-runtime calculates that all CL elements are set to proper state and set CL to PASSIVE
+
+In that scenario the message CONTROL_LOOP_UPDATE has been sent two times.
+
+Design of managing messages
+***************************
+
+PARTICIPANT_REGISTER
+++++++++++++++++++++
+- A participant starts and send a PARTICIPANT_REGISTER message
+- ParticipantRegisterListener collects the message from DMaap
+- if not present, it saves participant reference with status UNKNOWN to DB
+- if is present a Control Loop Type, it triggers the execution to send a PARTICIPANT_UPDATE message to the participant registered (message of Priming)
+- the message is built by ParticipantUpdatePublisher using Tosca Service Template data (to fill the list of ParticipantDefinition)
+- It triggers the execution to send a PARTICIPANT_REGISTER_ACK message to the participant registered
+- MessageIntercept intercepts that event, if PARTICIPANT_UPDATE message has been sent, it will be add a task to handle PARTICIPANT_REGISTER in SupervisionScanner
+- SupervisionScanner starts the monitoring for participantUpdate
+
+PARTICIPANT_UPDATE_ACK
+++++++++++++++++++++++
+- A participant sends PARTICIPANT_UPDATE_ACK message in response to a PARTICIPANT_UPDATE message
+- ParticipantUpdateAckListener collects the message from DMaap
+- MessageIntercept intercepts that event and adds a task to handle PARTICIPANT_UPDATE_ACK in SupervisionScanner
+- SupervisionScanner removes the monitoring for participantUpdate
+- It updates the status of the participant to DB
+
+PARTICIPANT_STATUS
+++++++++++++++++++
+- A participant sends a scheduled PARTICIPANT_STATUS message
+- ParticipantStatusListener collects the message from DMaap
+- MessageIntercept intercepts that event and adds a task to handle PARTICIPANT_STATUS in SupervisionScanner
+- SupervisionScanner clears and starts the monitoring for participantStatus
+
+CONTROLLOOP_UPDATE_ACK
+++++++++++++++++++++++
+- A participant sends CONTROLLOOP_UPDATE_ACK message in response to a CONTROLLOOP_UPDATE message. It will send a CONTROLLOOP_UPDATE_ACK - for each CL-elements moved to the ordered state as indicated by the CONTROLLOOP_UPDATE
+- ControlLoopUpdateAckListener collects the message from DMaap
+- It checks the status of all control loop elements and checks if the control loop is primed
+- It updates the CL to DB if it is changed
+- MessageIntercept intercepts that event and adds a task to handle a monitoring execution in SupervisionScanner
+
+CONTROLLOOP_STATECHANGE_ACK
++++++++++++++++++++++++++++
+Design of a CONTROLLOOP_STATECHANGE_ACK is similar to the design for CONTROLLOOP_UPDATE_ACK
+
+Design of monitoring execution in SupervisionScanner
+****************************************************
+Monitoring is designed to process the follow operations:
+
+- to determine the next startPhase in a CONTROLLOOP_UPDATE message
+- to update CL state: in a scenario that "ControlLoop.state" is in a kind of transitional state (example UNINITIALISED2PASSIVE), if all - CL-elements are moved properly to the specific state, the "ControlLoop.state" will be updated to that and saved to DB
+- to retry CONTROLLOOP_UPDATE/CONTROL_LOOP_STATE_CHANGE messages. if there is a CL Element not in the proper state, it will retry a broadcast message
+- to retry PARTICIPANT_UPDATE message to the participant in a scenario that CL-runtime do not receive PARTICIPANT_UPDATE_ACT from it
+- to send PARTICIPANT_STATUS_REQ to the participant in a scenario that CL-runtime do not receive PARTICIPANT_STATUS from it
+
+The solution Design of retry, timeout, and reporting for all Participant message dialogues are implemented into the monitoring execution.
+
+- Spring Scheduling inserts the task to monitor retry execution into ThreadPoolExecutor
+- ThreadPoolExecutor executes the task
+- a message will be retry if CL-runtime do no receive Act message before MaxWaitMs milliseconds
+
+Design of Exception handling
+****************************
+GlobalControllerExceptionHandler
+++++++++++++++++++++++++++++++++
+If error occurred during the Rest Api call, CL-runtime responses with a proper status error code and a JSON message error.
+This class is implemented to intercept and handle ControlLoopException, PfModelException and PfModelRuntimeException if they are thrown during the Rest Ali calls.
+All of those classes must implement ErrorResponseInfo that contains message error and status response code.
+So the Exception is converted in JSON message.
+
+RuntimeErrorController
+++++++++++++++++++++++
+If wrong end-point is called or an Exception not intercepted by GlobalControllerExceptionHandler, CL-runtime responses with a proper status error code and a JSON message error.
+This class is implemented to redirect the standard Web error page to a JSON message error.
+Typically that happen when a wrong end-point is called, but also could be happen for not authorized call, or any other Exception not intercepted by GlobalControllerExceptionHandler.
+
+Handle version and "X-ONAP-RequestID"
+*************************************
+RequestResponseLoggingFilter class handles version and "X-ONAP-RequestID" during a Rest-Api call; it works as a filter, so intercepts the Rest-Api and adds to the header those information.
+
+Media Type Support
+******************
+CL-runtime Rest Api supports **application/json**, **application/yaml** and **text/plain** Media Types. The configuration is implemented in CoderHttpMesageConverter.
+
+application/json
+++++++++++++++++
+JSON format is a standard for Rest Api. For the conversion from JSON to Object and vice-versa will be used **org.onap.policy.common.utils.coder.StandardCoder**.
+
+application/yaml
+++++++++++++++++
+YAML format is a standard for Control Loop Type Definition. For the conversion from YAML to Object and vice-versa will be used **org.onap.policy.common.utils.coder.StandardYamlCoder**.
+
+text/plain
+++++++++++
+Text format is used by Prometheus. For the conversion from Object to String will be used **StringHttpMessageConverter**.
diff --git a/docs/clamp/controlloop/design-impl/participants/participant-intermediary.rst b/docs/clamp/controlloop/design-impl/participants/participant-intermediary.rst
index 7f6cf499..a483dfc3 100644
--- a/docs/clamp/controlloop/design-impl/participants/participant-intermediary.rst
+++ b/docs/clamp/controlloop/design-impl/participants/participant-intermediary.rst
@@ -10,4 +10,120 @@ state handling for participant implementations. It provides a Java API, which pa
implementations implement to receive and send messages to the CLAMP runtime and to handle
Control Loop Element state.
-.. warning:: To be completed
+Terminology
+-----------
+- Broadcast message: a message for all participants (participantId=null and participantType=null)
+- Message to a participant: a message only for a participant (participantId and participantType properly filled)
+- MessageSender: a class that takes care of sending messages from participant-intermediary
+- GUI: graphical user interface, Postman or a Front-End Application
+
+Inbound messages to participants
+--------------------------------
+- PARTICIPANT_REGISTER_ACK: received as a response from controlloop runtime server as an acknowledgement to ParticipantRegister message sent from a participant
+- PARTICIPANT_DEREGISTER_ACK: received as a response from controlloop runtime server as an acknowledgement to ParticipantDeregister message sent from a participant
+- CONTROL_LOOP_STATE_CHANGE: a message received from controlloop runtime server for a state change of controlloop
+- CONTROL_LOOP_UPDATE: a message received from controlloop runtime server for a controlloop update with controlloop instances
+- PARTICIPANT_UPDATE: a message received from controlloop runtime server for a participant update with tosca definitions of controlloop
+- PARTICIPANT_STATUS_REQ: A status request received from controlloop runtime server to send an immediate ParticipantStatus from all participants
+
+Outbound messages
+-----------------
+- PARTICIPANT_REGISTER: is sent by a participant during startup
+- PARTICIPANT_DEREGISTER: is sent by a participant during shutdown
+- PARTICIPANT_STATUS: is sent by a participant as heartbeat with the status and health of a participant
+- CONTROLLOOP_STATECHANGE_ACK: is an acknowledgement sent by a participant as a response to ControlLoopStateChange
+- CONTROLLOOP_UPDATE_ACK: is an acknowledgement sent by a participant as a response to ControlLoopUpdate
+- PARTICIPANT_UPDATE_ACK: is an acknowledgement sent by a participant as a response to ParticipantUpdate
+
+Design of a PARTICIPANT_REGISTER message
+----------------------------------------
+- A participant starts and send a PARTICIPANT_REGISTER message
+- ParticipantRegisterListener collects the message from DMaap
+- if participant is not present in DB, it saves participant reference with status UNKNOWN to DB
+- if participant is present in DB, it triggers the execution to send a PARTICIPANT_UPDATE message to the participant registered (message of Priming)
+- the message is built by ParticipantUpdatePublisher using Tosca Service Template data (to fill the list of ParticipantDefinition)
+- It triggers the execution to send a PARTICIPANT_REGISTER_ACK message to the participant registered
+- MessageIntercept intercepts that event, if PARTICIPANT_UPDATE message has been sent, it will be add a task to handle PARTICIPANT_REGISTER in SupervisionScanner
+- SupervisionScanner starts the monitoring for participantUpdate
+
+Design of a PARTICIPANT_DEREGISTER message
+------------------------------------------
+- A participant starts and send a PARTICIPANT_DEREGISTER message
+- ParticipantDeregisterListener collects the message from DMaap
+- if participant is not present in DB, do nothing
+- if participant is present in DB, it triggers the execution to send a PARTICIPANT_UPDATE message to the participant registered (message of DePriming)
+- the message is built by ParticipantUpdatePublisher using Tosca Service Template data as null
+- ParticipantHandler removes the tosca definitions stored
+- It triggers the execution to send a PARTICIPANT_DEREGISTER_ACK message to the participant registered
+- Participant is not monitored.
+
+Design of a creation of a Control Loop Type
+-------------------------------------------
+- If there are participants registered with CL-runtime, it triggers the execution to send a broadcast PARTICIPANT_UPDATE message
+- the message is built by ParticipantUpdatePublisher using Tosca Service Template data (to fill the list of ParticipantDefinition)
+- Participant-intermediary will receive a PARTICIPANT_UDPATE message and stores the Tosca Service Template data on ParticipantHandler
+
+Design of a deletion of a Control Loop Type
+-------------------------------------------
+- if there are participants registered, CL-runtime triggers the execution to send a broadcast PARTICIPANT_UPDATE message
+- the message is built by ParticipantUpdatePublisher with an empty list of ParticipantDefinition
+- It deletes the Control Loop Type from DB
+- Participant-intermediary will receive a PARTICIPANT_UDPATE message and deletes the Tosca Service Template data on ParticipantHandler
+
+Design of a creation of a Control Loop
+--------------------------------------
+- CONTROL_LOOP_UPDATE message with instantiation details and UNINITIALISED state is sent to participants
+- Participant-intermediary validates the current state change
+- Participant-intermediary will recieve CONTROL_LOOP_UPDATE message and sends the details of ControlLoopElements to participants
+- Each participant performs its designated job of deployment by interacting with respective frameworks
+
+Design of a deletion of a Control Loop
+--------------------------------------
+- CONTROL_LOOP_STATE_CHANGE message with UNINITIALISED state is sent to participants
+- Participant-intermediary validates the current state change
+- Participant-intermediary will recieve CONTROL_LOOP_STATE_CHANGE message and sends the details of ControlLoopElements to participants
+- Each participant performs its designated job of undeployment by interacting with respective frameworks
+
+Design of "issues control loop commands to control loops" - case UNINITIALISED to PASSIVE
+-----------------------------------------------------------------------------------------
+- CONTROL_LOOP_STATE_CHANGE message with state changed from UNINITIALISED to PASSIVE is sent to participants
+- Participant-intermediary validates the current state change
+- Participant-intermediary will recieve CONTROL_LOOP_STATE_CHANGE message and sends the details of state change to participants
+- Each participant performs its designated job of state change by interacting with respective frameworks
+
+Design of "issues control loop commands to control loops" - case PASSIVE to UNINITIALISED
+-----------------------------------------------------------------------------------------
+- CONTROL_LOOP_STATE_CHANGE message with state changed from PASSIVE to UNINITIALISED is sent to participants
+- Participant-intermediary validates the current state change
+- Participant-intermediary will recieve CONTROL_LOOP_STATE_CHANGE message and sends the details of state change to participants
+- Each participant performs its designated job of state change by interacting with respective frameworks
+
+Design of "issues control loop commands to control loops" - case PASSIVE to RUNNING
+-----------------------------------------------------------------------------------
+- CONTROL_LOOP_STATE_CHANGE message with state changed from PASSIVE to RUNNING is sent to participants
+- Participant-intermediary validates the current state change
+- Participant-intermediary will recieve CONTROL_LOOP_STATE_CHANGE message and sends the details of state change to participants
+- Each participant performs its designated job of state change by interacting with respective frameworks
+
+Design of "issues control loop commands to control loops" - case RUNNING to PASSIVE
+-----------------------------------------------------------------------------------
+- CONTROL_LOOP_STATE_CHANGE message with state changed from RUNNING to PASSIVE is sent to participants
+- Participant-intermediary validates the current state change
+- Participant-intermediary will recieve CONTROL_LOOP_STATE_CHANGE message and sends the details of state change to participants
+- Each participant performs its designated job of state change by interacting with respective frameworks
+
+Design of a PARTICIPANT_STATUS message
+--------------------------------------
+- A participant sends a scheduled PARTICIPANT_STATUS message
+- This message will hold the state and healthStatus of all the participants running actively
+- PARTICIPANT_STATUS message holds a special attribute to return Tosca definitions, this attribute is populated only in response to PARTICIPANT_STATUS_REQ
+
+Design of a CONTROLLOOP_UPDATE_ACK message
+------------------------------------------
+- A participant sends CONTROLLOOP_UPDATE_ACK message in response to a CONTROLLOOP_UPDATE message.
+- For each CL-elements moved to the ordered state as indicated by the CONTROLLOOP_UPDATE
+- ControlLoopUpdateAckListener in CL-runtime collects the messages from DMaap
+- It checks the status of all control loop elements and checks if the control loop is primed
+- It updates the controlloop in DB accordingly
+
+Design of a CONTROLLOOP_STATECHANGE_ACK is similar to the design for CONTROLLOOP_UPDATE_ACK
diff --git a/docs/clamp/controlloop/design-impl/participants/participant-simulator.rst b/docs/clamp/controlloop/design-impl/participants/participant-simulator.rst
index 8f59a9f1..9ac4e735 100644
--- a/docs/clamp/controlloop/design-impl/participants/participant-simulator.rst
+++ b/docs/clamp/controlloop/design-impl/participants/participant-simulator.rst
@@ -5,4 +5,17 @@
Participant Simulator
#####################
-To be completed.
+This can be used for simulation testing purpose when there are no actual frameworks or a full deployment.
+Participant simulator can edit the states of ControlLoopElements and Participants for verification of other controlloop components
+for early testing.
+All controlloop components should be setup, except participant frameworks (for example, no policy framework components
+are needed) and participant simulator acts as respective participant framework, and state changes can be done with following REST APIs
+
+Participant Simulator API
+=========================
+
+This API allows a Participant Simulator to be started and run for test purposes.
+
+:download:`Download Policy Participant Simulator API Swagger <swagger/participant-sim.json>`
+
+.. swaggerv2doc:: swagger/participant-sim.json
diff --git a/docs/clamp/controlloop/design-impl/participants/swagger/participant-sim.json b/docs/clamp/controlloop/design-impl/participants/swagger/participant-sim.json
new file mode 100644
index 00000000..79fc3011
--- /dev/null
+++ b/docs/clamp/controlloop/design-impl/participants/swagger/participant-sim.json
@@ -0,0 +1,478 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "description": "Api Documentation",
+ "version": "1.0",
+ "title": "Api Documentation",
+ "termsOfService": "urn:tos",
+ "contact": {},
+ "license": {
+ "name": "Apache 2.0",
+ "url": "http://www.apache.org/licenses/LICENSE-2.0"
+ }
+ },
+ "paths": {
+ "/onap/participantsim/v2/elements": {
+ "put": {
+ "tags": [
+ "Clamp Control Loop Participant Simulator API"
+ ],
+ "summary": "Updates simulated control loop elements",
+ "description": "Updates simulated control loop elements, returning the updated control loop definition IDs",
+ "operationId": "updateUsingPUT",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Body of a control loop element",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/ControlLoopElementReq",
+ "originalRef": "ControlLoopElementReq"
+ }
+ },
+ {
+ "name": "X-ONAP-RequestID",
+ "in": "header",
+ "description": "RequestID for http transaction",
+ "required": false,
+ "type": "string",
+ "format": "uuid"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/TypedSimpleResponse«ControlLoopElement»",
+ "originalRef": "TypedSimpleResponse«ControlLoopElement»"
+ }
+ },
+ "201": {
+ "description": "Created"
+ },
+ "401": {
+ "description": "Authentication Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "403": {
+ "description": "Authorization Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found"
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "basicAuth": []
+ }
+ ],
+ "x-interface info": {
+ "api-version": "1.0.0",
+ "last-mod-release": "Dublin"
+ }
+ }
+ },
+ "/onap/participantsim/v2/elements/{name}/{version}": {
+ "get": {
+ "tags": [
+ "Clamp Control Loop Participant Simulator API"
+ ],
+ "summary": "Query details of the requested simulated control loop elements",
+ "description": "Queries details of the requested simulated control loop elements, returning all control loop element details",
+ "operationId": "elementsUsingGET",
+ "produces": [
+ "application/json",
+ "application/yaml"
+ ],
+ "parameters": [
+ {
+ "name": "name",
+ "in": "path",
+ "description": "Control loop element name",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "description": "Control loop element version",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "name": "X-ONAP-RequestID",
+ "in": "header",
+ "description": "RequestID for http transaction",
+ "required": false,
+ "type": "string",
+ "format": "uuid"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/ControlLoopElementRes",
+ "originalRef": "ControlLoopElementRes"
+ }
+ }
+ },
+ "401": {
+ "description": "Authentication Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "403": {
+ "description": "Authorization Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found"
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "basicAuth": []
+ }
+ ],
+ "x-interface info": {
+ "api-version": "1.0.0",
+ "last-mod-release": "Dublin"
+ }
+ }
+ },
+ "/onap/participantsim/v2/participants": {
+ "put": {
+ "tags": [
+ "Clamp Control Loop Participant Simulator API"
+ ],
+ "summary": "Updates simulated participants",
+ "description": "Updates simulated participants, returning the updated control loop definition IDs",
+ "operationId": "updateUsingPUT_1",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml"
+ ],
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Body of a participant",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/ParticipantReq",
+ "originalRef": "ParticipantReq"
+ }
+ },
+ {
+ "name": "X-ONAP-RequestID",
+ "in": "header",
+ "description": "RequestID for http transaction",
+ "required": false,
+ "type": "string",
+ "format": "uuid"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/TypedSimpleResponse«Participant»",
+ "originalRef": "TypedSimpleResponse«Participant»"
+ }
+ },
+ "201": {
+ "description": "Created"
+ },
+ "401": {
+ "description": "Authentication Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "403": {
+ "description": "Authorization Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found"
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "basicAuth": []
+ }
+ ],
+ "x-interface info": {
+ "api-version": "1.0.0",
+ "last-mod-release": "Dublin"
+ }
+ }
+ },
+ "/onap/participantsim/v2/participants/{name}/{version}": {
+ "get": {
+ "tags": [
+ "Clamp Control Loop Participant Simulator API"
+ ],
+ "summary": "Query details of the requested simulated participants",
+ "description": "Queries details of the requested simulated participants, returning all participant details",
+ "operationId": "participantsUsingGET",
+ "produces": [
+ "application/json",
+ "application/yaml"
+ ],
+ "parameters": [
+ {
+ "name": "name",
+ "in": "path",
+ "description": "Participant name",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "description": "Participant version",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "name": "X-ONAP-RequestID",
+ "in": "header",
+ "description": "RequestID for http transaction",
+ "required": false,
+ "type": "string",
+ "format": "uuid"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ParticipantRes",
+ "originalRef": "ParticipantRes"
+ }
+ }
+ },
+ "401": {
+ "description": "Authentication Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "403": {
+ "description": "Authorization Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found"
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "headers": {
+ "X-LatestVersion": {
+ "type": "string"
+ },
+ "X-PatchVersion": {
+ "type": "string"
+ },
+ "X-MinorVersion": {
+ "type": "string"
+ },
+ "X-ONAP-RequestID": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "basicAuth": []
+ }
+ ],
+ "x-interface info": {
+ "api-version": "1.0.0",
+ "last-mod-release": "Dublin"
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/docs/development/devtools/apex-s3p-results/apex_metrics_after_72h.txt b/docs/development/devtools/apex-s3p-results/apex_metrics_after_72h.txt
new file mode 100644
index 00000000..38fe5054
--- /dev/null
+++ b/docs/development/devtools/apex-s3p-results/apex_metrics_after_72h.txt
@@ -0,0 +1,173 @@
+# HELP jvm_info VM version info
+# TYPE jvm_info gauge
+jvm_info{runtime="OpenJDK Runtime Environment",vendor="Alpine",version="11.0.9+11-alpine-r1",} 1.0
+# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.
+# TYPE jvm_memory_objects_pending_finalization gauge
+jvm_memory_objects_pending_finalization 0.0
+# HELP jvm_memory_bytes_used Used bytes of a given JVM memory area.
+# TYPE jvm_memory_bytes_used gauge
+jvm_memory_bytes_used{area="heap",} 1.8570308E8
+jvm_memory_bytes_used{area="nonheap",} 1.1990352E8
+# HELP jvm_memory_bytes_committed Committed (bytes) of a given JVM memory area.
+# TYPE jvm_memory_bytes_committed gauge
+jvm_memory_bytes_committed{area="heap",} 2.55655936E8
+jvm_memory_bytes_committed{area="nonheap",} 1.65216256E8
+# HELP jvm_memory_bytes_max Max (bytes) of a given JVM memory area.
+# TYPE jvm_memory_bytes_max gauge
+jvm_memory_bytes_max{area="heap",} 4.064673792E9
+jvm_memory_bytes_max{area="nonheap",} -1.0
+# HELP jvm_memory_bytes_init Initial bytes of a given JVM memory area.
+# TYPE jvm_memory_bytes_init gauge
+jvm_memory_bytes_init{area="heap",} 2.64241152E8
+jvm_memory_bytes_init{area="nonheap",} 7667712.0
+# HELP jvm_memory_pool_bytes_used Used bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_used gauge
+jvm_memory_pool_bytes_used{pool="CodeHeap 'non-nmethods'",} 1357312.0
+jvm_memory_pool_bytes_used{pool="Metaspace",} 8.2427648E7
+jvm_memory_pool_bytes_used{pool="Tenured Gen",} 1.5998668E8
+jvm_memory_pool_bytes_used{pool="CodeHeap 'profiled nmethods'",} 4413696.0
+jvm_memory_pool_bytes_used{pool="Eden Space",} 2.1659816E7
+jvm_memory_pool_bytes_used{pool="Survivor Space",} 4056584.0
+jvm_memory_pool_bytes_used{pool="Compressed Class Space",} 8293152.0
+jvm_memory_pool_bytes_used{pool="CodeHeap 'non-profiled nmethods'",} 2.3411712E7
+# HELP jvm_memory_pool_bytes_committed Committed bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_committed gauge
+jvm_memory_pool_bytes_committed{pool="CodeHeap 'non-nmethods'",} 2555904.0
+jvm_memory_pool_bytes_committed{pool="Metaspace",} 9.4896128E7
+jvm_memory_pool_bytes_committed{pool="Tenured Gen",} 1.76160768E8
+jvm_memory_pool_bytes_committed{pool="CodeHeap 'profiled nmethods'",} 3.2309248E7
+jvm_memory_pool_bytes_committed{pool="Eden Space",} 7.0713344E7
+jvm_memory_pool_bytes_committed{pool="Survivor Space",} 8781824.0
+jvm_memory_pool_bytes_committed{pool="Compressed Class Space",} 1.0223616E7
+jvm_memory_pool_bytes_committed{pool="CodeHeap 'non-profiled nmethods'",} 2.523136E7
+# HELP jvm_memory_pool_bytes_max Max bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_max gauge
+jvm_memory_pool_bytes_max{pool="CodeHeap 'non-nmethods'",} 5828608.0
+jvm_memory_pool_bytes_max{pool="Metaspace",} -1.0
+jvm_memory_pool_bytes_max{pool="Tenured Gen",} 2.803236864E9
+jvm_memory_pool_bytes_max{pool="CodeHeap 'profiled nmethods'",} 1.22912768E8
+jvm_memory_pool_bytes_max{pool="Eden Space",} 1.12132096E9
+jvm_memory_pool_bytes_max{pool="Survivor Space",} 1.40115968E8
+jvm_memory_pool_bytes_max{pool="Compressed Class Space",} 1.073741824E9
+jvm_memory_pool_bytes_max{pool="CodeHeap 'non-profiled nmethods'",} 1.22916864E8
+# HELP jvm_memory_pool_bytes_init Initial bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_init gauge
+jvm_memory_pool_bytes_init{pool="CodeHeap 'non-nmethods'",} 2555904.0
+jvm_memory_pool_bytes_init{pool="Metaspace",} 0.0
+jvm_memory_pool_bytes_init{pool="Tenured Gen",} 1.76160768E8
+jvm_memory_pool_bytes_init{pool="CodeHeap 'profiled nmethods'",} 2555904.0
+jvm_memory_pool_bytes_init{pool="Eden Space",} 7.0516736E7
+jvm_memory_pool_bytes_init{pool="Survivor Space",} 8781824.0
+jvm_memory_pool_bytes_init{pool="Compressed Class Space",} 0.0
+jvm_memory_pool_bytes_init{pool="CodeHeap 'non-profiled nmethods'",} 2555904.0
+# HELP jvm_memory_pool_collection_used_bytes Used bytes after last collection of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_used_bytes gauge
+jvm_memory_pool_collection_used_bytes{pool="Tenured Gen",} 1.00182296E8
+jvm_memory_pool_collection_used_bytes{pool="Eden Space",} 0.0
+jvm_memory_pool_collection_used_bytes{pool="Survivor Space",} 4056584.0
+# HELP jvm_memory_pool_collection_committed_bytes Committed after last collection bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_committed_bytes gauge
+jvm_memory_pool_collection_committed_bytes{pool="Tenured Gen",} 1.76357376E8
+jvm_memory_pool_collection_committed_bytes{pool="Eden Space",} 7.0713344E7
+jvm_memory_pool_collection_committed_bytes{pool="Survivor Space",} 8781824.0
+# HELP jvm_memory_pool_collection_max_bytes Max bytes after last collection of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_max_bytes gauge
+jvm_memory_pool_collection_max_bytes{pool="Tenured Gen",} 2.803236864E9
+jvm_memory_pool_collection_max_bytes{pool="Eden Space",} 1.12132096E9
+jvm_memory_pool_collection_max_bytes{pool="Survivor Space",} 1.40115968E8
+# HELP jvm_memory_pool_collection_init_bytes Initial after last collection bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_init_bytes gauge
+jvm_memory_pool_collection_init_bytes{pool="Tenured Gen",} 1.76160768E8
+jvm_memory_pool_collection_init_bytes{pool="Eden Space",} 7.0516736E7
+jvm_memory_pool_collection_init_bytes{pool="Survivor Space",} 8781824.0
+# HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
+# TYPE jvm_memory_pool_allocated_bytes_total counter
+jvm_memory_pool_allocated_bytes_total{pool="Eden Space",} 7.81369756592E11
+jvm_memory_pool_allocated_bytes_total{pool="CodeHeap 'profiled nmethods'",} 5.1833472E7
+jvm_memory_pool_allocated_bytes_total{pool="CodeHeap 'non-profiled nmethods'",} 3.6370048E7
+jvm_memory_pool_allocated_bytes_total{pool="Compressed Class Space",} 8986056.0
+jvm_memory_pool_allocated_bytes_total{pool="Metaspace",} 8.6383264E7
+jvm_memory_pool_allocated_bytes_total{pool="Tenured Gen",} 3.84983864E8
+jvm_memory_pool_allocated_bytes_total{pool="Survivor Space",} 1.506631592E9
+jvm_memory_pool_allocated_bytes_total{pool="CodeHeap 'non-nmethods'",} 1439232.0
+# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.
+# TYPE jvm_gc_collection_seconds summary
+jvm_gc_collection_seconds_count{gc="Copy",} 11053.0
+jvm_gc_collection_seconds_sum{gc="Copy",} 90.383
+jvm_gc_collection_seconds_count{gc="MarkSweepCompact",} 6.0
+jvm_gc_collection_seconds_sum{gc="MarkSweepCompact",} 1.44
+# HELP jvm_threads_current Current thread count of a JVM
+# TYPE jvm_threads_current gauge
+jvm_threads_current 31.0
+# HELP jvm_threads_daemon Daemon thread count of a JVM
+# TYPE jvm_threads_daemon gauge
+jvm_threads_daemon 16.0
+# HELP jvm_threads_peak Peak thread count of a JVM
+# TYPE jvm_threads_peak gauge
+jvm_threads_peak 80.0
+# HELP jvm_threads_started_total Started thread count of a JVM
+# TYPE jvm_threads_started_total counter
+jvm_threads_started_total 320599.0
+# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers
+# TYPE jvm_threads_deadlocked gauge
+jvm_threads_deadlocked 0.0
+# HELP jvm_threads_deadlocked_monitor Cycles of JVM-threads that are in deadlock waiting to acquire object monitors
+# TYPE jvm_threads_deadlocked_monitor gauge
+jvm_threads_deadlocked_monitor 0.0
+# HELP jvm_threads_state Current count of threads by state
+# TYPE jvm_threads_state gauge
+jvm_threads_state{state="BLOCKED",} 0.0
+jvm_threads_state{state="WAITING",} 13.0
+jvm_threads_state{state="RUNNABLE",} 7.0
+jvm_threads_state{state="TIMED_WAITING",} 11.0
+jvm_threads_state{state="TERMINATED",} 0.0
+jvm_threads_state{state="NEW",} 0.0
+# HELP jvm_buffer_pool_used_bytes Used bytes of a given JVM buffer pool.
+# TYPE jvm_buffer_pool_used_bytes gauge
+jvm_buffer_pool_used_bytes{pool="mapped",} 0.0
+jvm_buffer_pool_used_bytes{pool="direct",} 3.385029E7
+# HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool.
+# TYPE jvm_buffer_pool_capacity_bytes gauge
+jvm_buffer_pool_capacity_bytes{pool="mapped",} 0.0
+jvm_buffer_pool_capacity_bytes{pool="direct",} 3.3850289E7
+# HELP jvm_buffer_pool_used_buffers Used buffers of a given JVM buffer pool.
+# TYPE jvm_buffer_pool_used_buffers gauge
+jvm_buffer_pool_used_buffers{pool="mapped",} 0.0
+jvm_buffer_pool_used_buffers{pool="direct",} 16.0
+# HELP jvm_classes_loaded The number of classes that are currently loaded in the JVM
+# TYPE jvm_classes_loaded gauge
+jvm_classes_loaded 11238.0
+# HELP jvm_classes_loaded_total The total number of classes that have been loaded since the JVM has started execution
+# TYPE jvm_classes_loaded_total counter
+jvm_classes_loaded_total 12239.0
+# HELP jvm_classes_unloaded_total The total number of classes that have been unloaded since the JVM has started execution
+# TYPE jvm_classes_unloaded_total counter
+jvm_classes_unloaded_total 1001.0
+# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
+# TYPE process_cpu_seconds_total counter
+process_cpu_seconds_total 9308.0
+# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
+# TYPE process_start_time_seconds gauge
+process_start_time_seconds 1.633111663176E9
+# HELP process_open_fds Number of open file descriptors.
+# TYPE process_open_fds gauge
+process_open_fds 354.0
+# HELP process_max_fds Maximum number of open file descriptors.
+# TYPE process_max_fds gauge
+process_max_fds 1048576.0
+# HELP process_virtual_memory_bytes Virtual memory size in bytes.
+# TYPE process_virtual_memory_bytes gauge
+process_virtual_memory_bytes 5.933633536E9
+# HELP process_resident_memory_bytes Resident memory size in bytes.
+# TYPE process_resident_memory_bytes gauge
+process_resident_memory_bytes 5.2523008E8
+# HELP jvm_memory_pool_allocated_bytes_created Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
+# TYPE jvm_memory_pool_allocated_bytes_created gauge
+jvm_memory_pool_allocated_bytes_created{pool="Eden Space",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="CodeHeap 'profiled nmethods'",} 1.633111669942E9
+jvm_memory_pool_allocated_bytes_created{pool="CodeHeap 'non-profiled nmethods'",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Compressed Class Space",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Metaspace",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Tenured Gen",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Survivor Space",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="CodeHeap 'non-nmethods'",} 1.633111669968E9
diff --git a/docs/development/devtools/apex-s3p-results/apex_metrics_before_72h.txt b/docs/development/devtools/apex-s3p-results/apex_metrics_before_72h.txt
new file mode 100644
index 00000000..551bd824
--- /dev/null
+++ b/docs/development/devtools/apex-s3p-results/apex_metrics_before_72h.txt
@@ -0,0 +1,173 @@
+# HELP jvm_info VM version info
+# TYPE jvm_info gauge
+jvm_info{runtime="OpenJDK Runtime Environment",vendor="Alpine",version="11.0.9+11-alpine-r1",} 1.0
+# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.
+# TYPE jvm_memory_objects_pending_finalization gauge
+jvm_memory_objects_pending_finalization 0.0
+# HELP jvm_memory_bytes_used Used bytes of a given JVM memory area.
+# TYPE jvm_memory_bytes_used gauge
+jvm_memory_bytes_used{area="heap",} 4.7930528E7
+jvm_memory_bytes_used{area="nonheap",} 5.3899512E7
+# HELP jvm_memory_bytes_committed Committed (bytes) of a given JVM memory area.
+# TYPE jvm_memory_bytes_committed gauge
+jvm_memory_bytes_committed{area="heap",} 2.555904E8
+jvm_memory_bytes_committed{area="nonheap",} 5.8589184E7
+# HELP jvm_memory_bytes_max Max (bytes) of a given JVM memory area.
+# TYPE jvm_memory_bytes_max gauge
+jvm_memory_bytes_max{area="heap",} 4.064673792E9
+jvm_memory_bytes_max{area="nonheap",} -1.0
+# HELP jvm_memory_bytes_init Initial bytes of a given JVM memory area.
+# TYPE jvm_memory_bytes_init gauge
+jvm_memory_bytes_init{area="heap",} 2.64241152E8
+jvm_memory_bytes_init{area="nonheap",} 7667712.0
+# HELP jvm_memory_pool_bytes_used Used bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_used gauge
+jvm_memory_pool_bytes_used{pool="CodeHeap 'non-nmethods'",} 1271680.0
+jvm_memory_pool_bytes_used{pool="Metaspace",} 4.0208712E7
+jvm_memory_pool_bytes_used{pool="Tenured Gen",} 2.8176296E7
+jvm_memory_pool_bytes_used{pool="CodeHeap 'profiled nmethods'",} 5948416.0
+jvm_memory_pool_bytes_used{pool="Eden Space",} 1.780424E7
+jvm_memory_pool_bytes_used{pool="Survivor Space",} 1949992.0
+jvm_memory_pool_bytes_used{pool="Compressed Class Space",} 4855216.0
+jvm_memory_pool_bytes_used{pool="CodeHeap 'non-profiled nmethods'",} 1615488.0
+# HELP jvm_memory_pool_bytes_committed Committed bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_committed gauge
+jvm_memory_pool_bytes_committed{pool="CodeHeap 'non-nmethods'",} 2555904.0
+jvm_memory_pool_bytes_committed{pool="Metaspace",} 4.194304E7
+jvm_memory_pool_bytes_committed{pool="Tenured Gen",} 1.76160768E8
+jvm_memory_pool_bytes_committed{pool="CodeHeap 'profiled nmethods'",} 6029312.0
+jvm_memory_pool_bytes_committed{pool="Eden Space",} 7.0647808E7
+jvm_memory_pool_bytes_committed{pool="Survivor Space",} 8781824.0
+jvm_memory_pool_bytes_committed{pool="Compressed Class Space",} 5505024.0
+jvm_memory_pool_bytes_committed{pool="CodeHeap 'non-profiled nmethods'",} 2555904.0
+# HELP jvm_memory_pool_bytes_max Max bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_max gauge
+jvm_memory_pool_bytes_max{pool="CodeHeap 'non-nmethods'",} 5828608.0
+jvm_memory_pool_bytes_max{pool="Metaspace",} -1.0
+jvm_memory_pool_bytes_max{pool="Tenured Gen",} 2.803236864E9
+jvm_memory_pool_bytes_max{pool="CodeHeap 'profiled nmethods'",} 1.22912768E8
+jvm_memory_pool_bytes_max{pool="Eden Space",} 1.12132096E9
+jvm_memory_pool_bytes_max{pool="Survivor Space",} 1.40115968E8
+jvm_memory_pool_bytes_max{pool="Compressed Class Space",} 1.073741824E9
+jvm_memory_pool_bytes_max{pool="CodeHeap 'non-profiled nmethods'",} 1.22916864E8
+# HELP jvm_memory_pool_bytes_init Initial bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_bytes_init gauge
+jvm_memory_pool_bytes_init{pool="CodeHeap 'non-nmethods'",} 2555904.0
+jvm_memory_pool_bytes_init{pool="Metaspace",} 0.0
+jvm_memory_pool_bytes_init{pool="Tenured Gen",} 1.76160768E8
+jvm_memory_pool_bytes_init{pool="CodeHeap 'profiled nmethods'",} 2555904.0
+jvm_memory_pool_bytes_init{pool="Eden Space",} 7.0516736E7
+jvm_memory_pool_bytes_init{pool="Survivor Space",} 8781824.0
+jvm_memory_pool_bytes_init{pool="Compressed Class Space",} 0.0
+jvm_memory_pool_bytes_init{pool="CodeHeap 'non-profiled nmethods'",} 2555904.0
+# HELP jvm_memory_pool_collection_used_bytes Used bytes after last collection of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_used_bytes gauge
+jvm_memory_pool_collection_used_bytes{pool="Tenured Gen",} 2.8176296E7
+jvm_memory_pool_collection_used_bytes{pool="Eden Space",} 0.0
+jvm_memory_pool_collection_used_bytes{pool="Survivor Space",} 1949992.0
+# HELP jvm_memory_pool_collection_committed_bytes Committed after last collection bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_committed_bytes gauge
+jvm_memory_pool_collection_committed_bytes{pool="Tenured Gen",} 1.76160768E8
+jvm_memory_pool_collection_committed_bytes{pool="Eden Space",} 7.0647808E7
+jvm_memory_pool_collection_committed_bytes{pool="Survivor Space",} 8781824.0
+# HELP jvm_memory_pool_collection_max_bytes Max bytes after last collection of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_max_bytes gauge
+jvm_memory_pool_collection_max_bytes{pool="Tenured Gen",} 2.803236864E9
+jvm_memory_pool_collection_max_bytes{pool="Eden Space",} 1.12132096E9
+jvm_memory_pool_collection_max_bytes{pool="Survivor Space",} 1.40115968E8
+# HELP jvm_memory_pool_collection_init_bytes Initial after last collection bytes of a given JVM memory pool.
+# TYPE jvm_memory_pool_collection_init_bytes gauge
+jvm_memory_pool_collection_init_bytes{pool="Tenured Gen",} 1.76160768E8
+jvm_memory_pool_collection_init_bytes{pool="Eden Space",} 7.0516736E7
+jvm_memory_pool_collection_init_bytes{pool="Survivor Space",} 8781824.0
+# HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
+# TYPE jvm_memory_pool_allocated_bytes_total counter
+jvm_memory_pool_allocated_bytes_total{pool="Eden Space",} 1.62790696E8
+jvm_memory_pool_allocated_bytes_total{pool="CodeHeap 'profiled nmethods'",} 5150080.0
+jvm_memory_pool_allocated_bytes_total{pool="CodeHeap 'non-profiled nmethods'",} 1428864.0
+jvm_memory_pool_allocated_bytes_total{pool="Compressed Class Space",} 4785752.0
+jvm_memory_pool_allocated_bytes_total{pool="Metaspace",} 3.9463568E7
+jvm_memory_pool_allocated_bytes_total{pool="Tenured Gen",} 2.8176296E7
+jvm_memory_pool_allocated_bytes_total{pool="Survivor Space",} 5422680.0
+jvm_memory_pool_allocated_bytes_total{pool="CodeHeap 'non-nmethods'",} 1271680.0
+# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.
+# TYPE jvm_gc_collection_seconds summary
+jvm_gc_collection_seconds_count{gc="Copy",} 3.0
+jvm_gc_collection_seconds_sum{gc="Copy",} 0.076
+jvm_gc_collection_seconds_count{gc="MarkSweepCompact",} 2.0
+jvm_gc_collection_seconds_sum{gc="MarkSweepCompact",} 0.126
+# HELP jvm_threads_current Current thread count of a JVM
+# TYPE jvm_threads_current gauge
+jvm_threads_current 31.0
+# HELP jvm_threads_daemon Daemon thread count of a JVM
+# TYPE jvm_threads_daemon gauge
+jvm_threads_daemon 16.0
+# HELP jvm_threads_peak Peak thread count of a JVM
+# TYPE jvm_threads_peak gauge
+jvm_threads_peak 31.0
+# HELP jvm_threads_started_total Started thread count of a JVM
+# TYPE jvm_threads_started_total counter
+jvm_threads_started_total 32.0
+# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers
+# TYPE jvm_threads_deadlocked gauge
+jvm_threads_deadlocked 0.0
+# HELP jvm_threads_deadlocked_monitor Cycles of JVM-threads that are in deadlock waiting to acquire object monitors
+# TYPE jvm_threads_deadlocked_monitor gauge
+jvm_threads_deadlocked_monitor 0.0
+# HELP jvm_threads_state Current count of threads by state
+# TYPE jvm_threads_state gauge
+jvm_threads_state{state="BLOCKED",} 0.0
+jvm_threads_state{state="WAITING",} 13.0
+jvm_threads_state{state="RUNNABLE",} 7.0
+jvm_threads_state{state="TIMED_WAITING",} 11.0
+jvm_threads_state{state="TERMINATED",} 0.0
+jvm_threads_state{state="NEW",} 0.0
+# HELP jvm_buffer_pool_used_bytes Used bytes of a given JVM buffer pool.
+# TYPE jvm_buffer_pool_used_bytes gauge
+jvm_buffer_pool_used_bytes{pool="mapped",} 0.0
+jvm_buffer_pool_used_bytes{pool="direct",} 187392.0
+# HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool.
+# TYPE jvm_buffer_pool_capacity_bytes gauge
+jvm_buffer_pool_capacity_bytes{pool="mapped",} 0.0
+jvm_buffer_pool_capacity_bytes{pool="direct",} 187392.0
+# HELP jvm_buffer_pool_used_buffers Used buffers of a given JVM buffer pool.
+# TYPE jvm_buffer_pool_used_buffers gauge
+jvm_buffer_pool_used_buffers{pool="mapped",} 0.0
+jvm_buffer_pool_used_buffers{pool="direct",} 8.0
+# HELP jvm_classes_loaded The number of classes that are currently loaded in the JVM
+# TYPE jvm_classes_loaded gauge
+jvm_classes_loaded 7287.0
+# HELP jvm_classes_loaded_total The total number of classes that have been loaded since the JVM has started execution
+# TYPE jvm_classes_loaded_total counter
+jvm_classes_loaded_total 7287.0
+# HELP jvm_classes_unloaded_total The total number of classes that have been unloaded since the JVM has started execution
+# TYPE jvm_classes_unloaded_total counter
+jvm_classes_unloaded_total 0.0
+# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
+# TYPE process_cpu_seconds_total counter
+process_cpu_seconds_total 19.23
+# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
+# TYPE process_start_time_seconds gauge
+process_start_time_seconds 1.633111663176E9
+# HELP process_open_fds Number of open file descriptors.
+# TYPE process_open_fds gauge
+process_open_fds 350.0
+# HELP process_max_fds Maximum number of open file descriptors.
+# TYPE process_max_fds gauge
+process_max_fds 1048576.0
+# HELP process_virtual_memory_bytes Virtual memory size in bytes.
+# TYPE process_virtual_memory_bytes gauge
+process_virtual_memory_bytes 5.825941504E9
+# HELP process_resident_memory_bytes Resident memory size in bytes.
+# TYPE process_resident_memory_bytes gauge
+process_resident_memory_bytes 2.13909504E8
+# HELP jvm_memory_pool_allocated_bytes_created Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
+# TYPE jvm_memory_pool_allocated_bytes_created gauge
+jvm_memory_pool_allocated_bytes_created{pool="Eden Space",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="CodeHeap 'profiled nmethods'",} 1.633111669942E9
+jvm_memory_pool_allocated_bytes_created{pool="CodeHeap 'non-profiled nmethods'",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Compressed Class Space",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Metaspace",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Tenured Gen",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="Survivor Space",} 1.633111669968E9
+jvm_memory_pool_allocated_bytes_created{pool="CodeHeap 'non-nmethods'",} 1.633111669968E9
diff --git a/docs/development/devtools/apex-s3p-results/apex_perf_jmeter_results.JPG b/docs/development/devtools/apex-s3p-results/apex_perf_jmeter_results.JPG
new file mode 100644
index 00000000..89447874
--- /dev/null
+++ b/docs/development/devtools/apex-s3p-results/apex_perf_jmeter_results.JPG
Binary files differ
diff --git a/docs/development/devtools/apex-s3p-results/apex_s3p_logs.zip b/docs/development/devtools/apex-s3p-results/apex_s3p_logs.zip
deleted file mode 100644
index cdeca387..00000000
--- a/docs/development/devtools/apex-s3p-results/apex_s3p_logs.zip
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/apex-s3p-results/apex_s3p_results.zip b/docs/development/devtools/apex-s3p-results/apex_s3p_results.zip
deleted file mode 100644
index a4f268e5..00000000
--- a/docs/development/devtools/apex-s3p-results/apex_s3p_results.zip
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/apex-s3p-results/apex_stability_jmeter_results.JPG b/docs/development/devtools/apex-s3p-results/apex_stability_jmeter_results.JPG
new file mode 100644
index 00000000..1cdabb7e
--- /dev/null
+++ b/docs/development/devtools/apex-s3p-results/apex_stability_jmeter_results.JPG
Binary files differ
diff --git a/docs/development/devtools/apex-s3p-results/apex_top_after_72h.JPG b/docs/development/devtools/apex-s3p-results/apex_top_after_72h.JPG
new file mode 100644
index 00000000..e51b942a
--- /dev/null
+++ b/docs/development/devtools/apex-s3p-results/apex_top_after_72h.JPG
Binary files differ
diff --git a/docs/development/devtools/apex-s3p-results/apex_top_before_72h.JPG b/docs/development/devtools/apex-s3p-results/apex_top_before_72h.JPG
new file mode 100644
index 00000000..cc2da54f
--- /dev/null
+++ b/docs/development/devtools/apex-s3p-results/apex_top_before_72h.JPG
Binary files differ
diff --git a/docs/development/devtools/apex-s3p.rst b/docs/development/devtools/apex-s3p.rst
index f5c0e7cf..ce61e55e 100644
--- a/docs/development/devtools/apex-s3p.rst
+++ b/docs/development/devtools/apex-s3p.rst
@@ -10,143 +10,200 @@
Policy APEX PDP component
~~~~~~~~~~~~~~~~~~~~~~~~~
-Setting up Stability Tests in APEX
-++++++++++++++++++++++++++++++++++
+Both the Stability and the Performance tests were executed in a full ONAP OOM deployment in Nordix lab.
-Introduction
-------------
-The 72 hour Stability Test for apex-pdp has the goal of introducing a steady flow of transactions initiated from a test client server running JMeter. The pdp is configured to start a rest server inside it and take input from rest clients (JMeter) and send back output to the rest clients (JMeter).
+Setup Details
++++++++++++++
-The input events will be submitted through rest interface of apex-pdp and the results are verified using the rest responses coming out from apex-pdp.
+- APEX-PDP along with all policy components deployed as part of a full ONAP OOM deployment.
+- Policy-models-simulator is deployed to use CDS and DMaaP simulators during policy execution.
+ Simulator configurations used are available in apex-pdp repository:
+ testsuites/apex-pdp-stability/src/main/resources/simulatorConfig/
+- Two APEX policies are executed in the APEX-PDP engine, and are triggered by multiple threads during the tests.
+- Both tests were run via jMeter.
-The test will be performed in a multi-threaded environment where 5 threads running in JMeter will keep sending events to apex-pdp for the duration of 72 hours.
+ Stability test script is available in apex-pdp repository:
+ testsuites/apex-pdp-stability/src/main/resources/apexPdpStabilityTestPlan.jmx
-Setup details
--------------
+ Performance test script is available in apex-pdp repository:
+ testsuites/performance/performance-benchmark-test/src/main/resources/apexPdpPerformanceTestPlan.jmx
-Stability test is performed on VM's running in OpenStack cloud environment. APEX-PDP along with other components in Policy Framework is deployed in an OOM ONAP installation. JMeter runs on a separate VM to simulate a steady flow of transactions.
+.. Note::
+ Policy executions are validated in a more strict fashion during the tests.
+ There are test cases where upto 80 events are expected on the DMaaP topic.
+ DMaaP simulator is used to keep it simple and avoid any message pickup timing related issues.
+Stability Test of APEX-PDP
+++++++++++++++++++++++++++
Test Plan
---------
-The 72 hours stability test will run the following steps in a 5 threaded loop.
+The 72 hours stability test ran the following steps.
-Setup stage (these calls run only once - at the beginning)
-- **Create Policy** - creates a policy using the policy/api component
-- **Deploy Policy** - deploys the policy in the existing PdpGroup
-Test stage (these calls run over and over again)
-- **Check Health** - checks the health status of apex
-- **Send Input Event** - triggers 'unauthenticated.DCAE_CL_OUTPUT' event of DMaaP.
-- **Get Output Event Response** - checks for the triggered output event.
-Teardown stage (this calls run only once - at the end)
-- **Undeploy Policy** - undeploys the policy from PdpGroup
-- **Delete Policy** - deletes the policy using the policy/api component
+Setup Phase
+"""""""""""
-The following steps can be used to configure the parameters of the test plan.
+Policies are created and deployed to APEX-PDP during this phase. Only one thread is in action and this step is done only once.
-- **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
-- **HTTP Request Defaults** - used to store HTTP request details like Server Name or IP, Port, Protocol etc.
-- **User Defined Variables** - used to store the following user defined parameters:
+- **Create Policy onap.policies.apex.Simplecontrolloop** - creates the first APEX policy using policy/api component.
+ This is a sample policy used for PNF testing.
+- **Create Policy onap.policies.apex.Example** - creates the second APEX policy using policy/api component.
+ This is a sample policy used for VNF testing.
+- **Deploy Policies** - Deploy both the policies created to APEX-PDP using policy/pap component
-================== ============================================================================ ============================
-**Name** **Description** **Default Value**
-================== ============================================================================ ============================
-wait Wait time after each request (in milliseconds) 10000
-threads Number of threads to run test cases in parallel. 5
-threadsTimeOutInMs Synchronization timer for threads running in parallel (in milliseconds). 5000
-PAP_PORT Port number of PAP for making REST API calls
-API_PORT Port number of API for making REST API calls
-APEX_PORT Port number of APEX for making REST API calls
-DMAAP_PORT Port number of DMAAP for making REST API calls
-HOSTNAME Server IP address for making REST API calls
-================== ============================================================================ ============================
+Main Phase
+""""""""""
+Once the policies are created and deployed to APEX-PDP by the setup thread, five threads execute the below tests for 72 hours.
-Download and update the jmx file presented in the apex-pdp git repository - `jmx file path <https://gerrit.onap.org/r/gitweb?p=policy/apex-pdp.git;a=tree;f=testsuites/apex-pdp-stability/src/main/resources;h=99d373033a190a690d4e05012bc3a656cae7bc3f;hb=refs/heads/master>`_.
+- **Healthcheck** - checks the health status of APEX-PDP
+- **Prometheus Metrics** - checks that APEX-PDP is exposing prometheus metrics
+- **Test Simplecontrolloop policy success case** - Send a trigger event to *unauthenticated.DCAE_CL_OUTPUT* DMaaP topic.
+ If the policy execution is successful, 3 different notification events are sent to *APEX-CL-MGT* topic by each one of the 5 threads.
+ So, it is checked if 15 notification messages are received in total on *APEX-CL-MGT* topic with the relevant messages.
+- **Test Simplecontrolloop policy failure case** - Send a trigger event with invalid pnfName to *unauthenticated.DCAE_CL_OUTPUT* DMaaP topic.
+ The policy execution is expected to fail due to AAI failure response. 2 notification events are expected on *APEX-CL-MGT* topic by a thread in this case.
+ It is checked if 10 notification messages are received in total on *APEX-CL-MGT* topic with the relevant messages.
+- **Test Example policy success case** - Send a trigger event to *unauthenticated.DCAE_POLICY_EXAMPLE_OUTPUT* DMaaP topic.
+ If the policy execution is successful, 4 different notification events are sent to *APEX-CL-MGT* topic by each one of the 5 threads.
+ So, it is checked if 20 notification messages are received in total on *APEX-CL-MGT* topic with the relevant messages.
+- **Test Example policy failure case** - Send a trigger event with invalid vnfName to *unauthenticated.DCAE_POLICY_EXAMPLE_OUTPUT* DMaaP topic.
+ The policy execution is expected to fail due to AAI failure response. 2 notification events are expected on *APEX-CL-MGT* topic by a thread in this case.
+ So, it is checked if 10 notification messages are received in total on *APEX-CL-MGT* topic with the relevant messages.
+- **Clean up DMaaP notification topic** - DMaaP notification topic which is *APEX-CL-MGT* is cleaned up after each test to make sure that one failure doesn't lead to cascading errors.
-- ThreadGroup.duration - Set the duration to 259200 seconds (72 hours)
-Use the CLI mode to start the test
+Teardown Phase
+""""""""""""""
-.. code-block:: bash
+Policies are undeployed from APEX-PDP and deleted during this phase.
+Only one thread is in action and this step is done only once after the Main phase is complete.
- nohup ./jmeter.sh -n -t ~/apexPdpStabilityTestPlan.jmx -Jusers=1 -l ~/stability.log
+- **Undeploy Policies** - Undeploy both the policies from APEX-PDP using policy/pap component
+- **Delete Policy onap.policies.apex.Simplecontrolloop** - delete the first APEX policy using policy/api component.
+- **Delete Policy onap.policies.apex.Example** - delete the second APEX policy also using policy/api component.
-Stability Test Results
-----------------------
+The following steps can be used to configure the parameters of test plan.
-The stability test plan was triggered for 72 hours, injecting input events to apex-pdp pod from 5 client threads running in JMeter.
+- **HTTP Authorization Manager** - used to store user/password authentication details.
+- **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
+- **User Defined Variables** - used to store following user defined parameters.
+
+=================== ===============================================================================
+ **Name** **Description**
+=================== ===============================================================================
+ HOSTNAME IP Address or host name to access the components
+ PAP_PORT Port number of PAP for making REST API calls such as deploy/undeploy of policy
+ API_PORT Port number of API for making REST API calls such as create/ delete of policy
+ APEX_PORT Port number of APEX for making REST API calls such as healthcheck/metrics
+ wait Wait time if required after a request (in milliseconds)
+ threads Number of threads to run test cases in parallel
+ threadsTimeOutInMs Synchronization timer for threads running in parallel (in milliseconds)
+=================== ===============================================================================
-The stability tests were executed as part of a full ONAP OOM deployment in Nordix lab.
+Run Test
+--------
-Once the tests complete, we can generate an HTML test report via the command:
+The test was run in the background via "nohup", to prevent it from being interrupted:
.. code-block:: bash
- ~/jMeter/apache-jmeter-5.2.1/bin/jmeter -g stability.log -o ./result/
+ nohup ./apache-jmeter-5.4.1/bin/jmeter.sh -n -t apexPdpStabilityTestPlan.jmx -l stabilityTestResults.jtl
+
+Test Results
+------------
+
+**Summary**
-============================================== ================================ ============= ============ ============================
-**Number of Client Threads running in JMeter** **Total number of input events** **Success %** **Error %** **Average Time per Request**
-============================================== ================================ ============= ============ ============================
-5 129326 100% 0% 6716.12
-============================================== ================================ ============= ============ ============================
+Stability test plan was triggered for 72 hours. There were no failures during the 72 hours test.
+**Test Statistics**
+
+======================= ================= ================== ==================================
+**Total # of requests** **Success %** **Error %** **Average time taken per request**
+======================= ================= ================== ==================================
+428661 100 % 0.00 % 162 ms
+======================= ================= ================== ==================================
+
+.. Note::
+
+ There were no failures during the 72 hours test.
+
**JMeter Screenshot**
-.. image:: images/apex_s3p_jm-1.png
-.. image:: images/apex_s3p_jm-2.png
+.. image:: apex-s3p-results/apex_stability_jmeter_results.JPG
-:download:`result.zip <apex-s3p-results/apex_s3p_results.zip>`
+**Memory and CPU usage**
-Setting up Performance Tests in APEX
-++++++++++++++++++++++++++++++++++++
+The memory and CPU usage can be monitored by running "top" command in the APEX-PDP pod.
+A snapshot is taken before and after test execution to monitor the changes in resource utilization.
+Prometheus metrics is also collected before and after the test execution.
-The Performance test is performed on a similar setup to the Stability test. JMeter will send a large number of REST requests and will then retrieve those requests.
+Memory and CPU usage before test execution:
-Performance test plan will be the same as the stability test plan except for some differences listed below:
+.. image:: apex-s3p-results/apex_top_before_72h.JPG
-- Increase the number of threads from 5 to 20.
-- Reduce test time to ninety minutes. (ThreadGroup.duration - Set the duration to 5400 seconds)
+:download:`Prometheus metrics before 72h test <apex-s3p-results/apex_metrics_before_72h.txt>`
-Download and update the jmx file presented in the apex-pdp git repository - `jmx file path <https://gerrit.onap.org/r/gitweb?p=policy/apex-pdp.git;a=tree;f=testsuites/performance/performance-benchmark-test/src/main/resources;h=b0ed1058b11f82b42fb5be1a07009114e1e8b593;hb=refs/heads/master>`_.
+Memory and CPU usage after test execution:
+.. image:: apex-s3p-results/apex_top_after_72h.JPG
-Run Test
---------
+:download:`Prometheus metrics after 72h test <apex-s3p-results/apex_metrics_after_72h.txt>`
-Running the performance test will be the same as the stability test. That is, launch JMeter pointing to corresponding *.jmx* test plan. The *API_HOST* , *API_PORT* , *PAP_HOST* , *PAP_PORT* are already set up in *.jmx*.
+Performance Test of APEX-PDP
+++++++++++++++++++++++++++++
+
+Introduction
+------------
+
+Performance test of APEX-PDP is done similar to the stability test, but in a more extreme manner using higher thread count.
+
+Setup Details
+-------------
+
+The performance test is performed on a similar setup as Stability test.
-.. code-block:: bash
- nohup ./jmeter.sh -n -t ~/performance.jmx -Jusers=1 -l ~/perf.log
+Test Plan
+---------
+
+Performance test plan is the same as the stability test plan above except for the few differences listed below.
-Once the tests have completed, run the following the gather results.
+- Increase the number of threads used in the Main Phase from 5 to 20.
+- Reduce the test time to 2 hours.
+
+Run Test
+--------
.. code-block:: bash
- ~/jMeter/apache-jmeter-5.2.1/bin/jmeter -g perf.log -o ./performance_result/
+ nohup ./apache-jmeter-5.4.1/bin/jmeter.sh -n -t apexPdpPerformanceTestPlan.jmx -l perftestresults.jtl
-Performance Test Result
------------------------
-**Summary**
+Test Results
+------------
-Performance test was triggered for 90 minutes. The results are shown below.
+Test results are shown as below.
**Test Statistics**
-============================ =========== ========= ==================================
-**Total Number of Requests** **Success** **Error** **Average Time Taken per Request**
-============================ =========== ========= ==================================
-32304 99,99 % 0.01 % 8746.50 ms
-============================ =========== ========= ==================================
+======================= ================= ================== ==================================
+**Total # of requests** **Success %** **Error %** **Average time taken per request**
+======================= ================= ================== ==================================
+46946 100 % 0.00 % 198 ms
+======================= ================= ================== ==================================
**JMeter Screenshot**
-.. image:: images/apex_perf_jm_1.PNG
+.. image:: apex-s3p-results/apex_perf_jmeter_results.JPG
+
+Summary
++++++++
-.. image:: images/apex_perf_jm_2.PNG
+Multiple policies were executed in a multi threaded fashion for both stability and performance tests.
+Both tests ran smoothly without any issues.
diff --git a/docs/development/devtools/api-s3p-results/api-response-time-distribution_I.png b/docs/development/devtools/api-s3p-results/api-response-time-distribution_I.png
new file mode 100644
index 00000000..b53da6ba
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api-response-time-distribution_I.png
Binary files differ
diff --git a/docs/development/devtools/api-s3p-results/api-response-time-distribution_performance_I.png b/docs/development/devtools/api-s3p-results/api-response-time-distribution_performance_I.png
new file mode 100644
index 00000000..e65cc151
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api-response-time-distribution_performance_I.png
Binary files differ
diff --git a/docs/development/devtools/api-s3p-results/api-response-time-overtime_I.png b/docs/development/devtools/api-s3p-results/api-response-time-overtime_I.png
new file mode 100644
index 00000000..ad2f62e9
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api-response-time-overtime_I.png
Binary files differ
diff --git a/docs/development/devtools/api-s3p-results/api-response-time-overtime_performance_I.png b/docs/development/devtools/api-s3p-results/api-response-time-overtime_performance_I.png
new file mode 100644
index 00000000..91d291bd
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api-response-time-overtime_performance_I.png
Binary files differ
diff --git a/docs/development/devtools/api-s3p-results/api-s3p-jm-1_I.png b/docs/development/devtools/api-s3p-results/api-s3p-jm-1_I.png
new file mode 100644
index 00000000..d38df8dc
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api-s3p-jm-1_I.png
Binary files differ
diff --git a/docs/development/devtools/api-s3p-results/api-s3p-jm-2_I.png b/docs/development/devtools/api-s3p-results/api-s3p-jm-2_I.png
new file mode 100644
index 00000000..1c85d949
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api-s3p-jm-2_I.png
Binary files differ
diff --git a/docs/development/devtools/api-s3p-results/api_top_after_72h.JPG b/docs/development/devtools/api-s3p-results/api_top_after_72h.JPG
new file mode 100644
index 00000000..c69b2d0f
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api_top_after_72h.JPG
Binary files differ
diff --git a/docs/development/devtools/api-s3p-results/api_top_before_72h.JPG b/docs/development/devtools/api-s3p-results/api_top_before_72h.JPG
new file mode 100644
index 00000000..c2d17afa
--- /dev/null
+++ b/docs/development/devtools/api-s3p-results/api_top_before_72h.JPG
Binary files differ
diff --git a/docs/development/devtools/api-s3p.rst b/docs/development/devtools/api-s3p.rst
index 55867b44..1c66297b 100644
--- a/docs/development/devtools/api-s3p.rst
+++ b/docs/development/devtools/api-s3p.rst
@@ -33,8 +33,9 @@ with the following command:
.. code-block:: bash
- jmeter.sh --nongui --testfile policy_api_stability.jmx --logfile result.jtl
+ nohup ./apache-jmeter-5.4.1/bin/jmeter.sh -n -t policy_api_stability.jmx -l stabilityTestResultsPolicyApi.jtl
+The test was run in the background via “nohup”, to prevent it from being interrupted.
Test Plan
---------
@@ -54,6 +55,7 @@ of each entity is set to the running thread number.
**API Test Flow (5 threads running the same steps in the same loop)**
+- Get Policy Metrics
- Create a new Monitoring Policy Type with Version 6.0.#
- Create a new Monitoring Policy Type with Version 7.0.#
- Create a new Optimization Policy Type with Version 6.0.#
@@ -118,18 +120,31 @@ The load was performed against a non-tweaked ONAP OOM installation.
======================= ============= =========== =============================== =============================== ===============================
**Total # of requests** **Success %** **TPS** **Avg. time taken per request** **Min. time taken per request** **Max. time taken per request**
======================= ============= =========== =============================== =============================== ===============================
- 627746 100% 2.42 2058 ms 26 ms 72809 ms
+ 242277 100% 0.935 5340 ms 1 ms 736976 ms
======================= ============= =========== =============================== =============================== ===============================
-.. image:: images/api-s3p-jm-1_H.png
+.. image:: api-s3p-results/api-s3p-jm-1_I.png
**JMeter Results**
The following graphs show the response time distributions. The "Get Policy Types" API calls are the most expensive calls that
-average a 10 seconds plus response time.
+average a 7 seconds plus response time.
-.. image:: images/api-response-time-distribution_H.png
-.. image:: images/api-response-time-overtime_H.png
+.. image:: api-s3p-results/api-response-time-distribution_I.png
+.. image:: api-s3p-results/api-response-time-overtime_I.png
+
+**Memory and CPU usage**
+
+The memory and CPU usage can be monitored by running "top" command in the policy-api pod.
+A snapshot is taken before and after test execution to monitor the changes in resource utilization.
+
+Memory and CPU usage before test execution:
+
+.. image:: api-s3p-results/api_top_before_72h.JPG
+
+Memory and CPU usage after test execution:
+
+.. image:: api-s3p-results/api_top_after_72h.JPG
Performance Test of Policy API
@@ -151,8 +166,9 @@ with the following command:
.. code-block:: bash
- jmeter.sh --nongui --testfile policy_api_performance.jmx --logfile result.jtl
+ nohup ./apache-jmeter-5.4.1/bin/jmeter.sh -n -t policy_api_performance.jmx -l performanceTestResultsPolicyApi.jtl
+The test was run in the background via “nohup”, to prevent it from being interrupted.
Test Plan
---------
@@ -170,18 +186,18 @@ Running/Triggering performance test will be the same as stability test. That is,
======================= ============= =========== =============================== =============================== ===============================
**Total # of requests** **Success %** **TPS** **Avg. time taken per request** **Min. time taken per request** **Max. time taken per request**
======================= ============= =========== =============================== =============================== ===============================
- 4082 100% 0.45 1297 ms 4 ms 63612 ms
+ 2822 100% 0.31 63794 ms 2 ms 1183376 ms
======================= ============= =========== =============================== =============================== ===============================
-.. image:: images/api-s3p-jm-2_H.png
+.. image:: api-s3p-results/api-s3p-jm-2_I.png
Test Results
------------
The following graphs show the response time distributions.
-.. image:: images/api-response-time-distribution_performance_H.png
-.. image:: images/api-response-time-overtime_performance_H.png
+.. image:: api-s3p-results/api-response-time-distribution_performance_I.png
+.. image:: api-s3p-results/api-response-time-overtime_performance_I.png
diff --git a/docs/development/devtools/clamp-cl-participant-protocol-smoke.rst b/docs/development/devtools/clamp-cl-participant-protocol-smoke.rst
new file mode 100644
index 00000000..98d7fcda
--- /dev/null
+++ b/docs/development/devtools/clamp-cl-participant-protocol-smoke.rst
@@ -0,0 +1,144 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. _clamp-gui-controlloop-smoke-tests:
+CLAMP Participant Protocol Smoke Tests
+---------------------------
+1. Introduction
+***************
+The CLAMP Control Loop Participant protocol is an asynchronous protocol that is used by the CLAMP runtime
+to coordinate life cycle management of Control Loop instances.
+This document will serve as a guide to do smoke tests on the different usecases that are involved when
+working with the Participant protocol and outline how they operate.
+It will also show a developer how to set up their environment for carrying out smoke tests on the participants.
+
+2. Setup Guide
+**************
+This section will show the developer how to set up their environment to start testing participants with some instruction on how to carry out the tests. There are a number of prerequisites. Note that this guide is written by a Linux user - although the majority of the steps show will be exactly the same in Windows or other systems.
+
+2.1 Prerequisites
+=================
+- Java 11
+- Docker
+- Maven 3
+- Git
+- Refer to this guide for basic environment setup `Setting up dev environment <https://wiki.onap.org/display/DW/Setting+Up+Your+Development+Environment>`_
+
+2.2 Setting up the components
+=============================
+- Controlloop runtime component docker image is started and running.
+- Participant docker images policy-clamp-cl-pf-ppnt, policy-clamp-cl-http-ppnt, policy-clamp-cl-k8s-ppnt are started and running.
+- Dmaap simulator for communication between components.
+- mariadb docker container for policy and controlloop database.
+- policy-api for communication between policy participant and policy-framework
+In this setup guide, we will be setting up all the components technically required for a working convenient dev environment. We will not be setting up all of the participants - we will setup only the policy participant as an example.
+
+2.2.1 MariaDB Setup
+===================
+We will be using Docker to run our mariadb instance. It will have a total of two databases running in it.
+- controlloop: the runtime-controlloop db
+- policyadmin: the policy-api db
+
+3. Running Tests of protocol dialogues
+**************************************
+lloop type definitions and common property values for participant types
+In this section, we will run through the functionalities mentioned at the start of this document is section 1. Each functionality will be tested and we will confirm that they were carried out successfully. There is a tosca service template that can be used for this test
+:download:`Tosca Service Template <tosca/tosca-for-gui-smoke-tests.yaml>`
+
+3.1 Participant Registration
+============================
+Action: Bring up the participant
+Test result:
+- Observe PARTICIPANT_REGISTER going from participant to runtime
+- Observe PARTICIPANT_REGISTER_ACK going from runtime to participant
+- Observe PARTICIPANT_UPDATE going from runtime to participant
+
+3.2 Participant Deregistration
+==============================
+Action: Bring down the participant
+Test result:
+- Observe PARTICIPANT_DEREGISTER going from participant to runtime
+- Observe PARTICIPANT_DEREGISTER_ACK going from runtime to participant
+
+3.3 Participant Priming
+=======================
+When a control loop is primed, the portion of the Control Loop Type Definition and Common Property values for the participants
+of each participant type mentioned in the Control Loop Definition are sent to the participants.
+Action: Invoke a REST API to prime controlloop type definitions and set values of common properties
+Test result:
+- Observe PARTICIPANT_UPDATE going from runtime to participant with controlloop type definitions and common property values for participant types
+- Observe that the controlloop type definitions and common property values for participant types are stored on ParticipantHandler
+- Observe PARTICIPANT_UPDATE_ACK going from runtime to participant
+
+3.4 Participant DePriming
+=========================
+When a control loop is de-primed, the portion of the Control Loop Type Definition and Common Property values for the participants
+of each participant type mentioned in the Control Loop Definition are deleted on participants.
+Action: Invoke a REST API to deprime controlloop type definitions
+Test result:
+- If controlloop instances exist in runtime database, return a response for the REST API with error response saying "Cannot decommission controlloop type definition"
+- If no controlloop instances exist in runtime database, Observe PARTICIPANT_UPDATE going from runtime to participant with definitions as null
+- Observe that the controlloop type definitions and common property values for participant types are removed on ParticipantHandler
+- Observe PARTICIPANT_UPDATE_ACK going from runtime to participant
+
+3.5 Control Loop Update
+=======================
+Control Loop Update handles creation, change, and deletion of control loops on participants.
+Action: Trigger controlloop instantiation from GUI
+Test result:
+- Observe CONTROL_LOOP_UPDATE going from runtime to participant
+- Observe that the controlloop type instances and respective property values for participant types are stored on ControlLoopHandler
+- Observe that the controlloop state is UNINITIALISED
+- Observe CONTROL_LOOP_UPDATE_ACK going from participant to runtime
+
+3.6 Control Loop state change to PASSIVE
+========================================
+Control Loop Update handles creation, change, and deletion of control loops on participants.
+Action: Change state of the controlloop to PASSIVE
+Test result:
+- Observe CONTROL_LOOP_STATE_CHANGE going from runtime to participant
+- Observe that the ControlLoopElements state is PASSIVE
+- Observe that the controlloop state is PASSIVE
+- Observe CONTROL_LOOP_STATE_CHANGE_ACK going from participant to runtime
+
+3.7 Control Loop state change to RUNNING
+========================================
+Control Loop Update handles creation, change, and deletion of control loops on participants.
+Action: Change state of the controlloop to RUNNING
+Test result:
+- Observe CONTROL_LOOP_STATE_CHANGE going from runtime to participant
+- Observe that the ControlLoopElements state is RUNNING
+- Observe that the controlloop state is RUNNING
+- Observe CONTROL_LOOP_STATE_CHANGE_ACK going from participant to runtime
+
+3.8 Control Loop state change to PASSIVE
+========================================
+Control Loop Update handles creation, change, and deletion of control loops on participants.
+Action: Change state of the controlloop to PASSIVE
+Test result:
+- Observe CONTROL_LOOP_STATE_CHANGE going from runtime to participant
+- Observe that the ControlLoopElements state is PASSIVE
+- Observe that the controlloop state is PASSIVE
+- Observe CONTROL_LOOP_STATE_CHANGE_ACK going from participant to runtime
+
+3.9 Control Loop state change to UNINITIALISED
+==============================================
+Control Loop Update handles creation, change, and deletion of control loops on participants.
+Action: Change state of the controlloop to UNINITIALISED
+Test result:
+- Observe CONTROL_LOOP_STATE_CHANGE going from runtime to participant
+- Observe that the ControlLoopElements state is UNINITIALISED
+- Observe that the controlloop state is UNINITIALISED
+- Observe that the ControlLoopElements undeploy the instances from respective frameworks
+- Observe that the control loop instances are removed from participants
+- Observe CONTROL_LOOP_STATE_CHANGE_ACK going from participant to runtime
+
+3.10 Control Loop monitoring and reporting
+==========================================
+This dialogue is used as a heartbeat mechanism for participants, to monitor the status of Control Loop Elements, and to gather statistics on control loops. The ParticipantStatus message is sent periodically by each participant. The reporting interval for sending the message is configurable
+Action: Bring up participant
+Test result:
+- Observe that PARTICIPANT_STATUS message is sent from participants to runtime in a regular interval
+- Trigger a PARTICIPANT_STATUS_REQ from runtime and observe a PARTICIPANT_STATUS message with tosca definitions of control loop type definitions sent
+from all the participants to runtime
+
+This concluded the required smoke tests
+
diff --git a/docs/development/devtools/clamp-s3p-results/Stability_after_stats.png b/docs/development/devtools/clamp-s3p-results/Stability_after_stats.png
new file mode 100644
index 00000000..8370f0df
--- /dev/null
+++ b/docs/development/devtools/clamp-s3p-results/Stability_after_stats.png
Binary files differ
diff --git a/docs/development/devtools/clamp-s3p-results/Stability_before_stats.png b/docs/development/devtools/clamp-s3p-results/Stability_before_stats.png
new file mode 100644
index 00000000..46eaddf6
--- /dev/null
+++ b/docs/development/devtools/clamp-s3p-results/Stability_before_stats.png
Binary files differ
diff --git a/docs/development/devtools/clamp-s3p-results/cl-s3p-performance-result-jmeter.png b/docs/development/devtools/clamp-s3p-results/cl-s3p-performance-result-jmeter.png
new file mode 100644
index 00000000..30fc4bba
--- /dev/null
+++ b/docs/development/devtools/clamp-s3p-results/cl-s3p-performance-result-jmeter.png
Binary files differ
diff --git a/docs/development/devtools/clamp-s3p-results/controlloop_stability_jmeter.png b/docs/development/devtools/clamp-s3p-results/controlloop_stability_jmeter.png
new file mode 100644
index 00000000..058b98ae
--- /dev/null
+++ b/docs/development/devtools/clamp-s3p-results/controlloop_stability_jmeter.png
Binary files differ
diff --git a/docs/development/devtools/clamp-s3p-results/controlloop_stability_table.png b/docs/development/devtools/clamp-s3p-results/controlloop_stability_table.png
new file mode 100644
index 00000000..0289a289
--- /dev/null
+++ b/docs/development/devtools/clamp-s3p-results/controlloop_stability_table.png
Binary files differ
diff --git a/docs/development/devtools/clamp-s3p.rst b/docs/development/devtools/clamp-s3p.rst
new file mode 100644
index 00000000..08f0953c
--- /dev/null
+++ b/docs/development/devtools/clamp-s3p.rst
@@ -0,0 +1,197 @@
+.. This work is licensed under a
+.. Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+.. _controlloop-s3p-label:
+
+.. toctree::
+ :maxdepth: 2
+
+Policy Clamp Controlloop
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Both the Performance and the Stability tests were executed by performing requests
+against controlloop components installed as docker images in local environment.
+
+Setup Details
++++++++++++++
+
+- Controlloop runtime component docker image is started and running.
+- Participant docker images policy-clamp-cl-pf-ppnt, policy-clamp-cl-http-ppnt, policy-clamp-cl-k8s-ppnt are started and running.
+- Dmaap simulator for communication between components.
+- mariadb docker container for policy and controlloop database.
+- policy-api for communication between policy participant and policy-framework
+- Both tests were run via jMeter, which was installed on a separate VM.
+
+Stability Test of Controlloop components
+++++++++++++++++++++++++++++++++++++++++
+
+Test Plan
+---------
+The 72 hours stability test ran the following steps sequentially in a single threaded loop.
+
+- **Create Policy defaultDomain** - creates an operational policy using policy/api component
+- **Delete Policy sampleDomain** - deletes the operational policy sampleDomain using policy/api component
+- **Commission Contorlloop definition** - commissions the controlloop definition in runtime
+- **Instantiate controlloop** - Instantiate the controlloop towards participants
+- **Check controlloop state** - check the current state of controlloop
+- **Change State to PASSIVE** - change the state of the controlloop to PASSIVE
+- **Check controlloop state** - check the current state of controlloop
+- **Change State to UNINITIALISED** - change the state of the controloop to UNINITIALISED
+- **Check controlloop state** - check the current state of controlloop
+- **Delete instantiated controlloop** - delete the instantiated controlloop from all participants
+- **Delete ControlLoop Definition** - delete the controlloop definition on runtime
+
+The following steps can be used to configure the parameters of test plan.
+
+- **HTTP Authorization Manager** - used to store user/password authentication details.
+- **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
+- **User Defined Variables** - used to store following user defined parameters.
+
+============================= ========================================================================
+ **Name** **Description**
+============================= ========================================================================
+ RUNTIME_HOST IP Address or host name of controlloop runtime component
+ RUNTIME_PORT Port number of controlloop runtime components for making REST API calls
+ POLICY_PARTICIPANT_HOST IP Address or host name of policy participant
+ POLICY_PARTICIPANT_HOST_PORT Port number of policy participant
+============================= ========================================================================
+
+The test was run in the background via "nohup", to prevent it from being interrupted:
+
+.. code-block:: bash
+
+ nohup ./jMeter/apache-jmeter-5.2.1/bin/jmeter -n -t stability.jmx -l testresults.jtl
+
+Test Results
+------------
+
+**Summary**
+
+Stability test plan was triggered for 72 hours.
+
+.. Note::
+
+ .. container:: paragraph
+
+ The assertions of state changes are not completely taken care of, as the stability is ran with controlloop componenets
+ alone, and not including complete policy framework deployment, which makes it difficult for actual state changes from
+ PASSIVE to RUNNING etc to happen.
+
+**Test Statistics**
+
+======================= ================= ================== ==================================
+**Total # of requests** **Success %** **Error %** **Average time taken per request**
+======================= ================= ================== ==================================
+99992 100.00 % 0.00 % 192 ms
+======================= ================= ================== ==================================
+
+**Controloop component Setup**
+
+================ ========================================================= =========================================== =========================
+**CONTAINER ID** **IMAGE** **PORTS** **NAMES**
+================ ========================================================= =========================================== =========================
+ a9cb0cd103cf onap/policy-clamp-cl-runtime:latest 6969/tcp policy-clamp-cl-runtime
+ 886e572b8438 onap/policy-clamp-cl-pf-ppnt:latest 6973/tcp policy-clamp-cl-pf-ppnt
+ 035707b1b95f nexus3.onap.org:10001/onap/policy-api:latest 6969/tcp policy-api
+ d34204f95ff3 onap/policy-clamp-cl-http-ppnt:latest 6971/tcp policy-clamp-cl-http-ppnt
+ 4470e608c9a8 onap/policy-clamp-cl-k8s-ppnt:latest 6972/tcp, 8083/tcp policy-clamp-cl-k8s-ppnt
+ 62229d46b79c nexus3.onap.org:10001/onap/policy-models-simulator:latest 3905/tcp, 6666/tcp, 6668-6670/tcp, 6680/tcp simulator
+ efaf0ca5e1f0 nexus3.onap.org:10001/mariadb:10.5.8 3306/tcp mariadb
+================ ========================================================= =========================================== =========================
+
+.. Note::
+
+ .. container:: paragraph
+
+ There were no failures during the 72 hours test.
+
+**JMeter Screenshot**
+
+.. image:: clamp-s3p-results/controlloop_stability_jmeter.png
+
+**JMeter Screenshot**
+
+.. image:: clamp-s3p-results/controlloop_stability_table.png
+
+**Memory and CPU usage**
+
+The memory and CPU usage can be monitored by running "docker stats" command. A snapshot is taken before and after test execution to monitor the changes in resource utilization.
+
+Memory and CPU usage before test execution:
+
+.. image:: clamp-s3p-results/Stability_before_stats.png
+
+Memory and CPU usage after test execution:
+
+.. image:: clamp-s3p-results/Stability_after_stats.png
+
+
+Performance Test of Controlloop components
+++++++++++++++++++++++++++++++++++++++++++
+
+Introduction
+------------
+
+Performance test of Controlloop components has the goal of testing the min/avg/max processing time and rest call throughput for all the requests with multiple requests at the same time.
+
+Setup Details
+-------------
+
+The performance test is performed on a similar setup as Stability test. The JMeter VM will be sending a large number of REST requests to the runtime component and collecting the statistics.
+
+
+Test Plan
+---------
+
+Performance test plan is the same as the stability test plan above except for the few differences listed below.
+
+- Increase the number of threads up to 5 (simulating 5 users' behaviours at the same time).
+- Reduce the test time to 2 hours.
+
+Run Test
+--------
+
+Running/Triggering the performance test will be the same as the stability test. That is, launch JMeter pointing to corresponding *.jmx* test plan. The *RUNTIME_HOST*, *RUNTIME_PORT*, *POLICY_PARTICIPANT_HOST*, *POLICY_PARTICIPANT_HOST_PORT* are already set up in *.jmx*
+
+.. code-block:: bash
+
+ nohup ./jMeter/apache-jmeter-5.2.1/bin/jmeter -n -t performance.jmx -l testresults.jtl
+
+Once the test execution is completed, execute the below script to get the statistics:
+
+.. code-block:: bash
+
+ $ cd ./clamp/testsuites/performance/src/main/resources/testplans
+ $ ./results.sh resultTree.log
+
+Test Results
+------------
+
+Test results are shown as below.
+
+**Test Statistics**
+
+======================= ================= ================== ==================================
+**Total # of requests** **Success %** **Error %** **Average time taken per request**
+======================= ================= ================== ==================================
+13809 100 % 0.00 % 206 ms
+======================= ================= ================== ==================================
+
+**Controloop component Setup**
+
+================ ========================================================= =========================================== =========================
+**CONTAINER ID** **IMAGE** **PORTS** **NAMES**
+================ ========================================================= =========================================== =========================
+ a9cb0cd103cf onap/policy-clamp-cl-runtime:latest 6969/tcp policy-clamp-cl-runtime
+ 886e572b8438 onap/policy-clamp-cl-pf-ppnt:latest 6973/tcp policy-clamp-cl-pf-ppnt
+ 035707b1b95f nexus3.onap.org:10001/onap/policy-api:latest 6969/tcp policy-api
+ d34204f95ff3 onap/policy-clamp-cl-http-ppnt:latest 6971/tcp policy-clamp-cl-http-ppnt
+ 4470e608c9a8 onap/policy-clamp-cl-k8s-ppnt:latest 6972/tcp, 8083/tcp policy-clamp-cl-k8s-ppnt
+ 62229d46b79c nexus3.onap.org:10001/onap/policy-models-simulator:latest 3905/tcp, 6666/tcp, 6668-6670/tcp, 6680/tcp simulator
+ efaf0ca5e1f0 nexus3.onap.org:10001/mariadb:10.5.8 3306/tcp mariadb
+================ ========================================================= =========================================== =========================
+
+**JMeter Screenshot**
+
+.. image:: clamp-s3p-results/cl-s3p-performance-result-jmeter.png
diff --git a/docs/development/devtools/devtools.rst b/docs/development/devtools/devtools.rst
index 1a001b02..8e684101 100644
--- a/docs/development/devtools/devtools.rst
+++ b/docs/development/devtools/devtools.rst
@@ -233,7 +233,7 @@ Developing and Debugging each Policy Component
Running a MariaDb Instance
++++++++++++++++++++++++++
-The Policy Framework requires a MariaDb instance running. The easiest way to do this is to run a docker image locally.
+The Policy Framework requires a MariaDb instance running. The easiest way to do this is to run a docker image locally.
One example on how to do this is to use the scripts used by the policy/api S3P tests.
@@ -276,6 +276,8 @@ familiar with the Policy Framework components and test any local changes.
.. toctree::
:maxdepth: 1
+ policy-gui-controlloop-smoke.rst
+
..
api-smoke.rst
@@ -297,6 +299,9 @@ familiar with the Policy Framework components and test any local changes.
..
clamp-smoke.rst
+..
+ clamp-cl-participant-protocol-smoke.rst
+
Running the Stability/Performance Tests
***************************************
@@ -312,9 +317,10 @@ familiar with the Policy Framework components and test any local changes.
drools-s3p.rst
xacml-s3p.rst
distribution-s3p.rst
+ clamp-s3p.rst
Running the Pairwise Tests
-***********************
+**************************
The following links contain instructions on how to run the pairwise tests. These may be helpful to developers check that
the Policy Framework works in a full ONAP deployment.
diff --git a/docs/development/devtools/distribution-s3p.rst b/docs/development/devtools/distribution-s3p.rst
index 13c47924..015e10bb 100644
--- a/docs/development/devtools/distribution-s3p.rst
+++ b/docs/development/devtools/distribution-s3p.rst
@@ -13,7 +13,10 @@ Policy Distribution component
VM Details
----------
-The stability and performance tests are performed on VM's running in the OpenStack cloud environment in the ONAP integration lab. There are two separate VMs, one for running backend policy services which policy distribution needs, and the other for the policy distribution service itself and Jmeter.
+The stability and performance tests are performed on VM's running in the OpenStack cloud
+environment in the ONAP integration lab. There are two separate VMs, one for running backend policy
+services which policy distribution needs, and the other for the policy distribution service itself
+and Jmeter.
**OpenStack environment details**
@@ -28,20 +31,9 @@ The stability and performance tests are performed on VM's running in the OpenSta
- Docker version 19.03.8, build afacb8b7f0
- Java: openjdk 11.0.8 2020-07-14
-**JMeter and Distribution VM details (VM2)**
-- OS: Ubuntu 18.04.5 LTS
-- CPU: 8 core, Intel Xeon E3-12xx v2 (Ivy Bridge), 2693.668 MHz, 16384 kB cache
-- RAM: 32 GB
-- HardDisk: 200 GB
-- Docker version 19.03.8, build afacb8b7f0
-- Java: openjdk 11.0.8 2020-07-14
-- JMeter: 5.1.1
-
-
-VM1 & VM2: Common Setup
------------------------
-Make sure to execute below commands on both VM1 & VM2
+Common Setup
+------------
Update the ubuntu software installer
@@ -64,20 +56,20 @@ Ensure that the Java version that is executing is OpenJDK version 11
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)
-Install Docker
+Install Docker and Docker Compose
.. code-block:: bash
# Add docker repository
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- sudo apt update
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
+
+ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
+ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- # Check available docker versions (if necessary)
- apt-cache policy docker-ce
+ sudo apt update
# Install docker
- sudo apt install -y docker-ce=5:19.03.8~3-0~ubuntu-bionic docker-ce-cli=5:19.03.8~3-0~ubuntu-bionic containerd.io
+ sudo apt-get install docker-ce docker-ce-cli containerd.io
Change the permissions of the Docker socket file
@@ -89,81 +81,85 @@ Check the status of the Docker service and ensure it is running correctly
.. code-block:: bash
- $ systemctl status --no-pager docker
+ systemctl status --no-pager docker
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-10-14 13:59:40 UTC; 1 weeks 0 days ago
# ... (truncated for brevity)
- $ docker ps
+ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-Clone the policy-distribution repo to access the test scripts
+Install and verify docker-compose
.. code-block:: bash
- git clone https://gerrit.onap.org/r/policy/distribution
+ # Install compose
+ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+ sudo chmod +x /usr/local/bin/docker-compose
+ # Check if install was successful
+ docker-compose --version
-VM1 Only: Install Simulators, Policy-PAP, Policy-API and MariaDB
-----------------------------------------------------------------
+Clone the policy-distribution repo to access the test scripts
-Modify the setup_components.sh script located at:
+.. code-block:: bash
-- ~/distribution/testsuites/stability/src/main/resources/simulatorsetup/setup_components.sh
+ git clone https://gerrit.onap.org/r/policy/distribution
-Ensure the correct docker image versions are specified - e.g. for Guilin-RC0
+.. _setup-distribution-s3p-components:
-- nexus3.onap.org:10001/onap/policy-api:2.3.2
-- nexus3.onap.org:10001/onap/policy-pap:2.3.2
+Start services for MariaDB, Policy API, PAP and Distribution
+------------------------------------------------------------
-Run the setup_components.sh script to start the test support components:
+Navigate to the main folder for scripts to setup services:
.. code-block:: bash
- ~/distribution/testsuites/stability/src/main/resources/simulatorsetup/setup_components.sh
+ cd ~/distribution/testsuites/stability/src/main/resources/setup
-After installation, ensure the following docker containers are up and running:
+Modify the versions.sh script to match all the versions being tested.
.. code-block:: bash
- $ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- a187cb0ff08a nexus3.onap.org:10001/onap/policy-pap:2.3.2 "bash ./policy-pap.sh" 4 days ago Up 4 days 0.0.0.0:7000->6969/tcp policy-pap
- 2f7632fe90c3 nexus3.onap.org:10001/onap/policy-api:2.3.2 "bash ./policy-api.sh" 4 days ago Up 4 days 0.0.0.0:6969->6969/tcp policy-api
- 70fa27d6d992 pdp/simulator:latest "bash pdp-sim.sh" 4 days ago Up 4 days pdp-simulator
- 3c9ff28ba050 dmaap/simulator:latest "bash dmaap-sim.sh" 4 days ago Up 4 days 0.0.0.0:3904->3904/tcp message-router
- 60cfcf8cfe65 mariadb:10.2.14 "docker-entrypoint.s…" 4 days ago Up 4 days 0.0.0.0:3306->3306/tcp mariadb
-
+ vi ~/distribution/testsuites/stability/src/main/resources/setup/versions.sh
-VM2 Only: Install Distribution
-------------------------------
+Ensure the correct docker image versions are specified - e.g. for Istanbul-M4
-Modify the setup_distribution.sh script located at:
+- export POLICY_DIST_VERSION=2.6.1-SNAPSHOT
-- ~/distribution/testsuites/stability/src/main/resources/distributionsetup/setup_distribution.sh
-
-Ensure the correct docker image version is specified - e.g. for Guilin-RC0:
-
-- nexus3.onap.org:10001/onap/policy-distribution:2.4.2
-
-Run the setup_distribution.sh script to install the distribution service, provide the IP of VM1 (twice) as the arguments to the script:
+Run the start.sh script to start the components. After installation, script will execute
+``docker ps`` and show the running containers.
.. code-block:: bash
- ~/distribution/testsuites/stability/src/main/resources/distributionsetup/setup_distribution.sh <vm1-ipaddr> <vm1-ipaddr>
+ ./start.sh
-Ensure the distribution container is running.
+ Creating network "setup_default" with the default driver
+ Creating policy-distribution ... done
+ Creating mariadb ... done
+ Creating simulator ... done
+ Creating policy-db-migrator ... done
+ Creating policy-api ... done
+ Creating policy-pap ... done
+
+ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+ f91be98ad1f4 nexus3.onap.org:10001/onap/policy-pap:2.5.1-SNAPSHOT "/opt/app/policy/pap…" 1 second ago Up Less than a second 6969/tcp policy-pap
+ d92cdbe971d4 nexus3.onap.org:10001/onap/policy-api:2.5.1-SNAPSHOT "/opt/app/policy/api…" 1 second ago Up Less than a second 6969/tcp policy-api
+ 9a019f5d641e nexus3.onap.org:10001/onap/policy-db-migrator:2.3.1-SNAPSHOT "/opt/app/policy/bin…" 2 seconds ago Up 1 second 6824/tcp policy-db-migrator
+ 108ba238edeb nexus3.onap.org:10001/mariadb:10.5.8 "docker-entrypoint.s…" 3 seconds ago Up 1 second 3306/tcp mariadb
+ bec9b223e79f nexus3.onap.org:10001/onap/policy-models-simulator:2.5.1-SNAPSHOT "simulators.sh" 3 seconds ago Up 1 second 3905/tcp simulator
+ 74aa5abeeb08 nexus3.onap.org:10001/onap/policy-distribution:2.6.1-SNAPSHOT "/opt/app/policy/bin…" 3 seconds ago Up 1 second 6969/tcp, 9090/tcp policy-distribution
-.. code-block:: bash
- $ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 9a8db2bad156 nexus3.onap.org:10001/onap/policy-distribution:2.4.2 "bash ./policy-dist.…" 29 hours ago Up 29 hours 0.0.0.0:6969->6969/tcp, 0.0.0.0:9090->9090/tcp policy-distribution
+.. note::
+ The containers on this docker-compose are running with HTTP configuration. For HTTPS, ports
+ and configurations will need to be changed, as well certificates and keys must be generated
+ for security.
-VM2 Only: Install JMeter
-------------------------
+Install JMeter
+--------------
Download and install JMeter
@@ -174,15 +170,17 @@ Download and install JMeter
# Install JMeter
mkdir -p jmeter
- wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.1.1.zip
- unzip -qd jmeter apache-jmeter-5.1.1.zip
- rm apache-jmeter-5.1.1.zip
+ cd jmeter
+ wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.1.zip
+ unzip -q apache-jmeter-5.4.1.zip
+ rm apache-jmeter-5.4.1.zip
-VM2 Only: Install & configure visualVM
+Install & configure visualVM
--------------------------------------
-VisualVM needs to be installed in the virtual machine running Distribution (VM2). It will be used to monitor CPU, Memory and GC for Distribution while the stability tests are running.
+VisualVM needs to be installed in the virtual machine running Distribution. It will be used to
+monitor CPU, Memory and GC for Distribution while the stability tests are running.
.. code-block:: bash
@@ -192,6 +190,9 @@ Run these commands to configure permissions
.. code-block:: bash
+ # Set globally accessable permissions on policy file
+ sudo chmod 777 /usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy
+
# Create Java security policy file for VisualVM
sudo cat > /usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy << EOF
grant codebase "jrt:/jdk.jstatd" {
@@ -202,19 +203,20 @@ Run these commands to configure permissions
};
EOF
- # Set globally accessable permissions on policy file
- sudo chmod 777 /usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy
-
Run the following command to start jstatd using port 1111
.. code-block:: bash
/usr/lib/jvm/java-11-openjdk-amd64/bin/jstatd -p 1111 -J-Djava.security.policy=/usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy &
-Run visualVM to connect to localhost:9090
+Run visualVM to connect to POLICY_DISTRIBUTION_IP:9090
.. code-block:: bash
+ # Get the Policy Distribution container IP
+ echo $(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' policy-distribution)
+
+ # Start visual vm
visualvm &
This will load up the visualVM GUI
@@ -222,12 +224,13 @@ This will load up the visualVM GUI
Connect to Distribution JMX Port.
1. Right click on "Local" in the left panel of the screen and select "Add JMX Connection"
- 2. Enter the Port 9090. this is the JMX port exposed by the distribution container
+ 2. Enter the Distribution container IP and Port 9090. This is the JMX port exposed by the
+ distribution container
3. Double click on the newly added nodes under "Local" to start monitoring CPU, Memory & GC.
Example Screenshot of visualVM
-.. image:: images/distribution-s3p-vvm-sample.png
+.. image:: images/distribution/distribution-s3p-vvm-sample.png
Stability Test of Policy Distribution
@@ -236,9 +239,17 @@ Stability Test of Policy Distribution
Introduction
------------
-The 72 hour Stability Test for policy distribution has the goal of introducing a steady flow of transactions initiated from a test client server running JMeter. The policy distribution is configured with a special FileSystemReception plugin to monitor a local directory for newly added csar files to be processed by itself. The input CSAR will be added/removed by the test client(JMeter) and the result will be pulled from the backend (PAP and PolicyAPI) by the test client (JMeter).
+The 72 hour Stability Test for policy distribution has the goal of introducing a steady flow of
+transactions initiated from a test client server running JMeter. The policy distribution is
+configured with a special FileSystemReception plugin to monitor a local directory for newly added
+csar files to be processed by itself. The input CSAR will be added/removed by the test client
+(JMeter) and the result will be pulled from the backend (PAP and PolicyAPI) by the test client
+(JMeter).
-The test will be performed in an environment where Jmeter will continuously add/remove a test csar into the special directory where policy distribution is monitoring and will then get the processed results from PAP and PolicyAPI to verify the successful deployment of the policy. The policy will then be undeployed and the test will loop continuously until 72 hours have elapsed.
+The test will be performed in an environment where Jmeter will continuously add/remove a test csar
+into the special directory where policy distribution is monitoring and will then get the processed
+results from PAP and PolicyAPI to verify the successful deployment of the policy. The policy will
+then be undeployed and the test will loop continuously until 72 hours have elapsed.
Test Plan Sequence
@@ -274,24 +285,33 @@ The following steps can be used to configure the parameters of the test plan.
Screenshot of Distribution stability test plan
-.. image:: images/distribution-s3p-testplan.png
+.. image:: images/distribution/distribution-s3p-testplan.png
Running the Test Plan
---------------------
-Edit the /tmp folder permissions to allow the testplan to insert the CSAR into the /tmp/policydistribution/distributionmount folder
+Check if the /tmp/policydistribution/distributionmount exists as it was created during the start.sh
+script execution. If not, run the following commands to create folder and change folder permissions
+to allow the testplan to insert the CSAR into the /tmp/policydistribution/distributionmount folder.
.. code-block:: bash
sudo mkdir -p /tmp/policydistribution/distributionmount
sudo chmod -R a+trwx /tmp
-From the apache JMeter folder run the test for 72h, pointing it towards the stability.jmx file inside the testplans folder and specifying a logfile to collect the results
+
+Navigate to the stability test folder.
+
+.. code-block:: bash
+
+ cd ~/distribution/testsuites/stability/src/main/resources/testplans/
+
+Execute the run_test.sh
.. code-block:: bash
- ~/jmeter/apache-jmeter-5.1.1/bin/jmeter -n -t ~/distribution/testsuites/stability/src/main/resources/testplans/stability.jmx -Jduration=259200 -l ~/distr-stability.jtl &
+ ./run_test.sh
Test Results
@@ -304,13 +324,13 @@ Test Results
**Test Statistics**
-.. image:: images/dist_stability_statistics.PNG
-.. image:: images/dist_stability_threshold.PNG
+.. image:: images/distribution/dist_stability_statistics.PNG
+.. image:: images/distribution/dist_stability_threshold.PNG
**VisualVM Screenshots**
-.. image:: images/dist_stability_monitor.PNG
-.. image:: images/dist_stability_threads.PNG
+.. image:: images/distribution/dist_stability_monitor.PNG
+.. image:: images/distribution/dist_stability_threads.PNG
Performance Test of Policy Distribution
@@ -319,9 +339,12 @@ Performance Test of Policy Distribution
Introduction
------------
-The 4h Performance Test of Policy Distribution has the goal of testing the min/avg/max processing time and rest call throughput for all the requests when the number of requests are large enough to saturate the resource and find the bottleneck.
+The 4h Performance Test of Policy Distribution has the goal of testing the min/avg/max processing
+time and rest call throughput for all the requests when the number of requests are large enough to
+saturate the resource and find the bottleneck.
-It also tests that distribution can handle multiple policy CSARs and that these are deployed within 30 seconds consistently.
+It also tests that distribution can handle multiple policy CSARs and that these are deployed within
+30 seconds consistently.
Setup Details
@@ -335,26 +358,33 @@ Test Plan Sequence
Performance test plan is different from the stability test plan.
-- Instead of handling one policy csar at a time, multiple csar's are deployed within the watched folder at the exact same time.
+- Instead of handling one policy csar at a time, multiple csar's are deployed within the watched
+ folder at the exact same time.
- We expect all policies from these csar's to be deployed within 30 seconds.
-- There are also multithreaded tests running towards the healthcheck and statistics endpoints of the distribution service.
+- There are also multithreaded tests running towards the healthcheck and statistics endpoints of
+ the distribution service.
Running the Test Plan
---------------------
-Edit the /tmp folder permissions to allow the Testplan to insert the CSAR into the /tmp/policydistribution/distributionmount folder.
+Check if /tmp folder permissions to allow the Testplan to insert the CSAR into the
+/tmp/policydistribution/distributionmount folder.
+Clean up from previous run. If necessary, put containers down with script `down.sh` from setup
+folder mentioned on :ref:`Setup components <setup-distribution-s3p-components>`
.. code-block:: bash
sudo mkdir -p /tmp/policydistribution/distributionmount
sudo chmod -R a+trwx /tmp
-From the apache JMeter folder run the test for 4h, pointing it towards the performance.jmx file inside the testplans folder and specifying a logfile to collect the results
+Navigate to the testplan folder and execute the test script:
.. code-block:: bash
- ~/jmeter/apache-jmeter-5.1.1/bin/jmeter -n -t ~/distribution/testsuites/performance/src/main/resources/testplans/performance.jmx -Jduration=14400 -l ~/distr-performance.jtl &
+ cd ~/distribution/testsuites/performance/src/main/resources/testplans/
+ ./run_test.sh
+
Test Results
------------
@@ -366,10 +396,10 @@ Test Results
**Test Statistics**
-.. image:: images/dist_perf_statistics.PNG
-.. image:: images/dist_perf_threshold.PNG
+.. image:: images/distribution/performance-statistics.png
+.. image:: images/distribution/performance-threshold.png
**VisualVM Screenshots**
-.. image:: images/20201020-1730-distr-performance-20201020T2025-monitor.png
-.. image:: images/20201020-1730-distr-performance-20201020T2025-threads.png
+.. image:: images/distribution/performance-monitor.png
+.. image:: images/distribution/performance-threads.png
diff --git a/docs/development/devtools/drools-s3p.rst b/docs/development/devtools/drools-s3p.rst
index 303a6beb..1586379e 100644
--- a/docs/development/devtools/drools-s3p.rst
+++ b/docs/development/devtools/drools-s3p.rst
@@ -10,31 +10,34 @@
Policy Drools PDP component
~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Both the Performance and the Stability tests were executed against a default ONAP installation in the policy-k8s tenant in the windriver lab, from an independent VM running the jmeter tool to inject the load.
+Both the Performance and the Stability tests were executed against an ONAP installation in the policy-k8s tenant
+in the windriver lab, from an independent VM running the jmeter tool to inject the load.
General Setup
*************
-The kubernetes installation allocated all policy components in the same worker node VM and some additional ones.
-The worker VM hosting the policy components has the following spec:
+The installation runs the following components in a single VM:
-- 16GB RAM
-- 8 VCPU
-- 160GB Ephemeral Disk
+- AAF
+- AAI
+- DMAAP
+- POLICY
-The standalone VM designated to run jmeter has the same configuration. The jmeter JVM
-was instantiated with a max heap configuration of 12G.
+The VM has the following hardware spec:
-The drools-pdp container uses the default JVM memory settings from a default OOM installation:
+- 126GB RAM
+- 12 VCPUs
+- 155GB Ephemeral Disk
-.. code-block:: bash
+Jmeter is run from a different VM with the following configuration:
- VM settings:
- Max. Heap Size (Estimated): 989.88M
- Using VM: OpenJDK 64-Bit Server VM
+- 16GB RAM
+- 8 VCPUs
+- 155GB Ephemeral Disk
+The drools-pdp container uses the JVM memory settings from a default OOM installation.
-Other ONAP components used during the stability tests are:
+Other ONAP components exercised during the stability tests were:
- Policy XACML PDP to process guard queries for each transaction.
- DMaaP to carry PDP-D and jmeter initiated traffic to complete transactions.
@@ -48,19 +51,14 @@ The following components are simulated during the tests.
- APPC responses for the vCPE and vFW use cases.
- AAI to answer queries for the use cases under test.
-In order to avoid interferences with the APPC component while running the tests,
-the APPC component was disabled.
-
SO, and AAI actors were simulated within the PDP-D JVM by enabling the
feature-controlloop-utils before running the tests.
PDP-D Setup
***********
-The kubernetes charts were modified previous to the installation with
-the changes below.
-
-The feature-controlloop-utils was started by adding the following script:
+The kubernetes charts were modified previous to the installation
+to add the following script that enables the controlloop-utils feature:
.. code-block:: bash
@@ -75,7 +73,7 @@ Stability Test of Policy PDP-D
PDP-D performance
=================
-The test set focused on the following use cases:
+The tests focused on the following use cases:
- vCPE
- vDNS
@@ -86,23 +84,20 @@ For 72 hours the following 5 scenarios ran in parallel:
- vCPE success scenario
- vCPE failure scenario (failure returned by simulated APPC recipient through DMaaP).
- vDNS success scenario.
-- vDNS failure scenario.
+- vDNS failure scenario (failure by introducing in the DCAE ONSET a non-existant vserver-name reference).
- vFirewall success scenario.
-Five threads ran in parallel, one for each scenario. The transactions were initiated
+Five threads ran in parallel, one for each scenario, back to back with no pauses. The transactions were initiated
by each jmeter thread group. Each thread initiated a transaction, monitored the transaction, and
-as soon as the transaction ending was detected, it initiated the next one, so back to back with no
-pauses.
+as soon as the transaction ending was detected, it initiated the next one.
-All transactions completed successfully as it was expected in each scenario, with no failures.
-
-The command executed was
+JMeter was run in a docker container with the following command:
.. code-block:: bash
- ./jmeter -n -t /home/ubuntu/drools-applications/testsuites/stability/src/main/resources/s3p.jmx -l /home/ubuntu/jmeter_result/jmeter.jtl -e -o /home/ubuntu/jmeter_result > /dev/null 2>&1
+ docker run --interactive --tty --name jmeter --rm --volume $PWD:/jmeter -e VERBOSE_GC="" egaillardon/jmeter-plugins --nongui --testfile s3p.jmx --loglevel WARN
-The results were computed by monitoring the statistics REST endpoint accessible through the telemetry shell or APIs.
+The results were accessed by using the telemetry API to gather statistics:
vCPE Success scenario
@@ -114,20 +109,11 @@ ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e:
# Times are in milliseconds
- # Previous to the run, there was 1 failure as a consequence of testing
- # the flows before the stability load was initiated. There was
- # an additional failure encountered during the execution.
-
- "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e": {
- "policyExecutedCount": 161328,
- "policyExecutedSuccessCount": 161326,
- "totalElapsedTime": 44932780,
- "averageExecutionTime": 278.5181741545175,
- "birthTime": 1616092087842,
- "lastStart": 1616356511841,
- "lastExecutionTime": 1616356541972,
- "policyExecutedFailCount": 2
- }
+ Control Loop Name: ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
+ Number of Transactions Executed: 114007
+ Number of Successful Transactions: 112727
+ Number of Failure Transactions: 1280
+ Average Execution Time: 434.9942021103967 ms.
vCPE Failure scenario
@@ -139,16 +125,12 @@ ControlLoop-vCPE-Fail:
# Times are in milliseconds
- "ControlLoop-vCPE-Fail": {
- "policyExecutedCount": 250172,
- "policyExecutedSuccessCount": 0,
- "totalElapsedTime": 63258856,
- "averageExecutionTime": 252.8614553187407,
- "birthTime": 1616092143137,
- "lastStart": 1616440688824,
- "lastExecutionTime": 1616440689010,
- "policyExecutedFailCount": 250172
- }
+ Control Loop Name: ControlLoop-vCPE-Fail
+ Number of Transactions Executed: 114367
+ Number of Successful Transactions: 114367 (failure transactions are expected)
+ Number of Failure Transactions: 0 (success transactions are not expected)
+ Average Execution Time: 433.61750330077734 ms.
+
vDNS Success scenario
=====================
@@ -159,16 +141,12 @@ ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3:
# Times are in milliseconds
- "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3": {
- "policyExecutedCount": 235438,
- "policyExecutedSuccessCount": 235438,
- "totalElapsedTime": 37564263,
- "averageExecutionTime": 159.550552587093,
- "birthTime": 1616092578063,
- "lastStart": 1616356511253,
- "lastExecutionTime": 1616356511653,
- "policyExecutedFailCount": 0
- }
+ Control Loop Name: ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
+ Number of Transactions Executed: 237512
+ Number of Successful Transactions: 229532
+ Number of Failure Transactions: 7980
+ Average Execution Time: 268.028794334602 ms.
+
vDNS Failure scenario
=====================
@@ -179,16 +157,11 @@ ControlLoop-vDNS-Fail:
# Times are in milliseconds
- "ControlLoop-vDNS-Fail": {
- "policyExecutedCount": 2754574,
- "policyExecutedSuccessCount": 0,
- "totalElapsedTime": 14396495,
- "averageExecutionTime": 5.22639616869977,
- "birthTime": 1616092659237,
- "lastStart": 1616440696444,
- "lastExecutionTime": 1616440696444,
- "policyExecutedFailCount": 2754574
- }
+ Control Loop Name: ControlLoop-vDNS-Fail
+ Number of Transactions Executed: 1957987
+ Number of Successful Transactions: 1957987 (failure transactions are expected)
+ Number of Failure Transactions: 0 (success transactions are not expected)
+ Average Execution Time: 39.369322166081794
vFirewall Success scenario
@@ -200,17 +173,41 @@ ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a:
# Times are in milliseconds
- # Previous to the run, there were 2 failures as a consequence of testing
- # the flows before the stability load was initiated. There was
- # an additional failure encountered during the execution.
-
- "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a": {
- "policyExecutedCount": 145197,
- "policyExecutedSuccessCount": 145194,
- "totalElapsedTime": 33100249,
- "averageExecutionTime": 227.96785746261975,
- "birthTime": 1616092985229,
- "lastStart": 1616356511732,
- "lastExecutionTime": 1616356541972,
- "policyExecutedFailCount": 3
- }
+ Control Loop Name: ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
+ Number of Transactions Executed: 120308
+ Number of Successful Transactions: 118895
+ Number of Failure Transactions: 1413
+ Average Execution Time: 394.8609236293513 ms.
+
+
+Commentary
+==========
+
+There has been a degradation of performance observed in this release
+when compared with the previous one.
+Approximately 1% of transactions were not completed as expected for
+some use cases. Average Execution Times are extended as well.
+The unexpected results seem to point in the direction of the
+interactions of the distributed locking feature with the database.
+These areas as well as the conditions for the test need to be investigated
+further.
+
+.. code-block:: bash
+
+ # Common pattern in the audit.log for unexpected transaction completions
+
+ a8d637fc-a2d5-49f9-868b-5b39f7befe25||ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a|
+ policy:usecases:[org.onap.policy.drools-applications.controlloop.common:controller-usecases:1.9.0:usecases]|
+ 2021-10-12T19:48:02.052+00:00|2021-10-12T19:48:02.052+00:00|0|
+ null:operational.modifyconfig.EVENT.MANAGER.FINAL:1.0.0|dev-policy-drools-pdp-0|
+ ERROR|400|Target Lock was lost|||VNF.generic-vnf.vnf-name||dev-policy-drools-pdp-0||
+ dev-policy-drools-pdp-0|microservice.stringmatcher|
+ {vserver.prov-status=ACTIVE, vserver.is-closed-loop-disabled=false,
+ generic-vnf.vnf-name=fw0002vm002fw002, vserver.vserver-name=OzVServer}||||
+ INFO|Session org.onap.policy.drools-applications.controlloop.common:controller-usecases:1.9.0:usecases|
+
+ # The "Target Lock was lost" is a common message error in the unexpected results.
+
+
+END-OF-DOCUMENT
+
diff --git a/docs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-monitor.png b/docs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-monitor.png
deleted file mode 100755
index 8ef443b1..00000000
--- a/docs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-monitor.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-threads.png b/docs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-threads.png
deleted file mode 100755
index 8f4731c4..00000000
--- a/docs/development/devtools/images/20201020-1730-distr-performance-20201020T2025-threads.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/apex-s3p-vvm-sample.jpg b/docs/development/devtools/images/apex-s3p-vvm-sample.jpg
deleted file mode 100644
index 20fac3cc..00000000
--- a/docs/development/devtools/images/apex-s3p-vvm-sample.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/apex_perf_jm_1.PNG b/docs/development/devtools/images/apex_perf_jm_1.PNG
deleted file mode 100644
index a1852be6..00000000
--- a/docs/development/devtools/images/apex_perf_jm_1.PNG
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/apex_perf_jm_2.PNG b/docs/development/devtools/images/apex_perf_jm_2.PNG
deleted file mode 100644
index d91ec4a3..00000000
--- a/docs/development/devtools/images/apex_perf_jm_2.PNG
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/apex_s3p_jm-1.png b/docs/development/devtools/images/apex_s3p_jm-1.png
deleted file mode 100644
index 92ca5765..00000000
--- a/docs/development/devtools/images/apex_s3p_jm-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/apex_s3p_jm-2.png b/docs/development/devtools/images/apex_s3p_jm-2.png
deleted file mode 100644
index 8cd24c89..00000000
--- a/docs/development/devtools/images/apex_s3p_jm-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/dist_perf_statistics.PNG b/docs/development/devtools/images/dist_perf_statistics.PNG
deleted file mode 100644
index eeefeeee..00000000
--- a/docs/development/devtools/images/dist_perf_statistics.PNG
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/dist_perf_threshold.PNG b/docs/development/devtools/images/dist_perf_threshold.PNG
deleted file mode 100644
index 58fbffd1..00000000
--- a/docs/development/devtools/images/dist_perf_threshold.PNG
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/dist_stability_monitor.PNG b/docs/development/devtools/images/distribution/dist_stability_monitor.PNG
index 83eae8cc..83eae8cc 100644
--- a/docs/development/devtools/images/dist_stability_monitor.PNG
+++ b/docs/development/devtools/images/distribution/dist_stability_monitor.PNG
Binary files differ
diff --git a/docs/development/devtools/images/dist_stability_statistics.PNG b/docs/development/devtools/images/distribution/dist_stability_statistics.PNG
index dce9b7cc..dce9b7cc 100644
--- a/docs/development/devtools/images/dist_stability_statistics.PNG
+++ b/docs/development/devtools/images/distribution/dist_stability_statistics.PNG
Binary files differ
diff --git a/docs/development/devtools/images/dist_stability_threads.PNG b/docs/development/devtools/images/distribution/dist_stability_threads.PNG
index 13e27c99..13e27c99 100644
--- a/docs/development/devtools/images/dist_stability_threads.PNG
+++ b/docs/development/devtools/images/distribution/dist_stability_threads.PNG
Binary files differ
diff --git a/docs/development/devtools/images/dist_stability_threshold.PNG b/docs/development/devtools/images/distribution/dist_stability_threshold.PNG
index d65e8cc3..d65e8cc3 100644
--- a/docs/development/devtools/images/dist_stability_threshold.PNG
+++ b/docs/development/devtools/images/distribution/dist_stability_threshold.PNG
Binary files differ
diff --git a/docs/development/devtools/images/distribution-s3p-testplan.png b/docs/development/devtools/images/distribution/distribution-s3p-testplan.png
index 7a8559ce..7a8559ce 100644
--- a/docs/development/devtools/images/distribution-s3p-testplan.png
+++ b/docs/development/devtools/images/distribution/distribution-s3p-testplan.png
Binary files differ
diff --git a/docs/development/devtools/images/distribution-s3p-vvm-sample.png b/docs/development/devtools/images/distribution/distribution-s3p-vvm-sample.png
index 4b2aa663..4b2aa663 100644
--- a/docs/development/devtools/images/distribution-s3p-vvm-sample.png
+++ b/docs/development/devtools/images/distribution/distribution-s3p-vvm-sample.png
Binary files differ
diff --git a/docs/development/devtools/images/distribution/performance-monitor.png b/docs/development/devtools/images/distribution/performance-monitor.png
new file mode 100644
index 00000000..e7a12ed7
--- /dev/null
+++ b/docs/development/devtools/images/distribution/performance-monitor.png
Binary files differ
diff --git a/docs/development/devtools/images/distribution/performance-statistics.png b/docs/development/devtools/images/distribution/performance-statistics.png
new file mode 100644
index 00000000..6530a1bc
--- /dev/null
+++ b/docs/development/devtools/images/distribution/performance-statistics.png
Binary files differ
diff --git a/docs/development/devtools/images/distribution/performance-threads.png b/docs/development/devtools/images/distribution/performance-threads.png
new file mode 100755
index 00000000..b59b7db6
--- /dev/null
+++ b/docs/development/devtools/images/distribution/performance-threads.png
Binary files differ
diff --git a/docs/development/devtools/images/distribution/performance-threshold.png b/docs/development/devtools/images/distribution/performance-threshold.png
new file mode 100644
index 00000000..df15ba0f
--- /dev/null
+++ b/docs/development/devtools/images/distribution/performance-threshold.png
Binary files differ
diff --git a/docs/development/devtools/images/frankfurt/apex_s3p_jm-1.png b/docs/development/devtools/images/frankfurt/apex_s3p_jm-1.png
deleted file mode 100644
index 07b28590..00000000
--- a/docs/development/devtools/images/frankfurt/apex_s3p_jm-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/frankfurt/apex_s3p_jm-2.png b/docs/development/devtools/images/frankfurt/apex_s3p_jm-2.png
deleted file mode 100644
index cb68c897..00000000
--- a/docs/development/devtools/images/frankfurt/apex_s3p_jm-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/frankfurt/apex_s3p_vm-1.png b/docs/development/devtools/images/frankfurt/apex_s3p_vm-1.png
deleted file mode 100644
index 7ecbbea9..00000000
--- a/docs/development/devtools/images/frankfurt/apex_s3p_vm-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/frankfurt/apex_s3p_vm-2.png b/docs/development/devtools/images/frankfurt/apex_s3p_vm-2.png
deleted file mode 100644
index 548f2b72..00000000
--- a/docs/development/devtools/images/frankfurt/apex_s3p_vm-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/development/devtools/images/gui/ChangeState.png b/docs/development/devtools/images/gui/ChangeState.png
new file mode 100644
index 00000000..9e40b30a
--- /dev/null
+++ b/docs/development/devtools/images/gui/ChangeState.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/CommissioningMessageOnParticipant.png b/docs/development/devtools/images/gui/CommissioningMessageOnParticipant.png
new file mode 100644
index 00000000..5fbe37f6
--- /dev/null
+++ b/docs/development/devtools/images/gui/CommissioningMessageOnParticipant.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/CommissioningModal.png b/docs/development/devtools/images/gui/CommissioningModal.png
new file mode 100644
index 00000000..6e54ec7b
--- /dev/null
+++ b/docs/development/devtools/images/gui/CommissioningModal.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/CommissioningUpload.png b/docs/development/devtools/images/gui/CommissioningUpload.png
new file mode 100644
index 00000000..a047019b
--- /dev/null
+++ b/docs/development/devtools/images/gui/CommissioningUpload.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/CommonPropertiesModal.png b/docs/development/devtools/images/gui/CommonPropertiesModal.png
new file mode 100644
index 00000000..9e270b81
--- /dev/null
+++ b/docs/development/devtools/images/gui/CommonPropertiesModal.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/CreateInstancePropsModal.png b/docs/development/devtools/images/gui/CreateInstancePropsModal.png
new file mode 100644
index 00000000..d0039486
--- /dev/null
+++ b/docs/development/devtools/images/gui/CreateInstancePropsModal.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/InstanceUninitialised.png b/docs/development/devtools/images/gui/InstanceUninitialised.png
new file mode 100644
index 00000000..e2fbe49b
--- /dev/null
+++ b/docs/development/devtools/images/gui/InstanceUninitialised.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/ManageInstancesModal.png b/docs/development/devtools/images/gui/ManageInstancesModal.png
new file mode 100644
index 00000000..2e6e9d2c
--- /dev/null
+++ b/docs/development/devtools/images/gui/ManageInstancesModal.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/PassiveState.png b/docs/development/devtools/images/gui/PassiveState.png
new file mode 100644
index 00000000..abc7ed22
--- /dev/null
+++ b/docs/development/devtools/images/gui/PassiveState.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/PolicySuccess.png b/docs/development/devtools/images/gui/PolicySuccess.png
new file mode 100644
index 00000000..345bc933
--- /dev/null
+++ b/docs/development/devtools/images/gui/PolicySuccess.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/PolicyTypeNotPresent.png b/docs/development/devtools/images/gui/PolicyTypeNotPresent.png
new file mode 100644
index 00000000..8085b0a3
--- /dev/null
+++ b/docs/development/devtools/images/gui/PolicyTypeNotPresent.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/PolicyTypeSuccess.png b/docs/development/devtools/images/gui/PolicyTypeSuccess.png
new file mode 100644
index 00000000..81004579
--- /dev/null
+++ b/docs/development/devtools/images/gui/PolicyTypeSuccess.png
Binary files differ
diff --git a/docs/development/devtools/images/gui/ViewEditedCommonProperties.png b/docs/development/devtools/images/gui/ViewEditedCommonProperties.png
new file mode 100644
index 00000000..b546569d
--- /dev/null
+++ b/docs/development/devtools/images/gui/ViewEditedCommonProperties.png
Binary files differ
diff --git a/docs/development/devtools/images/pap-s3p-mem-at.png b/docs/development/devtools/images/pap-s3p-mem-at.png
new file mode 100644
index 00000000..dd880227
--- /dev/null
+++ b/docs/development/devtools/images/pap-s3p-mem-at.png
Binary files differ
diff --git a/docs/development/devtools/images/pap-s3p-mem-bt.png b/docs/development/devtools/images/pap-s3p-mem-bt.png
new file mode 100644
index 00000000..7c909831
--- /dev/null
+++ b/docs/development/devtools/images/pap-s3p-mem-bt.png
Binary files differ
diff --git a/docs/development/devtools/images/pap-s3p-performance-result-jmeter.png b/docs/development/devtools/images/pap-s3p-performance-result-jmeter.png
new file mode 100644
index 00000000..be8bd99e
--- /dev/null
+++ b/docs/development/devtools/images/pap-s3p-performance-result-jmeter.png
Binary files differ
diff --git a/docs/development/devtools/images/pap-s3p-stability-result-jmeter.png b/docs/development/devtools/images/pap-s3p-stability-result-jmeter.png
new file mode 100644
index 00000000..5ebc769f
--- /dev/null
+++ b/docs/development/devtools/images/pap-s3p-stability-result-jmeter.png
Binary files differ
diff --git a/docs/development/devtools/pap-s3p.rst b/docs/development/devtools/pap-s3p.rst
index 1c031775..6666fe78 100644
--- a/docs/development/devtools/pap-s3p.rst
+++ b/docs/development/devtools/pap-s3p.rst
@@ -35,12 +35,15 @@ The 72 hours stability test ran the following steps sequentially in a single thr
- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that PdpGroup is in the ACTIVE state.
- **Deploy defaultDomain Policy** - deploys the policy defaultDomain in the existing PdpGroup
- **Check status of defaultGroup** - checks the status of defaultGroup PdpGroup with the defaultDomain policy 1.0.0.
+- **Check PdpGroup Audit defaultGroup** - checks the audit information for the defaultGroup PdpGroup.
+- **Check PdpGroup Audit Policy (defaultGroup)** - checks the audit information for the defaultGroup PdpGroup with the defaultDomain policy 1.0.0.
- **Create/Update PDP Group** - creates a new PDPGroup named sampleGroup.
- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that 2 PdpGroups are in the ACTIVE state and defaultGroup has a policy deployed on it.
- **Deployment Update sampleDomain** - deploys the policy sampleDomain in sampleGroup PdpGroup using pap api
- **Check status of sampleGroup** - checks the status of the sampleGroup PdpGroup.
- **Check status of PdpGroups** - checks the status of both PdpGroups.
- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that the defaultGroup has a policy defaultDomain deployed on it and sampleGroup has policy sampleDomain deployed on it.
+- **Check Audit** - checks the audit information for all PdpGroups.
- **Check Consolidated Health** - checks the consolidated health status of all policy components.
- **Check Deployed Policies** - checks for all the deployed policies using pap api.
- **Undeploy Policy sampleDomain** - undeploys the policy sampleDomain from sampleGroup PdpGroup using pap api
@@ -71,14 +74,14 @@ The test was run in the background via "nohup", to prevent it from being interru
.. code-block:: bash
- nohup ./jMeter/apache-jmeter-5.3/bin/jmeter.sh -n -t stabil.jmx -l testresults.jtl
+ nohup ./jMeter/apache-jmeter-5.3/bin/jmeter.sh -n -t stability.jmx -l testresults.jtl
Test Results
------------
**Summary**
-Stability test plan was triggered for 24 hours.
+Stability test plan was triggered for 72 hours.
.. Note::
@@ -95,18 +98,24 @@ Stability test plan was triggered for 24 hours.
======================= ================= ================== ==================================
**Total # of requests** **Success %** **Error %** **Average time taken per request**
======================= ================= ================== ==================================
-11921 100.00 % 0.00 % 382 ms
+34053 99.14 % 0.86 % 1051 ms
======================= ================= ================== ==================================
.. Note::
.. container:: paragraph
- There were no failures during the 24 hours test.
+ There were some failures during the 72 hour stability tests. These tests were caused by the apex-pdp pods restarting
+ intermitently due to limited resources in our testing environment. The second apex instance was configured as a
+ replica of the apex-pdp pod and therefore, when it restarted, registered to the "defaultGroup" as the configuration
+ was taken from the original apex-pdp pod. This meant a manual change whenever the pods restarted to make apex-pdp-"2"
+ register with the "sampleGroup".
+ When both pods were running as expected, no errors relating to the pap functionality were observed. These errors are
+ strictly caused by the environment setup and not by pap.
**JMeter Screenshot**
-.. image:: images/pap-s3p-stability-result-jmeter.PNG
+.. image:: images/pap-s3p-stability-result-jmeter.png
**Memory and CPU usage**
@@ -114,11 +123,11 @@ The memory and CPU usage can be monitored by running "top" command on the PAP po
Memory and CPU usage before test execution:
-.. image:: images/pap-s3p-mem-bt.PNG
+.. image:: images/pap-s3p-mem-bt.png
Memory and CPU usage after test execution:
-.. image:: images/pap-s3p-mem-at.PNG
+.. image:: images/pap-s3p-mem-at.png
Performance Test of PAP
@@ -152,7 +161,7 @@ Running/Triggering the performance test will be the same as the stability test.
.. code-block:: bash
- nohup ./jMeter/apache-jmeter-5.3/bin/jmeter.sh -n -t perf.jmx -l perftestresults.jtl
+ nohup ./jMeter/apache-jmeter-5.3/bin/jmeter.sh -n -t performance.jmx -l perftestresults.jtl
Once the test execution is completed, execute the below script to get the statistics:
@@ -171,9 +180,9 @@ Test results are shown as below.
======================= ================= ================== ==================================
**Total # of requests** **Success %** **Error %** **Average time taken per request**
======================= ================= ================== ==================================
-46314 100 % 0.00 % 1084 ms
+24092 100 % 0.00 % 2467 ms
======================= ================= ================== ==================================
**JMeter Screenshot**
-.. image:: images/pap-s3p-performance-result-jmeter.PNG \ No newline at end of file
+.. image:: images/pap-s3p-performance-result-jmeter.png \ No newline at end of file
diff --git a/docs/development/devtools/policy-gui-controlloop-smoke.rst b/docs/development/devtools/policy-gui-controlloop-smoke.rst
new file mode 100644
index 00000000..aa319651
--- /dev/null
+++ b/docs/development/devtools/policy-gui-controlloop-smoke.rst
@@ -0,0 +1,277 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+
+.. _clamp-gui-controlloop-smoke-tests:
+
+CLAMP GUI Smoke Tests
+---------------------------
+1. Introduction
+***************
+The CLAMP GUI for Control Loops is designed to provide a user the ability to interact
+with the Control Loop Runtime to perform several actions.
+
+- Commission new Tosca Service Templates.
+- Editing Common Properties.
+- Decommission existing Tosca Service Templates.
+- Create new instances of Control Loops.
+- Change the state of the Control Loops.
+- Delete Control Loops.
+
+This document will serve as a guide to do smoke tests on the different components that are involved when working with the GUI and outline how they operate. It will also show a developer how to set up their environment for carrying out smoke tests on the GUI.
+
+2. Setup Guide
+**************
+This section will show the developer how to set up their environment to start testing in GUI with some instruction on how to carry out the tests. There are a number of prerequisites. Note that this guide is written by a Linux user - although the majority of the steps show will be exactly the same in Windows or other systems. The IDE used in the examples here is Intellij but most or all of what is described should be the same across IDEs.
+
+2.1 Prerequisites
+=================
+- Java 11
+- node
+- npm
+- Docker
+- Maven 3
+- Git
+- Refer to this guide for basic environment setup `Setting up dev environment <https://wiki.onap.org/display/DW/Setting+Up+Your+Development+Environment>`_
+
+2.2 Assumptions
+===============
+- You are accessing the policy repositories through gerrit
+- You are using "git review".
+
+The following repositories are required for development in this project. These repositories should be present on your machine and you should run "mvn clean install" on all of them so that the packages are present in your .m2 repository.
+
+- policy/parent
+- policy/common
+- policy/models
+- policy/clamp
+- policy/docker
+- policy/gui
+- policy/api
+
+In this setup guide, we will be setting up all the components technically required for a working convenient dev environment. We will not be setting up all of the participants - we will setup only the policy participant as an example.
+
+2.3 Setting up the components
+=============================
+
+2.3.3 MariaDB Setup
+^^^^^^^^^^^^^^^^^^^
+We will be using Docker to run our mariadb instance. It will have a total of three databases running in it.
+
+- controlloop: the runtime-controlloop db
+- cldsdb4: the clamp backend db
+- policyadmin: the policy-api db
+
+The easiest way to do this is to perform a small alteration on an SQL script provided by the clamp backend in the file "runtime/extra/sql/bulkload/create-db.sql"
+
+.. code-block:: mysql
+
+ CREATE DATABASE `cldsdb4`;
+ USE `cldsdb4`;
+ DROP USER 'clds';
+ CREATE USER 'clds';
+ GRANT ALL on cldsdb4.* to 'clds' identified by 'sidnnd83K' with GRANT OPTION;
+ CREATE DATABASE `controlloop`;
+ USE `controlloop`;
+ DROP USER 'policy';
+ CREATE USER 'policy';
+ GRANT ALL on controlloop.* to 'policy' identified by 'P01icY' with GRANT OPTION;
+ CREATE DATABASE `policyadmin`;
+ USE `policyadmin`;
+ DROP USER 'policy_user';
+ CREATE USER 'policy_user';
+ GRANT ALL on controlloop.* to 'policy_user' identified by 'policy_user' with GRANT OPTION;
+ FLUSH PRIVILEGES;
+
+Once this has been done, we can run the bash script provided here: "runtime/extra/bin-for-dev/start-db.sh"
+
+.. code-block:: bash
+
+ ./start-db.sh
+
+This will setup all three databases. It will also ensure that the tables in cldsdb4 are created. The database will be exposed locally on port 3306 and will be backed by an anonymous docker volume.
+
+2.3.4 DMAAP Simulator
+^^^^^^^^^^^^^^^^^^^^^
+For convenience, a dmaap simulator has been provided in the policy/models repository. To start the simulator, you can do the following:
+
+1. Navigate to /models-sim/policy-models-simulators in the policy/models repository.
+2. Add a configuration file to src/test/resources with the following contents:
+
+.. code-block:: json
+
+ {
+ "dmaapProvider":{
+ "name":"DMaaP simulator",
+ "topicSweepSec":900
+ },
+ "restServers":[
+ {
+ "name":"DMaaP simulator",
+ "providerClass":"org.onap.policy.models.sim.dmaap.rest.DmaapSimRestControllerV1",
+ "host":"localhost",
+ "port":3904,
+ "https":false
+ }
+ ]
+ }
+
+3. You can then start dmaap with:
+
+.. code-block:: bash
+
+ mvn exec:java -Dexec.mainClass=org.onap.policy.models.simulators.Main -Dexec.args="src/test/resources/YOUR_CONF_FILE.json"
+
+At this stage the dmaap simulator should be running on your local machine on port 3904.
+
+2.3.5 Policy API
+^^^^^^^^^^^^^^^^
+In the policy-api repo, you should fine the file "src/main/resources/etc/defaultConfig.json". This file must be altered slightly - as below with the restServerParameters and databaseProviderParameters shown. Note how the database parameters match-up with what you setup in Mariadb:
+
+.. code-block:: json
+
+ {
+ "restServerParameters": {
+ "host": "0.0.0.0",
+ "port": 6970,
+ "userName": "healthcheck",
+ "password": "zb!XztG34",
+ "prometheus": true,
+ "https": false,
+ "aaf": false
+ },
+ "databaseProviderParameters": {
+ "name": "PolicyProviderParameterGroup",
+ "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl",
+ "databaseDriver": "org.mariadb.jdbc.Driver",
+ "databaseUrl": "jdbc:mariadb://mariadb:3306/policyadmin",
+ "databaseUser": "policy_user",
+ "databasePassword": "policy_user",
+ "persistenceUnit": "PolicyMariaDb"
+ },
+ }
+
+Next, navigate to the "/main" directory. You can then run the following command to start the policy api:
+
+.. code-block:: bash
+
+ mvn exec:java -Dexec.mainClass=org.onap.policy.api.main.startstop.Main -Dexec.args=" -c ../packages/policy-api-tarball/src/main/resources/etc/defaultConfig.json"
+
+2.3.6 Clamp Backend
+^^^^^^^^^^^^^^^^^^^
+The Clamp Backend can potentially make calls to policy pap, policy api, cds, sdc and others. For controlloop development purposes, we only need to connect with the controlloop runtime api. For convenience, there has been an emulator provided to respond to requests from Clamp to all those services that we do not care about. This emulator can be run by running the following bash script "runtime/extra/bin-for-dev/start-emulator.sh"
+
+.. code-block:: bash
+
+ ./start-emulator.sh
+
+Once the emulator is running, we can then run the clamp backend. Before doing this, we need to make sure that all of the calls from the clamp backend are directed towards the correct places. We can do this by editing the application-noaaf.properties file: "src/main/resources/application-noaaf.properties". For development purposes and because we are running the components in a non-https way, this file will not need to be altered currently. The clamp backend can then be run with the script "runtime/extra/bin-for-dev/start-backend.sh".
+
+.. code-block:: bash
+
+ ./start-backend.sh
+
+Once the clamp backend is running, we can start the controlloop runtime.
+
+2.3.7 Controlloop Runtime
+^^^^^^^^^^^^^^^^^^^^^^^^^
+To start the controlloop runtime we need to go the "runtime-controlloop" directory in the clamp repo. There is a config file that is used, by default, for the controlloop runtime. That config file is here: "src/main/resources/application.yaml". For development in your local environment, it shouldn't need any adjustment and we can just run the controlloop runtime with:
+
+.. code-block:: bash
+
+ mvn spring-boot:run
+
+2.3.8 Controlloop GUI
+^^^^^^^^^^^^^^^^^^^^^
+At this point, all of the components required to test out the controlloop gui are running.We can start to make changes, and have those changes reflected in the UI for immediate feedback on our changes. But first, we must run the GUI.
+
+Firstly, go to the GUI repo and navigate to "gui-clamp/ui-react". To setup for development, we must install the dependencies of the GUI. We can do this using the npm package manager. In the directory, simply run:
+
+.. code-block:: bash
+
+ npm install
+
+This will trigger installation of the required packages. The application is configured to proxy all relevant calls to the clamp backend. The application can be started with a simple:
+
+.. code-block:: bash
+
+ npm start
+
+This uses nodes internal test dev web server to server the GUI. Once started, you can navigate to the server at "https://localhost:3000" and login with "admin/password".
+
+That completes the development setup of the environment.
+
+3. Running Tests
+****************
+In this section, we will run through the functionalities mentioned at the start of this document is section 1. Each functionality will be tested and we will confirm that they were carried out successfully. There is a tosca service template that can be used for this test
+
+:download:`Tosca Service Template <tosca/tosca-for-gui-smoke-tests.yaml>`
+
+
+3.1 Commissioning
+=================
+We can carry out commissioning using the GUI. To do so, from the main page, we can select "Upload Tosca to Commissioning" as shown in the image below:
+
+.. image:: images/gui/CommissioningUpload.png
+
+Clicking this will take us to a screen where we can upload a file. Select a file to upload and click on the upload button.
+
+.. image:: images/gui/CommissioningModal.png
+
+After clicking upload, you should get a message on the modal to tell you that the upload was successful. You can then look in the logs of the policy-participant to see that the message has been received from the runtime:
+
+.. image:: images/gui/CommissioningMessageOnParticipant.png
+
+This confirms that commissioning has been complete.
+
+3.2 Edit Common Properties
+==========================
+At this stage we can edit the common properties. These properties will be common to all instances of the control loop definitions we uploaded with the tosca service template. Once an instance is created, we will not be able to alter these common properties again. We can simply click on "Edit Common Properties" in the dropdown menu and we will be taken to the modal shown below.
+
+.. image:: images/gui/CommonPropertiesModal.png
+
+The arrows to the left of the modal can be used to expand and contract the elements. If we expand one of the elements, we can see that the provider is one of the properties that we can edit. Edit this property to be "Ericsson Software Technologies". Press "Save" and then press "Commission". You should get a success message. Once you do, you can look at the full tosca service template to confirm the change in provider has been recorder. Click on "Manage Commissioned Tosca Template". Then click on "Pull Tosca Service Template". You should receive the full template on the screen. You should find your change as shown below.
+
+.. image:: images/gui/ViewEditedCommonProperties.png
+
+3.3 Create New Instances of Control Loops
+=========================================
+Once the template is commissioned, we can start to create instances. In the dropdown, click on "Instantiation Management". In the modal, you will see an empty table, as shown.
+
+.. image:: images/gui/ManageInstancesModal.png
+
+Then we will click on "Create Instance". That takes us to a page where we can edit the properties of the instance. Not the common properties, but the instance properties. The last element has Provider set as an instance property. In the same way as we did for the common properties, change the provider to "Some Other Company" - then click save. You should get a success message if all went ok. You can then go back to the instantiation management table and you should now see an instance there.
+
+.. image:: images/gui/InstanceUninitialised.png
+
+Since the instance is uninitialised, the policies and policy types are not being deployed to the policy api. We can confirm this by looking at the policy-apis database. See the image below.
+
+.. image:: images/gui/PolicyTypeNotPresent.png
+
+3.3 Change the State of the Instance
+====================================
+Now we will change the instance state to PASSIVE. This should trigger the deployment of the policy types onto the policy-api. To trigger the change of state, click on the "change" button on the instance in the instance management table. This will bring up another modal to allow you to change the state.
+
+.. image:: images/gui/ChangeState.png
+
+Pick PASSIVE and then click save. If we once again navigate to the Instance Management table, we can see that our actual state has become passive.
+
+.. image:: images/gui/PassiveState.png
+
+This should also mean that our policies and policy types should be written to the policy-api database. We can query that DB again. In the images below, we can see that the policies and the policy types have been written successfully.
+
+.. image:: images/gui/PolicyTypeSuccess.png
+
+and
+
+.. image:: images/gui/PolicySuccess.png
+
+Following the same procedure as changeing the state to PASSIVE, we can then change to UNINITIALISED. This deletes the policies and policy types through the policy api and changes the overall state of the loop. we can then delete it from the Manage Instances table by clicking on Delete.
+
+Decommissioning
+===============
+Finally, we can decommission the template. On the dropdown menu, click "Manage Commissioned Tosca Template" and then pull it. Clicking the "Delete Tosca Service Template" button will fully decommission the template. You will receive a success message if the deletion was successful.
+
+.. image:: images/gui/ViewEditedCommonProperties.png
+
+This concluded the required smoke tests
+
+
diff --git a/docs/development/devtools/tosca/tosca-for-gui-smoke-tests.yaml b/docs/development/devtools/tosca/tosca-for-gui-smoke-tests.yaml
new file mode 100644
index 00000000..61d3f6ea
--- /dev/null
+++ b/docs/development/devtools/tosca/tosca-for-gui-smoke-tests.yaml
@@ -0,0 +1,2986 @@
+tosca_definitions_version: tosca_simple_yaml_1_1_0
+data_types:
+ onap.datatypes.ToscaConceptIdentifier:
+ derived_from: tosca.datatypes.Root
+ properties:
+ name:
+ type: string
+ required: true
+ version:
+ type: string
+ required: true
+ org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo:
+ name: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
+ version: 0.0.0
+ derived_from: tosca.datatypes.Root
+ properties:
+ consulUrl:
+ name: consulUrl
+ type: string
+ typeVersion: 0.0.0
+ description: Consul url for this entry
+ required: true
+ consul_body:
+ name: consulBody
+ type: string
+ typeVersion: 0.0.0
+ description: Body of Consul entry
+ required: true
+ onap.datatype.controlloop.Target:
+ derived_from: tosca.datatypes.Root
+ description: Definition for a entity in A&AI to perform a control loop operation on
+ properties:
+ targetType:
+ type: string
+ description: Category for the target type
+ required: true
+ constraints:
+ - valid_values:
+ - VNF
+ - VM
+ - VFMODULE
+ - PNF
+ entityIds:
+ type: map
+ description: |
+ Map of values that identify the resource. If none are provided, it is assumed that the
+ entity that generated the ONSET event will be the target.
+ required: false
+ metadata:
+ clamp_possible_values: ClampExecution:CSAR_RESOURCES
+ entry_schema:
+ type: string
+ onap.datatype.controlloop.Actor:
+ derived_from: tosca.datatypes.Root
+ description: An actor/operation/target definition
+ properties:
+ actor:
+ type: string
+ description: The actor performing the operation.
+ required: true
+ metadata:
+ clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor
+ operation:
+ type: string
+ description: The operation the actor is performing.
+ metadata:
+ clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation
+ required: true
+ target:
+ type: onap.datatype.controlloop.Target
+ description: The resource the operation should be performed on.
+ required: true
+ payload:
+ type: map
+ description: Name/value pairs of payload information passed by Policy to the actor
+ required: false
+ metadata:
+ clamp_possible_values: ClampExecution:CDS/payload
+ entry_schema:
+ type: string
+ onap.datatype.controlloop.Operation:
+ derived_from: tosca.datatypes.Root
+ version: 1.0.0
+ description: An operation supported by an actor
+ properties:
+ id:
+ type: string
+ description: Unique identifier for the operation
+ required: true
+ description:
+ type: string
+ description: A user-friendly description of the intent for the operation
+ required: false
+ operation:
+ type: onap.datatype.controlloop.Actor
+ description: The definition of the operation to be performed.
+ required: true
+ timeout:
+ type: integer
+ description: The amount of time for the actor to perform the operation.
+ required: true
+ retries:
+ type: integer
+ description: The number of retries the actor should attempt to perform the operation.
+ required: true
+ default: 0
+ success:
+ type: string
+ description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.
+ required: false
+ default: final_success
+ failure:
+ type: string
+ description: Points to the operation to invoke on Actor operation failure.
+ required: false
+ default: final_failure
+ failure_timeout:
+ type: string
+ description: Points to the operation to invoke when the time out for the operation occurs.
+ required: false
+ default: final_failure_timeout
+ failure_retries:
+ type: string
+ description: Points to the operation to invoke when the current operation has exceeded its max retries.
+ required: false
+ default: final_failure_retries
+ failure_exception:
+ type: string
+ description: Points to the operation to invoke when the current operation causes an exception.
+ required: false
+ default: final_failure_exception
+ failure_guard:
+ type: string
+ description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.
+ required: false
+ default: final_failure_guard
+policy_types:
+ onap.policies.Monitoring:
+ derived_from: tosca.policies.Root
+ description: a base policy type for all policies that govern monitoring provisioning
+ version: 1.0.0
+ name: onap.policies.Monitoring
+ onap.policies.Sirisha:
+ derived_from: tosca.policies.Root
+ description: a base policy type for all policies that govern monitoring provisioning
+ version: 1.0.0
+ name: onap.policies.Sirisha
+ onap.policies.controlloop.operational.Common:
+ derived_from: tosca.policies.Root
+ version: 1.0.1
+ name: onap.policies.controlloop.operational.Common
+ description: |
+ Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant
+ Policy Types. This does NOT support the legacy Policy YAML policy type.
+ properties:
+ id:
+ type: string
+ description: The unique control loop id.
+ required: true
+ timeout:
+ type: integer
+ description: |
+ Overall timeout for executing all the operations. This timeout should equal or exceed the total
+ timeout for each operation listed.
+ required: true
+ abatement:
+ type: boolean
+ description: Whether an abatement event message will be expected for the control loop from DCAE.
+ required: true
+ default: false
+ trigger:
+ type: string
+ description: Initial operation to execute upon receiving an Onset event message for the Control Loop.
+ required: true
+ operations:
+ type: list
+ description: List of operations to be performed when Control Loop is triggered.
+ required: true
+ entry_schema:
+ type: onap.datatype.controlloop.Operation
+ onap.policies.controlloop.operational.common.Apex:
+ derived_from: onap.policies.controlloop.operational.Common
+ type_version: 1.0.0
+ version: 1.0.0
+ name: onap.policies.controlloop.operational.common.Apex
+ description: Operational policies for Apex PDP
+ properties:
+ engineServiceParameters:
+ type: string
+ description: The engine parameters like name, instanceCount, policy implementation, parameters etc.
+ required: true
+ eventInputParameters:
+ type: string
+ description: The event input parameters.
+ required: true
+ eventOutputParameters:
+ type: string
+ description: The event output parameters.
+ required: true
+ javaProperties:
+ type: string
+ description: Name/value pairs of properties to be set for APEX if needed.
+ required: false
+node_types:
+ org.onap.policy.clamp.controlloop.Participant:
+ version: 1.0.1
+ derived_from: tosca.nodetypes.Root
+ properties:
+ provider:
+ type: string
+ requred: false
+ org.onap.policy.clamp.controlloop.ControlLoopElement:
+ version: 1.0.1
+ derived_from: tosca.nodetypes.Root
+ properties:
+ provider:
+ type: string
+ required: false
+ metadata:
+ common: true
+ description: Specifies the organization that provides the control loop element
+ participantType:
+ type: onap.datatypes.ToscaConceptIdentifier
+ required: true
+ metadata:
+ common: true
+ description: The identity of the participant type that hosts this type of Control Loop Element
+ startPhase:
+ type: integer
+ required: false
+ constraints:
+ - greater_or_equal: 0
+ metadata:
+ common: true
+ description: A value indicating the start phase in which this control loop element will be started, the
+ first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
+ in reverse start phase order. Control Loop Elements with the same start phase are started and
+ stopped simultaneously
+ uninitializedToPassiveTimeout:
+ type: integer
+ required: false
+ constraints:
+ - greater_or_equal: 0
+ default: 60
+ metadata:
+ common: true
+ description: The maximum time in seconds to wait for a state chage from uninitialized to passive
+ passiveToRunningTimeout:
+ type: integer
+ required: false
+ constraints:
+ - greater_or_equal: 0
+ default: 60
+ metadata:
+ common: true
+ description: The maximum time in seconds to wait for a state chage from passive to running
+ runningToPassiveTimeout:
+ type: integer
+ required: false
+ constraints:
+ - greater_or_equal: 0
+ default: 60
+ metadata:
+ common: true
+ description: The maximum time in seconds to wait for a state chage from running to passive
+ passiveToUninitializedTimeout:
+ type: integer
+ required: false
+ constraints:
+ - greater_or_equal: 0
+ default: 60
+ metadata:
+ common: true
+ description: The maximum time in seconds to wait for a state chage from passive to uninitialized
+ org.onap.policy.clamp.controlloop.ControlLoop:
+ version: 1.0.1
+ derived_from: tosca.nodetypes.Root
+ properties:
+ provider:
+ type: string
+ required: false
+ metadata:
+ common: true
+ description: Specifies the organization that provides the control loop element
+ elements:
+ type: list
+ required: true
+ metadata:
+ common: true
+ entry_schema:
+ type: onap.datatypes.ToscaConceptIdentifier
+ description: Specifies a list of control loop element definitions that make up this control loop definition
+ org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+ properties:
+ dcae_blueprint_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: false
+ dcae_blueprint:
+ type: onap.dcae.cloudify_blueprint
+ requred: false
+ consul_info:
+ type: list
+ required: false
+ entry_schema:
+ type: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
+ org.onap.policy.clamp.controlloop.PolicyControlLoopElement:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+ properties:
+ policy_type_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: true
+ policy_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: false
+ org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ properties:
+ policy_type_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: true
+ policy_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: false
+ org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement
+ properties:
+ policy_type_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: true
+ policy_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: false
+ org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+ properties:
+ cds_blueprint_id:
+ type: onap.datatypes.ToscaConceptIdentifier
+ requred: true
+topology_template:
+ inputs:
+ pmsh_monitoring_policy:
+ type: onap.datatypes.ToscaConceptIdentifier
+ description: The ID of the PMSH monitoring policy to use
+ default:
+ name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
+ version: 1.0.0
+ pmsh_operational_policy:
+ type: onap.datatypes.ToscaConceptIdentifier
+ description: The ID of the PMSH operational policy to use
+ default:
+ name: operational.apex.pmcontrol
+ version: 1.0.0
+ node_templates:
+ org.onap.policy.controlloop.PolicyControlLoopParticipant:
+ version: 2.3.1
+ type: org.onap.policy.clamp.controlloop.Participant
+ type_version: 1.0.1
+ description: Participant for DCAE microservices
+ properties:
+ provider: ONAP
+ org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+ version: 1.2.3
+ type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ type_version: 1.0.0
+ description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+ properties:
+ provider: Ericsson
+ participant_id:
+ name: org.onap.PM_Policy
+ version: 1.0.0
+ participantType:
+ name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+ version: 2.3.1
+ policy_type_id:
+ name: onap.policies.monitoring.pm-subscription-handler
+ version: 1.0.0
+ policy_id:
+ get_input: pmsh_monitoring_policy
+ org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+ version: 1.2.3
+ type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ type_version: 1.0.0
+ description: Control loop element for the operational policy for Performance Management Subscription Handling
+ properties:
+ provider: Ericsson
+ participant_id:
+ name: org.onap.PM_Policy
+ version: 1.0.0
+ participantType:
+ name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+ version: 2.3.1
+ policy_type_id:
+ name: onap.policies.operational.pm-subscription-handler
+ version: 1.0.0
+ policy_id:
+ get_input: pmsh_operational_policy
+ org.onap.domain.pmsh.PMSHControlLoopDefinition:
+ version: 1.2.3
+ type: org.onap.policy.clamp.controlloop.ControlLoop
+ type_version: 1.0.0
+ description: Control loop for Performance Management Subscription Handling
+ properties:
+ provider: Ericsson
+ elements:
+ - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+ version: 1.2.3
+ - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+ version: 1.2.3
+ policies:
+ - operational.apex.pmcontrol:
+ type: onap.policies.controlloop.operational.common.Apex
+ type_version: 1.0.0
+ version: 1.0.0
+ metadata:
+ policy-id: operational.apex.pmcontrol
+ policy-version: 1
+ properties:
+ engineServiceParameters:
+ name: MyApexEngine
+ version: 0.0.1
+ id: 45
+ instanceCount: 2
+ deploymentPort: 12561
+ policy_type_impl:
+ apexPolicyModel:
+ key:
+ name: PMControlPolicy
+ version: 0.0.1
+ keyInformation:
+ key:
+ name: PMControlPolicy_KeyInfo
+ version: 0.0.1
+ keyInfoMap:
+ entry:
+ - key:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ UUID: 6e5fa19b-14df-37e3-a4ae-8c537e861a82
+ description: Generated description for concept referred to by key "CDSActionIdentifiersType:0.0.1"
+ - key:
+ name: CDSCreateResponseEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateResponseEvent
+ version: 0.0.1
+ UUID: 14b29e38-ac75-3273-aa4e-8583c0aa7dad
+ description: Generated description for concept referred to by key "CDSCreateResponseEvent:0.0.1"
+ - key:
+ name: CDSCreateResponsePayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateResponsePayloadType
+ version: 0.0.1
+ UUID: 04573f8f-e772-30a5-b1d9-d7318d4a1e13
+ description: Generated description for concept referred to by key "CDSCreateResponsePayloadType:0.0.1"
+ - key:
+ name: CDSCreateResponsePolicy
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateResponsePolicy
+ version: 0.0.1
+ UUID: e126c965-fc09-3bfe-8f55-70f380a4a49c
+ description: Generated description for concept referred to by key "CDSCreateResponsePolicy:0.0.1"
+ - key:
+ name: CDSCreateResponseTask
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateResponseTask
+ version: 0.0.1
+ UUID: 6165ee82-afd2-3aab-a517-f00b3f2461d2
+ description: Generated description for concept referred to by key "CDSCreateResponseTask:0.0.1"
+ - key:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ UUID: 8350ac5e-c157-38b9-9614-a0f93a830e60
+ description: Generated description for concept referred to by key "CDSCreateSubscriptionPayloadType:0.0.1"
+ - key:
+ name: CDSCreateSubscriptionRequestEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateSubscriptionRequestEvent
+ version: 0.0.1
+ UUID: cfa325ba-226b-3a31-9183-ec43e2b6e9a2
+ description: Generated description for concept referred to by key "CDSCreateSubscriptionRequestEvent:0.0.1"
+ - key:
+ name: CDSDeleteResponseEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteResponseEvent
+ version: 0.0.1
+ UUID: 8be9c0fa-7437-3841-aff2-b3cec6ae3bd8
+ description: Generated description for concept referred to by key "CDSDeleteResponseEvent:0.0.1"
+ - key:
+ name: CDSDeleteResponsePayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteResponsePayloadType
+ version: 0.0.1
+ UUID: 3fbfe0c9-152e-34d3-a504-09cd13c058d0
+ description: Generated description for concept referred to by key "CDSDeleteResponsePayloadType:0.0.1"
+ - key:
+ name: CDSDeleteResponsePolicy
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteResponsePolicy
+ version: 0.0.1
+ UUID: a780251c-edd5-3132-b865-04313246b43c
+ description: Generated description for concept referred to by key "CDSDeleteResponsePolicy:0.0.1"
+ - key:
+ name: CDSDeleteResponseTask
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteResponseTask
+ version: 0.0.1
+ UUID: afce4555-3aa3-3521-a7d8-ee8cdf0d3efc
+ description: Generated description for concept referred to by key "CDSDeleteResponseTask:0.0.1"
+ - key:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ UUID: 12658406-9147-3c9d-a38c-5ad5e30b092b
+ description: Generated description for concept referred to by key "CDSDeleteSubscriptionPayloadType:0.0.1"
+ - key:
+ name: CDSDeleteSubscriptionRequestEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteSubscriptionRequestEvent
+ version: 0.0.1
+ UUID: 24380c95-9289-36e6-8cbf-0edefa15ccd9
+ description: Generated description for concept referred to by key "CDSDeleteSubscriptionRequestEvent:0.0.1"
+ - key:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ UUID: 35590ac0-062c-39f1-8786-b4ff716e30b1
+ description: Generated description for concept referred to by key "CDSRequestCommonHeaderType:0.0.1"
+ - key:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ UUID: dd7e1805-885a-350b-aaf9-ed541321ae3c
+ description: Generated description for concept referred to by key "CDSResponseCommonHeaderType:0.0.1"
+ - key:
+ name: CDSResponseStatusEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSResponseStatusEvent
+ version: 0.0.1
+ UUID: 7986e21b-32f7-302e-9554-31f21b673493
+ description: Generated description for concept referred to by key "CDSResponseStatusEvent:0.0.1"
+ - key:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ UUID: 92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa
+ description: Generated description for concept referred to by key "CDSResponseStatusType:0.0.1"
+ - key:
+ name: CreateSubscriptionPayloadEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CreateSubscriptionPayloadEvent
+ version: 0.0.1
+ UUID: 92162397-1a8e-3a3f-a469-d2af7700af4a
+ description: Generated description for concept referred to by key "CreateSubscriptionPayloadEvent:0.0.1"
+ - key:
+ name: CreateSubscriptionPayloadTask
+ version: 0.0.1
+ value:
+ key:
+ name: CreateSubscriptionPayloadTask
+ version: 0.0.1
+ UUID: bc0c69f0-52ed-38ea-b468-ae4a6fd1730d
+ description: Generated description for concept referred to by key "CreateSubscriptionPayloadTask:0.0.1"
+ - key:
+ name: CreateSubscriptionRequestTask
+ version: 0.0.1
+ value:
+ key:
+ name: CreateSubscriptionRequestTask
+ version: 0.0.1
+ UUID: 89cb75e9-f06c-30d3-b4ff-698d45f63869
+ description: Generated description for concept referred to by key "CreateSubscriptionRequestTask:0.0.1"
+ - key:
+ name: DeleteSubscriptionPayloadEvent
+ version: 0.0.1
+ value:
+ key:
+ name: DeleteSubscriptionPayloadEvent
+ version: 0.0.1
+ UUID: 994fa441-04ab-33bb-832d-1cd12ab5d074
+ description: Generated description for concept referred to by key "DeleteSubscriptionPayloadEvent:0.0.1"
+ - key:
+ name: DeleteSubscriptionPayloadTask
+ version: 0.0.1
+ value:
+ key:
+ name: DeleteSubscriptionPayloadTask
+ version: 0.0.1
+ UUID: 0f519117-5fea-3e4b-941f-8f778100465f
+ description: Generated description for concept referred to by key "DeleteSubscriptionPayloadTask:0.0.1"
+ - key:
+ name: DeleteSubscriptionRequestTask
+ version: 0.0.1
+ value:
+ key:
+ name: DeleteSubscriptionRequestTask
+ version: 0.0.1
+ UUID: acb772fe-d442-39e3-98f9-b1080caf4150
+ description: Generated description for concept referred to by key "DeleteSubscriptionRequestTask:0.0.1"
+ - key:
+ name: MRResponseEvent
+ version: 0.0.1
+ value:
+ key:
+ name: MRResponseEvent
+ version: 0.0.1
+ UUID: 13c747a3-6bae-3bcf-9c80-b152e01dc194
+ description: Generated description for concept referred to by key "MRResponseEvent:0.0.1"
+ - key:
+ name: PMControlPolicy
+ version: 0.0.1
+ value:
+ key:
+ name: PMControlPolicy
+ version: 0.0.1
+ UUID: acf1e55c-7bc5-3bd5-975a-0ca54afcd8a4
+ description: Generated description for concept referred to by key "PMControlPolicy:0.0.1"
+ - key:
+ name: PMControlPolicy_Albums
+ version: 0.0.1
+ value:
+ key:
+ name: PMControlPolicy_Albums
+ version: 0.0.1
+ UUID: b38ad204-c2c8-32f4-9b5a-dda0aeb0145b
+ description: Generated description for concept referred to by key "PMControlPolicy_Albums:0.0.1"
+ - key:
+ name: PMControlPolicy_Events
+ version: 0.0.1
+ value:
+ key:
+ name: PMControlPolicy_Events
+ version: 0.0.1
+ UUID: be3871a0-c42a-3113-a066-82d192840eca
+ description: Generated description for concept referred to by key "PMControlPolicy_Events:0.0.1"
+ - key:
+ name: PMControlPolicy_KeyInfo
+ version: 0.0.1
+ value:
+ key:
+ name: PMControlPolicy_KeyInfo
+ version: 0.0.1
+ UUID: ced37634-28a4-3178-b7f6-2980794927b0
+ description: Generated description for concept referred to by key "PMControlPolicy_KeyInfo:0.0.1"
+ - key:
+ name: PMControlPolicy_Policies
+ version: 0.0.1
+ value:
+ key:
+ name: PMControlPolicy_Policies
+ version: 0.0.1
+ UUID: be3d180d-ef9c-3a75-8e9c-84271a038bed
+ description: Generated description for concept referred to by key "PMControlPolicy_Policies:0.0.1"
+ - key:
+ name: PMControlPolicy_Schemas
+ version: 0.0.1
+ value:
+ key:
+ name: PMControlPolicy_Schemas
+ version: 0.0.1
+ UUID: e61973f1-189c-39e5-82f6-0d3afe298a20
+ description: Generated description for concept referred to by key "PMControlPolicy_Schemas:0.0.1"
+ - key:
+ name: PMControlPolicy_Tasks
+ version: 0.0.1
+ value:
+ key:
+ name: PMControlPolicy_Tasks
+ version: 0.0.1
+ UUID: 5658adb3-2962-30a3-a241-fae75bb8eb4a
+ description: Generated description for concept referred to by key "PMControlPolicy_Tasks:0.0.1"
+ - key:
+ name: PMSubscriptionAlbum
+ version: 0.0.1
+ value:
+ key:
+ name: PMSubscriptionAlbum
+ version: 0.0.1
+ UUID: c2bd6f0d-6854-317a-9be2-97c08338428c
+ description: Generated description for concept referred to by key "PMSubscriptionAlbum:0.0.1"
+ - key:
+ name: PMSubscriptionOutputEvent
+ version: 0.0.1
+ value:
+ key:
+ name: PMSubscriptionOutputEvent
+ version: 0.0.1
+ UUID: 992b7819-9f69-3aa0-bb0f-6e45ea15ce05
+ description: Generated description for concept referred to by key "PMSubscriptionOutputEvent:0.0.1"
+ - key:
+ name: PMSubscriptionType
+ version: 0.0.1
+ value:
+ key:
+ name: PMSubscriptionType
+ version: 0.0.1
+ UUID: 73c1c397-4fc3-357f-93b6-a8ad707fbaae
+ description: Generated description for concept referred to by key "PMSubscriptionType:0.0.1"
+ - key:
+ name: ReceiveEventPolicy
+ version: 0.0.1
+ value:
+ key:
+ name: ReceiveEventPolicy
+ version: 0.0.1
+ UUID: 568b7345-9de1-36d3-b6a3-9b857e6809a1
+ description: Generated description for concept referred to by key "ReceiveEventPolicy:0.0.1"
+ - key:
+ name: ReceiveSubscriptionTask
+ version: 0.0.1
+ value:
+ key:
+ name: ReceiveSubscriptionTask
+ version: 0.0.1
+ UUID: f596afc8-100c-35eb-92c8-352355ea457d
+ description: Generated description for concept referred to by key "ReceiveSubscriptionTask:0.0.1"
+ - key:
+ name: SimpleIntType
+ version: 0.0.1
+ value:
+ key:
+ name: SimpleIntType
+ version: 0.0.1
+ UUID: 153791fd-ae0a-36a7-88a5-309a7936415d
+ description: Generated description for concept referred to by key "SimpleIntType:0.0.1"
+ - key:
+ name: SimpleStringType
+ version: 0.0.1
+ value:
+ key:
+ name: SimpleStringType
+ version: 0.0.1
+ UUID: 8a4957cf-9493-3a76-8c22-a208e23259af
+ description: Generated description for concept referred to by key "SimpleStringType:0.0.1"
+ - key:
+ name: SubscriptionStatusType
+ version: 0.0.1
+ value:
+ key:
+ name: SubscriptionStatusType
+ version: 0.0.1
+ UUID: 597643b1-9db1-31ce-85d0-e1c63c43b30b
+ description: Generated description for concept referred to by key "SubscriptionStatusType:0.0.1"
+ - key:
+ name: SubscriptionType
+ version: 0.0.1
+ value:
+ key:
+ name: SubscriptionType
+ version: 0.0.1
+ UUID: 184547bb-7d64-3cb2-a273-d7185102c5ce
+ description: Generated description for concept referred to by key "SubscriptionType:0.0.1"
+ - key:
+ name: UUIDType
+ version: 0.0.1
+ value:
+ key:
+ name: UUIDType
+ version: 0.0.1
+ UUID: 6a8cc68e-dfc8-3403-9c6d-071c886b319c
+ description: Generated description for concept referred to by key "UUIDType:0.0.1"
+ - key:
+ name: pmsh-operational-policy
+ version: 0.0.1
+ value:
+ key:
+ name: pmsh-operational-policy
+ version: 0.0.1
+ UUID: fdf2c9ff-6422-3ea6-b6b6-49b12116265d
+ description: Generated description for concept referred to by key "pmsh-operational-policy:0.0.1"
+ policies:
+ key:
+ name: PMControlPolicy_Policies
+ version: 0.0.1
+ policyMap:
+ entry:
+ - key:
+ name: CDSCreateResponsePolicy
+ version: 0.0.1
+ value:
+ policyKey:
+ name: CDSCreateResponsePolicy
+ version: 0.0.1
+ template: Freestyle
+ state:
+ entry:
+ - key: CDSCreateResponseState
+ value:
+ stateKey:
+ parentKeyName: CDSCreateResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: CDSCreateResponseState
+ trigger:
+ name: CDSCreateResponseEvent
+ version: 0.0.1
+ stateOutputs:
+ entry:
+ - key: ResponseOutput
+ value:
+ key:
+ parentKeyName: CDSCreateResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CDSCreateResponseState
+ localName: ResponseOutput
+ outgoingEvent:
+ name: CDSResponseStatusEvent
+ version: 0.0.1
+ nextState:
+ parentKeyName: 'NULL'
+ parentKeyVersion: 0.0.0
+ parentLocalName: 'NULL'
+ localName: 'NULL'
+ contextAlbumReference: []
+ taskSelectionLogic:
+ key: 'NULL'
+ logicFlavour: UNDEFINED
+ logic: ''
+ stateFinalizerLogicMap:
+ entry: []
+ defaultTask:
+ name: CDSCreateResponseTask
+ version: 0.0.1
+ taskReferences:
+ entry:
+ - key:
+ name: CDSCreateResponseTask
+ version: 0.0.1
+ value:
+ key:
+ parentKeyName: CDSCreateResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CDSCreateResponseState
+ localName: CDSCreateResponsePolicy
+ outputType: DIRECT
+ output:
+ parentKeyName: CDSCreateResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CDSCreateResponseState
+ localName: ResponseOutput
+ firstState: CDSCreateResponseState
+ - key:
+ name: CDSDeleteResponsePolicy
+ version: 0.0.1
+ value:
+ policyKey:
+ name: CDSDeleteResponsePolicy
+ version: 0.0.1
+ template: Freestyle
+ state:
+ entry:
+ - key: CDSDeleteResponseState
+ value:
+ stateKey:
+ parentKeyName: CDSDeleteResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: CDSDeleteResponseState
+ trigger:
+ name: CDSDeleteResponseEvent
+ version: 0.0.1
+ stateOutputs:
+ entry:
+ - key: ResponseOutput
+ value:
+ key:
+ parentKeyName: CDSDeleteResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CDSDeleteResponseState
+ localName: ResponseOutput
+ outgoingEvent:
+ name: CDSResponseStatusEvent
+ version: 0.0.1
+ nextState:
+ parentKeyName: 'NULL'
+ parentKeyVersion: 0.0.0
+ parentLocalName: 'NULL'
+ localName: 'NULL'
+ contextAlbumReference: []
+ taskSelectionLogic:
+ key: 'NULL'
+ logicFlavour: UNDEFINED
+ logic: ''
+ stateFinalizerLogicMap:
+ entry: []
+ defaultTask:
+ name: CDSDeleteResponseTask
+ version: 0.0.1
+ taskReferences:
+ entry:
+ - key:
+ name: CDSDeleteResponseTask
+ version: 0.0.1
+ value:
+ key:
+ parentKeyName: CDSDeleteResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CDSDeleteResponseState
+ localName: CDSDeleteResponsePolicy
+ outputType: DIRECT
+ output:
+ parentKeyName: CDSDeleteResponsePolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CDSDeleteResponseState
+ localName: ResponseOutput
+ firstState: CDSDeleteResponseState
+ - key:
+ name: ReceiveEventPolicy
+ version: 0.0.1
+ value:
+ policyKey:
+ name: ReceiveEventPolicy
+ version: 0.0.1
+ template: Freestyle
+ state:
+ entry:
+ - key: CreateOrDeleteState
+ value:
+ stateKey:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: CreateOrDeleteState
+ trigger:
+ name: PMSubscriptionOutputEvent
+ version: 0.0.1
+ stateOutputs:
+ entry:
+ - key: CreateSubscriptionPayload
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateOrDeleteState
+ localName: CreateSubscriptionPayload
+ outgoingEvent:
+ name: CreateSubscriptionPayloadEvent
+ version: 0.0.1
+ nextState:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: CreateSubscription
+ - key: DeleteSubscriptionPayload
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateOrDeleteState
+ localName: DeleteSubscriptionPayload
+ outgoingEvent:
+ name: DeleteSubscriptionPayloadEvent
+ version: 0.0.1
+ nextState:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: DeleteSubscription
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskSelectionLogic:
+ key: TaskSelectionLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+ executor.logger.info(executor.subject.id);
+
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+ var changeType = pmSubscriptionInfo.get("changeType").toString()
+
+ executor.logger.info("Change Type is " + changeType)
+
+ if ("CREATE".equals(changeType)) {
+ executor.logger.info("Choosing to create a subscription")
+ executor.subject.getTaskKey("CreateSubscriptionPayloadTask").copyTo(executor.selectedTask);
+ }
+ else if ("DELETE".equals(changeType)) {
+ executor.logger.info("Choosing to delete a subscription")
+ executor.subject.getTaskKey("DeleteSubscriptionPayloadTask").copyTo(executor.selectedTask);
+ }
+
+ //var returnValue = executor.isTrue;
+ true;
+ stateFinalizerLogicMap:
+ entry: []
+ defaultTask:
+ name: CreateSubscriptionPayloadTask
+ version: 0.0.1
+ taskReferences:
+ entry:
+ - key:
+ name: CreateSubscriptionPayloadTask
+ version: 0.0.1
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateOrDeleteState
+ localName: ReceiveEventPolicy
+ outputType: DIRECT
+ output:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateOrDeleteState
+ localName: CreateSubscriptionPayload
+ - key:
+ name: DeleteSubscriptionPayloadTask
+ version: 0.0.1
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateOrDeleteState
+ localName: ReceiveEventPolicy
+ outputType: DIRECT
+ output:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateOrDeleteState
+ localName: DeleteSubscriptionPayload
+ - key: CreateSubscription
+ value:
+ stateKey:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: CreateSubscription
+ trigger:
+ name: CreateSubscriptionPayloadEvent
+ version: 0.0.1
+ stateOutputs:
+ entry:
+ - key: IssueCreateSubscriptionRequestOutput
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateSubscription
+ localName: IssueCreateSubscriptionRequestOutput
+ outgoingEvent:
+ name: CDSCreateSubscriptionRequestEvent
+ version: 0.0.1
+ nextState:
+ parentKeyName: 'NULL'
+ parentKeyVersion: 0.0.0
+ parentLocalName: 'NULL'
+ localName: 'NULL'
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskSelectionLogic:
+ key: 'NULL'
+ logicFlavour: UNDEFINED
+ logic: ''
+ stateFinalizerLogicMap:
+ entry: []
+ defaultTask:
+ name: CreateSubscriptionRequestTask
+ version: 0.0.1
+ taskReferences:
+ entry:
+ - key:
+ name: CreateSubscriptionRequestTask
+ version: 0.0.1
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateSubscription
+ localName: ReceiveEventPolicy
+ outputType: DIRECT
+ output:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: CreateSubscription
+ localName: IssueCreateSubscriptionRequestOutput
+ - key: DeleteSubscription
+ value:
+ stateKey:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: DeleteSubscription
+ trigger:
+ name: DeleteSubscriptionPayloadEvent
+ version: 0.0.1
+ stateOutputs:
+ entry:
+ - key: IssueDeleteSubscriptionRequestOutput
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: DeleteSubscription
+ localName: IssueDeleteSubscriptionRequestOutput
+ outgoingEvent:
+ name: CDSDeleteSubscriptionRequestEvent
+ version: 0.0.1
+ nextState:
+ parentKeyName: 'NULL'
+ parentKeyVersion: 0.0.0
+ parentLocalName: 'NULL'
+ localName: 'NULL'
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskSelectionLogic:
+ key: 'NULL'
+ logicFlavour: UNDEFINED
+ logic: ''
+ stateFinalizerLogicMap:
+ entry: []
+ defaultTask:
+ name: DeleteSubscriptionRequestTask
+ version: 0.0.1
+ taskReferences:
+ entry:
+ - key:
+ name: DeleteSubscriptionRequestTask
+ version: 0.0.1
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: DeleteSubscription
+ localName: ReceiveEventPolicy
+ outputType: DIRECT
+ output:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: DeleteSubscription
+ localName: IssueDeleteSubscriptionRequestOutput
+ - key: ReceiveSubscriptionState
+ value:
+ stateKey:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: ReceiveSubscriptionState
+ trigger:
+ name: pmsh-operational-policy
+ version: 0.0.1
+ stateOutputs:
+ entry:
+ - key: ReceivePMSubscriptionOutput
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: ReceiveSubscriptionState
+ localName: ReceivePMSubscriptionOutput
+ outgoingEvent:
+ name: PMSubscriptionOutputEvent
+ version: 0.0.1
+ nextState:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: 'NULL'
+ localName: CreateOrDeleteState
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskSelectionLogic:
+ key: 'NULL'
+ logicFlavour: UNDEFINED
+ logic: ''
+ stateFinalizerLogicMap:
+ entry: []
+ defaultTask:
+ name: ReceiveSubscriptionTask
+ version: 0.0.1
+ taskReferences:
+ entry:
+ - key:
+ name: ReceiveSubscriptionTask
+ version: 0.0.1
+ value:
+ key:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: ReceiveSubscriptionState
+ localName: ReceiveEventPolicy
+ outputType: DIRECT
+ output:
+ parentKeyName: ReceiveEventPolicy
+ parentKeyVersion: 0.0.1
+ parentLocalName: ReceiveSubscriptionState
+ localName: ReceivePMSubscriptionOutput
+ firstState: ReceiveSubscriptionState
+ tasks:
+ key:
+ name: PMControlPolicy_Tasks
+ version: 0.0.1
+ taskMap:
+ entry:
+ - key:
+ name: CDSCreateResponseTask
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateResponseTask
+ version: 0.0.1
+ inputFields:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSCreateResponsePayloadType
+ version: 0.0.1
+ optional: false
+ - key: status
+ value:
+ key: status
+ fieldSchemaKey:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ optional: false
+ outputFields:
+ entry:
+ - key: status
+ value:
+ key: status
+ fieldSchemaKey:
+ name: SubscriptionStatusType
+ version: 0.0.1
+ optional: false
+ taskParameters:
+ entry: []
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskLogic:
+ key: TaskLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+ executor.logger.info(executor.subject.id);
+
+ var commonHeader = executor.inFields.get("commonHeader")
+ var response = executor.inFields.get("payload")
+ var albumID = commonHeader.get("requestId")
+
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(albumID.toString());
+ var responseStatus = executor.subject.getOutFieldSchemaHelper("status").createNewInstance();
+
+ responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+ responseStatus.put("nfName", pmSubscriptionInfo.get("nfName"))
+ responseStatus.put("changeType", pmSubscriptionInfo.get("changeType"))
+
+ var status = response.get(pmSubscriptionInfo.get("changeType").toLowerCase() + "_DasH_subscription_DasH_response").get("odl_DasH_response").get("status")
+
+ executor.logger.info("RESPONSE STATUS = " + status)
+
+ if(status == "success") {
+ responseStatus.put("message", "success")
+ } else {
+ responseStatus.put("message", "failed")
+ }
+
+ executor.outFields.put("status", responseStatus)
+
+ //var returnValue = executor.isTrue;
+ true;
+ - key:
+ name: CDSDeleteResponseTask
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteResponseTask
+ version: 0.0.1
+ inputFields:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSDeleteResponsePayloadType
+ version: 0.0.1
+ optional: false
+ - key: status
+ value:
+ key: status
+ fieldSchemaKey:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ optional: false
+ outputFields:
+ entry:
+ - key: status
+ value:
+ key: status
+ fieldSchemaKey:
+ name: SubscriptionStatusType
+ version: 0.0.1
+ optional: false
+ taskParameters:
+ entry: []
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskLogic:
+ key: TaskLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+ executor.logger.info(executor.subject.id);
+
+ var commonHeader = executor.inFields.get("commonHeader")
+ var response = executor.inFields.get("payload")
+ var albumID = commonHeader.get("requestId")
+
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(albumID.toString());
+ var responseStatus = executor.subject.getOutFieldSchemaHelper("status").createNewInstance();
+
+ responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+ responseStatus.put("nfName", pmSubscriptionInfo.get("nfName"))
+ responseStatus.put("changeType", pmSubscriptionInfo.get("changeType"))
+
+ var status = response.get(pmSubscriptionInfo.get("changeType").toLowerCase() + "_DasH_subscription_DasH_response").get("odl_DasH_response").get("status")
+
+ executor.logger.info("RESPONSE STATUS = " + status)
+
+ if(status == "success") {
+ responseStatus.put("message", "success")
+ } else {
+ responseStatus.put("message", "failed")
+ }
+
+ executor.outFields.put("status", responseStatus)
+
+ //var returnValue = executor.isTrue;
+ true;
+ - key:
+ name: CreateSubscriptionPayloadTask
+ version: 0.0.1
+ value:
+ key:
+ name: CreateSubscriptionPayloadTask
+ version: 0.0.1
+ inputFields:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ outputFields:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ taskParameters:
+ entry: []
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskLogic:
+ key: TaskLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+ executor.logger.info(executor.subject.id);
+
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+
+ var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+
+ var payloadProperties = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance(changeType + "_DasH_subscription_DasH_properties_record");
+
+ payloadProperties.put("nfName", pmSubscriptionInfo.get("nfName"))
+ payloadProperties.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+ payloadProperties.put("administrativeState", pmSubscriptionInfo.get("subscription").get("administrativeState"))
+ payloadProperties.put("fileBasedGP", pmSubscriptionInfo.get("subscription").get("fileBasedGP").toString())
+ payloadProperties.put("fileLocation", pmSubscriptionInfo.get("subscription").get("fileLocation"))
+ payloadProperties.put("measurementGroups", pmSubscriptionInfo.get("subscription").get("measurementGroups"))
+
+ var payloadEntry = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance("CDSRequestPayloadEntry");
+ payloadEntry.put(changeType + "_DasH_subscription_DasH_properties", payloadProperties)
+
+ var payload = executor.subject.getOutFieldSchemaHelper("payload").createNewInstance();
+ payload.put(changeType + "_DasH_subscription_DasH_request", payloadEntry);
+
+ executor.outFields.put("albumID", executor.inFields.get("albumID"))
+ executor.outFields.put("payload", payload);
+
+ //var returnValue = executor.isTrue;
+ true;
+ - key:
+ name: CreateSubscriptionRequestTask
+ version: 0.0.1
+ value:
+ key:
+ name: CreateSubscriptionRequestTask
+ version: 0.0.1
+ inputFields:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ outputFields:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ taskParameters:
+ entry: []
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskLogic:
+ key: TaskLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+ executor.logger.info(executor.subject.id);
+
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+
+ var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+ var blueprintName = pmSubscriptionInfo.get("blueprintName").toLowerCase()
+ var blueprintVersion = pmSubscriptionInfo.get("blueprintVersion").toLowerCase()
+ var payload = executor.inFields.get("payload")
+ var actionName = changeType + "-subscription"
+
+ var commonHeader = executor.subject.getOutFieldSchemaHelper("commonHeader").createNewInstance();
+ commonHeader.put("originatorId", "sdnc");
+ commonHeader.put("requestId", executor.inFields.get("albumID").toString());
+ commonHeader.put("subRequestId", "sub-123456-1000");
+
+ var actionIdentifiers = executor.subject.getOutFieldSchemaHelper("actionIdentifiers").createNewInstance();
+ actionIdentifiers.put("actionName", actionName);
+ actionIdentifiers.put("blueprintName", blueprintName);
+ actionIdentifiers.put("blueprintVersion", blueprintVersion);
+ actionIdentifiers.put("mode", "sync");
+
+ executor.outFields.put("commonHeader", commonHeader);
+ executor.outFields.put("actionIdentifiers", actionIdentifiers);
+ executor.outFields.put("payload", payload);
+
+ //var returnValue = executor.isTrue;
+ true;
+ - key:
+ name: DeleteSubscriptionPayloadTask
+ version: 0.0.1
+ value:
+ key:
+ name: DeleteSubscriptionPayloadTask
+ version: 0.0.1
+ inputFields:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ outputFields:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ taskParameters:
+ entry: []
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskLogic:
+ key: TaskLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+ executor.logger.info(executor.subject.id);
+
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+
+ var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+
+ var payloadProperties = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance(changeType + "_DasH_subscription_DasH_properties_record");
+
+ payloadProperties.put("nfName", pmSubscriptionInfo.get("nfName"))
+ payloadProperties.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+ payloadProperties.put("administrativeState", pmSubscriptionInfo.get("subscription").get("administrativeState"))
+ payloadProperties.put("fileBasedGP", pmSubscriptionInfo.get("subscription").get("fileBasedGP").toString())
+ payloadProperties.put("fileLocation", pmSubscriptionInfo.get("subscription").get("fileLocation"))
+ payloadProperties.put("measurementGroups", pmSubscriptionInfo.get("subscription").get("measurementGroups"))
+
+ var payloadEntry = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance("CDSRequestPayloadEntry");
+ payloadEntry.put(changeType + "_DasH_subscription_DasH_properties", payloadProperties)
+
+ var payload = executor.subject.getOutFieldSchemaHelper("payload").createNewInstance();
+ payload.put(changeType + "_DasH_subscription_DasH_request", payloadEntry);
+
+ executor.outFields.put("albumID", executor.inFields.get("albumID"))
+ executor.outFields.put("payload", payload);
+
+ //var returnValue = executor.isTrue;
+ true;
+ - key:
+ name: DeleteSubscriptionRequestTask
+ version: 0.0.1
+ value:
+ key:
+ name: DeleteSubscriptionRequestTask
+ version: 0.0.1
+ inputFields:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ outputFields:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ taskParameters:
+ entry: []
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskLogic:
+ key: TaskLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+ executor.logger.info(executor.subject.id);
+
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+
+ var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+ var blueprintName = pmSubscriptionInfo.get("blueprintName").toLowerCase()
+ var blueprintVersion = pmSubscriptionInfo.get("blueprintVersion").toLowerCase()
+ var payload = executor.inFields.get("payload")
+ var actionName = changeType + "-subscription"
+
+ var commonHeader = executor.subject.getOutFieldSchemaHelper("commonHeader").createNewInstance();
+ commonHeader.put("originatorId", "sdnc");
+ commonHeader.put("requestId", executor.inFields.get("albumID").toString());
+ commonHeader.put("subRequestId", "sub-123456-1000");
+
+ var actionIdentifiers = executor.subject.getOutFieldSchemaHelper("actionIdentifiers").createNewInstance();
+ actionIdentifiers.put("actionName", actionName);
+ actionIdentifiers.put("blueprintName", blueprintName);
+ actionIdentifiers.put("blueprintVersion", blueprintVersion);
+ actionIdentifiers.put("mode", "sync");
+
+ executor.outFields.put("commonHeader", commonHeader);
+ executor.outFields.put("actionIdentifiers", actionIdentifiers);
+ executor.outFields.put("payload", payload);
+
+ //var returnValue = executor.isTrue;
+ true;
+ - key:
+ name: ReceiveSubscriptionTask
+ version: 0.0.1
+ value:
+ key:
+ name: ReceiveSubscriptionTask
+ version: 0.0.1
+ inputFields:
+ entry:
+ - key: blueprintName
+ value:
+ key: blueprintName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: blueprintVersion
+ value:
+ key: blueprintVersion
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: changeType
+ value:
+ key: changeType
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: closedLoopControlName
+ value:
+ key: closedLoopControlName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: nfName
+ value:
+ key: nfName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: policyName
+ value:
+ key: policyName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: subscription
+ value:
+ key: subscription
+ fieldSchemaKey:
+ name: SubscriptionType
+ version: 0.0.1
+ optional: false
+ outputFields:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ taskParameters:
+ entry: []
+ contextAlbumReference:
+ - name: PMSubscriptionAlbum
+ version: 0.0.1
+ taskLogic:
+ key: TaskLogic
+ logicFlavour: JAVASCRIPT
+ logic: |-
+ /*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+ var uuidType = java.util.UUID;
+
+ executor.logger.info(executor.subject.id);
+
+ //albumID will be used to fetch info from our album later
+ var albumID = uuidType.randomUUID();
+ var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").getSchemaHelper().createNewInstance();
+ var returnValue = true;
+
+ if(executor.inFields.get("policyName") != null) {
+ executor.logger.info("nfName in receive sub event " + executor.inFields.get("nfName"));
+
+ var changeType = executor.inFields.get("changeType")
+ var nfName = executor.inFields.get("nfName")
+ var policyName = executor.inFields.get("policyName")
+ var closedLoopControlName = executor.inFields.get("closedLoopControlName")
+ var subscription = executor.inFields.get("subscription")
+ var blueprintName = executor.inFields.get("blueprintName")
+ var blueprintVersion = executor.inFields.get("blueprintVersion")
+
+ pmSubscriptionInfo.put("nfName", executor.inFields.get("nfName"));
+ pmSubscriptionInfo.put("changeType", executor.inFields.get("changeType"))
+ pmSubscriptionInfo.put("policyName", executor.inFields.get("policyName"))
+ pmSubscriptionInfo.put("closedLoopControlName", executor.inFields.get("closedLoopControlName"))
+ pmSubscriptionInfo.put("subscription", subscription)
+ pmSubscriptionInfo.put("blueprintName", blueprintName)
+ pmSubscriptionInfo.put("blueprintVersion", blueprintVersion)
+
+
+ executor.getContextAlbum("PMSubscriptionAlbum").put(albumID.toString(), pmSubscriptionInfo);
+
+ executor.outFields.put("albumID", albumID)
+ } else {
+ executor.message = "Received invalid event"
+ returnValue = false;
+ }
+
+ returnValue;
+ events:
+ key:
+ name: PMControlPolicy_Events
+ version: 0.0.1
+ eventMap:
+ entry:
+ - key:
+ name: CDSCreateResponseEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateResponseEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: CDS
+ target: APEX
+ parameter:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSCreateResponsePayloadType
+ version: 0.0.1
+ optional: false
+ - key: status
+ value:
+ key: status
+ fieldSchemaKey:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: CDSCreateSubscriptionRequestEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateSubscriptionRequestEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: APEX
+ target: APEX
+ parameter:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: CDSDeleteResponseEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteResponseEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: CDS
+ target: APEX
+ parameter:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSDeleteResponsePayloadType
+ version: 0.0.1
+ optional: false
+ - key: status
+ value:
+ key: status
+ fieldSchemaKey:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: CDSDeleteSubscriptionRequestEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteSubscriptionRequestEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: APEX
+ target: APEX
+ parameter:
+ entry:
+ - key: actionIdentifiers
+ value:
+ key: actionIdentifiers
+ fieldSchemaKey:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ optional: false
+ - key: commonHeader
+ value:
+ key: commonHeader
+ fieldSchemaKey:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: CDSResponseStatusEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CDSResponseStatusEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: APEX
+ target: DCAE
+ parameter:
+ entry:
+ - key: status
+ value:
+ key: status
+ fieldSchemaKey:
+ name: SubscriptionStatusType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: CreateSubscriptionPayloadEvent
+ version: 0.0.1
+ value:
+ key:
+ name: CreateSubscriptionPayloadEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: APEX
+ target: APEX
+ parameter:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: DeleteSubscriptionPayloadEvent
+ version: 0.0.1
+ value:
+ key:
+ name: DeleteSubscriptionPayloadEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: APEX
+ target: APEX
+ parameter:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ - key: payload
+ value:
+ key: payload
+ fieldSchemaKey:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: MRResponseEvent
+ version: 0.0.1
+ value:
+ key:
+ name: MRResponseEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: DCAE
+ target: APEX
+ parameter:
+ entry:
+ - key: count
+ value:
+ key: count
+ fieldSchemaKey:
+ name: SimpleIntType
+ version: 0.0.1
+ optional: false
+ - key: serverTimeMs
+ value:
+ key: serverTimeMs
+ fieldSchemaKey:
+ name: SimpleIntType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: PMSubscriptionOutputEvent
+ version: 0.0.1
+ value:
+ key:
+ name: PMSubscriptionOutputEvent
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: APEX
+ target: APEX
+ parameter:
+ entry:
+ - key: albumID
+ value:
+ key: albumID
+ fieldSchemaKey:
+ name: UUIDType
+ version: 0.0.1
+ optional: false
+ - key:
+ name: pmsh-operational-policy
+ version: 0.0.1
+ value:
+ key:
+ name: pmsh-operational-policy
+ version: 0.0.1
+ nameSpace: org.onap.policy.apex.onap.pmcontrol
+ source: DCAE
+ target: APEX
+ parameter:
+ entry:
+ - key: blueprintName
+ value:
+ key: blueprintName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: blueprintVersion
+ value:
+ key: blueprintVersion
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: changeType
+ value:
+ key: changeType
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: closedLoopControlName
+ value:
+ key: closedLoopControlName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: nfName
+ value:
+ key: nfName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: policyName
+ value:
+ key: policyName
+ fieldSchemaKey:
+ name: SimpleStringType
+ version: 0.0.1
+ optional: false
+ - key: subscription
+ value:
+ key: subscription
+ fieldSchemaKey:
+ name: SubscriptionType
+ version: 0.0.1
+ optional: false
+ albums:
+ key:
+ name: PMControlPolicy_Albums
+ version: 0.0.1
+ albums:
+ entry:
+ - key:
+ name: PMSubscriptionAlbum
+ version: 0.0.1
+ value:
+ key:
+ name: PMSubscriptionAlbum
+ version: 0.0.1
+ scope: policy
+ isWritable: true
+ itemSchema:
+ name: PMSubscriptionType
+ version: 0.0.1
+ schemas:
+ key:
+ name: PMControlPolicy_Schemas
+ version: 0.0.1
+ schemas:
+ entry:
+ - key:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSActionIdentifiersType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "type": "record",
+ "name": "ActionIdentifiers_Type",
+ "namespace": "org.onap.policy.apex.onap.helloworld",
+ "fields": [
+ {
+ "name": "actionName",
+ "type": "string"
+ },
+ {
+ "name": "blueprintName",
+ "type": "string"
+ },
+ {
+ "name": "blueprintVersion",
+ "type": "string"
+ },
+ {
+ "name": "mode",
+ "type": "string"
+ }
+ ]
+ }
+ - key:
+ name: CDSCreateResponsePayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateResponsePayloadType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "name": "CreateResponsePayloadEntry",
+ "type": "record",
+ "namespace": "org.onap.policy.apex.onap.helloworld",
+ "fields": [
+ {
+ "name": "create_DasH_subscription_DasH_response",
+ "type": {
+ "name": "create_DasH_subscription_DasH_response",
+ "type": "record",
+ "fields": [
+ {
+ "name": "odl_DasH_response",
+ "type": {
+ "name": "odl_DasH_response",
+ "type": "record",
+ "fields": [
+ {
+ "name": "status",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ - key:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSCreateSubscriptionPayloadType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "type": "map",
+ "values": {
+ "type": "record",
+ "name": "CDSRequestPayloadEntry",
+ "fields": [
+ {
+ "name": "create_DasH_subscription_DasH_properties",
+ "type": {
+ "name": "create_DasH_subscription_DasH_properties_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "nfName",
+ "type": "string"
+ },
+ {
+ "name": "subscriptionName",
+ "type": "string"
+ },
+ {
+ "name": "administrativeState",
+ "type": "string"
+ },
+ {
+ "name": "fileBasedGP",
+ "type": "string"
+ },
+ {
+ "name": "fileLocation",
+ "type": "string"
+ },
+ {
+ "name": "measurementGroups",
+ "type": {
+ "type": "array",
+ "items": {
+ "name": "measurementGroups_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "measurementGroup",
+ "type": {
+ "name": "measurementGroup",
+ "type": "record",
+ "fields": [
+ {
+ "name": "measurementTypes",
+ "type": {
+ "type": "array",
+ "items": {
+ "name": "measurementTypes_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "measurementType",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "managedObjectDNsBasic",
+ "type": {
+ "type": "array",
+ "items": {
+ "name": "managedObjectDNsBasic_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "DN",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ - key:
+ name: CDSDeleteResponsePayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteResponsePayloadType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "name": "DeleteResponsePayloadEntry",
+ "type": "record",
+ "namespace": "com.acme.avro",
+ "fields": [
+ {
+ "name": "delete_DasH_subscription_DasH_response",
+ "type": {
+ "name": "delete_DasH_subscription_DasH_response",
+ "type": "record",
+ "fields": [
+ {
+ "name": "odl_DasH_response",
+ "type": {
+ "name": "odl_DasH_response",
+ "type": "record",
+ "fields": [
+ {
+ "name": "status",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ - key:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSDeleteSubscriptionPayloadType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "type": "map",
+ "values": {
+ "type": "record",
+ "name": "CDSRequestPayloadEntry",
+ "fields": [
+ {
+ "name": "delete_DasH_subscription_DasH_properties",
+ "type": {
+ "name": "delete_DasH_subscription_DasH_properties_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "nfName",
+ "type": "string"
+ },
+ {
+ "name": "subscriptionName",
+ "type": "string"
+ },
+ {
+ "name": "administrativeState",
+ "type": "string"
+ },
+ {
+ "name": "fileBasedGP",
+ "type": "string"
+ },
+ {
+ "name": "fileLocation",
+ "type": "string"
+ },
+ {
+ "name": "measurementGroups",
+ "type": {
+ "type": "array",
+ "items": {
+ "name": "measurementGroups_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "measurementGroup",
+ "type": {
+ "name": "measurementGroup",
+ "type": "record",
+ "fields": [
+ {
+ "name": "measurementTypes",
+ "type": {
+ "type": "array",
+ "items": {
+ "name": "measurementTypes_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "measurementType",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "managedObjectDNsBasic",
+ "type": {
+ "type": "array",
+ "items": {
+ "name": "managedObjectDNsBasic_record",
+ "type": "record",
+ "fields": [
+ {
+ "name": "DN",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ - key:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSRequestCommonHeaderType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "type": "record",
+ "name": "RequestCommonHeader_Type",
+ "namespace": "org.onap.policy.apex.onap.helloworld",
+ "fields": [
+ {
+ "name": "originatorId",
+ "type": "string"
+ },
+ {
+ "name": "requestId",
+ "type": "string"
+ },
+ {
+ "name": "subRequestId",
+ "type": "string"
+ }
+ ]
+ }
+ - key:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSResponseCommonHeaderType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "type": "record",
+ "name": "ResponseCommonHeader_Type",
+ "namespace": "org.onap.policy.apex.onap.helloworld",
+ "fields": [
+ {
+ "name": "originatorId",
+ "type": "string"
+ },
+ {
+ "name": "requestId",
+ "type": "string"
+ },
+ {
+ "name": "subRequestId",
+ "type": "string"
+ },
+ {
+ "name": "timestamp",
+ "type": "string"
+ },
+ {
+ "name": "flags",
+ "type": ["null", "string"]
+ }
+ ]
+ }
+ - key:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ value:
+ key:
+ name: CDSResponseStatusType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "type": "record",
+ "name": "ResponseStatus_Type",
+ "namespace": "org.onap.policy.apex.onap.helloworld",
+ "fields": [
+ {
+ "name": "code",
+ "type": "int"
+ },
+ {
+ "name": "eventType",
+ "type": "string"
+ },
+ {
+ "name": "timestamp",
+ "type": "string"
+ },
+ {
+ "name": "message",
+ "type": "string"
+ }
+ ]
+ }
+ - key:
+ name: PMSubscriptionType
+ version: 0.0.1
+ value:
+ key:
+ name: PMSubscriptionType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: "{\n\t\"name\": \"PMSubscription\",\n\t\"type\": \"record\",\n\t\"namespace\": \"\
+ org.onap.policy.apex.onap.pmcontrol\",\n\t\"fields\": [\n {\n \"name\": \"nfName\"\
+ ,\n \"type\": \"string\"\n },\n\t {\n\t\t\t\"name\": \"changeType\",\n\t\t\t\"\
+ type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"closedLoopControlName\",\n\t\t\t\"type\": \"\
+ string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"policyName\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\
+ {\n\t\t \"name\": \"blueprintName\",\n\t\t \"type\": \"string\"\n\t\t},\n\t\t{\n\t\t \"name\"\
+ : \"blueprintVersion\",\n\t\t \"type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"subscription\"\
+ ,\n\t\t\t\"type\": {\n\t\t\t\t\"name\": \"subscription\",\n\t\t\t\t\"type\": \"record\",\n\t\t\t\t\
+ \"fields\": [{\n\t\t\t\t\t\t\"name\": \"subscriptionName\",\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\
+ \t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"administrativeState\",\n\t\t\t\t\t\t\"type\": \"string\"\
+ \n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"fileBasedGP\",\n\t\t\t\t\t\t\"type\": \"int\"\
+ \n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"fileLocation\",\n\t\t\t\t\t\t\"type\": \"string\"\
+ \n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"measurementGroups\",\n\t\t\t\t\t\t\"type\": {\n\
+ \t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\"name\": \"Measurement_Groups_Type\"\
+ ,\n\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\"name\"\
+ : \"measurementGroup\",\n\t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\t\t\t\t\t\t\"name\": \"Measurement_Group_Type\"\
+ ,\n\t\t\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\
+ \t\t\t\t\"name\": \"measurementTypes\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\t\t\t\t\t\t\
+ \t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\
+ name\": \"Measurement_Types_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\
+ \t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"measurementType\",\n\t\
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\
+ \t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\
+ \t\t\t\t\t\t\t\t\"name\": \"managedObjectDNsBasic\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\
+ \t\t\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\t\
+ \t\t\t\t\t\"name\": \"Managed_Object_Dns_Basic_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"record\"\
+ ,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"DN\",\n\t\
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\
+ \t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\
+ \t\t\t\t}\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\
+ \t}\n\t]\n}"
+ - key:
+ name: SimpleIntType
+ version: 0.0.1
+ value:
+ key:
+ name: SimpleIntType
+ version: 0.0.1
+ schemaFlavour: Java
+ schemaDefinition: java.lang.Integer
+ - key:
+ name: SimpleStringType
+ version: 0.0.1
+ value:
+ key:
+ name: SimpleStringType
+ version: 0.0.1
+ schemaFlavour: Java
+ schemaDefinition: java.lang.String
+ - key:
+ name: SubscriptionStatusType
+ version: 0.0.1
+ value:
+ key:
+ name: SubscriptionStatusType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: |-
+ {
+ "type": "record",
+ "name": "ActivateSubscriptionStatus_Type",
+ "namespace": "org.onap.policy.apex.onap.helloworld",
+ "fields": [
+ {
+ "name": "subscriptionName",
+ "type": "string"
+ },
+ {
+ "name": "nfName",
+ "type": "string"
+ },
+ {
+ "name": "changeType",
+ "type": "string"
+ },
+ {
+ "name": "message",
+ "type": "string"
+ }
+ ]
+ }
+ - key:
+ name: SubscriptionType
+ version: 0.0.1
+ value:
+ key:
+ name: SubscriptionType
+ version: 0.0.1
+ schemaFlavour: Avro
+ schemaDefinition: "{\n\t\"name\": \"subscription\",\n\t\"type\": \"record\",\n\t\"fields\": [{\n\t\t\
+ \t\"name\": \"subscriptionName\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"administrativeState\"\
+ ,\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"fileBasedGP\",\n\t\t\t\"type\": \"\
+ int\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"fileLocation\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\
+ {\n\t\t\t\"name\": \"measurementGroups\",\n\t\t\t\"type\": {\n\t\t\t\t\"type\": \"array\",\n\t\t\t\
+ \t\"items\": {\n\t\t\t\t\t\"name\": \"Measurement_Groups_Type\",\n\t\t\t\t\t\"type\": \"record\",\n\
+ \t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\"name\": \"measurementGroup\",\n\t\t\t\t\t\t\"type\": {\n\t\
+ \t\t\t\t\t\t\"name\": \"Measurement_Group_Type\",\n\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\
+ \t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\"name\": \"measurementTypes\",\n\t\t\t\t\t\t\t\t\t\"type\"\
+ : {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\t\t\
+ \t\t\"name\": \"Measurement_Types_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"record\",\n\t\t\t\t\t\
+ \t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"measurementType\",\n\t\t\t\t\t\t\t\
+ \t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\
+ }\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"name\": \"managedObjectDNsBasic\",\n\
+ \t\t\t\t\t\t\t\t\t\"type\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\t\t\t\t\"items\"\
+ : {\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"Managed_Object_Dns_Basic_Type\",\n\t\t\t\t\t\t\t\t\t\t\t\"\
+ type\": \"record\",\n\t\t\t\t\t\t\t\t\t\t\t\"fields\": [{\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"DN\"\
+ ,\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t\t\t}\n\
+ \t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\
+ \t\t}\n\t\t}\n\t]\n}"
+ - key:
+ name: UUIDType
+ version: 0.0.1
+ value:
+ key:
+ name: UUIDType
+ version: 0.0.1
+ schemaFlavour: Java
+ schemaDefinition: java.util.UUID
+ engineParameters:
+ executorParameters:
+ JAVASCRIPT:
+ parameterClassName: org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters
+ contextParameters:
+ parameterClassName: org.onap.policy.apex.context.parameters.ContextParameters
+ schemaParameters:
+ Avro:
+ parameterClassName: org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters
+ Java:
+ parameterClassName: org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters
+ jsonAdapters:
+ Instant:
+ adaptedClass: java.time.Instant
+ adaptorClass: org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter
+ eventInputParameters:
+ DCAEConsumer:
+ carrierTechnologyParameters:
+ carrierTechnology: RESTCLIENT
+ parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters
+ parameters:
+ consumerPollTime: '50'
+ url: https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cg1/sg1
+ eventProtocolParameters:
+ eventProtocol: JSON
+ parameters:
+ nameAlias: policyName
+ eventName: pmsh-operational-policy
+ eventNameFilter: pmsh-operational-policy
+ CDSRequestConsumer:
+ carrierTechnologyParameters:
+ carrierTechnology: RESTREQUESTOR
+ parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+ parameters:
+ url: http://10.10.10.184:30254/api/v1/execution-service/process
+ httpMethod: POST
+ restRequestTimeout: 2000
+ httpHeaders:
+ - - Authorization
+ - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
+ eventProtocolParameters:
+ eventProtocol: JSON
+ eventName: CDSCreateResponseEvent
+ eventNameFilter: CDSCreateResponseEvent
+ requestorMode: true
+ requestorPeer: CDSRequestProducer
+ requestorTimeout: 500
+ CDSDeleteRequestConsumer:
+ carrierTechnologyParameters:
+ carrierTechnology: RESTREQUESTOR
+ parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+ parameters:
+ url: http://10.10.10.184:30254/api/v1/execution-service/process
+ httpMethod: POST
+ restRequestTimeout: 2000
+ httpHeaders:
+ - - Authorization
+ - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
+ eventProtocolParameters:
+ eventProtocol: JSON
+ eventName: CDSDeleteResponseEvent
+ eventNameFilter: CDSDeleteResponseEvent
+ requestorMode: true
+ requestorPeer: CDSDeleteRequestProducer
+ requestorTimeout: 500
+ CDSReplyConsumer:
+ carrierTechnologyParameters:
+ carrierTechnology: RESTREQUESTOR
+ parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+ parameters:
+ url: https://message-router:3905/events/unauthenticated.PMSH_CL_INPUT
+ httpMethod: POST
+ restRequestTimeout: 2000
+ eventProtocolParameters:
+ eventProtocol: JSON
+ eventName: MRResponseEvent
+ eventNameFilter: MRResponseEvent
+ requestorMode: true
+ requestorPeer: CDSReplyProducer
+ requestorTimeout: 500
+ eventOutputParameters:
+ logOutputter:
+ carrierTechnologyParameters:
+ carrierTechnology: FILE
+ parameters:
+ fileName: /tmp/outputevents.log
+ eventProtocolParameters:
+ eventProtocol: JSON
+ StdOutOutputter:
+ carrierTechnologyParameters:
+ carrierTechnology: FILE
+ parameters:
+ standardIo: true
+ eventProtocolParameters:
+ eventProtocol: JSON
+ CDSRequestProducer:
+ carrierTechnologyParameters:
+ carrierTechnology: RESTREQUESTOR
+ parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+ eventProtocolParameters:
+ eventProtocol: JSON
+ eventNameFilter: CDSCreateSubscriptionRequestEvent
+ requestorMode: true
+ requestorPeer: CDSRequestConsumer
+ requestorTimeout: 500
+ CDSDeleteRequestProducer:
+ carrierTechnologyParameters:
+ carrierTechnology: RESTREQUESTOR
+ parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+ eventProtocolParameters:
+ eventProtocol: JSON
+ eventNameFilter: CDSDeleteSubscriptionRequestEvent
+ requestorMode: true
+ requestorPeer: CDSDeleteRequestConsumer
+ requestorTimeout: 500
+ CDSReplyProducer:
+ carrierTechnologyParameters:
+ carrierTechnology: RESTREQUESTOR
+ parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+ eventProtocolParameters:
+ eventProtocol: JSON
+ eventNameFilter: CDSResponseStatusEvent
+ requestorMode: true
+ requestorPeer: CDSReplyConsumer
+ requestorTimeout: 500
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index f63bc8bb..90fce5d9 100644
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -15,6 +15,349 @@ Policy Release Notes
.. * one section describing the purpose of this new release.
.. ==========================
+.. * * * ISTANBUL * * *
+.. ==========================
+
+Version: 9.0.0
+--------------
+
+:Release Date: 2021-10-28 (Istanbul Release)
+
+New features
+============
+
+Artifacts released:
+
+
+
+.. list-table::
+ :widths: 15 10 10
+ :header-rows: 1
+
+ * - Repository
+ - Java Artifact
+ - Docker Image (if applicable)
+ * - policy/parent
+ - 3.4.3
+ - N/A
+ * - policy/docker
+ - 2.3.1
+ - | onap/policy-jdk-alpine:2.3.1
+ | onap/policy-jre-alpine:2.3.1
+ * - policy/common
+ - 1.9.1
+ - N/A
+ * - policy/models
+ - 2.5.1
+ - N/A
+ * - policy/api
+ - 2.5.1
+ - onap/policy-api:2.5.1
+ * - policy/pap
+ - 2.5.1
+ - onap/policy-pap:2.5.1
+ * - policy/drools-pdp
+ - 1.9.1
+ - onap/policy-drools:1.9.1
+ * - policy/apex-pdp
+ - 2.6.1
+ - onap/policy-apex-pdp:2.6.1
+ * - policy/xacml-pdp
+ - 2.5.1
+ - onap/policy-xacml-pdp:2.5.1
+ * - policy/drools-applications
+ - 1.9.1
+ - onap/policy-pdpd-cl:1.9.1
+ * - policy/clamp
+ - 6.1.3
+ - | onap/policy-clamp-backend:6.1.3
+ | onap/policy-clamp-frontend:6.1.3
+ | onap/policy-clamp-cl-pf-ppnt:6.1.3
+ | onap/policy-clamp-cl-k8s-ppnt:6.1.3
+ | onap/policy-clamp-cl-http-ppnt:6.1.3
+ | onap/policy-clamp-cl-runtime:6.1.3
+ * - policy/gui
+ - 2.1.1
+ - onap/policy-gui:2.1.1
+ * - policy/distribution
+ - 2.6.1
+ - onap/policy-distribution:2.6.1
+
+Key Updates
+===========
+
+Clamp -> policy
+Control Loop
+Database
+
+* `REQ-684 <https://jira.onap.org/browse/REQ-684>`_ - Merge CLAMP functionality into Policy Framework project
+ - keep CLAMP functions into ONAP
+ - reduce ONAP footprint
+ - consolidate the UI (Control loop UI and policy)
+ - enables code sharing and common handling for REST and TOSCA
+ - introduces the Spring Framework into the Policy Framework
+ - see `the CLAMP documentation <https://docs.onap.org/projects/onap-policy-parent/en/latest/clamp/clamp/clamp.html>`_
+
+* `REQ-716 <https://jira.onap.org/browse/REQ-716>`_ - Control Loop in TOSCA LCM
+ - Allows Control Loops to be defined and described in Metadata using TOSCA
+ - Control loops can run on the fly on any component that implements a *participant* API
+ - Control Loops can be commissioned into Policy/CLAMP, they can be parameterized, initiated on arbitrary
+ participants, activated and monitored
+ - See `the CLAMP TOSCA Control Loop documentation
+ <https://docs.onap.org/projects/onap-policy-parent/en/latest/clamp/controlloop/controlloop.html>`_
+
+* CLAMP Client Policy and TOSCA Handling
+ - Push existing policy(tree) into pdp
+ - Handling of PDP Groups
+ - Handling of Policy Types
+ - Handling of TOSCA Service Templates
+ - Push of Policies to PDPs
+ - Support multiple PDP Groups per Policy Type
+ - Tree view in Policies list
+ - Integration of new TOSCA Control Loop GUI into CLAMP GUI
+
+* Policy Handling Improvements
+ - Support delta policies in PDPs
+ - Allow XACML rules to specify EventManagerService
+ - Sending of notifications to Kafka & Rest in apex-pdp policies
+ - External configuration of groups other than defaultGroup
+ - XACML Decision support for Multiple Requests
+ - Updated query parameter names and support for wildcards in APIs
+ - Added new APIs for Policy Audit capabilities
+ - Capability to send multiple output events from a state in APEX-PDP
+
+* System Attribute Improvements
+ - Support for upgrade and rollback, starting with upgrade from the Honolulu release to the Istanbul release
+ - Consolidated health check
+ - Phase 1 of Spring Framework introduction
+ - Phase 1 of Prometheus introduction, base Prometheus metrics
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+System Limitations
+~~~~~~~~~~~~~~~~~~
+N/A
+
+Known Vulnerabilities
+~~~~~~~~~~~~~~~~~~~~~
+N/A
+
+Workarounds
+~~~~~~~~~~~
+N/A
+
+Security Notes
+==============
+
+| `POLICY-3169 <https://jira.onap.org/browse/POLICY-3169>`_ - Remove security issues reported by NEXUS-IQ
+| `POLICY-3315 <https://jira.onap.org/browse/POLICY-3315>`_ - Review license scan issues
+| `POLICY-3327 <https://jira.onap.org/browse/POLICY-3327>`_ - OOM AAF generated certificates contain invalid SANs entries
+| `POLICY-3338 <https://jira.onap.org/browse/POLICY-3338>`_ - Upgrade CDS dependency to the latest version
+| `POLICY-3384 <https://jira.onap.org/browse/POLICY-3384>`_ - Use signed certificates in the CSITs
+| `POLICY-3431 <https://jira.onap.org/browse/POLICY-3431>`_ - Review license scan issues
+| `POLICY-3516 <https://jira.onap.org/browse/POLICY-3516>`_ - Upgrade CDS dependency to the 1.1.5 version
+| `POLICY-3590 <https://jira.onap.org/browse/POLICY-3590>`_ - Address security vulnerabilities and License issues in Policy Framework
+| `POLICY-3697 <https://jira.onap.org/browse/POLICY-3697>`_ - Review license scan issues
+
+
+Functional Improvements
+=======================
+| `REQ-684 <https://jira.onap.org/browse/REQ-684>`_ - Merge CLAMP functionality into Policy Framework project
+| `REQ-716 <https://jira.onap.org/browse/REQ-716>`_ - Control Loop in TOSCA LCM
+| `POLICY-1787 <https://jira.onap.org/browse/POLICY-1787>`_ - Support mariadb upgrade/rollback functionality
+| `POLICY-2535 <https://jira.onap.org/browse/POLICY-2535>`_ - Query deployed policies by regex on the name, for a given policy type
+| `POLICY-2618 <https://jira.onap.org/browse/POLICY-2618>`_ - PDP-D make legacy configuration interface (used by brmsgw) an optional feature
+| `POLICY-2769 <https://jira.onap.org/browse/POLICY-2769>`_ - Support multiple PAP instances
+| `POLICY-2865 <https://jira.onap.org/browse/POLICY-2865>`_ - Add support and documentation on how an application can control what info is returned in Decision API
+| `POLICY-2896 <https://jira.onap.org/browse/POLICY-2896>`_ - Improve consolidated health check to include dependencies
+| `POLICY-2920 <https://jira.onap.org/browse/POLICY-2920>`_ - policy-clamp ui is capable to push and existing policy(tree) into pdp
+| `POLICY-2921 <https://jira.onap.org/browse/POLICY-2921>`_ - use the policy-clamp ui to manage pdp groups
+| `POLICY-2923 <https://jira.onap.org/browse/POLICY-2923>`_ - use the policy-clamp ui to manage policy types
+| `POLICY-2930 <https://jira.onap.org/browse/POLICY-2930>`_ - clamp-backend rest api to push policies to pdp
+| `POLICY-2931 <https://jira.onap.org/browse/POLICY-2931>`_ - clamp GUI to push policy to pdp
+| `POLICY-3072 <https://jira.onap.org/browse/POLICY-3072>`_ - clamp ui support multiple pdp group per policy type
+| `POLICY-3107 <https://jira.onap.org/browse/POLICY-3107>`_ - Support delta policies in PDPs
+| `POLICY-3165 <https://jira.onap.org/browse/POLICY-3165>`_ - Implement tree view in policies list
+| `POLICY-3209 <https://jira.onap.org/browse/POLICY-3209>`_ - CLAMP Component Lifecycle Management using Spring Framework
+| `POLICY-3218 <https://jira.onap.org/browse/POLICY-3218>`_ - Integrate CLAMP GUIs (Instantiation/Monitoring) in the policy-gui repo
+| `POLICY-3227 <https://jira.onap.org/browse/POLICY-3227>`_ - Implementation of context album improvements in apex-pdp
+| `POLICY-3228 <https://jira.onap.org/browse/POLICY-3228>`_ - Implement clamp backend part to add policy models api
+| `POLICY-3229 <https://jira.onap.org/browse/POLICY-3229>`_ - Implement the front end part to add tosca model
+| `POLICY-3230 <https://jira.onap.org/browse/POLICY-3230>`_ - Make default PDP-D and PDP-D-APPS work out of the box
+| `POLICY-3260 <https://jira.onap.org/browse/POLICY-3260>`_ - Allow rules to specify EventManagerService
+| `POLICY-3324 <https://jira.onap.org/browse/POLICY-3324>`_ - Design a solution for sending notifications to Kafka & Rest in apex-pdp policies
+| `POLICY-3331 <https://jira.onap.org/browse/POLICY-3331>`_ - PAP: should allow for external configuration of groups other than defaultGroup
+| `POLICY-3340 <https://jira.onap.org/browse/POLICY-3340>`_ - Create REST API's in PAP to fetch the audit information stored in DB
+| `POLICY-3514 <https://jira.onap.org/browse/POLICY-3514>`_ - XACML Decision support for Multiple Requests
+| `POLICY-3524 <https://jira.onap.org/browse/POLICY-3524>`_ - Explore options to integrate prometheus with policy framework components
+| `POLICY-3527 <https://jira.onap.org/browse/POLICY-3527>`_ - Update query parameter names in policy audit api's
+| `POLICY-3533 <https://jira.onap.org/browse/POLICY-3533>`_ - PDP-D: make DB port provisionable
+| `POLICY-3538 <https://jira.onap.org/browse/POLICY-3538>`_ - Export basic metrics from policy components for prometheus
+| `POLICY-3545 <https://jira.onap.org/browse/POLICY-3545>`_ - Use generic create policy url in policy/distribution
+| `POLICY-3557 <https://jira.onap.org/browse/POLICY-3557>`_ - Export basic prometheus metrics from clamp
+
+Necessary Improvements and Bug Fixes
+====================================
+
+Necessary Improvements
+~~~~~~~~~~~~~~~~~~~~~~
+| `POLICY-2418 <https://jira.onap.org/browse/POLICY-2418>`_ - Refactor XACML PDP POJO's into Bean objects in order to perform validation more simply
+| `POLICY-2429 <https://jira.onap.org/browse/POLICY-2429>`_ - Mark policy/engine read-only and remove ci-management jobs for it
+| `POLICY-2542 <https://jira.onap.org/browse/POLICY-2542>`_ - Improve the REST parameter validation for PAP api's
+| `POLICY-2767 <https://jira.onap.org/browse/POLICY-2767>`_ - Improve error handling of drools-pdp when requestID in onset is not valid UUID
+| `POLICY-2899 <https://jira.onap.org/browse/POLICY-2899>`_ - Store basic audit details of deploy/undeploy operations in PAP
+| `POLICY-2996 <https://jira.onap.org/browse/POLICY-2996>`_ - Address technical debt left over from Honolulu
+| `POLICY-3059 <https://jira.onap.org/browse/POLICY-3059>`_ - Fix name of target-database property in persistence.xml files
+| `POLICY-3062 <https://jira.onap.org/browse/POLICY-3062>`_ - Update the ENTRYPOINT in APEX-PDP Dockerfile
+| `POLICY-3078 <https://jira.onap.org/browse/POLICY-3078>`_ - Support SSL communication in Kafka IO plugin of Apex-PDP
+| `POLICY-3087 <https://jira.onap.org/browse/POLICY-3087>`_ - Use sl4fj instead of EELFLogger
+| `POLICY-3089 <https://jira.onap.org/browse/POLICY-3089>`_ - Cleanup logs for success/failure consumers in apex-pdp
+| `POLICY-3096 <https://jira.onap.org/browse/POLICY-3096>`_ - Fix intermittent test failures in APEX
+| `POLICY-3128 <https://jira.onap.org/browse/POLICY-3128>`_ - Use command command-line handler across policy repos
+| `POLICY-3129 <https://jira.onap.org/browse/POLICY-3129>`_ - Refactor command-line handling across policy-repos
+| `POLICY-3132 <https://jira.onap.org/browse/POLICY-3132>`_ - Apex-pdp documentation refers to missing logos.png
+| `POLICY-3134 <https://jira.onap.org/browse/POLICY-3134>`_ - Use base image for policy-jdk docker images
+| `POLICY-3136 <https://jira.onap.org/browse/POLICY-3136>`_ - Ignore jacoco and checkstyle when in eclipse
+| `POLICY-3143 <https://jira.onap.org/browse/POLICY-3143>`_ - Remove keystore files from policy repos
+| `POLICY-3145 <https://jira.onap.org/browse/POLICY-3145>`_ - HTTPS clients should not allow self-signed certificates
+| `POLICY-3147 <https://jira.onap.org/browse/POLICY-3147>`_ - Xacml-pdp should not use RestServerParameters for client parameters
+| `POLICY-3155 <https://jira.onap.org/browse/POLICY-3155>`_ - Use python3 for CSITs
+| `POLICY-3160 <https://jira.onap.org/browse/POLICY-3160>`_ - Use "sh" instead of "ash" where possible
+| `POLICY-3163 <https://jira.onap.org/browse/POLICY-3163>`_ - Remove spaces from xacml file name
+| `POLICY-3166 <https://jira.onap.org/browse/POLICY-3166>`_ - Use newer onap base image in clamp
+| `POLICY-3171 <https://jira.onap.org/browse/POLICY-3171>`_ - Fix sporadic error in models provider junits
+| `POLICY-3175 <https://jira.onap.org/browse/POLICY-3175>`_ - Minor clean-up of drools-apps
+| `POLICY-3182 <https://jira.onap.org/browse/POLICY-3182>`_ - Update npm repo
+| `POLICY-3189 <https://jira.onap.org/browse/POLICY-3189>`_ - Create a new key class which uses the @GeneratedValue annotation
+| `POLICY-3190 <https://jira.onap.org/browse/POLICY-3190>`_ - Investigate handling of context albums in Apex-PDP for failure responses (ex - AAI)
+| `POLICY-3198 <https://jira.onap.org/browse/POLICY-3198>`_ - Remove VirtualControlLoopEvent from OperationsHistory classes
+| `POLICY-3211 <https://jira.onap.org/browse/POLICY-3211>`_ - Parameter Handling and Parameter Validation
+| `POLICY-3214 <https://jira.onap.org/browse/POLICY-3214>`_ - Change Monitoring UI implementation to use React
+| `POLICY-3215 <https://jira.onap.org/browse/POLICY-3215>`_ - Update CLAMP Module structure to Multi Module Maven approach
+| `POLICY-3221 <https://jira.onap.org/browse/POLICY-3221>`_ - wrong lifecycle state information in INFO.yaml for policy/clamp
+| `POLICY-3222 <https://jira.onap.org/browse/POLICY-3222>`_ - Use existing clamp gui to set the parameters during CL instantiation
+| `POLICY-3235 <https://jira.onap.org/browse/POLICY-3235>`_ - gui-editor-apex fails to start
+| `POLICY-3257 <https://jira.onap.org/browse/POLICY-3257>`_ - Update csit test cases to include policy status & statistics api's
+| `POLICY-3261 <https://jira.onap.org/browse/POLICY-3261>`_ - Rules need a way to release locks
+| `POLICY-3262 <https://jira.onap.org/browse/POLICY-3262>`_ - Extract more common code from UsecasesEventManager
+| `POLICY-3292 <https://jira.onap.org/browse/POLICY-3292>`_ - Update the XACML PDP Tutorial docker compose files to point to release Honolulu images
+| `POLICY-3298 <https://jira.onap.org/browse/POLICY-3298>`_ - Add key names to IndexedXxx factory class toString() methods
+| `POLICY-3299 <https://jira.onap.org/browse/POLICY-3299>`_ - Merge policy CSITs into docker/csit
+| `POLICY-3300 <https://jira.onap.org/browse/POLICY-3300>`_ - PACKAGES UPGRADES IN DIRECT DEPENDENCIES FOR ISTANBUL
+| `POLICY-3303 <https://jira.onap.org/browse/POLICY-3303>`_ - Update the default logback.xml in APEX to log to STDOUT
+| `POLICY-3305 <https://jira.onap.org/browse/POLICY-3305>`_ - Ensure XACML PDP application/translator methods are extendable
+| `POLICY-3306 <https://jira.onap.org/browse/POLICY-3306>`_ - Fix issue where apex-pdp test is failing in gitlab
+| `POLICY-3307 <https://jira.onap.org/browse/POLICY-3307>`_ - Turn off frankfurt CSITs
+| `POLICY-3333 <https://jira.onap.org/browse/POLICY-3333>`_ - bean validator should use SerializedName
+| `POLICY-3336 <https://jira.onap.org/browse/POLICY-3336>`_ - APEX CLI/Model: multiple outputs for nextState NULL
+| `POLICY-3337 <https://jira.onap.org/browse/POLICY-3337>`_ - Move clamp documentation to policy/parent
+| `POLICY-3366 <https://jira.onap.org/browse/POLICY-3366>`_ - PDP-D: support configuration of overarching DMAAP https flag
+| `POLICY-3367 <https://jira.onap.org/browse/POLICY-3367>`_ - oom: policy-clamp-create-tables.sql: add IF NOT EXISTS clauses
+| `POLICY-3374 <https://jira.onap.org/browse/POLICY-3374>`_ - Docker registry should be defined in the parent pom
+| `POLICY-3378 <https://jira.onap.org/browse/POLICY-3378>`_ - Move groovy scripts to separate/common file
+| `POLICY-3382 <https://jira.onap.org/browse/POLICY-3382>`_ - Create document for policy chaining in drools-pdp
+| `POLICY-3383 <https://jira.onap.org/browse/POLICY-3383>`_ - Standardize policy deployment vs undeployment count in PdpStatistics
+| `POLICY-3388 <https://jira.onap.org/browse/POLICY-3388>`_ - policy/gui merge jobs failing
+| `POLICY-3389 <https://jira.onap.org/browse/POLICY-3389>`_ - Use lombok annotations instead of hashCode, equals, toString, get, set
+| `POLICY-3404 <https://jira.onap.org/browse/POLICY-3404>`_ - Rolling DB errors in log output for API, PAP, and DB components
+| `POLICY-3419 <https://jira.onap.org/browse/POLICY-3419>`_ - Remove operationshistory10 DB
+| `POLICY-3450 <https://jira.onap.org/browse/POLICY-3450>`_ - PAP should support turning on/off via configuration storing PDP statistics
+| `POLICY-3456 <https://jira.onap.org/browse/POLICY-3456>`_ - Use new RestClientParameters class instead of BusTopicParams
+| `POLICY-3457 <https://jira.onap.org/browse/POLICY-3457>`_ - Topic source should not go into fast-fail loop when dmaap is unreachable
+| `POLICY-3459 <https://jira.onap.org/browse/POLICY-3459>`_ - Document how to turn off collection of PdpStatistics
+| `POLICY-3473 <https://jira.onap.org/browse/POLICY-3473>`_ - CSIT for xacml doesn't check dmaap msg status
+| `POLICY-3474 <https://jira.onap.org/browse/POLICY-3474>`_ - Delete extra simulators from policy-models
+| `POLICY-3486 <https://jira.onap.org/browse/POLICY-3486>`_ - policy-jdk docker image should have at least one up to date image
+| `POLICY-3499 <https://jira.onap.org/browse/POLICY-3499>`_ - Improve Apex-PDP logs to avoid printing errors for irrelevant events in multiple policy deployment
+| `POLICY-3501 <https://jira.onap.org/browse/POLICY-3501>`_ - Refactor guard actor
+| `POLICY-3511 <https://jira.onap.org/browse/POLICY-3511>`_ - Limit statistics record count
+| `POLICY-3525 <https://jira.onap.org/browse/POLICY-3525>`_ - Improve policy/pap csit automation test cases
+| `POLICY-3528 <https://jira.onap.org/browse/POLICY-3528>`_ - Update documents & postman collection for pdp statistics api's
+| `POLICY-3531 <https://jira.onap.org/browse/POLICY-3531>`_ - PDP-X: initialization delays causes liveness checks to be missed under OOM deployment
+| `POLICY-3532 <https://jira.onap.org/browse/POLICY-3532>`_ - Add Honolulu Maintenance Release notes to read-the-docs
+| `POLICY-3539 <https://jira.onap.org/browse/POLICY-3539>`_ - Use RestServer from policy/common in apex-pdp
+| `POLICY-3547 <https://jira.onap.org/browse/POLICY-3547>`_ - METADATA tables for policy/docker db-migrator should be different than counterpart in policy/drools-pdp seed
+| `POLICY-3556 <https://jira.onap.org/browse/POLICY-3556>`_ - Document xacml REST server limitations
+| `POLICY-3605 <https://jira.onap.org/browse/POLICY-3605>`_ - Enhance dmaap simulator to support ""/topics" endpoint
+| `POLICY-3609 <https://jira.onap.org/browse/POLICY-3609>`_ - Add CSIT test case for policy consolidated health check
+
+Bug Fixes
+~~~~~~~~~
+| `POLICY-2845 <https://jira.onap.org/browse/POLICY-2845>`_ - Policy dockers contain GPLv3
+| `POLICY-3066 <https://jira.onap.org/browse/POLICY-3066>`_ - Stackoverflow error in APEX standalone after changing to onap java image
+| `POLICY-3161 <https://jira.onap.org/browse/POLICY-3161>`_ - OOM clamp BE/FE do not start properly when clamp db exists in the cluster
+| `POLICY-3174 <https://jira.onap.org/browse/POLICY-3174>`_ - POLICY-APEX log does not include the DATE in STDOUT
+| `POLICY-3176 <https://jira.onap.org/browse/POLICY-3176>`_ - POLICY-DROOLS log does not include the DATE in STDOUT
+| `POLICY-3177 <https://jira.onap.org/browse/POLICY-3177>`_ - POLICY-PAP log does not include the DATE in STDOUT
+| `POLICY-3201 <https://jira.onap.org/browse/POLICY-3201>`_ - fix CRITICAL weak-cryptography issues identified in sonarcloud
+| `POLICY-3202 <https://jira.onap.org/browse/POLICY-3202>`_ - PDP-D: no locking feature: service loader not locking the no-lock-manager
+| `POLICY-3203 <https://jira.onap.org/browse/POLICY-3203>`_ - Update the PDP deployment in policy window failure
+| `POLICY-3204 <https://jira.onap.org/browse/POLICY-3204>`_ - Clamp UI does not accept to deploy policy to PDP
+| `POLICY-3205 <https://jira.onap.org/browse/POLICY-3205>`_ - The submit operation in Clamp cannot be achieved successfully
+| `POLICY-3225 <https://jira.onap.org/browse/POLICY-3225>`_ - Clamp policy UI does not send right pdp command
+| `POLICY-3226 <https://jira.onap.org/browse/POLICY-3226>`_ - Clamp policy UI does 2 parallel queries to policy list
+| `POLICY-3248 <https://jira.onap.org/browse/POLICY-3248>`_ - PdpHeartbeats are not getting processed by PAP
+| `POLICY-3301 <https://jira.onap.org/browse/POLICY-3301>`_ - Apex Avro Event Schemas - Not support for colon ':' character in field names
+| `POLICY-3322 <https://jira.onap.org/browse/POLICY-3322>`_ - gui-editor-apex doesn't contain webapp correctly
+| `POLICY-3332 <https://jira.onap.org/browse/POLICY-3332>`_ - Issues around delta policy deployment in APEX
+| `POLICY-3369 <https://jira.onap.org/browse/POLICY-3369>`_ - Modify NSSI closed loop not running
+| `POLICY-3445 <https://jira.onap.org/browse/POLICY-3445>`_ - Version conflicts in spring boot dependency jars in CLAMP
+| `POLICY-3454 <https://jira.onap.org/browse/POLICY-3454>`_ - PDP-D CL APPS: swagger mismatched libraries cause telemetry shell to fail
+| `POLICY-3468 <https://jira.onap.org/browse/POLICY-3468>`_ - PDPD-CL APPS: Clean up library transitive dependencies conflicts (jackson version) from new CDS libraries
+| `POLICY-3507 <https://jira.onap.org/browse/POLICY-3507>`_ - CDS Operation Policy execution runtime error
+| `POLICY-3526 <https://jira.onap.org/browse/POLICY-3526>`_ - OOM start of policy-distribution fails (keyStore values)
+| `POLICY-3558 <https://jira.onap.org/browse/POLICY-3558>`_ - Delete Instance Properties if Instantiation is Unitialized
+| `POLICY-3600 <https://jira.onap.org/browse/POLICY-3600>`_ - Some REST calls in Clamp GUI do not include pathname
+| `POLICY-3601 <https://jira.onap.org/browse/POLICY-3601>`_ - Static web resource paths in gui-editor-apex are incorrect
+| `POLICY-3602 <https://jira.onap.org/browse/POLICY-3602>`_ - Context schema table is not populated in Apex Editor
+| `POLICY-3603 <https://jira.onap.org/browse/POLICY-3603>`_ - gui-pdp-monitoring broken in gui docker image
+| `POLICY-3608 <https://jira.onap.org/browse/POLICY-3608>`_ - LASTUPDATE column in pdp table causing Nullpointer Exception in PAP initialization
+| `POLICY-3610 <https://jira.onap.org/browse/POLICY-3610>`_ - PDP-D-APPS: audit and metric logging information is incorrect
+| `POLICY-3611 <https://jira.onap.org/browse/POLICY-3611>`_ - "API,PAP: decrease eclipselink verbosity in persistence.xml"
+| `POLICY-3625 <https://jira.onap.org/browse/POLICY-3625>`_ - Terminated PDPs are not being removed by PAP
+| `POLICY-3637 <https://jira.onap.org/browse/POLICY-3637>`_ - Policy-mariadb connection intermittently fails from PF components
+| `POLICY-3639 <https://jira.onap.org/browse/POLICY-3639>`_ - CLAMP_REST_URL environment variable is not needed
+| `POLICY-3647 <https://jira.onap.org/browse/POLICY-3647>`_ - Cannot create Instance from Policy GUI
+| `POLICY-3649 <https://jira.onap.org/browse/POLICY-3649>`_ - SSL Handshake failure between CL participants and DMaap
+| `POLICY-3650 <https://jira.onap.org/browse/POLICY-3650>`_ - Disable apex-editor and pdp-monitoring in gui docker
+| `POLICY-3660 <https://jira.onap.org/browse/POLICY-3660>`_ - DB-Migrator job completes even during failed upgrade
+| `POLICY-3678 <https://jira.onap.org/browse/POLICY-3678>`_ - K8s participants tests are skipped due to json parsing error.
+| `POLICY-3679 <https://jira.onap.org/browse/POLICY-3679>`_ - Modify pdpstatistics to prevent duplicate keys
+| `POLICY-3680 <https://jira.onap.org/browse/POLICY-3680>`_ - PDP Monitoring GUI fails to parse JSON from PAP
+| `POLICY-3682 <https://jira.onap.org/browse/POLICY-3682>`_ - Unable to list the policies in Policy UI
+| `POLICY-3683 <https://jira.onap.org/browse/POLICY-3683>`_ - clamp-fe & policy-gui: useless rolling logs
+| `POLICY-3684 <https://jira.onap.org/browse/POLICY-3684>`_ - Unable to select a PDP group & Subgroup when configuring a control loop policy
+| `POLICY-3685 <https://jira.onap.org/browse/POLICY-3685>`_ - Fix CL state change issues in runtime and participants
+| `POLICY-3686 <https://jira.onap.org/browse/POLICY-3686>`_ - Update Participant Status after Commissioning
+| `POLICY-3687 <https://jira.onap.org/browse/POLICY-3687>`_ - Continuous sending CONTROL_LOOP_STATE_CHANGE message
+| `POLICY-3688 <https://jira.onap.org/browse/POLICY-3688>`_ - Register participant in ParticipantRegister message
+| `POLICY-3689 <https://jira.onap.org/browse/POLICY-3689>`_ - Handle ParticipantRegister
+| `POLICY-3691 <https://jira.onap.org/browse/POLICY-3691>`_ - Problems Parsing Service Template
+| `POLICY-3695 <https://jira.onap.org/browse/POLICY-3695>`_ - Tosca Constraint "in_range" not supported by policy/models
+| `POLICY-3706 <https://jira.onap.org/browse/POLICY-3706>`_ - Telemetry not working in drools-pdp
+| `POLICY-3707 <https://jira.onap.org/browse/POLICY-3707>`_ - Cannot delete a loop in design state
+
+References
+==========
+
+For more information on the ONAP Istanbul release, please see:
+
+#. `ONAP Home Page`_
+#. `ONAP Documentation`_
+#. `ONAP Release Downloads`_
+#. `ONAP Wiki Page`_
+
+.. _`ONAP Home Page`: https://www.onap.org
+.. _`ONAP Wiki Page`: https://wiki.onap.org
+.. _`ONAP Documentation`: https://docs.onap.org
+.. _`ONAP Release Downloads`: https://git.onap.org
+
+Quick Links:
+ - `POLICY project page`_
+ - `Passing Badge information for POLICY`_
+
+.. ==========================
.. * * * HONOLULU * * *
.. ==========================
@@ -206,7 +549,6 @@ Quick Links:
- `POLICY project page`_
- `Passing Badge information for POLICY`_
-
.. ========================
.. * * * GUILIN * * *
.. ========================