A heads-up dashboard for displaying thing-statuses.
Example: https://github.com/nicinabox/glances-example
Demo: https://glances-example.herokuapp.com/
Glances is designed to be displayed on a monitor and works primarily over websockets. Built with React and Socket.io for lightning fast updates.
- Responsive, flexbox-based grid
- Small, simple API
- Easy deployment
- Push data in with a request
- Pull data in on a schedule
npm install -S glances-app
echo "require('glances-app')()" > server.js
- Add tiles to
tiles/
- Start your server:
npm start
A tile is an object and structured like the following:
var state = {
id: 'counter',
title: 'Counter',
color: 'teal',
value: 0
}
module.exports = {
state,
onRequest($, body) {
Object.assign(state, {
value: +body.counter
})
return $.emitChange(state)
},
schedule($) {
$.every('2 sec', 'update counter', () => {
Object.assign(state, {
value: state.value + 1
})
return $.emitChange(state)
})
}
}
Currently supported tile layouts:
- standard
- ticker
- list
For ticker and list types, pass a key/value object, a flat array, or an array of pairs as the value
.
An identifier for the tile. If not specified, the file name will be used.
The tile state object.
- title
- value
- moreInfo
- color
- position
- display (see Tile Layouts above)
- span (1-4)
Called when tile receives a POST request. Make a request:
POST /tiles/:id
Define a schedule for the tile.
Accepts: utils
Schedule tile updates every so often. Must return a Promise or call next from callback
Accepts: interval, description (optional), callback
Callback proviles err
, next
Emit your new tile state
Accepts: object
- More robust value types based on data structures or setting
- Dynamic tile routes to POST data
- Pluggable, reusable tiles (should be possible currently, but need to investigate)
- Improve error handling
- Improve schedule api. Right now it's not obvious that id is required.
- More robust scheduler
- Management UI to search, install, and configure tiles
- Custom tiles
See NEXT.md for brainstorming on upcoming todos.
Glances was inspired by, and borrows heavily from Dashing by Shopify.