.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2022 Nordix Foundation


API
===

GET /healthcheck
---------------------------------------------------

Description
~~~~~~~~~~~

This is the health check endpoint. If this returns a 200, the server is alive.


Responses
~~~~~~~~~

+-----------+--------------------------+
| HTTP Code | Description              |
+===========+==========================+
| **200**   | Successful response      |
+-----------+--------------------------+
| **503**   | Service unavailable      |
+-----------+--------------------------+


POST /subscription
--------------------------------------------------

Description
~~~~~~~~~~~

Create a PM Subscription


Responses
~~~~~~~~~

+-----------+--------------------------------------+
| HTTP Code | Description                          |
+===========+======================================+
| **201**   | Successfully created PM Subscription |
+-----------+--------------------------------------+
| **400**   | Invalid Input                        |
+-----------+--------------------------------------+
| **409**   | Duplicate Data                       |
+-----------+--------------------------------------+

Sample Subscription Body
~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: http

    {
        "subscription": {
            "subscriptionName": "new_sub",
            "policyName": "pmsh_policy",
            "nfFilter": {
                "nfNames": [
                    "^pnf.*",
                    "^vnf.*"
                ],
                "modelInvariantIDs": [

                ],
                "modelVersionIDs": [

                ],
                "modelNames": []
            },
            "measurementGroups": [{
                "measurementGroup": {
                    "measurementGroupName": "msr_grp_name",
                    "fileBasedGP": 15,
                    "fileLocation": "\/pm\/pm.xml",
                    "administrativeState": "UNLOCKED",
                    "measurementTypes": [{
                        "measurementType": "counter_a"
                    }],
                    "managedObjectDNsBasic": [{
                        "DN": "string"
                    }]
                }
            }]
        }
    }


GET /subscription
--------------------------------------------------

Description
~~~~~~~~~~~

Get all the subscriptions from PMSH


Responses
~~~~~~~~~

+-----------+----------------------------------------+
| HTTP Code | Description                            |
+===========+========================================+
| **200**   | Successfully fetched all subscriptions |
+-----------+----------------------------------------+
| **500**   | Exception occured when querying DB     |
+-----------+----------------------------------------+


GET /subscription/{subscription_name}
---------------------------------------------------

Description
~~~~~~~~~~~

Get the Subscription from PMSH specified by Name

Responses
~~~~~~~~~

+-----------+--------------------------------------------+
| HTTP Code | Description                                |
+===========+============================================+
| **200**   | OK; Requested Subscription was returned    |
+-----------+--------------------------------------------+
| **404**   | Subscription with specified name not found |
+-----------+--------------------------------------------+
| **500**   | Exception occurred while querying database |
+-----------+--------------------------------------------+


DELETE /subscription/{subscription_name}
---------------------------------------------------

Description
~~~~~~~~~~~

Deletes the Subscription from PMSH specified by Name

Responses
~~~~~~~~~

+-----------+---------------------------------------------------------------------+
| HTTP Code | Description                                                         |
+===========+=====================================================================+
| **204**   | Successfully deleted the subscription and returns NO Content        |
+-----------+---------------------------------------------------------------------+
| **404**   | Subscription with specified name not found                          |
+-----------+---------------------------------------------------------------------+
| **409**   | Subscription could not be deleted as it contains measurement groups |
|           | with state UNLOCKED OR state change to LOCKED was under process     |
+-----------+---------------------------------------------------------------------+
| **500**   | Exception occurred on the server                                    |
+-----------+---------------------------------------------------------------------+


GET /subscription/{subscription_name}/measurementGroups/{measurement_group_name}
--------------------------------------------------------------------------------

Description
~~~~~~~~~~~

Get the  measurement group and associated network functions from PMSH by using sub name and meas group name

Responses
~~~~~~~~~

+-----------+---------------------------------------------------------------------+
| HTTP Code | Description                                                         |
+===========+=====================================================================+
| **200**   | OK; Received requested measurement group with associated NF's       |
+-----------+---------------------------------------------------------------------+
| **404**   | Measurement group with specified name not found                     |
+-----------+---------------------------------------------------------------------+
| **500**   | Exception occurred on the server                                    |
+-----------+---------------------------------------------------------------------+


PUT /subscription/{subscription_name}/measurementGroups/{measurement_group_name}/{administrativeState}
--------------------------------------------------------------------------------

Description
~~~~~~~~~~~

Update administrative state for a measurement group

Responses
~~~~~~~~~

+-----------+---------------------------------------------------------------------+
| HTTP Code | Description                                                         |
+===========+=====================================================================+
| **201**   | Successfully updated administrative state                           |
+-----------+---------------------------------------------------------------------+
| **409**   | Duplicate data                                                      |
+-----------+---------------------------------------------------------------------+
| **500**   | Invalid input                                                       |
+-----------+---------------------------------------------------------------------+
