summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorelinuxhenrik <henrik.b.andersson@est.tech>2020-11-16 09:31:07 +0100
committerelinuxhenrik <henrik.b.andersson@est.tech>2020-11-16 14:02:09 +0100
commit6b87e43900b61956ab23d965827fb1306f8db617 (patch)
tree71742927bdd08a1211a9fe17df78ecc85edbc65a /docs
parent6e095a089f0ef20094b19f74f2b7b44ec92ad3d9 (diff)
Add documentation
Change-Id: Ie27c53fcb38ae75b9771a42dc7dec39f4a1fd672 Issue-ID: CCSDK-2966 Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
Diffstat (limited to 'docs')
-rw-r--r--docs/.gitignore3
-rw-r--r--docs/_static/css/ribbon.css63
-rw-r--r--docs/_static/favicon.icobin0 -> 2102 bytes
-rw-r--r--docs/_static/logo_onap_2017.pngbin0 -> 12278 bytes
-rw-r--r--docs/architecture/architecture.rst33
-rw-r--r--docs/conf.py34
-rw-r--r--docs/conf.yaml7
-rw-r--r--docs/consumedapis/consumedapis.rst18
-rw-r--r--docs/guide/developer-guide.rst95
-rw-r--r--docs/humaninterfaces/humaninterfaces.rst11
-rw-r--r--docs/index.rst18
-rw-r--r--docs/media/o-ran-onap-integration.pngbin0 -> 218436 bytes
-rw-r--r--docs/media/oran_architecture.pngbin0 -> 23768 bytes
-rw-r--r--docs/media/swagger.pngbin0 -> 3590 bytes
-rw-r--r--docs/media/yaml_logo.pngbin0 -> 3477 bytes
-rw-r--r--docs/offeredapis/offeredapis.rst83
-rw-r--r--docs/offeredapis/swagger/a1-adapter-api.json378
-rw-r--r--docs/offeredapis/swagger/pms-api.json1259
-rw-r--r--docs/releasenotes/release-notes.rst66
-rw-r--r--docs/requirements-docs.txt17
-rw-r--r--docs/tox.ini22
21 files changed, 2107 insertions, 0 deletions
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 00000000..43ca5b67
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,3 @@
+/.tox
+/_build/*
+/__pycache__/*
diff --git a/docs/_static/css/ribbon.css b/docs/_static/css/ribbon.css
new file mode 100644
index 00000000..6008cb1a
--- /dev/null
+++ b/docs/_static/css/ribbon.css
@@ -0,0 +1,63 @@
+.ribbon {
+ z-index: 1000;
+ background-color: #a00;
+ overflow: hidden;
+ white-space: nowrap;
+ position: fixed;
+ top: 25px;
+ right: -50px;
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+ transform: rotate(45deg);
+ -webkit-box-shadow: 0 0 10px #888;
+ -moz-box-shadow: 0 0 10px #888;
+ box-shadow: 0 0 10px #888;
+
+}
+
+.ribbon a {
+ border: 1px solid #faa;
+ color: #fff;
+ display: block;
+ font: bold 81.25% 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ margin: 1px 0;
+ padding: 10px 50px;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 0 5px #444;
+ transition: 0.5s;
+}
+
+.ribbon a:hover {
+ background: #c11;
+ color: #fff;
+}
+
+
+/* override table width restrictions */
+@media screen and (min-width: 767px) {
+
+ .wy-table-responsive table td, .wy-table-responsive table th {
+ /* !important prevents the common CSS stylesheets from overriding
+ this as on RTD they are loaded after this stylesheet */
+ white-space: normal !important;
+ }
+
+ .wy-table-responsive {
+ overflow: visible !important;
+ }
+}
+
+@media screen and (max-width: 767px) {
+ .wy-table-responsive table td {
+ white-space: nowrap;
+ }
+}
+
+/* fix width of the screen */
+
+.wy-nav-content {
+ max-width: none;
+}
diff --git a/docs/_static/favicon.ico b/docs/_static/favicon.ico
new file mode 100644
index 00000000..cb712ebd
--- /dev/null
+++ b/docs/_static/favicon.ico
Binary files differ
diff --git a/docs/_static/logo_onap_2017.png b/docs/_static/logo_onap_2017.png
new file mode 100644
index 00000000..5d064f43
--- /dev/null
+++ b/docs/_static/logo_onap_2017.png
Binary files differ
diff --git a/docs/architecture/architecture.rst b/docs/architecture/architecture.rst
new file mode 100644
index 00000000..3997950b
--- /dev/null
+++ b/docs/architecture/architecture.rst
@@ -0,0 +1,33 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+.. Copyright 2020 Nordix Foundation
+.. _architecture:
+
+
+Architecture
+============
+
+************
+Introduction
+************
+
+
+The CCSDK ORAN components provides handling of the O-RAN A1 interface.
+
+
+*********************************************
+Global NBI architecture for Frankfurt release
+*********************************************
+
+Following illustration provides a global view about Non-Real-Time-RIC architecture,
+integration with other ONAP components and API resource/operation provided.
+
+.. image:: ../media/o-ran-onap-integration.png
+ :width: 800pt
+
+
+***************
+Developer Guide
+***************
+
+Technical information about the ORAN components (dependencies, configuration, running & testing) could be found in :ref:`developer_guide`.
+
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 00000000..29923a05
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,34 @@
+from docs_conf.conf import *
+
+branch = 'latest'
+master_doc = 'index'
+
+linkcheck_ignore = [
+ 'http://localhost',
+]
+
+extensions = ['sphinx_tabs.tabs', 'sphinxcontrib.redoc',]
+
+redoc = [
+ {
+ 'name': 'PMS API',
+ 'page': 'offeredapis/pms-api',
+ 'spec': './offeredapis/swagger/pms-api.json',
+ 'embed': True,
+ },
+ {
+ 'name': 'A1 ADAPTER API',
+ 'page': 'offeredapis/a1-adapter-api',
+ 'spec': './offeredapis/swagger/a1-adapter-api.json',
+ 'embed': True,
+ }
+ ]
+
+redoc_uri = 'https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js'
+
+intersphinx_mapping = {}
+
+html_last_updated_fmt = '%d-%b-%y %H:%M'
+
+def setup(app):
+ app.add_css_file("css/ribbon.css")
diff --git a/docs/conf.yaml b/docs/conf.yaml
new file mode 100644
index 00000000..ab592813
--- /dev/null
+++ b/docs/conf.yaml
@@ -0,0 +1,7 @@
+---
+project_cfg: onap
+project: onap
+
+# Change this to ReleaseBranchName to modify the header
+default-version: latest
+#
diff --git a/docs/consumedapis/consumedapis.rst b/docs/consumedapis/consumedapis.rst
new file mode 100644
index 00000000..bcf7267e
--- /dev/null
+++ b/docs/consumedapis/consumedapis.rst
@@ -0,0 +1,18 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+.. Copyright 2020 Nordix Foundation
+
+Consumed APIs
+=============
+
+
+Policy Management Service application is interacting with one ONAP API.
+
+*******
+CBS API
+*******
+
+This API is used to get the dynamic configuration of the service, such as available Near-RT RICs.
+
+::
+
+ CBS_GET_ALL
diff --git a/docs/guide/developer-guide.rst b/docs/guide/developer-guide.rst
new file mode 100644
index 00000000..f067a3fa
--- /dev/null
+++ b/docs/guide/developer-guide.rst
@@ -0,0 +1,95 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright (C) 2020 Nordix Foundation.
+
+.. _developer_guide:
+
+Developer Guide
+===============
+
+This document provides a quickstart for developers of the CCSDK ORAN parts.
+
+Source tree
++++++++++++
+
+This application provides CCSDK Policy Management Service and A1 Adapter as main functional resources.
+Each resource is implemented independently in a package corresponding to its name.
+
+A1 Policy Management Service
+++++++++++++++++++++++++++++
+
+The CCSDK Policy Management Service (PMS) is a Java 11 web application built over Spring Framework.
+Using Spring Boot dependencies, it runs as a standalone application.
+
+PMS provides a REST API for management of policices. It provides support for:
+
+ * Supervision of clients (R-APPs) to eliminate stray policies in case of failure
+ * Consistency monitoring of the SMO view of policies and the actual situation in the RICs
+ * Consistency monitoring of RIC capabilities (policy types)
+ * Policy configuration. This includes:
+
+ * One REST API towards all RICs in the network
+ * Query functions that can find all policies in a RIC, all policies owned by a service (R-APP), all policies of a type etc.
+ * Maps O1 resources (ManagedElement) as defined in O1 to the controlling RIC.
+
+The Policy Management Service can be accessed over the REST API. See :ref:`pms_api` for how to use the API.
+
+Dependencies
+------------
+
+This project uses various frameworks which are managed with Maven
+dependency management tool (see *pom.xml* file at root level) :
+
+- Swagger annotations
+- `Spring Framework <https://github.com/spring-projects/spring-boot>`_
+- `Springfox <https://github.com/springfox/springfox>`_ Automated JSON API documentation for API's built with Spring
+- `Immutable <https://immutables.github.io/>`_ to generate simple, safe and consistent value objects
+- `JSON in Java <https://github.com/stleary/JSON-java>`_ to parse JSON documents into Java objects
+- `Apache Commons Net <https://github.com/apache/commons-net>`_ for network utilities and protocol implementations
+- `DCAE SDK <https://github.com/onap/dcaegen2-services-sdk>`_ to get configuration from CBS
+- `Lombok <https://github.com/rzwitserloot/lombok>`_ to generate code, such as getters and setters
+- `Awaitility <https://github.com/awaitility/awaitility>`_ to test asynchronous functionality
+
+Configuration
+-------------
+
+There are two configuration files for PMS, *config/application_configuration.json* and *config/application.yaml*.
+The first one contains configuration of data needed by the application, such as which Near-RT RICs
+that are available. The second contains logging and security configurations.
+
+Configuration of certs
+----------------------
+
+The Policy Management Service uses the default keystore and truststore that are built into the container. The paths and
+passwords for these stores are located in a yaml file: ::
+
+ oran/a1-policy-management/config/application.yaml
+
+There is also Policy Management Service's own cert in the default truststore for mocking purposes and unit-testing
+(ApplicationTest.java).
+
+The default keystore, truststore, and application.yaml files can be overridden by mounting new files using the "volumes"
+field of docker-compose or docker run command.
+
+Assuming that the keystore, truststore, and application.yaml files are located in the same directory as docker-compose,
+the volumes field should have these entries: ::
+
+ `volumes:`
+ `- ./new_keystore.jks:/opt/app/policy-agent/etc/cert/keystore.jks:ro`
+
+ `- ./new_truststore.jks:/opt/app/policy-agent/etc/cert/truststore.jks:ro`
+
+ `- ./new_application.yaml:/opt/app/policy-agent/config/application.yaml:ro`
+
+The target paths in the container should not be modified.
+
+Example docker run command for mounting new files (assuming they are located in the current directory): ::
+
+ docker run -p 8081:8081 -p 8433:8433 --name=policy-agent-container --network=nonrtric-docker-net --volume "$PWD/new_keystore.jks:/opt/app/policy-agent/etc/cert/keystore.jks" --volume "$PWD/new_truststore.jks:/opt/app/policy-agent/etc/cert/truststore.jks" --volume "$PWD/new_application.yaml:/opt/app/policy-agent/config/application.yaml" o-ran-sc/nonrtric-policy-agent:2.1.0-SNAPSHOT
+
+A1 Adapter (Internal)
++++++++++++++++++++++
+
+The O-RAN A1 Adapter provides an internal REST CONF API for management of A1 policices, useful for test and verification.
+
+The A1 Adapter can be accessed over the REST CONF API. See :ref:`a1_adapter_api` for how to use the API.
diff --git a/docs/humaninterfaces/humaninterfaces.rst b/docs/humaninterfaces/humaninterfaces.rst
new file mode 100644
index 00000000..ab7d421f
--- /dev/null
+++ b/docs/humaninterfaces/humaninterfaces.rst
@@ -0,0 +1,11 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+.. Copyright 2020 Nordix Foundation
+
+
+Human Interfaces
+================
+
+The NON-RT RIC Control Panel in O-RAN-SC can be used to interact with the Policy Management Service.
+See `NON-RT RIC Control Panel repo <https://gerrit.o-ran-sc.org/r/admin/repos/portal/nonrtric-controlpanel>`_.
+
+Any "Rest Client" application may be used (Postman, ...) to interact with the Policy Management Service application.
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 00000000..613ff566
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,18 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2020 Nordix Foundation.
+.. _master_index:
+
+ccsdk/oran
+----------
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Contents:
+
+ ./architecture/architecture.rst
+ ./guide/developer-guide.rst
+ ./offeredapis/offeredapis.rst
+ ./consumedapis/consumedapis.rst
+ ./humaninterfaces/humaninterfaces.rst
+ ./releasenotes/release-notes.rst
diff --git a/docs/media/o-ran-onap-integration.png b/docs/media/o-ran-onap-integration.png
new file mode 100644
index 00000000..5c66ae62
--- /dev/null
+++ b/docs/media/o-ran-onap-integration.png
Binary files differ
diff --git a/docs/media/oran_architecture.png b/docs/media/oran_architecture.png
new file mode 100644
index 00000000..3f99e090
--- /dev/null
+++ b/docs/media/oran_architecture.png
Binary files differ
diff --git a/docs/media/swagger.png b/docs/media/swagger.png
new file mode 100644
index 00000000..f5a9e0c0
--- /dev/null
+++ b/docs/media/swagger.png
Binary files differ
diff --git a/docs/media/yaml_logo.png b/docs/media/yaml_logo.png
new file mode 100644
index 00000000..0492eb4b
--- /dev/null
+++ b/docs/media/yaml_logo.png
Binary files differ
diff --git a/docs/offeredapis/offeredapis.rst b/docs/offeredapis/offeredapis.rst
new file mode 100644
index 00000000..14fb881a
--- /dev/null
+++ b/docs/offeredapis/offeredapis.rst
@@ -0,0 +1,83 @@
+.. This work is licensed under a Creative Commons Attribution 4.0
+ International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2020 Nordix Foundation
+
+.. _offered_apis:
+
+
+Offered APIs
+============
+
+Introduction
+************
+
+The north bound REST API of the Policy Management Service provides convenient methods to handle policies.
+
+
+Global ORAN architecture
+************************
+
+Following illustration provides a global view about **ORAN** architecture,
+integration with other ONAP components and API resource/operation provided.
+
+.. image:: ../media/oran_architecture.png
+ :width: 500pt
+
+
+API Table
+*********
+
+.. |swagger-icon| image:: ../media/swagger.png
+ :width: 40px
+
+.. csv-table::
+ :header: "API name", "|swagger-icon|"
+ :widths: 10,5
+
+ "PMS API", ":download:`link <./swagger/pms-api.json>`"
+ "A1 ADAPTER API (Internal)", ":download:`link <./swagger/a1-adapter-api.json>`"
+
+
+.. _pms_api:
+
+PMS API
+.......
+`PMS API <./pms-api.html>`_
+
+.. _a1_adapter_api:
+
+A1 ADAPTER API
+..............
+`A1 ADAPTER API (Internal) <./a1-adapter-api.html>`_
+
+
+API Version
+***********
+
+APIs are described with a state version with "v" following the API Name,
+e.g.: ``v2/policy``.
+The schema associated with a REST API must have its version number aligned
+with that of the REST API.
+
+The version number has major, minor and revision numbers. E.g. v1.0.0
+The version number (without the revision number) is held in the URI.
+
+The major version number is incremented for an incompatible change.
+The minor version number is incremented for a compatible change.
+For minor modifications of the API, version numbering must not be updated,
+provided the following backward compatibility rules are respected:
+
+- New elements in a data type must be optional (``minOccurs=0``)
+- Changes in the cardinality of an attribute in a data type must be from
+ mandatory to optional or from lower to greater
+- New attributes defined in an element must be optional (absence of
+ ``use="required"``).
+- If new enumerated values are included, the former ones and its meaning must
+ be kept.
+- If new operations are added, the existing operations must be kept
+- New parameters added to existing operations must be optional and existing
+ parameters must be kept
+
+For major modifications of the API, not backward compatible and forcing client
+implementations to be changed, the version number must be updated.
diff --git a/docs/offeredapis/swagger/a1-adapter-api.json b/docs/offeredapis/swagger/a1-adapter-api.json
new file mode 100644
index 00000000..12951279
--- /dev/null
+++ b/docs/offeredapis/swagger/a1-adapter-api.json
@@ -0,0 +1,378 @@
+{
+ "apiVersion": "1.0.0",
+ "swagger": "2.0",
+ "basePath": "/",
+ "info": {
+ "x-audience": "external-partner",
+ "contact": {
+ "name": "Ericsson Software Technology",
+ "email": "nonrtric@est.tech"
+ },
+ "description": "The O-RAN A1 Adapter provides an internal REST CONF API for management of A1 policices, useful for test and verification. <b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html should be used!",
+ "title": "A1 Adapter",
+ "version": "1.1.0"
+ },
+ "paths": {
+ "/restconf/operations/A1-ADAPTER-API:putA1Policy": {"post": {
+ "summary": "Create or update a policy",
+ "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html PUT /policy method should be used!",
+ "nickname": "putA1Policy",
+ "produces": "application/json",
+ "responses": {
+ "200": {
+ "schema": {"$ref": "#/models/(putA1Policy)output"},
+ "description": "Policy created/updated",
+ "examples": {
+ "application/json": {
+ "A1-ADAPTER-API:body": {},
+ "A1-ADAPTER-API:http-status": 200
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "schema": {"$ref": "#/models/(putA1Policy)input"},
+ "in": "body",
+ "name": null,
+ "description": null,
+ "required": false
+ }
+ ]
+ }
+ },
+ "/operations/A1-ADAPTER-API:getA1Policy": {"post": {
+ "summary": "Get policy configuration/s",
+ "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html GET /policy method should be used!",
+ "nickname": "getA1Policy",
+ "produces": "application/json",
+ "responses": {
+ "200": {
+ "schema": {"$ref": "#/models/(getA1Policy)output"},
+ "description": "Policy found",
+ "examples": {
+ "application/json": {
+ "A1-ADAPTER-API:body": {
+ "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"
+ },
+ "A1-ADAPTER-API:http-status": 200
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "schema": {"$ref": "#/models/(getA1Policy)input"},
+ "in": "body",
+ "name": null,
+ "description": null,
+ "required": false
+ }
+ ]
+ }
+ },
+ "/restconf/operations/A1-ADAPTER-API:getA1PolicyStatus": {"post": {
+ "summary": "Get a policy status",
+ "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html GET /policy-status method should be used!",
+ "nickname": "getA1PolicyStatus",
+ "produces": "application/json",
+ "responses": {
+ "200": {
+ "schema": {"$ref": "#/models/(getA1PolicyStatus)output"},
+ "description": "Policy status",
+ "examples": {
+ "application/json": {
+ "A1-ADAPTER-API:body": {
+ "enforceStatus": "UNDEFINED"
+ },
+ "A1-ADAPTER-API:http-status": 200
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "schema": {"$ref": "#/models/(getA1PolicyStatus)input"},
+ "in": "body",
+ "name": null,
+ "description": null,
+ "required": false
+ }
+ ]
+ }
+ },
+ "/restconf/operations/A1-ADAPTER-API:getA1PolicyType": {"post": {
+ "summary": "Get a policy type schema definition",
+ "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html GET /policy-types method should be used!",
+ "nickname": "getA1PolicyType",
+ "produces": "application/json",
+ "responses": {
+ "200": {
+ "schema": {"$ref": "#/models/(getA1PolicyType)output"},
+ "description": "Policy schema",
+ "examples": {
+ "application/json": {
+ "A1-ADAPTER-API:body": {
+ "$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",
+ "properties": {
+ "ueId": {
+ "type": "string"
+ },
+ "sliceId": {
+ "type": "string"
+ },
+ "qosId": {
+ "type": "string"
+ },
+ "cellId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ueId",
+ "sliceId"
+ ]
+ },
+ "statement": {
+ "type": "object",
+ "properties": {
+ "qoeScore": {
+ "type": "number"
+ },
+ "initialBuffering": {
+ "type": "number"
+ },
+ "reBuffFreq": {
+ "type": "number"
+ },
+ "stallRatio": {
+ "type": "number"
+ }
+ },
+ "minProperties": 1,
+ "additionalProperties": false
+ }
+ }
+ },
+ "A1-ADAPTER-API:http-status": 200
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "schema": {"$ref": "#/models/(getA1PolicyType)input"},
+ "in": "body",
+ "name": null,
+ "description": null,
+ "required": false
+ }
+ ]
+ }
+ },
+ "/restconf/operations/A1-ADAPTER-API:deleteA1Policy": {"post": {
+ "summary": "Delete a policy",
+ "description": "<b>Note!</b> For production, the https://docs.onap.org/projects/onap-ccsdk-oran/en/latest/offeredapis/pms-api.html DELETE /policy method should be used!",
+ "nickname": "deleteA1Policy",
+ "produces": "application/json",
+ "responses": {
+ "200": {
+ "schema": {"$ref": "#/models/(deleteA1Policy)output"},
+ "description": "Policy deleted",
+ "examples": {
+ "application/json": {
+ "A1-ADAPTER-API:body": {},
+ "A1-ADAPTER-API:http-status": 200
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "schema": {"$ref": "#/models/(deleteA1Policy)input"},
+ "in": "body",
+ "name": null,
+ "description": null,
+ "required": false
+ }
+ ]
+ }
+ }
+ },
+ "models": {
+ "(putA1Policy)input": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:near-rt-ric-url": {
+ "required": false,
+ "type": "Some near-rt-ric-url",
+ "example": "http://nearRtRic-sim1:8085/a1-p/policytypes/11/policies/5000"
+ },
+ "A1-ADAPTER-API:body": {
+ "required": false,
+ "type": "Some body",
+ "example": {
+ "blocking_rate":20,
+ "enforce":true,
+ "trigger_threshold":10,
+ "window_length":10
+ }
+ }
+ },
+ "id": "(putA1Policy)input"
+ },
+ "(putA1Policy)output": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:body": {
+ "required": false,
+ "type": "Some body"
+ },
+ "A1-ADAPTER-API:http-status": {
+ "required": false,
+ "type": "-2147483648"
+ }
+ },
+ "id": "(putA1Policy)output"
+ },
+ "(getA1Policy)input": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:near-rt-ric-url": {
+ "required": false,
+ "type": "Some near-rt-ric-url",
+ "example": "http://localhost:8081/policy?id=Policy 1"
+ }
+ },
+ "id": "(getA1Policy)input"
+ },
+ "(getA1Policy)output": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:body": {
+ "required": false,
+ "type": "object" },
+ "A1-ADAPTER-API:http-status": {
+ "required": false,
+ "type": "-2147483648"
+ }
+ },
+ "id": "(getA1Policy)output"
+ },
+ "(getA1PolicyStatus)input": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:near-rt-ric-url": {
+ "required": false,
+ "type": "Some near-rt-ric-url",
+ "example": "http://ricsim_g2_1:8085/A1-P/v1/policies/5000/status"
+ }
+ },
+ "id": "(getA1PolicyStatus)input"
+ },
+ "(getA1PolicyStatus)output": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:body": {
+ "required": false,
+ "type": "Some body"
+ },
+ "A1-ADAPTER-API:http-status": {
+ "required": false,
+ "type": "-2147483648"
+ }
+ },
+ "id": "(getA1PolicyStatus)output"
+ },
+ "(getA1PolicyType)input": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:near-rt-ric-url": {
+ "required": false,
+ "type": "Some near-rt-ric-url",
+ "example": "http://nearRtRic-sim1:8085/a1-p/policytypes/11"
+ }
+ },
+ "id": "(getA1PolicyType)input"
+ },
+ "(getA1PolicyType)output": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:body": {
+ "required": false,
+ "type": "Some body"
+ },
+ "A1-ADAPTER-API:http-status": {
+ "required": false,
+ "type": "-2147483648"
+ }
+ },
+ "id": "(getA1PolicyType)output"
+ },
+ "(deleteA1Policy)input": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:near-rt-ric-url": {
+ "required": false,
+ "type": "Some near-rt-ric-url",
+ "example": "http://localhost:8282/restconf/operations/A1-ADAPTER-API:deleteA1Policy"
+ }
+ },
+ "id": "(deleteA1Policy)input"
+ },
+ "(deleteA1Policy)output": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "properties": {
+ "A1-ADAPTER-API:body": {
+ "required": false,
+ "type": "Some body"
+ },
+ "A1-ADAPTER-API:http-status": {
+ "required": false,
+ "type": "-2147483648"
+ }
+ },
+ "id": "(deleteA1Policy)output"
+ }
+ }
+} \ No newline at end of file
diff --git a/docs/offeredapis/swagger/pms-api.json b/docs/offeredapis/swagger/pms-api.json
new file mode 100644
index 00000000..1837e098
--- /dev/null
+++ b/docs/offeredapis/swagger/pms-api.json
@@ -0,0 +1,1259 @@
+{
+ "openapi": "3.0.1",
+ "info": {
+ "title": "A1 Policy management service",
+ "description": "The O-RAN Non-RT RIC PolicyAgent provides a REST API for management of policices. It provides support for: -Supervision of clients (R-APPs) to eliminate stray policies in case of failure -Consistency monitoring of the SMO view of policies and the actual situation in the RICs -Consistency monitoring of RIC capabilities (policy types) -Policy configuration. This includes: -One REST API towards all RICs in the network -Query functions that can find all policies in a RIC, all policies owned by a service (R-APP), all policies of a type etc. -Maps O1 resources (ManagedElement) as defined in O1 to the controlling RIC of A1 policices.",
+ "version": "1.0"
+ },
+ "servers": [
+ {
+ "url": "https://localhost:8433/"
+ },
+ {
+ "url": "http://localhost:8081/"
+ }
+ ],
+ "tags": [
+ {
+ "name": "A1 Policy Management",
+ "description": "Policy Controller"
+ },
+ {
+ "name": "Health check",
+ "description": "Status Controller"
+ },
+ {
+ "name": "RIC Repository",
+ "description": "Ric Repository Controller"
+ },
+ {
+ "name": "Service registry and supervision",
+ "description": "Service Controller"
+ }
+ ],
+ "paths": {
+ "/policies": {
+ "get": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Query policies",
+ "operationId": "getPoliciesUsingGET",
+ "parameters": [
+ {
+ "name": "ric",
+ "in": "query",
+ "description": "The name of the Near-RT RIC to get policies for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "ric1"
+ },
+ {
+ "name": "service",
+ "in": "query",
+ "description": "The name of the service to get policies for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "controlpanel"
+ },
+ {
+ "name": "type",
+ "in": "query",
+ "description": "The name of the policy type to get policies for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "1"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Policies",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PolicyInfo"
+ }
+ },
+ "examples": {
+ "OSC": {
+ "$ref": "#/components/examples/Policies-OSC"
+ },
+ "STD": {
+ "$ref": "#/components/examples/Policies-STD"
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "RIC or type not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "RIC not found"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/policy": {
+ "get": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Returns a policy configuration",
+ "operationId": "getPolicyUsingGET",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "query",
+ "description": "The identity of the policy instance.",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "e26d76e1-b43f-427e-a3c2-b7c4e05a6431"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Policy found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "object"
+ },
+ "examples": {
+ "OSC": {
+ "$ref": "#/components/examples/Policy-OSC"
+ },
+ "STD": {
+ "$ref": "#/components/examples/Policy-STD"
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Policy is not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Could not find policy: e26d76e1-b43f-427e-a3c2-b7c4e05a6431"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ },
+ "put": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Put a policy",
+ "operationId": "putPolicyUsingPUT",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "query",
+ "description": "The identity of the policy instance.",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "73428e58-1670-4972-8498-e7e8f1003631"
+ },
+ {
+ "name": "ric",
+ "in": "query",
+ "description": "The name of the Near-RT RIC where the policy will be created.",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "ric1"
+ },
+ {
+ "name": "service",
+ "in": "query",
+ "description": "The name of the service creating the policy.",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "Service1"
+ },
+ {
+ "name": "transient",
+ "in": "query",
+ "description": "If the policy is transient or not (boolean defaulted to false). A policy is transient if it will be forgotten when the service needs to reconnect to the Near-RT RIC.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "boolean",
+ "default": false
+ },
+ "example": false
+ },
+ {
+ "name": "type",
+ "in": "query",
+ "description": "The name of the policy type. The policy type is mandatory for OSC A1 version and should not be provided for STD A1 version.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "STD_PolicyModelUnconstrained_0.2.0"
+ }
+ ],
+ "requestBody": {
+ "description": "jsonBody",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "example": {
+ "scope": {
+ "qosId": "3",
+ "ueId": "1"
+ },
+ "statement": {
+ "priorityLevel": 1
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Policy updated"
+ },
+ "201": {
+ "description": "Policy created"
+ },
+ "404": {
+ "description": "RIC or policy type is not found"
+ },
+ "423": {
+ "description": "RIC is not operational",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Ric is not operational, RIC name:ric1, state:UNAVAILABLE"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Delete a policy",
+ "operationId": "deletePolicyUsingDELETE",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "query",
+ "description": "The identity of the policy instance.",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "73428e58-1670-4972-8498-e7e8f1003631"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "204": {
+ "description": "Policy deleted"
+ },
+ "404": {
+ "description": "Policy is not found"
+ },
+ "423": {
+ "description": "RIC is not operational",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Ric is not operational, RIC name:ric1,state:UNAVAILABLE"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/policy_ids": {
+ "get": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Query policies, only IDs returned",
+ "operationId": "getPolicyIdsUsingGET",
+ "parameters": [
+ {
+ "name": "ric",
+ "in": "query",
+ "description": "The name of the Near-RT RIC to get policies for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "ric1"
+ },
+ {
+ "name": "service",
+ "in": "query",
+ "description": "The name of the service to get policies for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "Service1"
+ },
+ {
+ "name": "type",
+ "in": "query",
+ "description": "The name of the policy type to get policies for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "1"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Policy ids",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "examples": {
+ "OSC": {
+ "value": [
+ "73428e58-1670-4972-8498-e7e8f1003631",
+ "73428e58-1670-4972-8498-e7e8f100363e"
+ ]
+ },
+ "STD": {
+ "value": [
+ "73428e58-1670-4972-8498-e7e8f1003632",
+ "73428e58-1670-4972-8498-e7e8f1003634"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "RIC or type not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "RIC not found"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/policy_schema": {
+ "get": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Returns one policy type schema definition. Applicable only for OSC Version.",
+ "operationId": "getPolicySchemaUsingGET",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "query",
+ "description": "The identity of the policy type to get the definition for.",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "11"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Policy schema",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "object"
+ },
+ "examples": {
+ "OSC": {
+ "value": {
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "description": "QoS policy type",
+ "title": "1",
+ "type": "object",
+ "properties": {
+ "scope": {
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "qosId": {
+ "type": "string"
+ },
+ "ueId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ueId",
+ "qosId"
+ ]
+ },
+ "statement": {
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "priorityLevel": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "priorityLevel"
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Type not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "org.oransc.policyagent.exceptions.ServiceException: Could not find type: 11"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/policy_schemas": {
+ "get": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Returns policy type schema definitions",
+ "operationId": "getPolicySchemasUsingGET",
+ "parameters": [
+ {
+ "name": "ric",
+ "in": "query",
+ "description": "The name of the Near-RT RIC to get the definitions for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "ric1"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Policy schemas",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "examples": {
+ "OSC": {
+ "value": [
+ {
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "description": "QoS policy type",
+ "title": "1",
+ "type": "object",
+ "properties": {
+ "scope": {
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "qosId": {
+ "type": "string"
+ },
+ "ueId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ueId",
+ "qosId"
+ ]
+ },
+ "statement": {
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "priorityLevel": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "priorityLevel"
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "RIC is not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "org.oransc.policyagent.exceptions.ServiceException: Could not find ric: ric1"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/policy_status": {
+ "get": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Returns a policy status",
+ "operationId": "getPolicyStatusUsingGET",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "query",
+ "description": "The identity of the policy.",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "73428e58-1670-4972-8498-e7e8f100363q"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Policy status",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "object"
+ },
+ "examples": {
+ "OSC": {
+ "value": {
+ "instance_status": "NOT IN EFFECT",
+ "has_been_deleted": "false",
+ "created_at": "07/20/2020, 17:15:39"
+ }
+ },
+ "STD": {
+ "value": {
+ "enforceStatus": "UNDEFINED"
+ }
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Policy is not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Could not find policy: 73428e58-1670-4972-8498-e7e8f100363q"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/policy_types": {
+ "get": {
+ "tags": [
+ "A1 Policy Management"
+ ],
+ "summary": "Query policy type names",
+ "operationId": "getPolicyTypesUsingGET",
+ "parameters": [
+ {
+ "name": "ric",
+ "in": "query",
+ "description": "The name of the Near-RT RIC to get types for.",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "ric11"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Policy type names",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "examples": {
+ "OSC": {
+ "value": [
+ "1"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "RIC is not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "org.oransc.policyagent.exceptions.ServiceException: Could not find ric: ric11"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/ric": {
+ "get": {
+ "tags": [
+ "RIC Repository"
+ ],
+ "summary": "Returns the name of a RIC managing one Mananged Element",
+ "operationId": "getRicUsingGET",
+ "parameters": [
+ {
+ "name": "managedElementId",
+ "in": "query",
+ "description": "The identity of the Managed Element",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "Node 1"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "RIC is found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "ric1"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "RIC is not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "No RIC found"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/rics": {
+ "get": {
+ "tags": [
+ "RIC Repository"
+ ],
+ "summary": "Query Near-RT RIC information",
+ "operationId": "getRicsUsingGET",
+ "parameters": [
+ {
+ "name": "policyType",
+ "in": "query",
+ "description": "The name of the policy type",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "STD_PolicyModelUnconstrained_0.2.0"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RicInfo"
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Policy type is not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Policy type not found"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/service": {
+ "put": {
+ "tags": [
+ "Service registry and supervision"
+ ],
+ "summary": "Register a service",
+ "operationId": "putServiceUsingPUT",
+ "requestBody": {
+ "description": "registrationInfo",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceRegistrationInfo"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Service updated",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string"
+ },
+ "example": "OK"
+ }
+ }
+ },
+ "201": {
+ "description": "Service created",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "OK"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The ServiceRegistrationInfo is not accepted",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Missing mandatory parameter 'serviceName'"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ },
+ "deprecated": false,
+ "x-codegen-request-body-name": "registrationInfo"
+ }
+ },
+ "/services": {
+ "get": {
+ "tags": [
+ "Service registry and supervision"
+ ],
+ "summary": "Returns service information",
+ "operationId": "getServicesUsingGET",
+ "parameters": [
+ {
+ "name": "name",
+ "in": "query",
+ "description": "The name of the service",
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "service1"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "array",
+ "example": [
+ {
+ "serviceName": "service1",
+ "keepAliveIntervalSeconds": 1000,
+ "timeSinceLastActivitySeconds": 7,
+ "callbackUrl": "http://localhost:8080"
+ }
+ ],
+ "items": {
+ "$ref": "#/components/schemas/ServiceStatus"
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Service is not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Service not found"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ },
+ "delete": {
+ "tags": [
+ "Service registry and supervision"
+ ],
+ "summary": "Delete a service",
+ "operationId": "deleteServiceUsingDELETE",
+ "parameters": [
+ {
+ "name": "name",
+ "in": "query",
+ "description": "The name of the service",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "service1"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "204": {
+ "description": "OK"
+ },
+ "404": {
+ "description": "Service not found",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Could not find service: service1"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/services/keepalive": {
+ "put": {
+ "tags": [
+ "Service registry and supervision"
+ ],
+ "summary": "Heartbeat from a serice",
+ "operationId": "keepAliveServiceUsingPUT",
+ "parameters": [
+ {
+ "name": "name",
+ "in": "query",
+ "description": "The name of the service",
+ "required": true,
+ "allowEmptyValue": false,
+ "schema": {
+ "type": "string"
+ },
+ "example": "service1"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Service supervision timer refreshed, OK",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "OK"
+ }
+ }
+ }
+ },
+ "201": {
+ "description": "Created"
+ },
+ "404": {
+ "description": "The service is not found, needs re-registration",
+ "content": {
+ "text/plain;charset=ISO-8859-1": {
+ "schema": {
+ "type": "string",
+ "example": "Could not find service: service1"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false
+ }
+ },
+ "/status": {
+ "get": {
+ "tags": [
+ "Health check"
+ ],
+ "summary": "Returns status and statistics of this service",
+ "operationId": "getStatusUsingGET",
+ "responses": {
+ "200": {
+ "description": "Service is living",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "example": "alive"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ },
+ "deprecated": false
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "PolicyInfo": {
+ "title": "PolicyInfo",
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "identity of the policy"
+ },
+ "json": {
+ "type": "object",
+ "properties": {},
+ "description": "the configuration of the policy"
+ },
+ "lastModified": {
+ "type": "string",
+ "description": "timestamp, last modification time"
+ },
+ "ric": {
+ "type": "string",
+ "description": "identity of the target Near-RT RIC"
+ },
+ "service": {
+ "type": "string",
+ "description": "the name of the service owning the policy"
+ },
+ "type": {
+ "type": "string",
+ "description": "name of the policy type"
+ }
+ }
+ },
+ "RicInfo": {
+ "title": "RicInfo",
+ "type": "object",
+ "properties": {
+ "managedElementIds": {
+ "type": "array",
+ "description": "O1 identities for managed entities",
+ "items": {
+ "type": "string"
+ }
+ },
+ "policyTypes": {
+ "type": "array",
+ "description": "supported policy types",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ricName": {
+ "type": "string",
+ "description": "identity of the ric"
+ },
+ "state": {
+ "type": "string",
+ "description": "state info"
+ }
+ },
+ "example": [
+ {
+ "ricName": "ric1",
+ "managedElementIds": [
+ "ME-1",
+ "ME-2"
+ ],
+ "policyTypes": [
+ "1"
+ ],
+ "state": "AVAILABLE"
+ },
+ {
+ "ricName": "ric3",
+ "managedElementIds": [
+ "ME-1",
+ "ME-2"
+ ],
+ "policyTypes": [
+ ""
+ ],
+ "state": "AVAILABLE"
+ },
+ {
+ "ricName": "ric2",
+ "managedElementIds": [
+ "ME-1",
+ "ME-2"
+ ],
+ "policyTypes": [],
+ "state": "AVAILABLE"
+ },
+ {
+ "ricName": "ric4",
+ "managedElementIds": [
+ "ME-1",
+ "ME-2"
+ ],
+ "policyTypes": [
+ ""
+ ],
+ "state": "AVAILABLE"
+ }
+ ]
+ },
+ "ServiceRegistrationInfo": {
+ "title": "ServiceRegistrationInfo",
+ "required": [
+ "serviceName"
+ ],
+ "type": "object",
+ "properties": {
+ "callbackUrl": {
+ "type": "string",
+ "description": "callback for notifying of RIC synchronization"
+ },
+ "keepAliveIntervalSeconds": {
+ "type": "integer",
+ "description": "keep alive interval for the service. This is a heartbeat supervision of the service, which in regular intevals must invoke a 'keepAlive' REST call. When a service does not invoke this call within the given time, it is considered unavailble. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means no timeout supervision.",
+ "format": "int64"
+ },
+ "serviceName": {
+ "type": "string",
+ "description": "identity of the service"
+ }
+ },
+ "example": {
+ "callbackUrl": "http://localhost:9080",
+ "keepAliveIntervalSeconds": 1000,
+ "serviceName": "service1"
+ }
+ },
+ "ServiceStatus": {
+ "title": "ServiceStatus",
+ "type": "object",
+ "properties": {
+ "callbackUrl": {
+ "type": "string",
+ "description": "callback for notifying of RIC synchronization"
+ },
+ "keepAliveIntervalSeconds": {
+ "type": "integer",
+ "description": "policy keep alive timeout",
+ "format": "int64"
+ },
+ "serviceName": {
+ "type": "string",
+ "description": "identity of the service"
+ },
+ "timeSinceLastActivitySeconds": {
+ "type": "integer",
+ "description": "time since last invocation by the service",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "examples": {
+ "Policies-STD": {
+ "value": [
+ {
+ "id": "a986eb38-aac3-4897-bdf5-0333ea2bf730",
+ "type": "",
+ "ric": "ric3",
+ "json": {
+ "scope": {
+ "ueId": "ue1",
+ "groupId": "group1",
+ "sliceId": "slice1",
+ "qosId": "qos1",
+ "cellId": "cell1"
+ },
+ "statement": {
+ "priorityLevel": 5
+ }
+ },
+ "service": "controlpanel",
+ "lastModified": "2020-07-22T12:21:48.157854Z"
+ }
+ ]
+ },
+ "Policies-OSC": {
+ "value": [
+ {
+ "id": "73428e58-1670-4972-8498-e7e8f1003631",
+ "type": "1",
+ "ric": "ric1",
+ "json": {
+ "scope": {
+ "qosId": "36",
+ "ueId": "1"
+ },
+ "statement": {
+ "priorityLevel": 1
+ }
+ },
+ "service": "c",
+ "lastModified": "2020-07-20T17:16:18.244383Z"
+ },
+ {
+ "id": "73428e58-1670-4972-8498-e7e8f100363e",
+ "type": "1",
+ "ric": "ric1",
+ "json": {
+ "scope": {
+ "qosId": "34",
+ "ueId": "1"
+ },
+ "statement": {
+ "priorityLevel": 1
+ }
+ },
+ "service": "controlpanel",
+ "lastModified": "2020-07-20T17:15:39.320469Z"
+ }
+ ]
+ },
+ "Policy-STD": {
+ "value": {
+ "scope": {
+ "ueId": "ue1",
+ "groupId": "group1",
+ "sliceId": "slice1",
+ "qosId": "qos1",
+ "cellId": "cell1"
+ },
+ "statement": {
+ "priorityLevel": 5
+ }
+ }
+ },
+ "Policy-OSC": {
+ "value": {
+ "scope": {
+ "qosId": "36",
+ "ueId": "1"
+ },
+ "statement": {
+ "priorityLevel": 1
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/docs/releasenotes/release-notes.rst b/docs/releasenotes/release-notes.rst
new file mode 100644
index 00000000..c46e7ad6
--- /dev/null
+++ b/docs/releasenotes/release-notes.rst
@@ -0,0 +1,66 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright (C) 2020 Nordix Foundation.
+
+=============
+Release-Notes
+=============
+
+
+This document provides the release notes for the release of the different parts of the ORAN project.
+
+.. contents::
+ :depth: 3
+ :local:
+
+
+Version history Policy Management Service
+=========================================
+
++------------+----------+------------+----------------+
+| **Date** | **Ver.** | **Author** | **Comment** |
+| | | | |
++------------+----------+------------+----------------+
+| 2020-09-10 | 1.0.0 | Dan Timony | First version |
+| | | | Guilin Release |
++------------+----------+------------+----------------+
+
+
+Summary
+-------
+First version.
+
+
+Version history A1 Adapter
+==========================
+
++------------+----------+------------+----------------+
+| **Date** | **Ver.** | **Author** | **Comment** |
+| | | | |
++------------+----------+------------+----------------+
+| 2019-09-10 | 1.0.0 | Dan Timony | First version |
+| | | | Guilin Release |
++------------+----------+------------+----------------+
+
+
+Release Data
+============
+
+Guilin
+------
++-----------------------------+-----------------------------------------------------+
+| **Project** | CCSDK ORAN |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Repo/commit-ID** | ccsdk-oran/ec3829493c0b71c5e5908a430edd1e493504178e |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release designation** | Guilin |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Release date** | 2020-09-10 |
+| | |
++-----------------------------+-----------------------------------------------------+
+| **Purpose of the delivery** | Introducing ORAN |
+| | |
++-----------------------------+-----------------------------------------------------+
diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt
new file mode 100644
index 00000000..aeda4ee2
--- /dev/null
+++ b/docs/requirements-docs.txt
@@ -0,0 +1,17 @@
+tox
+Sphinx>=2,<4
+doc8
+docutils
+setuptools
+six
+sphinx-tabs
+sphinx_rtd_theme>=0.4.3
+sphinxcontrib-blockdiag
+sphinxcontrib-needs>=0.2.3
+sphinxcontrib-nwdiag
+sphinxcontrib-seqdiag
+sphinxcontrib-swaggerdoc
+sphinxcontrib-plantuml
+sphinx_bootstrap_theme
+sphinxcontrib-redoc
+lfdocs-conf \ No newline at end of file
diff --git a/docs/tox.ini b/docs/tox.ini
new file mode 100644
index 00000000..edac8c35
--- /dev/null
+++ b/docs/tox.ini
@@ -0,0 +1,22 @@
+[tox]
+minversion = 1.6
+envlist = docs,
+skipsdist = true
+
+[testenv:docs]
+basepython = python3
+deps = -r{toxinidir}/requirements-docs.txt
+commands =
+ sphinx-build -b html -n -d {envtmpdir}/doctrees ./ {toxinidir}/_build/html
+ echo "Generated docs available in {toxinidir}/_build/html"
+whitelist_externals =
+ echo
+ git
+ sh
+
+[testenv:docs-linkcheck]
+basepython = python3
+#deps = -r{toxinidir}/requirements-docs.txt
+commands = echo "Link Checking not enforced"
+#commands = sphinx-build -b linkcheck -d {envtmpdir}/doctrees ./ {toxinidir}/_build/linkcheck
+whitelist_externals = echo