API documentation
Change-Id: I1184b3170afd6cbedc455810fb77d18a626f216a
Issue-ID: NONRTRIC-152
Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
diff --git a/docs/policy-agent-api.rst b/docs/policy-agent-api.rst
new file mode 100644
index 0000000..e3354e4
--- /dev/null
+++ b/docs/policy-agent-api.rst
@@ -0,0 +1,1147 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+.. |nbsp| unicode:: 0xA0
+ :trim:
+
+.. |nbh| unicode:: 0x2011
+ :trim:
+
+.. _policy-agent-api:
+
+############################
+A1 Policy Management Service
+############################
+
+
+*******************************************
+A1 Policy Management Service - Introduction
+*******************************************
+
+The A1 Policy Management Service ("Policy Agent") is an SMO/NONRTRIC service above the NONRTRIC A1 Adaptor/Controller
+that provides:
+
+* Unified REST & DMAAP APIs for managing A1 Policies in all Near |nbh| RT |nbsp| RICs
+* Synchronized view of registered "services" (e.g. R-APP, GUI, etc)
+* Synchronized view of policy instances for each "service"
+* Synchronized view of policy instances in all Near |nbh| RT |nbsp| RICs
+* Synchronized view of policy types in all Near |nbh| RT |nbsp| RICs
+* Policy Query API (e.g. per Near |nbh| RT |nbsp| RIC, per "service", per policy type)
+* An initial interface for unified Near |nbh| RT |nbsp| RIC ID to Near |nbh| RT |nbsp| RIC address mapping.
+ (Note: may also later act as adaptor to A&AI, CMDBs etc. to "find" Near |nbh| RT |nbsp| RICs - TBC)
+* An Initial "O1 ManagedElement" mapping database & interface to find appropriate Near |nbh| RT |nbsp| RIC for RAN elements.
+ (Note: may also later act as adaptor to A&AI, RuntimeDB, other CMDBs etc. - TBC)
+* Monitors all Near |nbh| RT |nbsp| RICs and recovers from inconsistencies (Note: e.g. Near |nbh| RT |nbsp| RIC restarts)
+* Support for different Southbound connectors on a per Near |nbh| RT |nbsp| RIC basis. (Note: e.g. different A1
+ versions, different Near |nbh| RT |nbsp| RIC versions, different A1 adapters, different or proprietary A1
+ controllers/EMSs)
+
+***************************************
+A1 Policy Management Service - REST NBI
+***************************************
+
+This is the north bound API of the A1 Policy Management Service ("Policy Agent"). This API allows *services* to interact
+with the Policy Agent using REST.
+
+By registering with the Policy Agent, the Policy Agent takes responsibility for synchronizing the policies created by
+the service in the Near |nbh| RT |nbsp| RICs. This means that if a Near |nbh| RT |nbsp| RIC restarts, the Policy Agent
+will try to recreate all the policies residing in the Near |nbh| RT |nbsp| RIC once it is started again. If this is not
+possible, it will remove all policies belonging to the Near |nbh| RT |nbsp| RIC.
+
+The Policy Agent also keeps an updated view of the policy types available, and which Near |nbh| RT |nbsp| RICs that
+support which types. Also, the Policy Agent can tell if a Managed Element is managed by a certain
+Near |nbh| RT |nbsp| RIC.
+
+The Policy Agent NBI has four distinct parts, described in the sections below:
+
+* Service Management
+* Policy Management
+* Near-RT RIC Repository
+* Health Check
+
+.. contents:: Operations
+ :depth: 4
+ :local:
+
+
+Service Management
+==================
+
+A service can register itself in the Policy Agent.
+
+By providing a callback URL the service can get notifications from the Policy Agent.
+
+A service can also register a "*Keep Alive Interval*", in seconds. By doing this the service promises to call the
+Policy Agent's "*Keep Alive*" method, or else create or delete policies, more often than the "*Keep Alive Interval*"
+measured in seconds. If the service, for some reason, is not able to do this, the Policy Agent will consider that the
+service has died or vanished and will then delete all its policies, both in the internal repository and in the
+Near |nbh| RT |nbsp| RICs where they were earlier created. **Note!** |nbsp| If the service does not provide a value for
+"*Keep Alive Interval*", then the service maintains full responsibility to delete all of its policies when they are no
+longer needed.
+
+Service Management Operations
+-----------------------------
+
+/service
+~~~~~~~~
+
+PUT
++++
+
+ Register a service.
+
+ **URL path:**
+ /service
+
+ **Parameters:**
+
+ None.
+
+ **Body:** (*Required*)
+ A JSON object (ServiceRegistrationInfo): ::
+
+ {
+ "callbackUrl": "string", (An empty string means the service will never get any callbacks.)
+ "keepAliveIntervalSeconds": 0, (0 means the service will always be considered alive.)
+ "serviceName": "string" (Required, must be unique.)
+ }
+
+ **Responses:**
+
+ 200:
+ Service updated.
+
+ 201:
+ Service created.
+
+ 400:
+ Something went wrong with the service registration.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X PUT "http://localhost:8081/service" -H "Content-Type: application/json" -d "{
+ \"callbackUrl\": \"URL\",
+ \"keepAliveIntervalSeconds\": 0,
+ \"serviceName\": \"existing\"
+ }"
+
+ Result:
+ 201: ::
+
+ OK
+
+ Call: ::
+
+ curl -X PUT "http://localhost:8081/service" -H "Content-Type: application/json" -d "{}"
+
+ Result:
+ 400: ::
+
+ Missing mandatory parameter 'serviceName'
+
+/services
+~~~~~~~~~
+
+GET
++++
+
+ Query service information.
+
+ **URL path:**
+ /services?name=<service-name>
+
+ **Parameters:**
+
+ name: (*Optional*)
+ The name of the service.
+
+ **Responses:**
+
+ 200:
+ Array of JSON objects (ServiceStatus). ::
+
+ {
+ "callbackUrl": "string", (Callback URL)
+ "keepAliveIntervalSeconds": 0, (Policy keep alive interval)
+ "serviceName": "string", (Identity of the service)
+ "timeSinceLastActivitySeconds": 0 (Time since last invocation by the service)
+ }
+
+ 404:
+ Service is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/services?name=existing"
+
+ Result:
+ 200: ::
+
+ [
+ {
+ "serviceName":"existing",
+ "keepAliveIntervalSeconds":0,
+ "timeSinceLastActivitySeconds":7224,
+ "callbackUrl":"URL"
+ }
+ ]
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/services?name=nonexistent"
+
+ Result:
+ 404: ::
+
+ Service not found
+
+DELETE
+++++++
+
+ Delete a service.
+
+ **URL path:**
+ /services?name=<service-name>
+
+ **Parameters:**
+
+ name: (*Required*)
+ The name of the service.
+
+ **Responses:**
+
+ 204:
+ OK
+
+ 404:
+ Service not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X DELETE "http://localhost:8081/services?name=existing"
+
+ Result:
+ 204: ::
+
+ OK
+
+ Call: ::
+
+ curl -X DELETE "http://localhost:8081/services?name=nonexistent"
+
+ Result:
+ 404: ::
+
+ Could not find service: nonexistent
+
+/services/keepalive
+~~~~~~~~~~~~~~~~~~~
+
+POST
+++++
+
+ Heart beat from a service.
+
+ **URL path:**
+ /services/keepalive?name=<service-name>
+
+ **Parameters:**
+
+ name: (*Required*)
+ The name of the service.
+
+ **Responses:**
+
+ 200:
+ OK
+
+ 404:
+ Service is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X POST "http://localhost:8081/services/keepalive?name=existing"
+
+ Result:
+ 200: ::
+
+ OK
+
+ Call: ::
+
+ curl -X POST "http://localhost:8081/services/keepalive?name=nonexistent"
+
+ Result:
+ 404: ::
+
+ Could not find service: nonexistent
+
+.. _policy-management:
+
+Policy Management
+=================
+
+Policies are based on types. The set of available policy types is determined by the set of policy types supported by
+Near |nbh| RT |nbsp| RICs. At startup, the Policy Agent queries all Near |nbh| RT |nbsp| RICs for their supported types
+and stores them in its internal repository. It then checks this at regular intervals to keep the repository of types up
+to date. Policy types cannot be created, updated or deleted using this interface since this must be done via the
+Near |nbh| RT |nbsp| RICs.
+
+Policies can be queried, created, updated, and deleted. A policy is always created in a specific
+Near |nbh| RT |nbsp| RIC.
+
+When a policy is created, the Policy Agent stores information about it in its internal repository. At regular intervals,
+it then checks with all Near |nbh| RT |nbsp| RICs that this repository is synchronized. If, for some reason, there is an
+inconsistency, the Policy Agent will start a synchronization job and try to reflect the status of the
+Near |nbh| RT |nbsp| RIC. If this fails, the Policy Agent will delete all policies for the specific
+Near |nbh| RT |nbsp| RIC in the internal repository and set its state to *UNKNOWN*. This means that no interaction with
+the Near |nbh| RT |nbsp| RIC is possible until the Policy Agent has been able to contact it again and re-synchronize its
+state in the repository.
+
+Policy Types
+------------
+
+A policy type defines a name and a JSON schema that constrains the content of a policy of that type.
+
+/policy_types
+~~~~~~~~~~~~~
+
+GET
++++
+
+ Query policy type names.
+
+ **URL path:**
+ /policy_types?ric=<name-of-ric>
+
+ **Parameters:**
+
+ ric: (*Optional*)
+ The name of the Near |nbh| RT |nbsp| RIC to get types for.
+
+ **Responses:**
+
+ 200:
+ Array of policy type names.
+
+ 404:
+ Near |nbh| RT |nbsp| RIC is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy_types"
+
+ Result:
+ 200: ::
+
+ [
+ "STD_PolicyModelUnconstrained_0.2.0",
+ "Example_QoETarget_1.0.0",
+ "ERIC_QoSNudging_0.2.0"
+ ]
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy_types?ric=nonexistent"
+
+ Result:
+ 404: ::
+
+ org.oransc.policyagent.exceptions.ServiceException: Could not find ric: nonexistent
+
+/policy_schema
+~~~~~~~~~~~~~~
+
+GET
++++
+
+ Returns one policy type schema definition.
+
+ **URL path:**
+ /policy_schema?id=<name-of-type>
+
+ **Parameters:**
+
+ id: (*Required*)
+ The ID of the policy type to get the definition for.
+
+ **Responses:**
+
+ 200:
+ Policy schema as JSON schema.
+
+ 404:
+ Policy type is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy_schema?id=STD_PolicyModelUnconstrained_0.2.0"
+
+ Result:
+ 200: ::
+
+ {
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "STD_PolicyModelUnconstrained_0.2.0",
+ "description": "Standard model of a policy with unconstrained scope id combinations",
+ "type": "object",
+ "properties": {
+ "scope": {
+ "type": "object",
+ "properties": {
+ "ueId": {"type": "string"},
+ "groupId": {"type": "string"}
+ },
+ "minProperties": 1,
+ "additionalProperties": false
+ },
+ "qosObjectives": {
+ "type": "object",
+ "properties": {
+ "gfbr": {"type": "number"},
+ "mfbr": {"type": "number"}
+ },
+ "additionalProperties": false
+ },
+ "resources": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "cellIdList": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["cellIdList"]
+ }
+ }
+ },
+ "minProperties": 1,
+ "additionalProperties": false,
+ "required": ["scope"]
+ }
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy_schema?id=nonexistent"
+
+ Result:
+ 404: ::
+
+ org.oransc.policyagent.exceptions.ServiceException: Could not find type: nonexistent
+
+/policy_schemas
+~~~~~~~~~~~~~~~
+
+GET
++++
+
+ Returns policy type schema definitions.
+
+ **URL path:**
+ /policy_schemas?ric=<name-of-ric>
+
+ **Parameters:**
+
+ ric: (*Optional*)
+ The name of the Near |nbh| RT |nbsp| RIC to get the definitions for.
+
+ **Responses:**
+
+ 200:
+ An array of policy schemas as JSON schemas.
+
+ 404:
+ Near |nbh| RT |nbsp| RIC is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy_schemas"
+
+ Result:
+ 200: ::
+
+ [{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "STD_PolicyModelUnconstrained_0.2.0",
+ "description": "Standard model of a policy with unconstrained scope id combinations",
+ "type": "object",
+ "properties": {
+ "scope": {
+ "type": "object",
+ .
+ .
+ .
+ "additionalProperties": false,
+ "required": ["scope"]
+ },
+ .
+ .
+ .
+ {
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Example_QoETarget_1.0.0",
+ "description": "Example QoE Target policy type",
+ "type": "object",
+ "properties": {
+ "scope": {
+ "type": "object",
+ .
+ .
+ .
+ "additionalProperties": false,
+ "required": ["scope"]
+ }]
+
+ Call:
+ curl -X GET "http://localhost:8081/policy_schemas?ric=nonexistent"
+
+ Result:
+ 404: ::
+
+ org.oransc.policyagent.exceptions.ServiceException: Could not find ric: nonexistent
+
+Policy
+------
+
+A policy is defined by its type schema.
+
+Once a service has created a policy, it is the service's responsibility to maintain its life cycle. Since policies are
+transient, they will not survive a restart of a Near |nbh| RT |nbsp| RIC. But this is handled by the Policy Agent. When
+a Near |nbh| RT |nbsp| RIC has been restarted, the Policy Agent will try to recreate the policies in the
+Near |nbh| RT |nbsp| RIC that are stored in its local repository. This means that the service always must delete any
+policy it has created. There are only two exceptions, see below:
+
+- The service has registered a "*Keep Alive Interval*", then its policies will be deleted if it fails to notify the
+ Policy Agent in due time.
+- The Policy Agent completely fails to synchronize with a Near |nbh| RT |nbsp| RIC.
+
+/policies
+~~~~~~~~~
+
+GET
++++
+
+ Query policies.
+
+ **URL path:**
+ /policies?ric=<name-of-ric>&service=<name-of-service>&type=<name-of-type>
+
+ **Parameters:**
+
+ ric: (*Optional*)
+ The name of the Near |nbh| RT |nbsp| RIC to get policies for.
+
+ service: (*Optional*)
+ The name of the service to get policies for.
+
+ type: (*Optional*)
+ The name of the policy type to get policies for.
+
+ **Responses:**
+
+ 200:
+ Array of JSON objects (PolicyInfo). ::
+
+ {
+ "id": "string", (Identity of the policy)
+ "json": "object", (The configuration of the policy)
+ "lastModified": "string", (Timestamp, last modification time)
+ "ric": "string", (Identity of the target Near |nbh| RT |nbsp| RIC)
+ "service": "string", (The name of the service owning the policy)
+ "type": "string" (Name of the policy type)
+ }
+
+ 404:
+ Near |nbh| RT |nbsp| RIC or policy type not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policies?ric=existing"
+
+ Result:
+ 200: ::
+
+ [
+ {
+ "id": "Policy 1",
+ "json": {
+ "scope": {
+ "ueId": "UE 1",
+ "groupId": "Group 1"
+ },
+ "qosObjectives": {
+ "gfbr": 1,
+ "mfbr": 2
+ },
+ "cellId": "Cell 1"
+ },
+ "lastModified": "Wed, 01 Apr 2020 07:45:45 GMT",
+ "ric": "existing",
+ "service": "Service 1",
+ "type": "STD_PolicyModelUnconstrained_0.2.0"
+ },
+ {
+ "id": "Policy 2",
+ "json": {
+ .
+ .
+ .
+ },
+ "lastModified": "Wed, 01 Apr 2020 07:45:45 GMT",
+ "ric": "existing",
+ "service": "Service 2",
+ "type": "Example_QoETarget_1.0.0"
+ }
+ ]
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policies?type=nonexistent"
+
+ Result:
+ 404: ::
+
+ Policy type not found
+
+/policy
+~~~~~~~
+
+GET
++++
+
+ Returns a policy configuration.
+
+ **URL path:**
+ /policy?instance=<name-of-policy>
+
+ **Parameters:**
+
+ instance: (*Required*)
+ The ID/name of the policy instance.
+
+ **Responses:**
+
+ 200:
+ JSON object containing policy information. ::
+
+ {
+ "id": "string", (ID/name of policy)
+ "json": "object", (JSON with policy data speified by the type)
+ "ownerServiceName": "string", (Name of the service that created the policy)
+ "ric": "string", (Name of the Near |nbh| RT |nbsp| RIC where the policy resides)
+ "type": "string", (Name of the policy type of the policy)
+ "lastModified" (Timestamp, last modification time)
+ }
+
+ 404:
+ Policy is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy?instance=Policy 1"
+
+ Result:
+ 200: ::
+
+ {
+ "id": "Policy 1",
+ "json", {
+ "scope": {
+ "ueId": "UE1 ",
+ "cellId": "Cell 1"
+ },
+ "qosObjectives": {
+ "gfbr": 319.5,
+ "mfbr": 782.75,
+ "priorityLevel": 268.5,
+ "pdb": 44.0
+ },
+ "qoeObjectives": {
+ "qoeScore": 329.0,
+ "initialBuffering": 27.75,
+ "reBuffFreq": 539.0,
+ "stallRatio": 343.0
+ },
+ "resources": []
+ },
+ "ownerServiceName": "Service 1",
+ "ric": "ric1",
+ "type": "STD_PolicyModelUnconstrained_0.2.0",
+ "lastModified": "Wed, 01 Apr 2020 07:45:45 GMT"
+ }
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy?instance=nonexistent"
+
+ Result:
+ 404: ::
+
+ Policy is not found
+
+PUT
++++
+
+ Create/Update a policy. **Note!** Calls to this method will also trigger "*Keep Alive*" for a service which has a
+ "*Keep Alive Interval*" registered.
+
+ **URL path:**
+ /policy?instance=<name-of-policy>&ric=<name-of-ric>&service=<name-of-service>&type=<name-of-policy-type>
+
+ **Parameters:**
+
+ instance: (*Required*)
+ The ID/name of the policy instance.
+
+ ric: (*Required*)
+ The name of the Near |nbh| RT |nbsp| RIC where the policy will be created.
+
+ service: (*Required*)
+ The name of the service creating the policy.
+
+ type: (*Optional*)
+ The name of the policy type.
+
+ **Body:** (*Required*)
+ A JSON object containing the data specified by the type.
+
+ **Responses:**
+
+ 200:
+ Policy updated.
+
+ 201:
+ Policy created.
+
+ 404:
+ Near |nbh| RT |nbsp| RIC or policy type is not found.
+
+ 423:
+ Near |nbh| RT |nbsp| RIC is locked.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X PUT "http://localhost:8081/policy?instance=Policy%201&ric=ric1&service=Service%201&type=STD_PolicyModelUnconstrained_0.2.0"
+ -H "Content-Type: application/json"
+ -d "{
+ \"scope\": {
+ \"ueId\": \"UE 1\",
+ \"cellId\": \"Cell 1\"
+ },
+ \"qosObjectives\": {
+ \"gfbr\": 319.5,
+ \"mfbr\": 782.75,
+ \"priorityLevel\": 268.5,
+ \"pdb\": 44.0
+ },
+ \"qoeObjectives\": {
+ \"qoeScore\": 329.0,
+ \"initialBuffering\": 27.75,
+ \"reBuffFreq\": 539.0,
+ \"stallRatio\": 343.0
+ },
+ \"resources\": []
+ }"
+
+ Result:
+ 200
+
+DELETE
+++++++
+
+ Deletes a policy. **Note!** Calls to this method will also trigger "*Keep Alive*" for a service which has a
+ "*Keep Alive Interval*" registered.
+
+ **URL path:**
+ /policy?instance=<name-of-policy>
+
+ **Parameters:**
+
+ instance: (*Required*)
+ The ID/name of the policy instance.
+
+ **Responses:**
+
+ 204:
+ Policy deleted.
+
+ 404:
+ Policy is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X DELETE "http://localhost:8081/policy?instance=Policy 1"
+
+ Result:
+ 204
+
+/policy_ids
+~~~~~~~~~~~
+
+GET
++++
+
+ Query policy type IDs.
+
+ **URL path:**
+ /policy_ids?ric=<name-of-ric>&service=<name-of-service>&type=<name-of-policy-type>
+
+ **Parameters:**
+
+ ric: (*Optional*)
+ The name of the Near |nbh| RT |nbsp| RIC to get policies for.
+
+ service: (*Optional*)
+ The name of the service to get policies for.
+
+ type: (*Optional*)
+ The name of the policy type to get policies for.
+
+ **Responses:**
+
+ 200:
+ Array of policy type names.
+
+ 404:
+ RIC or policy type not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy_ids"
+
+ Result:
+ 200: ::
+
+ [
+ "Policy 1",
+ "Policy 2",
+ "Policy 3"
+ ]
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/policy_ids?ric=nonexistent"
+
+ Result:
+ 404: ::
+
+ Ric not found
+
+/policy_status
+~~~~~~~~~~~~~~
+
+GET
++++
+
+ Returns the status of a policy.
+
+ **URL path:**
+ /policy_status?instance=<name-of-policy>
+
+ **Parameters:**
+
+ instance: (*Required*)
+ The ID/name of the policy.
+
+ **Responses:**
+
+ 200:
+ JSON object with policy status.
+
+ 404:
+ Policy not found.
+
+Near-RT RIC Repository
+======================
+
+The Policy Agent keeps an updated view of the Near |nbh| RT |nbsp| RICs that are available in the system. A service can
+find out which Near |nbh| RT |nbsp| RIC that manages a specific element in the network or which
+Near |nbh| RT |nbsp| RICs that support a specific policy type.
+
+Near-RT RIC
+-----------
+
+/ric
+~~~~
+
+GET
++++
+
+ Returns the name of a Near |nbh| RT |nbsp| RIC managing a specific Mananged Element.
+
+ **URL path:**
+ /ric?managedElementId=<id-of-managed-element>
+
+ **Parameters:**
+
+ managedElementId: (*Optional*)
+ The ID of the Managed Element.
+
+ **Responses:**
+
+ 200:
+ Name of the Near |nbh| RT |nbsp| RIC managing the Managed Element.
+
+ 404:
+ No Near |nbh| RT |nbsp| RIC manages the given Managed Element.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/ric?managedElementId=Node 1"
+
+ Result:
+ 200: ::
+
+ Ric 1
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/ric?managedElementId=notmanaged"
+
+ Result:
+ 404
+
+/rics
+~~~~~
+
+GET
++++
+
+ Query Near |nbh| RT |nbsp| RIC information.
+
+ **URL path:**
+ /rics?policyType=<name-of-policy-type>
+
+ **Parameters:**
+
+ policyType: (*Optional*)
+ The name of the policy type.
+
+ **Responses:**
+
+ 200:
+ Array of JSON objects containing Near |nbh| RT |nbsp| RIC information. ::
+
+ [
+ {
+ "managedElementIds": [
+ "string"
+ ],
+ "policyTypes": [
+ "string"
+ ],
+ "ricName": "string"
+ }
+ ]
+
+ 404:
+ Policy type is not found.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/rics?policyType=STD_PolicyModelUnconstrained_0.2.0"
+
+ Result:
+ 200: ::
+
+ [
+ {
+ "managedElementIds": [
+ "ME 1",
+ "ME 2"
+ ],
+ "policyTypes": [
+ "STD_PolicyModelUnconstrained_0.2.0",
+ "Example_QoETarget_1.0.0",
+ "ERIC_QoSNudging_0.2.0"
+ ],
+ "ricName": "Ric 1"
+ },
+ .
+ .
+ .
+ {
+ "managedElementIds": [
+ "ME 3"
+ ],
+ "policyTypes": [
+ "STD_PolicyModelUnconstrained_0.2.0"
+ ],
+ "ricName": "Ric X"
+ }
+ ]
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/rics?policyType=nonexistent"
+
+ Result:
+ 404: ::
+
+ Policy type not found
+
+Health Check
+============
+
+The status of the Policy Agent.
+
+Health Check
+------------
+
+/status
+~~~~~~~
+
+GET
++++
+
+ Returns the status of the Policy Agent.
+
+ **URL path:**
+ /status
+
+ **Parameters:**
+
+ None.
+
+ **Responses:**
+
+ 200:
+ Service is living.
+
+ **Examples:**
+
+ Call: ::
+
+ curl -X GET "http://localhost:8081/status"
+
+ Result:
+ 200
+
+****************
+A1 through DMaaP
+****************
+
+The Policy Agent also provides the possibility to use DMaap to handle policies according to the A1 specification. The
+Policy Agent polls the DMaaP Message Router regularly and processes any messages targeted to it. The response is then
+published back to the DMaaP Message Router with the result of the call.
+
+Send Message
+============
+
+The message to send is a JSON like the one below. The "*url*" is one of the URLs described under
+:ref:`policy-management`. The "*target*" must always be "*policy-agent*" for the message to be processed by the Policy
+Agent. The "*operation*" can be one of the following: "*GET | PUT | POST | DELETE*". ::
+
+ {
+ "type": "string",
+ "correlationId": "string",
+ "target": "string",
+ "timestamp": "timestamp",
+ "apiVersion": "string",
+ "originatorId": "string",
+ "requestId": "string",
+ "operation": "string",
+ "url": "string"
+ }
+
+Example
+-------
+
+To get all policy types for a specific Near |nbh| RT |nbsp| RIC the following message should be sent to DMaaP Message
+Router: ::
+
+ {
+ "type":"request",
+ "correlationId":"c09ac7d1-de62-0016-2000-e63701125557-201",
+ "target":"policy-agent",
+ "timestamp":"2019-05-14T11:44:51.36Z",
+ "apiVersion":"1.0",
+ "originatorId":"849e6c6b420",
+ "requestId":"23343221",
+ "operation":"GET",
+ "url":"/policy_schemas?ric=ric_ric-simulator_1"
+ }
+
+Receive Message
+===============
+
+The message the Policy Agent sends back to the DMaaP Message Router is a JSON like the one below. The "*requestId*"
+"*correlationId*", and "*originatorId*" are the same as in the message sent to DMaaP MR. ::
+
+ {
+ "requestId": "string",
+ "correlationId": "string",
+ "originatorId": "string",
+ "type": "string",
+ "message": "string",
+ "type": string",
+ "timestamp": "string",
+ "status": "string"
+ }
+
+Example
+-------
+
+The response containing all policy types for a specific Near |nbh| RT |nbsp| RIC sent to the DMaaP Message Router from
+the Policy Agent: ::
+
+ {
+ \"requestId\":\"23343221\",
+ \"correlationId\":\"c09ac7d1-de62-0016-2000-e63701125557-201\",
+ \"originatorId\":\"849e6c6b420\",
+ \"type\":\"response\",
+ \"message\":\"[
+ {
+ \\\"$schema\\\":\\\"http://json-schema.org/draft-07/schema#\\\",
+ \\\"description\\\":\\\"QoS policy type\\\",
+ \\\"title\\\":\\\"STD_QoSNudging_0.2.0\\\",
+ \\\"type\\\":\\\"object\\\",
+ \\\"properties\\\":{\\\"scope\\\":{\\\"additionalProperties\\\":true,
+ \\\"type\\\":\\\"object\\\",
+ \\\"properties\\\":{\\\"qosId\\\":{\\\"type\\\":\\\"string\\\"},
+ \\\"ueId\\\":{\\\"type\\\":\\\"string\\\"}},
+ \\\"required\\\":[\\\"ueId\\\",
+ \\\"qosId\\\"]},
+ \\\"statement\\\":{\\\"additionalProperties\\\":false,
+ \\\"type\\\":\\\"object\\\",
+ \\\"properties\\\":{\\\"priorityLevel\\\":{\\\"type\\\":\\\"number\\\"}},
+ \\\"required\\\":[\\\"priorityLevel\\\"]}}
+ }
+ ]\",
+ \"timestamp\":\"2019-05-14T11:44:51.36Z\",
+ \"status\":\"200 OK\"
+ }
\ No newline at end of file