### Disclaimer
This is my TODO list. If you're interested in one of these features, there
are 2 options. Either wait for someone to implement it or sponsor someone
to implement it.

If you want to implement something, please contact me first so that we can
discuss acceptable implementations. In some cases I haven't thought about
it too deeply, but for others I know exactly what I require.

If you have other nice ideas that you think would be an improvement, please
contact me as well. :) Send an email to: Dag Wieers <dag@wieers.com>

### Usability
+ Add --config option and use /etc/dstat.conf and ~/.dstat to influence output (see example dstat.conf)
+ Allow to force to given magnitude (--unit=kilo)
+ Look at possibilities to show deviation (on second line ?)
+ Check for dark/light background color and change colors accordingly (see dstat.conf)
+ Show parts of counters in other colors (eg. color the 6 in 6134B in yellow to indicate it's kilobyte)
+ Look into adding sched_setscheduler() calls for improved priority

### General improvements
+ Implement better (?) protection against counter rollovers
  (see mail from Sebastien Prud'homme/Ross Brattain)

### Documentation (help welcome!)
+ Document every plugin as part of python comments (explain unit, what it means etc...)
+ Create document on general system performance tuning
  (explaining the different values in /proc, especially the concerning ones)
+ Create document on general system performance tools
  (explaining the different uses of tools like dstat, iostat, pmap, strace, tcpdump)
+ Comply to PEP8: http://www.python.org/dev/peps/pep-0008/

### Export/Graph
+ Interface with rrdtool (python-rrd ?)
+ Allow for different types of export modules (only CSV now)
  - ODS could include graphs for plugins !
+ Allow to write out to syslog (or remote syslog)
+ Allow to write unbuffered to disk
+ Write out user input to CSV

### Plugin improvements
+ Don't calculate counters twice when a plugin is loaded twice

### Extending statistics (help welcome!)
+ Add slab plugin (see /proc/slabinfo and slabtop)
+ Add xorg plugin (xdpyinfo, xrestop)
  - Add 'most expensive X app' (look at xrestop)
  - Add number of (active) X sessions and X clients
+ Add icmp plugin ?
+ Add application plugin (-a or -A pid,cmd)
+ Add user plugin (number of users logged on, utmp is not that useful, /proc/key-users)
+ Look into interfacing with apps
  - amavisd, apache, bind, cifs, dhcpd, dnsmasq, gfs, samba, squid
+ Look into interfacing with specific HW counters in /proc
  - qla2300
+ Look at /proc/meminfo, /proc/mdstat, /proc/net/netstat, /proc/net/snmp, /proc/vmstat, /proc/drbd
+ Look at /proc/fs/cifs/stats
+ Add i2c plugin (see /sys/class/i2c-adapter/i2c-*/*/*/*/*/*)
+ Allow for SNMP counters to be added
+ Add LVM stats
+ Allow to have multiple '1st expensive ... app' and '2nd expensive ... app'
+ Add 'most iowaiting app' plugin
+ Add systemtap/perf integration

### Plugin issues
+ plugins that use /proc/pid are reasonably slow (implement in C might help)
+ disk plugin: /proc/partitions can have negative numbers, seen on systems with long uptime. dstat handles this except for calculating the very first stat, no work-around possible?
+ proc plugin: (run and blk) does not work on 2.4.24+ (to be confirmed ?)
+ swap plugin: (new one) is slower than swapold
+ tcp plugin: is very slow and generates lots of softirqs (on busy systems), to be confirmed

### Redesign (v2.0)
+ Create modules that can contain samples of different units

   CPU: (see mpstat)
    sys, usr, idl, iow, hiq, siq (percentage)
        intr/sec (int)

   IO: (see iostat -x)
    tps (int)
    blk_read/sec, blk_wrtn/sec (kB/sec)

+ Design proper object model and namespace for _all_ possible stats
+ Create a seperate curses-based tool, much like nmon (dstat stays line-based)
+ Create client/server monitoring tool
