summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/sections/healthcheck.rst163
-rw-r--r--docs/sections/images/rcc_diag.pngbin0 -> 29394 bytes
-rw-r--r--docs/sections/images/rcc_diag_interact.pngbin0 -> 22611 bytes
-rw-r--r--docs/sections/services/mapper/delivery.rst10
-rw-r--r--docs/sections/services/mapper/flow-rest-conf.pngbin0 -> 36111 bytes
-rw-r--r--docs/sections/services/mapper/flow.pngbin35180 -> 42354 bytes
-rw-r--r--docs/sections/services/mapper/flow.rst40
-rw-r--r--docs/sections/services/mapper/index.rst14
-rw-r--r--docs/sections/services/mapper/installation.rst73
-rw-r--r--docs/sections/services/mapper/mappingfile.rst162
-rw-r--r--docs/sections/services/mapper/troubleshooting.rst82
-rw-r--r--docs/sections/services/restconf/development_info.rst17
-rw-r--r--docs/sections/services/restconf/functionality.rst13
-rw-r--r--docs/sections/services/restconf/index.rst25
-rw-r--r--docs/sections/services/restconf/installation.rst47
-rw-r--r--docs/sections/services/serviceindex.rst2
-rw-r--r--docs/sections/services/son-handler/dcae_new.jpgbin0 -> 59852 bytes
-rw-r--r--docs/sections/services/son-handler/flowdiagram.jpgbin0 -> 58648 bytes
-rw-r--r--docs/sections/services/son-handler/index.rst32
-rw-r--r--docs/sections/services/son-handler/son_handler.jpgbin0 -> 97145 bytes
-rw-r--r--docs/sections/services/son-handler/son_handler_installation.rst111
-rw-r--r--docs/sections/services/son-handler/son_handler_overview.rst52
-rw-r--r--docs/sections/services/son-handler/son_handler_troubleshooting.rst19
23 files changed, 680 insertions, 182 deletions
diff --git a/docs/sections/healthcheck.rst b/docs/sections/healthcheck.rst
index 57266bbf..d9b5e1f2 100644
--- a/docs/sections/healthcheck.rst
+++ b/docs/sections/healthcheck.rst
@@ -1,73 +1,108 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-HealthCheck
-===========
-
-DCAE Healthcheck .
+DCAE Health Check
+=================
OOM Deployment
--------------
+In OOM deployments, DCAE healthchecks are performed by a separate service--dcae-healthcheck.
+This service is packaged into a Docker image (``onap/org.onap.dcaegen2.deployments.healthcheck-container``),
+which is built in the ``healthcheck-container`` module in the ``dcaegen2/deployments`` repository.
- In OOM deployments DCAE healthcheck are reported by separate service - dcae-healthcheck; this is deployment of org.onap.dcaegen2.deployments.healthcheck-container which is built from dcaegen2/deployment repo - healthcheck-container module. The container includes list of deployments done in DCAE (both via helm charts and Cloudify) for which periodic health check is performed. For helm deployed component - servicename defined is charts are used and for cloudify, the deployments identified in bootstrap are prefixed with release name. The container itself is deployed via helm charts (oom/kubernetes/dcaegen2/charts/dcae-healthcheck). This polls the deployments specified periodically and reports the status. The service can be queried for status as below.
-
-curl dcae-healthcheck
-.. code-block:: json
+The service is deployed with a Helm chart (``oom/kubernetes/dcaegen2/charts/dcae-healthcheck``)
+when DCAE is deployed using OOM.
-
-
- {
- "type": "summary",
- "count": 11,
- "ready": 11,
- "items": [{
- "name": "dev-dcaegen2-dcae-cloudify-manager",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-config-binding-service",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-deployment-handler",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-inventory",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-service-change-handler",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-policy-handler",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-dcae-ves-collector",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-dcae-tca-analytics",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-dcae-prh",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-dcae-hv-ves-collector",
- "ready": 1,
- "unavailable": 0
- }, {
- "name": "dep-dcae-datafile-collector",
- "ready": 1,
- "unavailable": 0
- }]
- }
-
-
+The dcae-healthcheck container runs a service that exposes a simple Web API. In response to
+request, the service checks Kubernetes to verify that all of the expected
+DCAE platform and service components are in a ready state. The service
+has a fixed list of platform and service components that are normally deployed when DCAE is
+first installed, including components deployed with Helm charts and
+components deployed using Cloudify blueprints. In addition, beginning with
+the Dublin release, the healthcheck
+service tracks and checks components that are deployed dynamically using Cloudify
+blueprints after the initial DCAE installation.
+
+The healthcheck service is exposed as a Kubernetes ClusterIP Service named
+`dcae-healthcheck`. The service can be queried for status as shown below.
-Heat Deployment
----------------
+.. code-block::
+
+ $ curl dcae-healthcheck
+ {
+ "type": "summary",
+ "count": 14,
+ "ready": 14,
+ "items": [
+ {
+ "name": "dev-dcaegen2-dcae-cloudify-manager",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dev-dcaegen2-dcae-config-binding-service",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dev-dcaegen2-dcae-inventory-api",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dev-dcaegen2-dcae-servicechange-handler",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dev-dcaegen2-dcae-deployment-handler",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dev-dcaegen2-dcae-policy-handler",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-dcae-ves-collector",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-dcae-tca-analytics",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-dcae-prh",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-dcae-hv-ves-collector",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-dcae-dashboard",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-dcae-snmptrap-collector",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-holmes-engine-mgmt",
+ "ready": 1,
+ "unavailable": 0
+ },
+ {
+ "name": "dep-holmes-rule-mgmt",
+ "ready": 1,
+ "unavailable": 0
+ }
+ ]
+ }
diff --git a/docs/sections/images/rcc_diag.png b/docs/sections/images/rcc_diag.png
new file mode 100644
index 00000000..cc1e0c40
--- /dev/null
+++ b/docs/sections/images/rcc_diag.png
Binary files differ
diff --git a/docs/sections/images/rcc_diag_interact.png b/docs/sections/images/rcc_diag_interact.png
new file mode 100644
index 00000000..b9e54ed3
--- /dev/null
+++ b/docs/sections/images/rcc_diag_interact.png
Binary files differ
diff --git a/docs/sections/services/mapper/delivery.rst b/docs/sections/services/mapper/delivery.rst
index 10968b7e..6cb2cf2f 100644
--- a/docs/sections/services/mapper/delivery.rst
+++ b/docs/sections/services/mapper/delivery.rst
@@ -1,17 +1,15 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2018 Tech Mahindra Ltd.
+.. Copyright 2018-2019 Tech Mahindra Ltd.
Delivery
========
-Mapper is delivered with **2 Docker container** having spring boot microservices, **UniversalVesAdapter** and **SnmMapper**. UniversalVesAdapter converts SNMP trap JSON to VES and snmpmapper is just helper application for uploading the mapping file to DB.
+Mapper is delivered with **1 Docker container** having spring boot microservice, **UniversalVesAdapter**. UniversalVesAdapter converts telementary data to VES.
-| In current release, the installation of mapper service is not integrated with DCAE's installation process and needs to be done manually.
+| In current release, the UniversalVesAdapter is integrated with DCAE's config binding service. On start, it fetches the initial configuration from CBS and uses the same. Currently it is not having functionality to refresh the configuration changes made into Consul KV store.
Docker Containers
---------------
Docker images can be pulled from ONAP Nexus repository with below commands:
-| docker pull nexus3.onap.org:10003/snapshots/onap/org.onap.dcaegen2.services.mapper.vesadapter.universalvesadaptor:latest
-
-| docker pull nexus3.onap.org:10003/snapshots/onap/org.onap.dcaegen2.services.mapper.vesadapter.snmpmapper:latest
+ ``docker pull nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.mapper.vesadapter.universalvesadaptor:1.0.0-SNAPSHOT``
diff --git a/docs/sections/services/mapper/flow-rest-conf.png b/docs/sections/services/mapper/flow-rest-conf.png
new file mode 100644
index 00000000..723977dc
--- /dev/null
+++ b/docs/sections/services/mapper/flow-rest-conf.png
Binary files differ
diff --git a/docs/sections/services/mapper/flow.png b/docs/sections/services/mapper/flow.png
index 614d5d5f..86af4c4e 100644
--- a/docs/sections/services/mapper/flow.png
+++ b/docs/sections/services/mapper/flow.png
Binary files differ
diff --git a/docs/sections/services/mapper/flow.rst b/docs/sections/services/mapper/flow.rst
index cff2485e..9fe3bfbb 100644
--- a/docs/sections/services/mapper/flow.rst
+++ b/docs/sections/services/mapper/flow.rst
@@ -1,17 +1,39 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2018-2019 Tech Mahindra Ltd.
+
+============
+Flow for converting Rest Conf Collector notification
============
-Flow
+.. [1] RestConf Collector generates rcc-notication in JSON format and publishes it on DMaaP topic **unathenticated.DCAE_RCC_OUTPUT**
+.. [2] The Universal VES Adapter(UVA) microservice has subscribed to this DMaaP topic.
+.. [3] On receiving an event from DMaaP, the adapter uses the corresponding mapping file and converts received notification into the VES event. It uses the notification-id from the received notification to find the required mapping file.
+.. [4] Those notifications for which no mapping file is identified, a default mapping file is used with generic mappings to create the VES event.
+.. [5] The VES formatted Event will be then published on DMaaP topic **unauthenticated.VES_PNFREG_OUTPUT**.
+
+
+.. image:: ./flow-rest-conf.png
+ :height: 200px
+ :width: 300 px
+ :scale: 50 %
+ :alt: alternate text
+ :align: left
+
+
+ ============
+Flow for converting SNMP Collector notification
============
-.. [#] VNF submits SNMP traps to the SNMP trap collecto.
-.. [#] Collector converts the trap into JSON format and publishes it on DMaaP topic **ONAP-COLLECTOR-SNMPTRAP**
-.. [#] The Universal VES Adapter(UVA) microservice has subscribed to this DMaaP topic.
-.. [#] On receiving an event from DMaaP, the adapter uses the corresponding mapping file from repository and converts received event into the VES event. It uses the enterprise ID from the received event to find the required mapping file.
-.. [#] Those SNMP Traps for which no mapping file is identified, a default mapping file is used with generic mappings to create the VES object.
-.. [#] The VES formatted Event will be then published on DMaaP topic **unauthenticated.SEC_FAULT_OUTPUT**.
+.. [1] VNF submits SNMP traps to the SNMP collector.
+.. [2] Collector converts the trap into JSON format and publishes it on DMaaP topic **unauthenticated.ONAP-COLLECTOR-SNMPTRAP**
+.. [3] The Universal VES Adapter(UVA) microservice has subscribed to this DMaaP topic.
+.. [4] On receiving an event from DMaaP, the adapter uses the corresponding mapping file and converts received event into the VES event. It uses the enterprise ID from the received event to find the required mapping file.
+.. [5] Those SNMP Traps for which no mapping file is identified, a default mapping file is used with generic mappings to create the VES event.
+.. [6] The VES formatted Event will be then published on DMaaP topic **unauthenticated.SEC_FAULT_OUTPUT**.
.. image:: ./flow.png
- :height: 100px
- :width: 200 px
+ :height: 200px
+ :width: 300 px
:scale: 50 %
:alt: alternate text
:align: left \ No newline at end of file
diff --git a/docs/sections/services/mapper/index.rst b/docs/sections/services/mapper/index.rst
index b142ded0..f88f4214 100644
--- a/docs/sections/services/mapper/index.rst
+++ b/docs/sections/services/mapper/index.rst
@@ -1,6 +1,6 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2018 Tech Mahindra Ltd.
+.. Copyright 2018-2019 Tech Mahindra Ltd.
Mapper
@@ -8,16 +8,9 @@ Mapper
| **Problem:** Different VNF vendors generate event and telemetry data in different formats. Out of the box, all VNF vendors may not support VES format.
| **Solution**: A generic adapter which can convert different formats of event and telemetry data to VES format can be of use here.
-| *Note*: Currently support snmp trap telemetry data
-
-There are 2 micro services in the mapper functionality.
-
-**Universal VES Adapter** - It converts the telemetry data into the required ves format and publishes to the dmaap for further action to be taken.
- *Note*: Currently it supports conversion of snmp traps generated by SNMP TRAP Collector. With some work, it can support other collectors as well.
-
-
-**SnmpMapper** - It provides web UI to upload mapping files which are then stored into the postgres database. VES adapter refers to these mapping files at the time of converting the events into VES events.
+| *Note*: Currently mapping files are available for SNMP collector and RESTConf collector.
+**VES-Mapper** converts the telemetry data into the required VES format and publishes to the DMaaP for further action to be taken by the DCAE analytics applications.
.. toctree::
@@ -28,3 +21,4 @@ There are 2 micro services in the mapper functionality.
./installation.rst
./mappingfile.rst
./SampleSnmpTrapConversion
+ ./troubleshooting.rst \ No newline at end of file
diff --git a/docs/sections/services/mapper/installation.rst b/docs/sections/services/mapper/installation.rst
index 1d05ebb8..7559f4a5 100644
--- a/docs/sections/services/mapper/installation.rst
+++ b/docs/sections/services/mapper/installation.rst
@@ -1,48 +1,67 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2018 Tech Mahindra Ltd.
+.. Copyright 2018-2019 Tech Mahindra Ltd.
Installation
============
-Currently both Universal VES Adapter and SnmpMapper are not integrated with CONFIG_BINDING_SERVICE to get their configuration. All the required configuration needs to be passed as docker environment parameters.
-| **Universal Ves Adapter**
+**Deployment Prerequisite/dependencies**
- To run Universal Ves Adapter container on standalone mode, following docker environment parameters are required.
+VES-Mapper can be deployed individually though it will throw errors if it can't reach to DMaaP instance's APIs. To test it functionally, DMaaP is the only required prerequisite outside DCAE. As VES-Mapper is integrated with Consul / CBS, it fetches the initial configuration from Consul.
+**Note:** Currently VES-Mapper fetches configuration from Consul only during initialization. It does not periodically refresh the local configuration by getting updates from Consul. This is planned for E release.
-- DMAAPHOST - Should contain an address to DMaaP, so that event publishing can work
-- MR_PORT - DMaaP Exposed Port
-- URL_JDBC - JDBC URL where postgres db is installed
-- JDBC_USERNAME - Username for postgres DB user
-- JDBC_PASSWORD - Password for postgres DB user
-- CONSUL_HOST - a host address where Consul service lies
-- CONFIG_BINDING_SERVICE - name of CBS as it is registered in Consul
-- HOSTNAME - name of Universal Ves Adapter application as it is registered in CBS catalog
+**Blueprint/model/image**
-Sample docker run command could be -
+VES-Mapper blueprint is available @
+https://gerrit.onap.org/r/gitweb?p=dcaegen2/services/mapper.git;a=blob;f=UniversalVesAdapter/dpo/blueprints/k8s-vesmapper.yaml-template.yaml;h=refs/head/master
- ``docker run -d -p 8085:8085/tcp -e URL_JDBC=jdbc:postgresql://10.53.172.138:5432/postgres -e JDBC_USERNAME=postgres -e JDBC_PASSWORD=root -e DMAAPHOST=10.53.172.156 -e CONSUL_HOST=10.53.172.109 -e HOSTNAME=static-dcaegen2-services-mua -e MR_DEFAULT_PORT_NUMBER=3904 -e CONFIG_BINDING_SERVICE=config_binding_service nexus3.onap.org:10003/onap/org.onap.dcaegen2.services.mapper.vesadapter.universalvesadaptor:latest``
+VES-Mapper docker image is available in Nexus repo @ `nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.mapper.vesadapter.universalvesadaptor:1.0.0-SNAPSHOT <nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.mapper.vesadapter.universalvesadaptor:1.0.0-SNAPSHOT>`_
-Note: you should have a postgresql and DMaap instance running in your system and provide their credentials and hostname to run in standalone mode.
+**1.To Run via blueprint**
-| **SnmpMapper**
+*a. Verify DMaaP configurations in the blueprint as per setup*
-- To run SnmpMapper container on standalone mode, following docker environment parameters are required.
+ Dmaap Configuration consists of subscribe url to fetch notifications from the respective collector and publish url to publish ves event.
-- DMAAPHOST-should contain an address to DMaaP, this will be used in future reference
-- MR_PORT - DMaaP Exposed Port
-- URL_JDBC- JDBC URL where postgres db is installed
-- JDBC_USERNAME- Username for postgres DB user
-- JDBC_PASSWORD-Password for postgres DB user
-- CONSUL_HOST - a host address where Consul service lies
-- CONFIG_BINDING_SERVICE - name of CBS as it is registered in Consul
-- HOSTNAME - name of Universal Ves Adapter application as it is registered in CBS catalog
-Sample docker run command could be -
+``streams_publishes`` and ``streams_subscribes`` points to the publishing topic and subscribe topic respectively.
+
+update these ``urls`` as per your DMaaP configurations in the blueprint.
+
+*b. Verify the Smooks mapping files in the blueprint as per the usecase. Blueprint contains default mapping file for each supported collector ( SNMP Collector and RESTConf collector currently) which may serve the purpose for the usecase.
+
+``mapping-files`` in ``collectors`` contains the contents of the mapping file.
+
+*c. Upload the blueprint in the DCAE's Cloudify instance*
+
+For this step, DCAE's Cloudify instance should be in running state. Transfer blueprint file in DCAE bootstrap POD under /blueprints directory. Log-in to the DCAE bootstrap POD's main container.
+
+Validate blueprint
+
+ ``cfy blueprints validate /blueprints/k8s-vesmapper.yaml-template.yaml``
+
+Use following command for validated blueprint to upload:
+
+ ``cfy blueprints upload -b ves-mapper /blueprints/k8s-vesmapper.yaml-template.yaml``
+
+*d. Create the Deployment*
+After VES-Mapper's validated blueprint is uploaded, create Cloudify Deployment by following command
+
+ ``cfy deployments create -b ves-mapper ves-mapper``
+
+*e. Deploy the component by using following command*
+
+ ``cfy executions start -d ves-mapper install``
+
+
+**2.To run on standalone mode**
+
+Though this is not a preferred way, to run VES-Mapper container on standalone mode using local configuration file carried in the docker image, following docker run command can be used.
+
+ ``docker run -d nexus3.onap.org:10003/onap/org.onap.dcaegen2.services.mapper.vesadapter.universalvesadaptor:1.0.0-SNAPSHOT``
- ``docker run -d -p 8084:8080/tcp -e URL_JDBC=jdbc:postgresql://10.53.172.138:5432/postgres -e JDBC_USERNAME=postgres -e JDBC_PASSWORD=root -e DMAAPHOST=10.53.172.156 -e CONSUL_HOST=10.53.172.109 -e HOSTNAME=static-dcaegen2-services-msnmp -e MR_DEFAULT_PORT_NUMBER=3904 -e CONFIG_BINDING_SERVICE=config_binding_service nexus3.onap.org:10003/onap/org.onap.dcaegen2.services.mapper.snmpmapper:latest``
diff --git a/docs/sections/services/mapper/mappingfile.rst b/docs/sections/services/mapper/mappingfile.rst
index e99ba5a9..daf515d3 100644
--- a/docs/sections/services/mapper/mappingfile.rst
+++ b/docs/sections/services/mapper/mappingfile.rst
@@ -1,84 +1,114 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2018 Tech Mahindra Ltd.
+.. Copyright 2018-2019 Tech Mahindra Ltd.
Mapping File
============
Mapping file is needed by Universal VES Adapter to convert the telemetry data into the VES format.
The Adapter uses Smooks Framework to do the data format conversion by using the mapping files.
-Currently it requires to write the mapping file manually and upload it using the SnmpMapper application. The file gets stored into the postgres database. The pgInventory instance is used for this.
| To know more about smooks framework check the following link:
| http://www.smooks.org/guide
+SNMP Collector Default Mapping File
+============
Following is the default snmp mapping file which is used when no mapping file is found while processing event from SNMP Trap Collector.
.. code-block:: xml
- <?xml version="1.0"?>
- <smooks-resource-list
- xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
- xmlns:json="http://www.milyn.org/xsd/smooks/json-1.1.xsd"
- xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.4.xsd">
- <json:reader rootName="vesevent" keyWhitspaceReplacement="-">
- <json:keyMap>
- <json:key from="date&amp;time" to="date-and-time" />
- </json:keyMap>
- </json:reader>
-
- <jb:bean class="org.onap.dcaegen2.ves.domain.VesEvent" beanId="vesEvent" createOnElement="vesevent">
- <jb:wiring property="event" beanIdRef="event"/>
- </jb:bean>
-
- <jb:bean class="org.onap.dcaegen2.ves.domain.Event" beanId="event" createOnElement="vesevent">
- <jb:wiring property="commonEventHeader" beanIdRef="commonEventHeader"/>
- <jb:wiring property="faultFields" beanIdRef="faultFields"/>
- <!--<jb:wiring property="measurementsForVfScalingFields" beanIdRef="measurementsForVfScalingFields"/> -->
- </jb:bean>
- <!--<jb:bean class="org.onap.dcaegen2.ves.domain.MeasurementsForVfScalingFields" beanId="measurementsForVfScalingFields" createOnElement="simple">
- <jb:wiring property="additionalMeasurements" beanIdRef="additionalMeasurements"/>
- </jb:bean>-->
-
- <jb:bean class="org.onap.dcaegen2.ves.domain.CommonEventHeader" beanId="commonEventHeader" createOnElement="vesevent">
- <jb:expression property="version">"3.0"</jb:expression>
- <jb:expression property="eventId">"XXXX"</jb:expression>
- <jb:expression property="reportingEntityName">"VesAdapter"</jb:expression>
- <jb:expression property="domain">"fault"</jb:expression>
- <jb:expression property="eventName" execOnElement="vesevent" >commonEventHeader.domain+"_"+"_"+ faultFields.alarmCondition;</jb:expression>
- <jb:value property="sequence" data="0" default="0" decoder="Long"/>
- <jb:value property="lastEpochMicrosec" data="#/time-received" decoder="Double" />
- <jb:value property="startEpochMicrosec" data="#/time-received" decoder="Double"/>
- <jb:expression property="priority">"Medium"</jb:expression>
- <jb:expression property="sourceName">"VesAdapter"</jb:expression>
- </jb:bean>
-
- <jb:bean class="org.onap.dcaegen2.ves.domain.FaultFields" beanId="faultFields" createOnElement="vesevent">
- <jb:value property="alarmCondition" data="#/trap-category" />
- <jb:expression property="eventSeverity">"MINOR"</jb:expression>
- <jb:expression property="eventSourceType">"SNMP Agent"</jb:expression>
- <jb:expression property="specificProblem">"SNMP Fault"</jb:expression>
- <jb:value property="faultFieldsVersion" data="2.0" default="2.0" decoder="Double" />
- <jb:wiring property="alarmAdditionalInformation" beanIdRef="alarmAdditionalInformationroot"/>
- <jb:expression property="vfStatus">"Active"</jb:expression>
-
- </jb:bean>
- <jb:bean class="java.util.ArrayList" beanId="alarmAdditionalInformationroot" createOnElement="vesevent">
- <jb:wiring beanIdRef="alarmAdditionalInformation"/>
- </jb:bean>
-
- <jb:bean class="org.onap.dcaegen2.ves.domain.AlarmAdditionalInformation" beanId="alarmAdditionalInformation" createOnElement="varbinds/element">
- <jb:value property="name" data="#/varbind_oid"/>
- <jb:value property="value" data="#/varbind_value" />
- </jb:bean>
- <!--<jb:bean class="java.util.ArrayList" beanId="additionalMeasurements" createOnElement="simple">
- <jb:wiring beanIdRef="additionalMeasurement"/>
- </jb:bean>
-
- <jb:bean class="org.onap.dcaegen2.ves.domain.AdditionalMeasurement" beanId="additionalMeasurement" createOnElement="varbinds/element">
- <jb:value property="name" data="#/varbind_value" />
- </jb:bean> -->
-
- </smooks-resource-list>
+ <?xml version="1.0" encoding="UTF-8"?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.4.xsd" xmlns:json="http://www.milyn.org/xsd/smooks/json-1.1.xsd">
+ <json:reader rootName="vesevent" keyWhitspaceReplacement="-">
+ <json:keyMap>
+ <json:key from="date&amp;time" to="date-and-time" />
+ </json:keyMap>
+ </json:reader>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves54.VesEvent" beanId="vesEvent" createOnElement="vesevent">
+ <jb:wiring property="event" beanIdRef="event" />
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves54.Event" beanId="event" createOnElement="vesevent">
+ <jb:wiring property="commonEventHeader" beanIdRef="commonEventHeader" />
+ <jb:wiring property="faultFields" beanIdRef="faultFields" />
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves54.CommonEventHeader" beanId="commonEventHeader" createOnElement="vesevent">
+ <jb:expression property="version">'3.0'</jb:expression>
+ <jb:expression property="eventType">'FaultField'</jb:expression>
+ <jb:expression property="eventId" execOnElement="vesevent">'XXXX'</jb:expression>
+ <jb:expression property="reportingEntityName">'VESMapper'</jb:expression>
+ <jb:expression property="domain">org.onap.dcaegen2.ves.domain.ves54.CommonEventHeader.Domain.FAULT</jb:expression>
+ <jb:expression property="eventName" execOnElement="vesevent">commonEventHeader.domain</jb:expression>
+ <jb:value property="sequence" data="0" default="0" decoder="Long" />
+ <jb:value property="lastEpochMicrosec" data="#/time-received" />
+ <jb:value property="startEpochMicrosec" data="#/time-received" />
+ <jb:expression property="priority">org.onap.dcaegen2.ves.domain.ves54.CommonEventHeader.Priority.NORMAL</jb:expression>
+ <jb:expression property="sourceName">'VesAdapter'</jb:expression>
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves54.FaultFields" beanId="faultFields" createOnElement="vesevent">
+ <jb:value property="faultFieldsVersion" data="2.0" default="2.0" decoder="Double" />
+ <jb:value property="alarmCondition" data="#/trap-category" />
+ <jb:expression property="specificProblem">'SNMP Fault'</jb:expression>
+ <jb:expression property="vfStatus">org.onap.dcaegen2.ves.domain.ves54.FaultFields.VfStatus.ACTIVE</jb:expression>
+ <jb:expression property="eventSeverity">org.onap.dcaegen2.ves.domain.ves54.FaultFields.EventSeverity.MINOR</jb:expression>
+ <jb:wiring property="alarmAdditionalInformation" beanIdRef="alarmAdditionalInformationroot" />
+ </jb:bean>
+ <jb:bean class="java.util.ArrayList" beanId="alarmAdditionalInformationroot" createOnElement="vesevent">
+ <jb:wiring beanIdRef="alarmAdditionalInformation" />
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves54.AlarmAdditionalInformation" beanId="alarmAdditionalInformation" createOnElement="varbinds/element">
+ <jb:value property="name" data="#/varbind_oid" />
+ <jb:value property="value" data="#/varbind_value" />
+ </jb:bean></smooks-resource-list>
+
+RestConf Collector Default Mapping File
+============
+Following is the default RestConf collector mapping file which is used when no mapping file is found while processing notification from RestConf Collector.
+.. code-block:: xml
+ <?xml version="1.0" encoding="UTF-8"?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.4.xsd" xmlns:json="http://www.milyn.org/xsd/smooks/json-1.1.xsd">
+ <json:reader rootName="vesevent" keyWhitspaceReplacement="-">
+ <json:keyMap>
+ <json:key from="date&amp;time" to="date-and-time" />
+ </json:keyMap>
+ </json:reader>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves70.VesEvent" beanId="vesEvent" createOnElement="vesevent">
+ <jb:wiring property="event" beanIdRef="event" />
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves70.Event" beanId="event" createOnElement="vesevent">
+ <jb:wiring property="commonEventHeader" beanIdRef="commonEventHeader" />
+ <jb:wiring property="pnfRegistrationFields" beanIdRef="pnfRegistrationFields" />
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves70.CommonEventHeader" beanId="commonEventHeader" createOnElement="vesevent">
+ <jb:expression property="version">org.onap.dcaegen2.ves.domain.ves70.CommonEventHeader.Version._4_0_1</jb:expression>
+ <jb:expression property="eventType">'pnfRegistration'</jb:expression>
+ <jb:expression property="vesEventListenerVersion">org.onap.dcaegen2.ves.domain.ves70.CommonEventHeader.VesEventListenerVersion._7_0_1</jb:expression>
+ <jb:expression property="eventId" execOnElement="vesevent">'registration_'+commonEventHeader.ts1</jb:expression>
+ <jb:expression property="reportingEntityName">'VESMapper'</jb:expression>
+ <jb:expression property="domain">org.onap.dcaegen2.ves.domain.ves70.CommonEventHeader.Domain.PNF_REGISTRATION</jb:expression>
+ <jb:expression property="eventName" execOnElement="vesevent">commonEventHeader.domain</jb:expression>
+ <jb:value property="sequence" data="0" default="0" decoder="Long" />
+ <jb:expression property="lastEpochMicrosec" execOnElement="vesevent">commonEventHeader.ts1</jb:expression>
+ <jb:expression property="startEpochMicrosec" execOnElement="vesevent">commonEventHeader.ts1</jb:expression>
+ <jb:expression property="priority">org.onap.dcaegen2.ves.domain.ves70.CommonEventHeader.Priority.NORMAL</jb:expression>
+ <jb:expression property="sourceName" execOnElement="vesevent">pnfRegistrationFields.vendorName+'-'+pnfRegistrationFields.serialNumber</jb:expression>
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves70.PnfRegistrationFields" beanId="pnfRegistrationFields" createOnElement="vesevent">
+ <jb:expression property="pnfRegistrationFieldsVersion">org.onap.dcaegen2.ves.domain.ves70.PnfRegistrationFields.PnfRegistrationFieldsVersion._2_0</jb:expression>
+ <jb:value property="serialNumber" data="pnfRegistration/serialNumber" />
+ <jb:value property="lastServiceDate" data="pnfRegistration/lastServiceDate" />
+ <jb:value property="manufactureDate" data="pnfRegistration/manufactureDate" />
+ <jb:value property="modelNumber" data="pnfRegistration/modelNumber" />
+ <jb:value property="oamV4IpAddress" data="pnfRegistration/oamV4IpAddress" />
+ <jb:value property="oamV6IpAddress" data="pnfRegistration/oamV6IpAddress" />
+ <jb:value property="softwareVersion" data="pnfRegistration/softwareVersion" />
+ <jb:value property="unitFamily" data="pnfRegistration/unitFamily" />
+ <jb:value property="unitType" data="pnfRegistration/unitType" />
+ <jb:value property="vendorName" data="pnfRegistration/vendorName" />
+ <jb:wiring property="additionalFields" beanIdRef="alarmAdditionalInformation" />
+ </jb:bean>
+ <jb:bean class="org.onap.dcaegen2.ves.domain.ves70.AlarmAdditionalInformation" beanId="alarmAdditionalInformation" createOnElement="vesevent">
+ <jb:wiring property="additionalProperties" beanIdRef="additionalFields2" />
+ </jb:bean>
+ <jb:bean beanId="additionalFields2" class="java.util.HashMap" createOnElement="vesevent/pnfRegistration/additionalFields">
+ <jb:value data="pnfRegistration/additionalFields/*" />
+ </jb:bean></smooks-resource-list>
diff --git a/docs/sections/services/mapper/troubleshooting.rst b/docs/sections/services/mapper/troubleshooting.rst
new file mode 100644
index 00000000..196faa0d
--- /dev/null
+++ b/docs/sections/services/mapper/troubleshooting.rst
@@ -0,0 +1,82 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+.. _troubleshooting:
+
+Troubleshooting
+===============
+
+**NOTE**
+
+According to **ONAP** logging policy, **Mapper** logs contain all required markers as well as service and client specific Mapped Diagnostic Context (later referred as MDC)
+
+Default console log pattern:
+
+::
+
+ |%date{&quot;HH:mm:ss.SSSXXX&quot;, UTC}\t[ %thread\t] %highlight(%-5level)\t - %msg\t
+
+A sample, fully qualified message implementing this pattern:
+
+::
+
+ |11:10:13.230 [rcc-notification] INFO metricsLogger - fetch and publish from and to Dmaap started:rcc-notification
+
+
+For simplicity, all log messages in this section are shortened to contain only:
+ * logger name
+ * log level
+ * message
+
+Error and warning logs contain also:
+ * exception message
+ * stack trace
+
+**Do not rely on exact log messages or their presence, as they are often subject to change.**
+
+Deployment/Installation errors
+--------------------
+
+**Missing Default Config File in case of using local config instead of Consul**
+
+::
+
+
+ |13:04:37.535 [main] ERROR errorLogger - Default Config file kv.json is missing
+ |13:04:37.537 [main] ERROR errorLogger - Application stoped due to missing default Config file
+ |13:04:37.538 [main] INFO o.s.s.c.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'
+ |15:40:43.982 [main] WARN debugLogger - All Smooks objects closed
+**These log messages are printed when the default configuration file "kv.json", was not present.**
+
+
+
+**Invalid Default Config File in case of using local config instead of Consul**
+
+If Default Config File is an invalid json file, we will get below exception
+
+::
+
+ |15:19:52.489 [main] ERROR o.s.boot.SpringApplication - Application run failed
+ |java.lang.IllegalStateException: Failed to execute CommandLineRunner
+ at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:816)
+ at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797)
+ at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
+ at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
+ at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
+ at org.onap.universalvesadapter.Application.main(Application.java:29)
+ |Caused by: org.json.JSONException: Expected a ',' or '}' at 8100 [character 2 line 54]
+ at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
+ at org.json.JSONObject.<init>(JSONObject.java:229)
+ at org.json.JSONObject.<init>(JSONObject.java:321)
+ at org.onap.universalvesadapter.utils.FetchDynamicConfig.verifyConfigChange(FetchDynamicConfig.java:97)
+ at org.onap.universalvesadapter.utils.FetchDynamicConfig.cbsCall(FetchDynamicConfig.java:66)
+ at org.onap.universalvesadapter.service.VESAdapterInitializer.run(VESAdapterInitializer.java:83)
+ at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813)
+ ... 5 common frames omitted
+ |15:19:52.492 [main] INFO o.s.s.c.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'
+ |15:19:52.493 [main] WARN debugLogger - All Smooks objects closed
+
+
+**Invalid Smooks mapping file**
+
+If VES-Mapper blueprint or local config file contains invalid Smooks mapping file, then we will get below SAXException / JsonProcessingException / JsonSyntaxException / JsonParseException while processing the incoming notifications and the notification will be dropped without converting into required VES event. All such dropped notifications will be logged in error log file. \ No newline at end of file
diff --git a/docs/sections/services/restconf/development_info.rst b/docs/sections/services/restconf/development_info.rst
new file mode 100644
index 00000000..31e2ddbe
--- /dev/null
+++ b/docs/sections/services/restconf/development_info.rst
@@ -0,0 +1,17 @@
+Compiling RestConf Collector
+=============================
+
+RestconfCollector is a sub-project of dcaegen2/colletcors/ (https://gerrit.onap.org/r/dcaegen2/collectors/restconf).
+To build the Restconf Collector component, run the following maven command from within **collectors/restconf** directory
+`mvn clean install`
+
+
+Maven GroupId:
+==============
+
+org.onap.dcaegen2.collectors.restconf
+
+Maven Parent ArtifactId:
+========================
+
+org.onap.oparen:oparent:1.2.0
diff --git a/docs/sections/services/restconf/functionality.rst b/docs/sections/services/restconf/functionality.rst
new file mode 100644
index 00000000..15d42068
--- /dev/null
+++ b/docs/sections/services/restconf/functionality.rst
@@ -0,0 +1,13 @@
+Functionality
+=============
+
+RestconfCollector interaction with DCAE components.
+
+.. image:: ../../images/rcc_diag.png
+
+RestconfCollector interaction with an external controller.
+
+.. image:: ../../images/rcc_diag_interact.png
+
+For more details about the Restconfcollector, visit
+* https://wiki.onap.org/pages/viewpage.action?pageId=60891182
diff --git a/docs/sections/services/restconf/index.rst b/docs/sections/services/restconf/index.rst
new file mode 100644
index 00000000..ec98c959
--- /dev/null
+++ b/docs/sections/services/restconf/index.rst
@@ -0,0 +1,25 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+=====================================
+RestConfCollector
+=====================================
+
+.. contents::
+ :depth: 3
+..
+
+Overview
+========
+
+Restconf collector is a microservice in ONAP DCAE. It subscribes to external controllers
+and receives event data. After receiving event data it may modify it as per usecase's requirement and
+produce a DMaaP event. This DMaap event usually consumed by VES mapper.
+Restconf Collector can subscribe multiple events from multiple controllers.
+
+.. toctree::
+ :maxdepth: 1
+
+ ./installation
+ ./functionality
+ ./development_info
diff --git a/docs/sections/services/restconf/installation.rst b/docs/sections/services/restconf/installation.rst
new file mode 100644
index 00000000..2f369873
--- /dev/null
+++ b/docs/sections/services/restconf/installation.rst
@@ -0,0 +1,47 @@
+Installation
+============
+
+Sample docker run command could be -
+.. code-block:: bash
+ docker run onap/org.onap.dcaegen2.collectors.restconfcollector
+
+For Dublin release, it will be a DCAE component that can dynamically be deployed via Cloudify blueprint installation.
+Steps to deploy are shown below
+
+- Transfer blueprint component file in DCAE bootstrap POD under /blueprints directory. Blueprint can be found in
+
+ https://git.onap.org/dcaegen2/collectors/restconf/tree/dpo/blueprints/k8s-rcc-policy.yaml-template?h=master
+
+- Enter the Bootstrap POD
+- Validate blueprint
+ .. code-block:: bash
+
+ cfy blueprints validate /blueprints/k8s-rcc-policy.yaml
+- Upload validated blueprint
+ .. code-block:: bash
+
+
+ cfy blueprints upload -b restconfcollector /blueprints/k8s-rcc-policy.yaml
+- Create deployment
+ .. code-block:: bash
+
+
+ cfy deployments create -b restconfcollector restconfcollector
+- Deploy blueprint
+ .. code-block:: bash
+
+
+ cfy executions start -d restconfcollector install
+
+To undeploy restconfcollector, steps are shown below
+
+- Uninstall running restconfcollector and delete deployment
+ .. code-block:: bash
+
+
+ cfy uninstall restconfcollector
+- Delete blueprint
+ .. code-block:: bash
+
+
+ cfy blueprints delete restconfcollector
diff --git a/docs/sections/services/serviceindex.rst b/docs/sections/services/serviceindex.rst
index df26b4f7..9825fe9a 100644
--- a/docs/sections/services/serviceindex.rst
+++ b/docs/sections/services/serviceindex.rst
@@ -20,3 +20,5 @@ Service components under DCAE
./pm-mapper/index.rst
./bbs-event-processor/index.rst
./sdk/index.rst
+ ./son-handler/index.rst
+ ./restconf/index.rst
diff --git a/docs/sections/services/son-handler/dcae_new.jpg b/docs/sections/services/son-handler/dcae_new.jpg
new file mode 100644
index 00000000..be619ed7
--- /dev/null
+++ b/docs/sections/services/son-handler/dcae_new.jpg
Binary files differ
diff --git a/docs/sections/services/son-handler/flowdiagram.jpg b/docs/sections/services/son-handler/flowdiagram.jpg
new file mode 100644
index 00000000..4e660892
--- /dev/null
+++ b/docs/sections/services/son-handler/flowdiagram.jpg
Binary files differ
diff --git a/docs/sections/services/son-handler/index.rst b/docs/sections/services/son-handler/index.rst
new file mode 100644
index 00000000..5bc4fbd2
--- /dev/null
+++ b/docs/sections/services/son-handler/index.rst
@@ -0,0 +1,32 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+
+SON-Handler MS
+==============
+
+.. Add or remove sections below as appropriate for the platform component.
+
+
+**SON-Handler MS** is introduced in ONAP for implementing the pre-processing and co-ordination actions of various RAN SON use cases.
+As of now PCI optimization and ANR updates are handled in Dublin release.
+OOF, SON Handler MS, DCAE, VES Collector, Policy, DMaaP and SDNR are involved in this use case implementation.
+
+.. image:: flowdiagram.jpg
+
+SON-Handler MS overview and functions
+-------------------------------------
+
+.. toctree::
+ :maxdepth: 1
+
+ ./son_handler_overview.rst
+
+SON-Handler MS Installation Steps, Configurations, Troubleshooting Tips and Logging
+-----------------------------------------------------------------------------------
+
+.. toctree::
+ :maxdepth: 1
+
+ ./son_handler_installation.rst
+ ./son_handler_troubleshooting.rst
diff --git a/docs/sections/services/son-handler/son_handler.jpg b/docs/sections/services/son-handler/son_handler.jpg
new file mode 100644
index 00000000..355af4a7
--- /dev/null
+++ b/docs/sections/services/son-handler/son_handler.jpg
Binary files differ
diff --git a/docs/sections/services/son-handler/son_handler_installation.rst b/docs/sections/services/son-handler/son_handler_installation.rst
new file mode 100644
index 00000000..b7807e46
--- /dev/null
+++ b/docs/sections/services/son-handler/son_handler_installation.rst
@@ -0,0 +1,111 @@
+
+Instalation Steps
+-----------------
+
+SON handler microservice can be deployed using cloudify blueprint using bootstrap container of an existing DCAE deployment
+
+Deployment Prerequisites
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+- SON-Handler service requires DMAAP and Policy components to be functional.
+
+- SON-hadler service requires the following dmaap topics to be present in the running DMAAP instance :
+
+ 1.PCI-NOTIF-TOPIC-NGHBR-LIST-CHANGE-INFO
+
+ 2.unauthenticated.SEC_FAULT_OUTPUT
+
+ 3.unauthenticated.SEC_MEASUREMENT_OUTPUT
+
+ 4.DCAE_CL_RSP
+
+- Policy model required for SON-handler service should be created and pushed to policy component.Steps for creating and pushing the policy model:
+ 1.Login to PDP container and execute
+ kubectl exec -ti --namespace onap policy-pdp-0 bash
+ 2.Create policy model
+ curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{
+ "policyName": "com.PCIMS_CONFIG_POLICY",
+ "configBody": "{ \"PCI_NEIGHBOR_CHANGE_CLUSTER_TIMEOUT_IN_SECS\":60, \"PCI_MODCONFIG_POLICY_NAME\":\"ControlLoop-vPCI-fb41f388-a5f2-11e8-98d0-529269fb1459\", \"PCI_OPTMIZATION_ALGO_CATEGORY_IN_OOF\":\"OOF-PCI-OPTIMIZATION\", \"PCI_SDNR_TARGET_NAME\":\"SDNR\" }",
+ "policyType": "Config",
+ "attributes" : { "matching" : { "key1" : "value1" } },
+ "policyConfigType": "Base",
+ "onapName": "DCAE",
+ "configName": "PCIMS_CONFIG_POLICY",
+ "configBodyType": "JSON"
+}' 'https://pdp:8081/pdp/api/createPolicy'
+
+ 3.Push policy model
+ curl -k -v --silent -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{
+ "policyName": "com.PCIMS_CONFIG_POLICY",
+ "policyType": "Base"
+}' 'https://pdp:8081/pdp/api/pushPolicy'
+
+ 4.Verify config policy is present
+
+ curl -k -v --silent -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{ "configName": "PCIMS_CONFIG_POLICY", "policyName": "com.Config_PCIMS_CONFIG_POLICY1*", "requestID":"e65cc45a-9efb-11e8-98d0-529269ffa459" }' 'https://pdp:8081/pdp/api/getConfig'
+
+Deployment steps
+~~~~~~~~~~~~~~~~
+- Login to the bootstrap container
+ kubectl exec -ti --namespace onap <bootstrap pod name> bash
+- Copy the blueprints and inputs file to the bootstrap container. The blueprint and a sample input file can be found under dpo/blueprints directory of son-hanler project. (https://gerrit.onap.org/r/dcaegen2/services/son-handler)
+- Deploy the microservice into the cloudify using the following command
+ cfy install -d sonhms -b sonhms -i <inputs file path> <blueprint file path>
+- Deployment status of the microservice can be found from kubernetes pods status (MS will be deployed as a k8s pod in the kubernetes environment under the same namespace as the DCAE environment).
+ kubectl get pods --namespace onap
+- To uninstall the microservice
+ cfy uninstall sonhms
+- To delete the blueprint from the cloudify instance
+ cfy blueprints delete sonhms
+
+
+Application Configurations
+--------------------------
+
+Streams_subscribes Dmaap topics that the MS will consume messages
+
+Streams_publishes Dmaap topics that the MS will publish messages
+
+postgres.host Host where the postgres database is running
+
+postgres.port Host where the postgres database is running
+
+postgres.username Postgres username
+
+postgres.password Postgres password
+
+sonhandler.pollingInterval Polling Interval for consuming dmaap messages
+
+sonhandler.pollingTimeout Polling timeout for consuming dmaap messages
+
+sonhandler.numSolutions Number for solutions for OOF optimization
+
+sonhandler.minCollision Minimum collision criteria to trigger OOF
+
+sonhandler.minConfusion Minimum confusion criteria to trigger OOF
+
+sonhandler.maximumClusters Maximum number of clusters MS can process
+
+sonhandler.badThreshold Bad threshold for Handover success rate
+
+sonhandler.poorThreshold Poor threshold for Handover success rate
+
+sonhandler.namespace Namespace where MS is going to be deployed
+
+sonhandler.sourceId Source ID of the Microservice (Required for Sending request to OOF)
+
+sonhandler.dmaap.server Location of message routers
+
+sonhandler.bufferTime Buffer time for MS to wait for more notifications when the optimization criteria is not met
+
+sonhandler.cg Consumer group for the MS to consume message from dmaap
+
+sonhandler.cid Consumer ID for the MS to consume message from dmaap
+
+sonhandler.configDbService Location of the config DB (protocol, host & port)
+
+sonhandler.oof.service Location of OOF (protocol, host & port)
+
+sonhandler.optimizers Optimizer to trigger in OOF
+
+
diff --git a/docs/sections/services/son-handler/son_handler_overview.rst b/docs/sections/services/son-handler/son_handler_overview.rst
new file mode 100644
index 00000000..23abbaa7
--- /dev/null
+++ b/docs/sections/services/son-handler/son_handler_overview.rst
@@ -0,0 +1,52 @@
+.. This work is licensed under a Creative Commons Attribution 4.0
+ International License. http://creativecommons.org/licenses/by/4.0
+
+.. _docs_SON_Handler_MS:
+
+Architecture
+------------
+The architecture below depicts the SON-Handler MS as a part of DCAE. Only the relevant interactions and components are shown.
+
+.. image:: ./dcae_new.jpg
+
+The internal architecture of SON-Handler MS is shown below.
+
+.. image:: ./son_handler.jpg
+
+Description
+~~~~~~~~~~~
+The SON-Handler MS has a REST interface towards OOF as well as DMaaP interface towards Policy, VES-Collector and SDN-R. It has a database and core logic.
+
+Core logic
+~~~~~~~~~~
+The core logic is implemented as 3 threads - main thread, child thread(s) for handling neighbor-list updates and collision/confusion alarms from the RAN (via SDN-R), and a separate child for handling handover measurements (PM) inputs from the RAN (via VES-Collector). The Main Thread is responsible for spawning and terminating the Child Threads. The core logic is responsible for:
+(a) Performing all the pre-processing that is required before triggering OOF for PCI as well as PCI/ANR joint-optimization
+(b) Autonomously taking actions for ANR updates
+(c) Preparing the message contents required by SDN-R to re-configure the RAN nodes with PCI/ANR updates
+
+The logic may not be 100% fool-proof (i.e., cover all possible scenarios and boundary-counditions as in real field deployments), as well as the most efficient one. An attempt has been made to balance the usefulness for a PoC versus the complexity of handling all possible scenarios. It is intended to provide a good base for the community/users to enhance it further as required.
+
+The details of the state machines of all the threads in the core logic are available in https://wiki.onap.org/pages/viewpage.action?pageId=56131985.
+
+Database
+~~~~~~~~
+This is a PostgreSQL DB, and is intended to persist information such as the following:
+- PCI-Handler MS Config information (e.g., thresholds, timer values, OOF algorithm name, etc.)
+- Pre-processing results and other related information (e.g., neighbor list)
+- Buffered notifications (i.e., notifications not yet processed at all)
+- State information
+- Association between PNF-name and CellId
+- PM/FM data
+- Etc.
+
+DMaaP Client
+~~~~~~~~~~~~
+This is responsible for registering with the DMaaP client for the DMaaP notifications from SDN-R and VES-Collector, and to Policy.
+
+Deployment aspects
+------------------
+The SON-Handler MS will be deployed on DCAE using the mechanism described in "Option 3 - On-Demand deployment through DCAE-Controller cli" at https://wiki.onap.org/display/DW/Dublin+Deployment+Strategy.
+
+Known Issues and Resolutions
+----------------------------
+The scope and scenarios addressed are documented in the SON use case page for Dublin - https://wiki.onap.org/display/DW/OOF-PCI+Use+Case+-+Dublin+Release+-+ONAP+based+SON+for+PCI+and+ANR. \ No newline at end of file
diff --git a/docs/sections/services/son-handler/son_handler_troubleshooting.rst b/docs/sections/services/son-handler/son_handler_troubleshooting.rst
new file mode 100644
index 00000000..55e34b47
--- /dev/null
+++ b/docs/sections/services/son-handler/son_handler_troubleshooting.rst
@@ -0,0 +1,19 @@
+Troubleshooting steps
+---------------------
+
+1. Microservice stops and restarts during startup
+
+ Possible reasons & Solutions:
+ 1. Microservice is not registered with the consul
+ - Check the consul if the microservice is registered with it and the MS is able to fetch the app config from the CBS. Check if CBS and consul are deployed properly and try to redeploy the MS
+ 2. DMAAP topics are not created
+ - Check the message router if the neccessary dmaap topics are present in the list of topics. Create the topics if not present.
+ List of topics can be queried from message router using the url "http://<host>:<port>/topics"
+
+
+Logging
+-------
+
+1. Logs can be found either from kubernetes UI or from kubectl. Since, the MS is deployed as a pod in the kubernetes, you can check the logs by using the command
+ kubectl logs <pod-name> --namespace onap
+