Detailed Project Description

The workbench project takes the workbench metaphore seriously. It’s a platform that allows you to do work; it provides a flat work surface that supports your ability to combine tools (python modules) together. In general a workbench never constrains you (oh no! you can’t use those 3 tools together!) on the flip side it doesn’t hold your hand either. Using the workbench software is a bit like using a Lego set, you can put the pieces together however you want AND adding your own pieces is super easy!.

Loosely coupled

  • No inheritance relationships
  • No knowledge of data structures
  • Just take some input and barf some output (no format requirements)

Flat

  • Workers (that’s it… everything is a worker)
  • Server dynamically loads workers from a directory called ‘workers’

Robust

  • Worker fails to load (that’s fine)
  • Worker crashes (no sweat, that request fails but system chugs on)

Transparency

  • All worker output is reflected in the data store (currently Mongo)
  • Use RoboMongo (see below) to inspect exactly what workers are outputting.

Small Granularity

  • The system works by passing references from one worker to another so there is NO benefit to large granularity workers.
  • It’s super easy to have a worker that aggregates information from a set of workers, the opposite (breaking apart a large code chunk into smaller units) is almost never easy.
  • Pull just what you want, workers and views (which are just workers) can be selectve about exactly which fields get pulled from which workers.