eyes / TODO

Full commit
EYES todo

* detail out use cases (evolution)
* document expected APIs (evolution)
* set up continuous integration build with tests/coverage (done)
** code build and tests (done)
** generation of usage documentation (evolution - structure done)
** generation of API documentation (internal & REST)
** creation of virtual appliance


milestone 1 (done: 93:21a264e8b112)
* get basic monitor URI working w/ data (done: 16:1cb454cdfec2)
* write (all in one at first - modular to break apart w/ msg queue for scale)
** script to pull from monitors pending update (done: 21:c7028e750eba)
** script to run a nagios plugin (done: 43:1ecce3120646)
** script to process the results of the nagios plugin (done: 93:21a264e8b112)

milestone 2 (done: 144:3d5d63b0a51d)
* script/module to create RRD file (done: 103:a4f15300ee47)
* script/module to populate RRD file from results of nagios plugin (done: 109:bce74fec1e6b)
* create an RRD based graph (done: 115:10873f9c99de)
* URI to show a RRD based graph (done: 132:2d4c195fab02)
* write install notes to get a basic demonstration up and working on Linux (done: 144:3d5d63b0a51d)

refactor/application structure redesign : milestone 3
* refactor out Hostname into a sep. model for Host (done: 157:0f9714770db7)
* refactor the Monitor & Datastore models to present a REST interface to list monitors to be pulled, by monitor type. The built-in example is the NagiosPoller setup. Transform that into interfaces so that other pollers can be written and driven against the "black board" of pending monitors.
** REST API now exists for getting all needed monitor data for the poller (done: 172:d32d7e848fdd)
** configure REST API for accepting and storing a result set from a poller against a monitor (done: 180:1f613c8f7a03)
* refactor the whole project to use a virtualenv to control libraries & build environment (done: 188:8252f29792b8)
* allow a passive monitor (no polling intended) to accept "MonitorResult" from other scripts/plugins (done: 199:e9c2855dd79e)
* refactor the "monitor result" into a class and wrap with unit tests (done: 205:569ff9e83261)
** set up MonitorResult pieces to serialize/deserialize from JSON (done: 205:569ff9e83261)
* refactor the simplePoller to read and write using the new REST API's (done: 225:b8f32ae1ba0d)
* document the process to create a virtual machine with all the elements to run an instance of eyes (done: 235:8ada3eb00c10)

milestone 4
Interupt: refactor ArgSet to be simple list - single and double tuple entries is too complex. (done: 263:8e6c6f64e8fa)
* make method for poller/poster to report errors in submitting data (invalid poller arguments)
* show errors reported from poller
* edit a monitor...
* identify if the poller is running, or has run in the past 5 minutes (design elements for this?)
* Host page -> New Monitor -> Save Monitor to Host
* finalize an initial site design and layout with basic use cases (done: 274:939691d00b31)
* bolster and add on additional models to flesh out use cases
** create models to tie monitors to groups & users
** create and enable tagging against monitors (done: 274:939691d00b31)
** create model to support a monitor template
*** bonus: enable tagging against hosts, groups, and users as well
** use case: create a monitor from scratch - pick list
*** choose monitor type  (done: 274:939691d00b31)
*** run against a test host & get output  (done: 274:939691d00b31)
*** add argument field
*** save as a monitor (with host)
*** save as a template (without host)
** use case: status page of existing monitors (done: 274:939691d00b31)
** use case: status page of all monitors for a given host (done: 274:939691d00b31)
** use case: reviewing monitor templates
** use case: status page for monitors by tag
** create an action model for taking actions on warnings and errors with monitors
*** open http callback function
*** sending email callback function
** use case: page showing all alerting monitors in aggregate
*** a tag page with a list of all monitors - selectable to get trend detail in sidebar
*** a host page with a list of all monitors - selectable to get trend detail in sidebar (done: 274:939691d00b31)
*** editing page - same as above, but with historical data available as trend as well (mult datasources)
** come up with Eyes logo

milestone 5
* create a method to invoke & check on a background poller process started from within the web interface
** script to run pending monitors, storing results in RRD & monitor result model
** monitoring on this script and background processing (health of the EYES system)
* mechanism to clean up old run details (???)
* export functionality for a monitor - sufficient to recreate on another system
** export for datasource data as well - what's available, if internal (RRD)
* import functionality for a monitor - loading from export data to recreate monitor
** history import as well

milestone 6
* script to do an SNMP query and return the table data for potential SNMP based monitor
** CPU cores on Windows (hrProcessorTable)
** Disk/Filesystem capacity (hrStorageTable, hrDiskStorageTable)
** Network Interfaces (hrNetworkTable)

Indefinite Backlog:
* change the Datastore model to also store the most recent X entries into a list that's stashed in a memcached/tokyocabinet/redis/something instance

future ideas:
** look around in
*** hrSWRunTable, hrSWRunPerfTable, hwSWInstalledTable
*** potentially riff off ideas at in Perl scripts
** update/change the instance to allow it to just run a poller instance as an expansion - no local storage
** update the plugins to allow the running on Munin plugins
** accept data from a collectd data feed as a passive monitor feed into the system - storing into a Datastore