Things I want to finish, in no particular order
-----------------------------------------------

! next to items for desired 2.0 release

architectural		
#			Switch to DBI
#			Add support for MySQL and Postgres logging of jobinfo
!			Fix options for upgrading/porting (must specify a flag)
!			Add options to ssh to disable PasswordAuthentication and enable BatchMode

linkto
			Path to restore from (replaces files with links)
			part of pruner?
			Add a directory link to "latest image"

reports
!			add: "last backup" report or something similar. Run id? Group id?
			allow control of report format from conf file
#			Store the writeto in jobdata (for jobdata cleanup on prune)
!			Allow "report" language for selecting:
				--report "hours=-24,target=foo"
			Different default reports - pretty, debug, etc
			Option to print "usage" for a target & subdirectory - this would
				be useful for manually cleaning up. --usage tank:/var
				or something...

maximum runtime		In addition to I/O timeout, an actual force stop. Separate
			options for:
#			iotimeout	Timeout for I/O - passthru to rsync --timeout (rsync_opts)
#			synctimeout	Timeout for an individual rsync job
!			jobtimeout	Timeout for the whole wombat job

code cleanup		worker reduction, variable renaming ($set{image_time}, others?)

#rsync_opts		Support over-riding/setting default rsync opts, like --compress, etc
#			--hard-links, --bwlimit, --timeout, etc

archiving/remote	
#			mirror() : mirrors the target to a remote host: 
#				needs to support rsync_opts somehow, or mirror_opts?
!			archive(): difference from a mirror is we rsync the current job and don't use
				--delete, so cleanup is not done (more of an "archive")	
				But... if we set "delete=0" in mirror_opts, then we have an archive?
			Filesystem lock while pruning/mirroring/archiving?

		
passive (host:/path)	Basically only prunes

passive client		Windows TK client for backing up remote clients

acl			preserve acls (getfacl/setfacl)

Documentation
#			Docs, docs, docs.
!			Specifics: planner, pruner, 
!			Boundary Conditions: failures, retries, new targets partial images
!			Document "exec" command for aliases (it's already in there)
!		        How to restore: structure of writeto paths, etc.
!		        What files does wombat maintain for state in /var/lib/wombat, /var/log?, etc
!			Updates for version 2.0

logging			
!			Add support for a logfile option - continue to use STDOUT if not specified.
!			Coordinate log messages to reduce overwriting and clutter (use main?)
!			Add timestamps, thread identifier, group id to each line in the log.
!			Truncate error message length - tuneable
!			Add log message to jobdata - like error, but "log" instead. Record pruner
			 	decisions, etc.
!			Cleanup jobdata when pruned, after a setable time parameter: jobdata_retention
!			Write full job log to image path: ${writeto}.log or something similar

command-line		Ability to manually run a single target
			Over-ride conf settings (some, all?)
			Over-ride planner/pruner decisions:
				keep partial images,
				prune if partial image, etc
!			--target	Specify the target to run/match
!			--hours		Hours to look back for report
!			--prune	jobid	Force the removal/cleanup of job by id
!			--status	Select only jobs with status
!			--pruned	Select only jobs that have been pruned (or not)
!			--test		Only print out what actions would be taken
!			--check		Verify configuration file (--verify?)
!			--purge host:path Completely eradicate all backups and logs
					  for a target
			--format	Specify the report format: pretty, debug, ?
#			--run-pruner	Run only the pruner
!			--help

Security		Make wombat work as non-root user?

external(list) {block}	
			For running external commands - lvsnapshot, mysql dump, etc
			Runs list[0] before the block and list[1] after the block.
			Should be able to wrap a call to sync().
			This will need to be "locked" across all wombat processes, ouch.

#filters		Add support for --filter like:
#			filter ("- .snapshot/") 	(can be done with rsync_opts)

housecleaning
			Process to compare schedmap, writeto contents and jobdata
			and cleanup orphaned stuff, mention unknown things, etc.

thread tools
			Ability to monitor thread usage, avg busy, etc to assist
			with setting optimal thread counts

clean restart
			Add code to rerun an image if within retry interval and
			last jobs failed with certain error codes (killed, etc)

			Need a way to separate the types of failures and control what
			the pruner and scheduler will do. A good example is failing due
			to a full disk. If a volume is 100GB and the next backup fails
			at 1GB because of disk space, the next image will require 
			99GB because it will link against the nearly empty image. Perhaps	
			a family of "on-error" handlers for each error type?
			on_error {error types} {actions} ex:

			on_error timeout,space prune
			on_error missing keep

			Another interesting idea might be on_error "recover". So, if
			2007-03-01_10:00  image is partial, instead of creating a new
			directory on the next run, we *move* this target to the new
			timestamp and fix it up with respsect to the source.

			jobdata.status records rsync error codes: http://bluebones.net/2007/06/rsync-exit-codes/

other
			Add module check at startup

pruner			
!			Add atmost parameter to limit image count

client check		
			Add a client check: connect to each machine, verify the
			rsync/rdiff binary is there, verify filesystems, verify sudo

rdiff			
			Add support for rdiff delta backups

FUSE			Document ways to use FUSE (Filesystem in User Space) for writeto
			  encryption
			  compression
			  Amazon S3

BUG
			There seems to be a "bug" in the way the retry window is checked.
			I setup an volume to backup once every 24 hours, then set retry to 24.
			But the runhours didn't match the wombat runtime and I ended up with
			2 images every 24 hour period. 
