Python HTML Shell Mako JavaScript
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
docker
grafista
tests
.gitignore
README.md
app.py
gulp
gulpfile.js
package-lock.json
package.json
requirements.txt
runserver.py
runserver.wsgi

README.md

Grafista - quick charts

Prototype for a charting/dashboatrd application, using a set of minimal components.

Architecture

Grafista collects, stores and displays time series. The series definition is stored in a database table, as well as series values, which we call Samples. The Samples of a Series are summarized and displayed in a Dashboard web view, and can be further analyzed in dedicated views.

Stack

Grafista is a simple Flask application, storing its data in a SQLite database, and useing the following libraries:

  • SQLAlchemy: ORM
  • pypugjs: support for jade-based views (instead of HTML)
  • nv3d: a reusable approach to charts, based on the d3 library

Installation

mkvirtualenv grafista  # Optional, if you use virtualenvwrapper
pip install -r requirements.txt
cd grafista
./gulp # Install npm deps and copy frontend assets from tabler-ui
flask db migrate  # Initialize database
flask run  # Run Grafista

Creating a Serie

Use the following command to create a Serie.

flask series create <serie name> <description> <unit>

Inserting data

We support two methods to insert data in Grafista.

flask series insert_samples </path/to/stats.csv>  # Load data from a CSV file
flask series insert_samples <serie name> <value>  # Insert a specific value into a Serie

Configuration

In order to customize Grafista, create a file called config_local.py and override the desired config values available in config.py.

Roadmap

In order to further explore the scope of the application, we want to add a some functionality to Grafista.

  • define and implement queries
  • support multiple data collection systems (url query, but also functions)

Known issues

Because the name attribute of a Series record has to be unique, we have to be sure that even in different data sources, records don't have conflicting names.

This could be solved by introducing a source attribute in the Series model, and then enforcing name uniqueness for records featuring the same source.