From 8dde0cc7824e32f1a829b1528fa0e61a5707098f Mon Sep 17 00:00:00 2001 From: Emmett Cox Date: Mon, 17 Sep 2018 10:25:09 +0100 Subject: [PATCH] User guide documentation for data router Change-Id: If28014e4f937c9036e22f2db7599fd8568f0c13f Signed-off-by: Emmett Cox Issue-ID: DMAAP-552 --- docs/data-router/DataRouterUserGuide.rst | 25 ++++++++++++++++++++++++ docs/data-router/administration.rst | 14 ++++++++++++++ docs/data-router/architecture.rst | 25 ++++++++++++++++++++++++ docs/data-router/configuration.rst | 7 +++++++ docs/data-router/consumedapis.rst | 7 +++++++ docs/data-router/data-router.rst | 7 ++++++- docs/data-router/delivery.rst | 32 +++++++++++++++++++++++++++++++ docs/data-router/dr_arch.png | Bin 0 -> 28300 bytes docs/data-router/humaninterfaces.rst | 10 ++++++++++ docs/data-router/logging.rst | 25 ++++++++++++++++++++++++ docs/data-router/release-notes.rst | 29 ++++++++++++++++++++++++++++ docs/index.rst | 19 +++++++++++++----- 12 files changed, 194 insertions(+), 6 deletions(-) create mode 100644 docs/data-router/DataRouterUserGuide.rst create mode 100644 docs/data-router/administration.rst create mode 100644 docs/data-router/architecture.rst create mode 100644 docs/data-router/configuration.rst create mode 100644 docs/data-router/consumedapis.rst create mode 100644 docs/data-router/delivery.rst create mode 100644 docs/data-router/dr_arch.png create mode 100644 docs/data-router/humaninterfaces.rst create mode 100644 docs/data-router/logging.rst create mode 100644 docs/data-router/release-notes.rst diff --git a/docs/data-router/DataRouterUserGuide.rst b/docs/data-router/DataRouterUserGuide.rst new file mode 100644 index 00000000..8f7b9ef1 --- /dev/null +++ b/docs/data-router/DataRouterUserGuide.rst @@ -0,0 +1,25 @@ +=========================== +Data Router (DR) User Guide +=========================== + +Standalone Mode +--------------- + +Installation +============ + +1. Find the datarouter project on the gerrit website: https://gerrit.onap.org/r/#/admin/projects/dmaap/datarouter + +2. Clone the repo onto your server using the clone command found on the datarouter page on gerrit. + +3. cd into the docker-compose directory and run docker-compose up. + +Configurations +============== + +Using the Data Router +--------------------- + +For information on how to use the Data Router refer to the Data Router API guide at: + + :ref:`data_router_api_guide` \ No newline at end of file diff --git a/docs/data-router/administration.rst b/docs/data-router/administration.rst new file mode 100644 index 00000000..b050a1fe --- /dev/null +++ b/docs/data-router/administration.rst @@ -0,0 +1,14 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Administration +============== + + +Processes +--------- +NA + +Actions +------- +NA diff --git a/docs/data-router/architecture.rst b/docs/data-router/architecture.rst new file mode 100644 index 00000000..b18f7bb3 --- /dev/null +++ b/docs/data-router/architecture.rst @@ -0,0 +1,25 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Architecture +============ + + +Capabilities +------------ +Data Router is a RESTful web service used for the transfer of data across networks any larger than a Message Router message (> 1Mb). + +Usage Scenarios +--------------- + Data Router endpoints are used to create/view/delete Feeds, Subscribers and Published files. Clients can use the Data Router endpoints + to publish a file to a feed and subscribe to this feed to receive the file. + +Interactions +------------ +Data Router REST service uses the Data Router API to allow users to publish to and subscribe to a feed, in order to send and receive files. + + + + |image0| + + .. |image0| image:: dr_arch.png diff --git a/docs/data-router/configuration.rst b/docs/data-router/configuration.rst new file mode 100644 index 00000000..2a7096a1 --- /dev/null +++ b/docs/data-router/configuration.rst @@ -0,0 +1,7 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Configuration +============= + +NA \ No newline at end of file diff --git a/docs/data-router/consumedapis.rst b/docs/data-router/consumedapis.rst new file mode 100644 index 00000000..aa1a8bd1 --- /dev/null +++ b/docs/data-router/consumedapis.rst @@ -0,0 +1,7 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Consumed APIs +============= + +Data Router does not consume any API diff --git a/docs/data-router/data-router.rst b/docs/data-router/data-router.rst index ecce2096..aaee3851 100755 --- a/docs/data-router/data-router.rst +++ b/docs/data-router/data-router.rst @@ -1,10 +1,15 @@ +.. _data_router_api_guide: + ========================== Data Router (DR) API Guide ========================== Introduction ------------ -The DataRouter(DR) provisioning API is an HTTPS-based, REST-like API for creating and managing DR feeds and subscriptions. The Data Routing System project is intended to provide a common framework by which data producers can make data available to data consumers and a way for potential consumers to find feeds with the data they require. +The DataRouter(DR) provisioning API is an HTTPS-based, REST-like API for creating and managing DR feeds +and subscriptions. The Data Routing System project is intended to provide a common framework by which +data producers can make data available to data consumers and a way for potential consumers to find feeds +with the data they require. HTTP Service APIs diff --git a/docs/data-router/delivery.rst b/docs/data-router/delivery.rst new file mode 100644 index 00000000..775841a4 --- /dev/null +++ b/docs/data-router/delivery.rst @@ -0,0 +1,32 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Delivery +============== + +Data Router is comprised of a datarouter-provisioning container, a datarouter-node container and a mariadb container. + +.. blockdiag:: + + + blockdiag layers { + orientation = portrait + MARIADB -> DR-PROV; + DR-PROV -> DR-NODE; + group l1 { + color = blue; + label = "dr-prov Container"; + DR-PROV; + } + group l2 { + color = yellow; + label = "dr-node Container"; + DR-NODE; + } + group l3 { + color = orange; + label = "MariaDb Container"; + MARIADB; + } + + } diff --git a/docs/data-router/dr_arch.png b/docs/data-router/dr_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..1655edad3da7ff1b41392cf835c64585dc829191 GIT binary patch literal 28300 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
@2p^$cAJ{2 z&^AE;oq31(y!k>p-I#BYzkNU;p_EoR9UZdm+FtFLzCCy3U;kF+T}Wmlbju-u=e4UT z$W2j(y-E~3YBG}e$zez(DZP;vUA{=E@ zc9vbC0hxIVjhf$D1bb=LCHhUB4DyqIuYvGU