Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


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


No description, website, or topics provided.







No releases published


No packages published