No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


StatusBoard is a Tornado application we use to display a Web page with info about things that are going on around our office.

Channels and workers

The app uses SSE (wrapped with BTHEventSource) to communicate with browsers.

The file defines a single channel for Pinger. channel_name will be used as an SSE event name.

Workers provide data for channels. There are two types of workers:

  1. StatusBoard.worker.PeriodicWorker - invoked periodically at a given interval,
  2. StatusBoard.worker.ScheduledWorker - one-shot worker invoked after scheduling.

There are four workers in the box:

  1. StatusBoard.workers.PingerWorker - pings computers defined in config to determine number of present and absent people,
  2. StatusBoard.workers.RedmineWorker - connects the app to Redmine instance to provide info about projects status,
  3. StatusBoard.workers.YahooWeatherWorker - fetches weather info from Yahoo! Weather,
  4. StatusBoard.workers.XMPPBot - controls XMPP bot that feeds Breaking News section.

The file contains a dictionary that'll be loaded by status_board and passed to Tornado app. It's the place to provide app's config. For more info about default fields see Tornado.

App-specific config dict fields:

  • xmpp_bot - XMPP bot config. database field should contain absolute path to a SQLite file created by status_board_setup_db or None if you wish to ignore the DB.
  • people - list of dicts containing people definition. Mandatory fields are name and gravatar_mail. ip is used by PingerWorker. jid is used by XMPPBot, redmine_mail by RedmineWorker and workers will fall back to gravatar_mail automagically if their fields aren't present.
  • redmine.issue_trackers - contains a dict of issue trackers. The syntax is <id>: "<name>". Consult Redmine API for more info.
  • The rest is pretty self-explanatory so it's pointless to document it :).

The file also contains a dict of channel definitions. The syntax is '<channel_name>': WorkerClass. The status_board script will set up workers for the channels.


If you wish to add your logos to the app place files logo.png and blanker_logo.png in app_config['logo_path']. sets logo_path to the directory where the file is located. Feel free to change the path.

Use a 187px x 119px image for logo.png. blanker_logo.png will be centered in the viewport automatically.


Screen 01

Screen 02

Screen 03


Weather state icons: (CC BY-NC-SA 3.0)

Installation, setup and running

  1. Create a virtualenv, activate it, clone the repo and cd to it,
  2. python install (requires distribute)
  3. cp
  4. status_board_setup_db (optional)
  5. vim
  6. status_board
  7. Point the browser to app's URL (see status_board --help for info).
  8. Sit down and watch the magic happen.
  9. Profit?


BSD License