Systems
=======

The systems involved in running elmo and feeding it with data are
as follows.

Pulse
-----

Pulse is Mozilla's RabbitMQ instance used to communicate between different
build and release automation workflows.

Taskcluster
-----------

This automation framework is used to run compare-locales and publish
the results as artifacts on tasks. The completion of such a task
is announced to the rest of the system via Pulse.

It should be possible to use both the firefox-ci-tc and the
community-tc cluster to generate data.

Worker
------

The worker listens to Pulse messages, and in response to them updates
the local clones and elmo's represenation of them.
It also inspects the Taskcluster task, retrieves meta data from
artifacts and stores them in the database.

The database also stores references to the artifacts with the detailed
information. The artifacts have a limited lifetime. It's OK for elmo
to try to load them and fail in the case that lifetime is exceeded.

There may be more than one worker.

Storage
-------

There's shared storage between to the worker and the webserver to keep
local clones of the repositories that we use to show diffs.

Webserver
---------

This is a django project, deployed as Docker container. Within the context
here, two apps and their models are of particular interest:

Life
^^^^

This models data that lives outside of elmo itself. Repositories are
represented here, as well as revisions. Also Locales are stored, and
Trees.

Trees represent an automation flow, say, Firefox on mozillla-central.
These are bound to repositories and one project or product in them.
The key information here is a project configuration file in a particular
repository.

L10nstats
^^^^^^^^^

This holds the actual statistics for a particular Tree, time, and
Revisions.