Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add developer overview #385

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ repos:
rev: 24.8.0
hooks:
- id: black
exclude: migrations/
exclude: ^(src/.*/migrations|docs/conf.py)
- repo: https://github.com/twisted/towncrier
rev: 24.8.0
hooks:
Expand Down
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"sphinx.ext.autodoc",
"sphinx.ext.todo",
"sphinx.ext.coverage",
'sphinx.ext.graphviz',
"sphinx.ext.viewcode",
"sphinx.ext.intersphinx",
"djangodocs",
Expand Down
1 change: 1 addition & 0 deletions docs/development.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Development

.. toctree::

development/birdseye-view
development/notes
development/management-commands
development/howtos
32 changes: 32 additions & 0 deletions docs/development/birdseye-view.dot
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
digraph overview {
compound=true;

subgraph cluster_server {
style = rounded;
label = "server"
destination1[label="destination 1"];
destination2[label="destination 2"];
destination3[label="destination 3"];
}

glueservice1[label="glue service 1"];
source1[label="source 1"];

source1 -> glueservice1 -> destination2 [lhead=cluster_server];

subgraph cluster_source2 {
style = rounded;
label = "source 2"
glueservice2[label="glue service 2"];
}

glueservice2 -> destination2 [lhead=cluster_server];

exterior1[shape="none"][style="invis"][label=""];
exterior2[shape="none"][style="invis"][label=""];
exterior3[shape="none"][style="invis"][label=""];

destination1 -> exterior1;
destination2 -> exterior2;
destination3 -> exterior3;
}
65 changes: 65 additions & 0 deletions docs/development/birdseye-view.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
=================
A bird's eye view
=================

.. graphviz:: birdseye-view.dot

Sources
=======

A source pushes incidents to the argus server via the API. Subsequent changes
to those incidents are made by posting events to them. An incident has a field
``incident_source_id`` for storing an id, for changing an already existing
incident by adding an event.

Glue-service
------------

A glue-service runs independently of the argus server. It sits between a source
and the argus server and translates an incident from the source to the API. The
``incident_source_id`` for the incident is copied from the source if available
or otherwise handled by the glue-service.

The glue-service can either be built in to the source, or be completely
standalone and pull changes from the source before it pushes them on.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"pushes them to Argus" instead of "pushes them on", maybe?


Agent
-----

An agent can change existing incidents (by adding events) or create new
incidents by analyzing already existing incidents and events.

It is standalone.

Frontend
========

The frontend fetches a list of incidents according to a user-created filter. It
allows the user to create such filters, to set up notification profiles
using these filters, and to set up destinations to be used in the profiles.

Notification system
===================

A user has one or more notification profiles.

A notification profile is used by the server for sending notifications about
a chosen subset of the incidents. It consists of one or more filters, one or
more timeslots (for which periods of the day a profile is valid) and one or
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually just one timeslot - even after we make timeslots reusable

more destinations.

Destination
-----------

A destination is a plugin to argus server. It stores its config in the
"DestinationConfig"-model. See :doc:`/writing-plugins`.

Server
======

The server receives incidents from sources, provides access to the accumulated
list of incidents via API, and matches incidents to notification profiles.
Matched incidents are sent to the destinations listed in the profiles.

There is a non-API admin-interface for the registration of sources and admin
users.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ exclude = '''
| buck-out
| build
| dist
| docs/conf.py
)/
| src/.*/migrations
)
Expand Down
Loading