Skip to main content

Cadasta Worker Toolbox

Project description

Cadasta Worker Toolbox
======================

|Build Status| |Requirements Status|

.. raw:: html

<div align="center">

.. raw:: html

</div>

A collection of helpers to assist in quickly building asynchronous
workers for the Cadasta system.

Architecture
------------

The Cadasta asynchronous system is designed so that both the scheduled
tasks and the task results can be tracked by the central `Cadasta
Platform <https://github.com/Cadasta/cadasta-platform>`__. To ensure
that this takes place, all Celery workers must be correctly configured
to support these features.

Tracking Scheduled Tasks
~~~~~~~~~~~~~~~~~~~~~~~~

To keep our system aware of all tasks being scheduled, the Cadasta
Platform has a process running to consume task messages off of a
task-monitor queue and insert those messages into our database. To
support this design, all task producers (including worker nodes) must
publish their task messages to both the normal destination queues and
the task-monitor queue. This is acheived by registering all queues with
a `Topic
Exchange <http://docs.celeryproject.org/en/latest/userguide/routing.html#topic-exchanges>`__,
setting the task-monitor queue to subscribe to all messages sent to the
exchange, and setting standard work queues to subscribe to messages with
a matching ``routing_key``. Being that the Cadasta Platform is designed
to work with Amazon SQS and the `SQS backend only keeps exchange/queue
declarations in
memory <http://docs.celeryproject.org/projects/kombu/en/v4.0.2/introduction.html#f1>`__,
each message producer must have this set up within their configuration.

Tracking Task Results
~~~~~~~~~~~~~~~~~~~~~

*TODO*

Library
-------

``cadasta.workertoolbox.conf.Config``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The ``Config`` class was built to simplify configuring Celery settings,
helping to ensure that all workers adhere to the architecture
requirements of the Cadasta asynchronous system. An instance of the
``Config`` should come configured with all Celery settings that are
required by our system. It is the aim of the class to not require much
customization on the part of the developer. However, some customization
may be needed when altering configuration between environments (e.g. if
dev settings vary greatly from prod settings).

Required Arguments
^^^^^^^^^^^^^^^^^^

``queues``
''''''''''

The only required argument is the ``queues`` array. This should contain
an array of names for queues that are to be used by the given worker.
This includes queues from which the node processes tasks and queues into
which the node will schedule tasks. It is not necessary to include the
``'celery'`` or ``'platform.fifo'`` queues, as these will be added
automatically. The input of the ``queues`` variable will be stored as
``QUEUES`` on the ``Config`` instance.

Optional Arguments
^^^^^^^^^^^^^^^^^^

Any `Celery
setting <http://docs.celeryproject.org/en/v4.0.2/userguide/configuration.html#new-lowercase-settings>`__
may be submitted. It is internal convention that we use the lowercase
Celery settings rather than their older upper-case counterparts. This
will ensure that they are displayed when calling ``repr`` on the
``Conf`` instance.

``result_backend``
''''''''''''''''''

*TODO*

``task_queues``
'''''''''''''''

*TODO*

*Note: It is recommended that developers not alter this setting.*

``task_routes``
'''''''''''''''

*TODO*

*Note: It is recommended that developers not alter this setting.*

Internal Variables
^^^^^^^^^^^^^^^^^^

By convention, all variables pertinent to only the ``Config`` class
(i.e. not used by Celery) should be written entirely uppercase.

``RESULT_DB_USER``
''''''''''''''''''

Variable used to populate the default ``result_backend`` template.

``RESULT_DB_PASS``
''''''''''''''''''

Variable used to populate the default ``result_backend`` template.

``RESULT_DB_HOST``
''''''''''''''''''

Variable used to populate the default ``result_backend`` template.

``RESULT_DB_NAME``
''''''''''''''''''

Variable used to populate the default ``result_backend`` template.

``PLATFORM_QUEUE_NAME``
'''''''''''''''''''''''

Defaults to ``'platform.fifo'``.

*Note: It is recommended that developers not alter this setting.*

Deploying
---------

.. code:: bash

python setup.py publish tag clean

.. |Build Status| image:: https://travis-ci.org/Cadasta/cadasta-workertoolbox.svg?branch=master
:target: https://travis-ci.org/Cadasta/cadasta-workertoolbox
.. |Requirements Status| image:: https://requires.io/github/Cadasta/cadasta-workertoolbox/requirements.svg?branch=master
:target: https://requires.io/github/Cadasta/cadasta-workertoolbox/requirements/?branch=master


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cadasta-workertoolbox-0.0.2.dev0.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

cadasta_workertoolbox-0.0.2.dev0-py2.py3-none-any.whl (10.1 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file cadasta-workertoolbox-0.0.2.dev0.tar.gz.

File metadata

File hashes

Hashes for cadasta-workertoolbox-0.0.2.dev0.tar.gz
Algorithm Hash digest
SHA256 42d6573bcf4776177a16779125e0d2d68b3b6bd8983759aa5854fbd895510537
MD5 78850273fd7668d20e0feed9c6bc66fa
BLAKE2b-256 d5e881904e255280b801c71462f635212e4f2201a204d3f9f23b350de4eae1d4

See more details on using hashes here.

File details

Details for the file cadasta_workertoolbox-0.0.2.dev0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for cadasta_workertoolbox-0.0.2.dev0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d1cc75249869361b34dd1113dbc002f0664e0152ea333bdb4779f1bcbf243da6
MD5 5a743790d896f55d1dbab5420e7372ad
BLAKE2b-256 3d0d78e340295ade04c0888d5a10b73b85281f48407a7e7d50635e28250e205c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page