Drax is a react and python implementation of the dashingdashboard
Project description
#Drax dashboard
Drax is a python and react implementation of the beautiful [dashing](http://shopify.github.io/dashing/) app that has minimal dependencies. I created this project to develop my [react](http://facebook.github.io/react/index.html) and [tornado](http://www.tornadoweb.org/) skills.
## How to use drax
After you installed drax run the following commands:
```
$ drax init mydashboard
$ cd mydashboard
$ drax start
```
Now a new dashboard is available on http://localhost:8888/
Every project comes with some base widgets and an example dashboard. The directory is setup as follows:
* **Assets** - All your images, fonts, and javascript libraries.
* **Dashboards** - One html file for each dashboard that contains the layout for the widgets. The default dashboard is defined in *index.html*.
* **Jobs** - The python jobs for fetching data to sent to your widgets.
* **Widgets** - All the jsx and css files for individual widgets.
## How to create a dashboard
By editing the *index.html* file in the *templates* directory:
```javascript
React.render(
<Dashboard widgetHeight={450} widgetWidth={360}>
<Clock widgetid="clock" row={1} col={1}/>
<HeartBeat widgetid="hearthbeat" row={1} col={1}/>
<Text widgetid="mywidget3" row={1} col={4} initialTitle="This is the title" initialText="This is my initial text...."/>
<List widgetid="mylist" row={1} col={3} sizey={2}/>
<Number widgetid="valuation" row={2} col={1} initialTitle="Current valuation" initialInfo="In billions"/>
<Meter widgetid="synergy" initialTitle="Synergy" initialValue={10} min={0} max={100} row={2} col={2}/>
<Image widgetid="image" row={2} col={4} src="http://dashingdemo.herokuapp.com/assets/logo.png"/>
</Dashboard>,
document.getElementById('dashboard'));
```
If you want to add more dashboards copy *index.html* to a new html file in the templates directory and edit that file.
If you created a new dashboard *status.html* it will be available on http://localhost:8888/status **(Notice the url without the ".html")**.
## How get data into widgets
Your widgets can be updated directly over HTTP. Post the data you want in json to /widgets/widget_id.
Example
```
curl -d '{ "auth_token": "YOUR_AUTH_TOKEN", "text": "Some new text..."}' http://localhost:8888/widgets/text
```
or a python example:
```python
import json
import requests
url = 'http://localhost:8888/widgets/text'
data = {
'auth_token': 'YOUR_AUTH_TOKEN',
'text': 'Some new text...',
'id': 'text'
}
requests.post(url, data=json.dumps(data))
```
## How to create a job
Every file with the .py extension in the jobs folder is loaded as a job and executed periodically.
Each job needs to define a function named *callback* (the actual job) and a variable *callback_time* that defines the time in milliseconds of the frequency the job is executed.
An example of a job executing every 30 seconds:
```python
import json
from tornado.httpclient import AsyncHTTPClient
# callback function is called every 30 seconds
callback_time = 30000
def get_myapi_data():
# Add logic to fetch data from somewhere
data = 'This is some data loaded from somewhere...'
return data
def callback():
data = {
'auth_token': 'YOUR_AUTH_TOKEN',
# the id of the widget you want to post the data to
'id': 'text',
'title': 'Some Info:',
'icon': 'icon-star',
'text': get_myapi_data()
}
payload = json.dumps(data)
url = 'http://localhost:8888/widgets/text'
# Using tornado async client
client = AsyncHTTPClient()
client.fetch(url, None, method='POST', headers=None, body=payload)
```
## How to reload your dashboards
You can also perform dashboard-level actions by posting to /dashboards/dashboard_id. Currently there is a single event available, reload, that will refresh the target dashboard in the browser.
```
curl -i -d '{ "auth_token": "YOUR_AUTH_TOKEN", "event": "reload"}' http://localhost:8888/dashboards/index
```
If you want an event to target every dashboard, you can use a wildcard (*).
```
curl -i -d '{ "auth_token": "YOUR_AUTH_TOKEN", "event": "reload"}' http://localhost:8888/dashboards/*
```
## Installation
Installing drax is easy with pip:
```
$ pip install drax
```
## Developing
To run tests:
```
$ python test.py
```
Tested with python 2.7
[![Build Status](https://travis-ci.org/tax/drax.svg?branch=master)](https://travis-ci.org/tax/drax)
Drax is a python and react implementation of the beautiful [dashing](http://shopify.github.io/dashing/) app that has minimal dependencies. I created this project to develop my [react](http://facebook.github.io/react/index.html) and [tornado](http://www.tornadoweb.org/) skills.
## How to use drax
After you installed drax run the following commands:
```
$ drax init mydashboard
$ cd mydashboard
$ drax start
```
Now a new dashboard is available on http://localhost:8888/
Every project comes with some base widgets and an example dashboard. The directory is setup as follows:
* **Assets** - All your images, fonts, and javascript libraries.
* **Dashboards** - One html file for each dashboard that contains the layout for the widgets. The default dashboard is defined in *index.html*.
* **Jobs** - The python jobs for fetching data to sent to your widgets.
* **Widgets** - All the jsx and css files for individual widgets.
## How to create a dashboard
By editing the *index.html* file in the *templates* directory:
```javascript
React.render(
<Dashboard widgetHeight={450} widgetWidth={360}>
<Clock widgetid="clock" row={1} col={1}/>
<HeartBeat widgetid="hearthbeat" row={1} col={1}/>
<Text widgetid="mywidget3" row={1} col={4} initialTitle="This is the title" initialText="This is my initial text...."/>
<List widgetid="mylist" row={1} col={3} sizey={2}/>
<Number widgetid="valuation" row={2} col={1} initialTitle="Current valuation" initialInfo="In billions"/>
<Meter widgetid="synergy" initialTitle="Synergy" initialValue={10} min={0} max={100} row={2} col={2}/>
<Image widgetid="image" row={2} col={4} src="http://dashingdemo.herokuapp.com/assets/logo.png"/>
</Dashboard>,
document.getElementById('dashboard'));
```
If you want to add more dashboards copy *index.html* to a new html file in the templates directory and edit that file.
If you created a new dashboard *status.html* it will be available on http://localhost:8888/status **(Notice the url without the ".html")**.
## How get data into widgets
Your widgets can be updated directly over HTTP. Post the data you want in json to /widgets/widget_id.
Example
```
curl -d '{ "auth_token": "YOUR_AUTH_TOKEN", "text": "Some new text..."}' http://localhost:8888/widgets/text
```
or a python example:
```python
import json
import requests
url = 'http://localhost:8888/widgets/text'
data = {
'auth_token': 'YOUR_AUTH_TOKEN',
'text': 'Some new text...',
'id': 'text'
}
requests.post(url, data=json.dumps(data))
```
## How to create a job
Every file with the .py extension in the jobs folder is loaded as a job and executed periodically.
Each job needs to define a function named *callback* (the actual job) and a variable *callback_time* that defines the time in milliseconds of the frequency the job is executed.
An example of a job executing every 30 seconds:
```python
import json
from tornado.httpclient import AsyncHTTPClient
# callback function is called every 30 seconds
callback_time = 30000
def get_myapi_data():
# Add logic to fetch data from somewhere
data = 'This is some data loaded from somewhere...'
return data
def callback():
data = {
'auth_token': 'YOUR_AUTH_TOKEN',
# the id of the widget you want to post the data to
'id': 'text',
'title': 'Some Info:',
'icon': 'icon-star',
'text': get_myapi_data()
}
payload = json.dumps(data)
url = 'http://localhost:8888/widgets/text'
# Using tornado async client
client = AsyncHTTPClient()
client.fetch(url, None, method='POST', headers=None, body=payload)
```
## How to reload your dashboards
You can also perform dashboard-level actions by posting to /dashboards/dashboard_id. Currently there is a single event available, reload, that will refresh the target dashboard in the browser.
```
curl -i -d '{ "auth_token": "YOUR_AUTH_TOKEN", "event": "reload"}' http://localhost:8888/dashboards/index
```
If you want an event to target every dashboard, you can use a wildcard (*).
```
curl -i -d '{ "auth_token": "YOUR_AUTH_TOKEN", "event": "reload"}' http://localhost:8888/dashboards/*
```
## Installation
Installing drax is easy with pip:
```
$ pip install drax
```
## Developing
To run tests:
```
$ python test.py
```
Tested with python 2.7
[![Build Status](https://travis-ci.org/tax/drax.svg?branch=master)](https://travis-ci.org/tax/drax)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
drax-0.4.0.tar.gz
(416.5 kB
view details)
File details
Details for the file drax-0.4.0.tar.gz
.
File metadata
- Download URL: drax-0.4.0.tar.gz
- Upload date:
- Size: 416.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9100cf004d021d7a9e0c5ca939cc30b50015cf0353f9703851ccd47356ff0c56 |
|
MD5 | 9f900d797695b9ef141e9747b0475e86 |
|
BLAKE2b-256 | 1ee50ce0fbde3e0d3ce67068f7e16e57a9a29dc65c7c9abe9b1dbd7726f4b9ed |