Skip to content
Snippets Groups Projects
README.md 2.81 KiB
Newer Older
# BRIAN Dashboard Manager
This module is used to provision Organizations and Dashboards in Grafana for BRIAN.
It implements a Flask-based webservice used only to trigger the provisioning process.
The dashboards are generated from a list of interfaces obtained from Inventory Provider.
Jinja templates are populated with data from these interfaces to render Dashboard JSON definitions sent to the Grafana API.
Grafana API-related code lives in the `grafana` package.

The `brian_dashboard_manager/grafana/provision.py` file is responsible for the entire provisioning lifecycle.

Grafana API endpoints have wrapper functions in one file for relevant parts of the API, e.g. `brian_dashboard_manager/grafana/dashboard.py` for the dashboard API functions.

Another example is `brian_dashboard_manager/grafana/organization.py` for the organization API functions.

Some of the provisioned dashboards are not generated but are just static JSON files. These are put in the `brian_dashboard_manager/dashboards` directory. The same can be done for JSON datasource definitions in the `datasources` directory.

The `brian_dashboard_manager/templating` package contains the code and Jinja templates used to render dashboard JSON. Most dashboards reuse the same templates, with the exception of NREN-specific dashboards, which has its own template.

Of note is the `templating/helpers.py` file, which has all of the predicates and helper functions used to group interfaces together and generate the necessary data for the dashboard templates.
The `templating/render.py` has functions for rendering of the various Jinja templates from the given data.

## Configuration

This app allows specification of a few
example configuration parameters. These
parameters should stored in a file formatted
similarly to `config.json.example`, and the name
of this file should be stored in the environment
variable `CONFIG_FILENAME` when running the service.

## Running this module

This module has been tested in the following execution environments:

- As an embedded Flask application.
  For example, the application could be launched as follows:
$ export FLASK_APP=/path/to/brian_dashboard_manager/app.py
$ export CONFIG_FILENAME=/path/to/config.json
$ flask run
```

- As a `gunicorn` wsgi service.
  - Details of `gunicorn` configuration can be found in the brian_dashboard_manager Puppet repository.

## Protocol Specification

The following resources can be requested from the webservice.

### resources
Any non-empty responses are JSON formatted messages.

This resource is used to trigger the provisioning to Grafana.
It responds to the request immediately after starting the provisioning process.
```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "message": {
      "type": "string"
    }
  }
}
```