.. _couchdb-head:
CouchDB for BOSS
################
`CouchDB `_ is a document based database, which can provide JSON strings for BOSS devices.
To get started, install an instance of CouchDB, for example in a `docker container `_.
After creating a database (in this example, we created a database `my-boss`) as described in the official CouchDB documentation,
we can now create a CouchDB document with the following content:
.. code-block:: json
{
"_id": "http-test",
"classname": "http.client.HTTPConnection",
"arguments": {
"host": "gitlab.com"
}
}
.. hint::
It is also possible to include multiple devices in a single document like:
.. code-block:: json
{
"_id": "multi-devices",
"rows": [
{ "" },
{ "" },
]
}
This example launches a simple HTTP Connection to gitlab. You can simply use a different class in the :code:`classname` entry to
use your device driver or any other arbitrary class you want to expose as HERO.
To use BOSS to start the HERO defined above, run
.. code-block:: bash
python -m boss.starter -u http://:@:5984/my-boss/http-test
If you want to run all documents/devices in the database you can run
.. note::
This is not recommended in production. Use a view (see below) instead to avoid loading invalid documents and the ability to
switch off/on devices quickly.
.. code-block:: bash
python -m boss.starter -u http://:@:5984/my-boss/_all_docs?include_docs=true
.. _couchdb-view:
Using Views
-----------
To make a view which includes all active devices, add a `Design Document` view entry with the following map function:
.. code-block::
function(doc) {
if(doc.active) {
emit()
}
}
With the following boss command, you can than start all devices that have the key :code:`active` set to :code:`true` in their json definition:
.. code-block:: bash
python -m boss.starter -u http://:@:5984/my-boss/_design/active/_view/active?include_docs=true
.. hint::
If you want to directly see if your settings worked, you can use our rudimentary `GUI `_.