From 93f015a0f3677aedb631d93d03f613140ba2fb60 Mon Sep 17 00:00:00 2001 From: elinuxhenrik <henrik.b.andersson@est.tech> Date: Wed, 8 Apr 2020 11:23:55 +0200 Subject: [PATCH] Add first version of documentation Change-Id: I6333e54943e7a7a4a1fe2a36e08e6699fa5b7faf Issue-ID: NONRTRIC-191 Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech> --- .gitignore | 7 + .readthedocs.yaml | 20 + docs/_static/logo.png | Bin 0 -> 43935 bytes docs/conf.py | 7 + docs/conf.yaml | 3 + docs/favicon.ico | Bin 0 -> 15086 bytes docs/index.rst | 24 + docs/overview.rst | 19 + docs/requirements-docs.txt | 5 + docs/simulator-api.rst | 920 +++++++++++++++++++++++++++++++++++++ tox.ini | 43 ++ 11 files changed, 1048 insertions(+) create mode 100644 .readthedocs.yaml create mode 100644 docs/_static/logo.png create mode 100644 docs/conf.py create mode 100644 docs/conf.yaml create mode 100644 docs/favicon.ico create mode 100644 docs/index.rst create mode 100644 docs/overview.rst create mode 100644 docs/requirements-docs.txt create mode 100644 docs/simulator-api.rst create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index 3a4edf6..fdb56b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,8 @@ +# Documentation +.idea/ +.tox +docs/_build/ +.DS_STORE + +# IDE .project diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..3797dc8 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,20 @@ +--- +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details +# Required +version: 2 + +formats: + - htmlzip + +build: + image: latest + +python: + version: 3.7 + install: + - requirements: docs/requirements-docs.txt + +sphinx: + configuration: docs/conf.py diff --git a/docs/_static/logo.png b/docs/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b6ce56468d87a3d9463ee75297b3895fc9a414 GIT binary patch literal 43935 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 Yl9Jp+mP3Z{H?N<9jEZ!nq>2Ck0Evj6zW@LL literal 0 HcmV?d00001 diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..9bde80f --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,7 @@ +from docs_conf import * + +linkcheck_ignore = [ + 'http://localhost.*', + 'http://127.0.0.1.*', + 'https://gerrit.o-ran-sc.org.*' +] diff --git a/docs/conf.yaml b/docs/conf.yaml new file mode 100644 index 0000000..6576ed2 --- /dev/null +++ b/docs/conf.yaml @@ -0,0 +1,3 @@ +--- +project_cfg: oran +project: sim-a1-interface diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..00b0fd0ef0b4e78fbb8cdb413ce84561dfeb404f GIT binary patch literal 15086 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 XY+}&}KC=mD;X?Iq*l*cA?B4$ePY*3q literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..14fca47 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,24 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. SPDX-License-Identifier: CC-BY-4.0 +.. Copyright (C) 2020 Nordix + +.. |nbsp| unicode:: 0xA0 + :trim: + +.. |nbh| unicode:: 0x2011 + :trim: + +.. _a1-interface-simulator: + +====================== +A1 Interface Simulator +====================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + ./overview.rst + ./simulator-api.rst + +* :ref:`search` diff --git a/docs/overview.rst b/docs/overview.rst new file mode 100644 index 0000000..196132f --- /dev/null +++ b/docs/overview.rst @@ -0,0 +1,19 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. SPDX-License-Identifier: CC-BY-4.0 +.. Copyright (C) 2020 Nordix + +.. |nbsp| unicode:: 0xA0 + :trim: + +.. |nbh| unicode:: 0x2011 + :trim: + + +A1 Simulator Overview +===================== + +The A1 Simulator terminates the A1 interface and provides a way of testing services without the need for any real +Near |nbh| RT |nbsp| RICs. + +Apart from providing the A1 API, the simulator also provides an administrative API to manage policy types and manipulate +the simulator, see ":ref:`simulator-api`". \ No newline at end of file diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt new file mode 100644 index 0000000..09a0c1c --- /dev/null +++ b/docs/requirements-docs.txt @@ -0,0 +1,5 @@ +sphinx +sphinx-rtd-theme +sphinxcontrib-httpdomain +recommonmark +lfdocs-conf diff --git a/docs/simulator-api.rst b/docs/simulator-api.rst new file mode 100644 index 0000000..bb23da3 --- /dev/null +++ b/docs/simulator-api.rst @@ -0,0 +1,920 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. SPDX-License-Identifier: CC-BY-4.0 +.. Copyright (C) 2020 Nordix + +.. _simulator-api: + +============= +Simulator API +============= + +This document describes the API used to manage policy types and manipulate the simulator. + +The simulator supports different versions of the A1 interface. Some functions are common for all version, and some are +specific for a certain version. + +.. contents:: Operations + :depth: 4 + :local: + +Common Functions +================ + +Health Check +------------ + +The status of the simulator. + +/ +~~ + +GET ++++ + + Returns the status of the simulator. + + **URL path:** + / + + **Parameters:** + + None. + + **Responses:** + + 200: + Simulator is living. + + **Examples:** + + Call: :: + + curl -X GET "http://localhost:8085/" + + Result: + 200 + Simulator is living (OSC_2.1.0 responds OK) + +Supported Interfaces +-------------------- + +The simulator can support different versions of the A1 interface. With this API the supported versions can be listed. + +/container_interfaces +~~~~~~~~~~~~~~~~~~~~~ + +GET ++++ + + Returns the status of the simulator. (Not available for A1 Standard 1.1.3) + + **URL path:** + /container_interfaces + + **Parameters:** + + None. + + **Responses:** + + 200: + List of supported interfaces. + + **Examples:** + + Call: :: + + curl -X GET "http://localhost:8085/container_interfaces" + + Result: + 200 + 1.1.x-alpha.2 OSC_2.1.0 STD_1.1.3 + +Counters +-------- + +The simulator keeps counts of different things that can be accessed. + +/counter +~~~~~~~~ + +GET ++++ + + Get a counter. Counter-name can be one of the following: 'num_instances', 'num_types' or 'interface'. + + **URL path:** + /counter/{counter-name} + + **Parameters:** + + None. + + **Responses:** + + 200: + The counter value for the given counter. + + **Examples:** + + Call: :: + + curl -X GET "http://localhost:8085/counter/num_instances" + + Result: + 200 + 10 + +Version Specific Functions +========================== + +The methods available to control the simulator depends on the version of the A1 API the simulator is simulating. + +OSC_2.1.0 +--------- + +The available functions for the OSC_2.1.0 version of A1. + +/deleteinstances +~~~~~~~~~~~~~~~~ + +POST +++++ + + Delete all policy instances. + + **URL path:** + /deleteinstances + + **Parameters:** + + None. + + **Responses:** + + 200: + All policy instances deleted. + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/deleteinstances" + + Result: + 200 + All policy instances deleted. + +/deleteall +~~~~~~~~~~~~~~~~ + +POST +++++ + + Full reset. + + **URL path:** + /deleteall + + **Parameters:** + + None. + + **Responses:** + + 200: + All policy instances and types deleted. + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/deleteall" + + Result: + 200 + All policy instances and types deleted. + +/policytype +~~~~~~~~~~~ + +PUT ++++ + + Create a policy type. + + **URL path:** + /policytype?id=<policy-type-id> + + **Parameters:** + + id: (*Required*) + The ID of the policy type. + + **Body:** (*Required*) + A JSON object containing the schema for the type. + + **Responses:** + + 200: + Policy type <policy-type-id> is OK. + + 201: + Policy type <policy-type-id> is OK. + + **Examples:** + + Call: :: + + curl -X PUT "http://localhost:8085/policytype?id=Policy%201&ric=ric1&service=Service%201&type=STD_PolicyModelUnconstrained_0.2.0" + -H "Content-Type: application/json" + -d " + { + "$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"}, + "sliceId": {"type": "string"}, + "qosId": {"type": "string"}, + "cellId": {"type": "string"} + }, + "minProperties": 1, + "additionalProperties": false + }, + "qosObjectives": { + "type": "object", + "properties": { + "gfbr": {"type": "number"}, + "mfbr": {"type": "number"}, + "priorityLevel": {"type": "number"}, + "pdb": {"type": "number"} + }, + "additionalProperties": false + }, + "qoeObjectives": { + "type": "object", + "properties": { + "qoeScore": {"type": "number"}, + "initialBuffering": {"type": "number"}, + "reBuffFreq": {"type": "number"}, + "stallRatio": {"type": "number"} + }, + "additionalProperties": false + }, + "resources": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cellIdList": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preference": { + "type": "string", + "enum": [ + "SHALL", + "PREFER", + "AVOID", + "FORBID" + ] + }, + "primary": {"type": "boolean"} + }, + "additionalProperties": false, + "required": ["cellIdList", "preference"] + } + } + }, + "minProperties": 2, + "additionalProperties": false, + "required": ["scope"] + } + " + + Result: + 201 + Policy type STD_PolicyModelUnconstrained_0.2.0 is OK + +DELETE +++++++ + + Delete a policy type. + + **URL path:** + /policytype?id=<policy-type-id> + + **Parameters:** + + id: (*Required*) + The ID of the policy type. + + **Responses:** + + 204: + Policy type <policy-type-id> is OK. + + **Examples:** + + Call: :: + + curl -X DELETE "http://localhost:8085/policytype?id=Policy%201&ric=ric1&service=Service%201&type=STD_PolicyModelUnconstrained_0.2.0" + + Result: + 204 + Policy type STD_PolicyModelUnconstrained_0.2.0 is OK + +/policytypes +~~~~~~~~~~~~ + +GET ++++ + + Get a list of policy types. + + **URL path:** + /policytypes + + **Parameters:** + + None. + + **Responses:** + + 200: + A list of policy types. + + **Examples:** + + Call: :: + + curl -X GET "http://localhost:8085/policytypes" + + Result: + 200 + STD_PolicyModelUnconstrained_0.2.0 + +/forceresponse +~~~~~~~~~~~~~~ + +POST +++++ + + Force a specific response code for an A1 operation. + + **URL path:** + /forceresponse?responsecode=<http-response-code> + + **Parameters:** + + responsecode: (*Required*) + The HTTP response code to return. + + **Responses:** + + 200: + Force response code: <expected code> set for one single A1 response + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/forceresponse?responsecode=400" + + Result: + 200 + Force response code: 400 set for one single A1 response + +/forcedelay +~~~~~~~~~~~ + +POST +++++ + + Force delayed response of all A1 operations. + + **URL path:** + /forcedelay?delay=<delay-time-seconds> + + **Parameters:** + + delay: (*Required*) + The time in seconds to delay all responses. + + **Responses:** + + 200: + Force delay: <expected delay> sec set for all A1 responses + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/forcedelay?delay=2" + + Result: + 200 + Force delay: 2 sec set for all A1 responses + +/status +~~~~~~~ + +PUT ++++ + + Set status and optional reason, delete and time stamp. + + **URL path:** + /status?policyid=<policyid>&status=<status>&deleted=<value>&created_at=<time-stamp> + + **Parameters:** + + policyid: (*Required*) + The ID of a policy. + + status: (*Required*) + The status of a policy. + + deleted: (*Optional*) + True or false for real values, but accepts anything for error testing. + + created_at: (*Optional*) + Time stamp for the status. + + **Responses:** + + 200: + Status set to <status> for policy <policy-id> + + **Examples:** + + Call: :: + + curl -X PUT "http://localhost:8085/policyid=Policy1&status?status=Accepted + + Result: + 200 + Status set to Accepted for policy Policy1. + +A1 Standard 1.1.3 +----------------- + +The available functions for the A1 Standard 1.1.3 version of A1. + +/deleteinstances +~~~~~~~~~~~~~~~~ + +POST +++++ + + Delete all policy instances. + + **URL path:** + /deleteinstances + + **Parameters:** + + None. + + **Responses:** + + 200: + All policy instances deleted. + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/deleteinstances" + + Result: + 200 + All policy instances deleted. + +/deleteall +~~~~~~~~~~ + +POST +++++ + + Full reset. + + **URL path:** + /deleteinstances + + **Parameters:** + + None. + + **Responses:** + + 200: + All policy instances deleted. + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/deleteall" + + Result: + 200 + All policy instances deleted. + +/forceresponse +~~~~~~~~~~~~~~ + +POST +++++ + + Force a specific response code for an A1 operation. + + **URL path:** + /forceresponse?responsecode=<http-response-code> + + **Parameters:** + + responsecode: (*Required*) + The HTTP response code to return. + + **Responses:** + + 200: + Force response code: <expected code> set for one single A1 response + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/forceresponse?responsecode=400" + + Result: + 200 + Force response code: 400 set for one single A1 response + +/forcedelay +~~~~~~~~~~~ + +POST +++++ + + Force delayed response of all A1 operations. + + **URL path:** + /forcedelay?delay=<delay-time-seconds> + + **Parameters:** + + delay: (*Required*) + The time in seconds to delay all responses. + + **Responses:** + + 200: + Force delay: <expected delay> sec set for all A1 responses + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/forcedelay?delay=2" + + Result: + 200 + Force delay: 2 sec set for all A1 responses + +/status +~~~~~~~ + +PUT ++++ + + Set status and optional reason, delete and time stamp. + + **URL path:** + /status?policyid=<policyid>&status=<status>&reason=<reason> + + **Parameters:** + + policyid: (*Required*) + The ID of a policy. + + status: (*Required*) + The status of a policy. + + reason: (*Optional*) + The reason for the status. + + **Responses:** + + 200: + Status set to <status> for policy <policy-id> + + **Examples:** + + Call: :: + + curl -X PUT "http://localhost:8085/status?policyid=Policy1&status=Accepted + + Result: + 200 + Status set to Accepted for policy Policy1 + +/sendstatus +~~~~~~~~~~~ + +POST +++++ + + Send status for policy. + + **URL path:** + /sendstatus?policyid=<policy-id> + + **Parameters:** + + policyid: (*Required*) + The ID of the policy to send status for. + + **Responses:** + + 200: + Is a JSON with the response of the actual post request to the callback server, whatever that is. + + **Examples:** + + Call: :: + + curl -X POST "http://localhost:8085/sendstatus?policyid=Policy2" + + Result: + 200 + +1.1.x-alpha.2 +------------- + +The available functions for the 1.1.x-alpha.2. + +/deleteinstances +~~~~~~~~~~~~~~~~ + +DELETE +++++++ + + Delete all policy instances. + + **URL path:** + /deleteinstances + + **Parameters:** + + None. + + **Responses:** + + 200: + All policy instances deleted. + + **Examples:** + + Call: :: + + curl -X DELETE "http://localhost:8085/deleteinstances" + + Result: + 200 + All policy instances deleted. + +/deletetypes +~~~~~~~~~~~~ + +DELETE +++++++ + + Delete all policy types. + + **URL path:** + /deletetypes + + **Parameters:** + + None. + + **Responses:** + + 200: + All policy types deleted. + + **Examples:** + + Call: :: + + curl -X DELETE "http://localhost:8085/deletetypes" + + Result: + 200 + All policy types deleted. + +/policytypes +~~~~~~~~~~~~ + +PUT ++++ + + Create or update a policy type. + + **URL path:** + /policytypes/{policy-type-id} + + **Parameters:** + + None. + + **Body:** (*Required*) + A JSON object containing the schema for the type. + + **Responses:** + + 200: + The policy type was either created or updated for policy type id: <policy-type-id> + + **Examples:** + + Call: :: + + curl -X PUT "http://localhost:8085/policytype/Policy%201&ric=ric1&service=Service%201&type=STD_PolicyModelUnconstrained_0.2.0" + -H "Content-Type: application/json" + -d " + { + "$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"}, + "sliceId": {"type": "string"}, + "qosId": {"type": "string"}, + "cellId": {"type": "string"} + }, + "minProperties": 1, + "additionalProperties": false + }, + "qosObjectives": { + "type": "object", + "properties": { + "gfbr": {"type": "number"}, + "mfbr": {"type": "number"}, + "priorityLevel": {"type": "number"}, + "pdb": {"type": "number"} + }, + "additionalProperties": false + }, + "qoeObjectives": { + "type": "object", + "properties": { + "qoeScore": {"type": "number"}, + "initialBuffering": {"type": "number"}, + "reBuffFreq": {"type": "number"}, + "stallRatio": {"type": "number"} + }, + "additionalProperties": false + }, + "resources": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cellIdList": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preference": { + "type": "string", + "enum": [ + "SHALL", + "PREFER", + "AVOID", + "FORBID" + ] + }, + "primary": {"type": "boolean"} + }, + "additionalProperties": false, + "required": ["cellIdList", "preference"] + } + } + }, + "minProperties": 2, + "additionalProperties": false, + "required": ["scope"] + } + " + + Result: + 200 + The policy type was either created or updated for policy type id: STD_PolicyModelUnconstrained_0.2.0 + +DELETE +++++++ + + Delete a policy type. + + **URL path:** + /policytypes/{policy-type-id} + + **Parameters:** + + None. + + **Responses:** + + 200: + policy type successfully deleted for policy type id: <policy-type-id> + + **Examples:** + + Call: :: + + curl -X DELETE "http://localhost:8085/policytype?id=Policy%201&ric=ric1&service=Service%201&type=STD_PolicyModelUnconstrained_0.2.0" + + Result: + 200 + policy type successfully deleted for policy type id: STD_PolicyModelUnconstrained_0.2.0 + +/{policyId}/{enforceStatus} +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +PUT ++++ + + Set a status to a policy instance with an enforceStatus parameter only. + + **URL path:** + /{policyId}/{enforceStatus} + + **Parameters:** + + None. + + **Responses:** + + 200: + Status updated for policy: <policyId> + + **Examples:** + + Call: :: + + curl -X PUT "http://localhost:8085/Policy1/ENFORCED + + Result: + 200 + Status updated for policy: Policy1 + +/{policyId}/{enforceStatus}/{enforceReason} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +PUT +++++ + + Send a status to a policy instance with both enforceStatus and enforceReason. + + **URL path:** + /{policyId}/{enforceStatus}/{enforceReason} + + **Parameters:** + + None. + + **Responses:** + + 200: + Status updated for policy: <policyId> + + **Examples:** + + Call: :: + + curl -X PUT "http://localhost:8085/Policy1/NOT_ENFORCED/100" + + Result: + 200 + Status updated for policy: Policy1 diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..26cfed7 --- /dev/null +++ b/tox.ini @@ -0,0 +1,43 @@ +# ================================================================================== +# Copyright (c) 2020 Nordix +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== +[tox] +envlist = docs,docs-linkcheck +minversion = 2.0 +skipsdist = true + +# doc jobs +[testenv:docs] +whitelist_externals = echo +basepython = python3 +deps = + sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf +commands = + sphinx-build -W -b html -n -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/html + echo "Generated docs available in {toxinidir}/docs/_build/html" + +[testenv:docs-linkcheck] +skipsdist = true +basepython = python3 +deps = sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf +commands = sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/linkcheck -- GitLab