This is a stupid simple time tracking script. It helps make my life a little better.
> TIMETRAX_FILE=/tmp/trax time.pl testing is this thing on? Noted > TIMETRAX_FILE=/tmp/trax time.pl confirm it is Noted > TIMETRAX_FILE=/tmp/trax time.pl EVENT LOG: [Mon Jun 3 00:00:00 PDT 2013] off start of day [Mon Jun 3 21:10:12 PDT 2013] testing is this thing on? [Mon Jun 3 21:10:38 PDT 2013] confirm it is [Mon Jun 3 21:10:47 PDT 2013] off now [Mon Jun 3 23:59:59 PDT 2013] off end of day SUMMARY REPORT: off : 23:59 (99.96%) testing : 0:00 ( 0.03%) confirm : 0:00 ( 0.01%)
By default this expects to be able to write to ~/.timetrax though as shown above in the example you can override this default with an enviroment variable of TIMETRAX_FILE. Though with the way that the report is inteneded to be processed it is recommend that you use only one file to store the log.
Once this is done copy time.pl to some where in your path and enjoy!
Anything passed via the command line is taken by time.pl as input to be logged to your file. The first 'word' is intended to be the project you are working on. Thus in the example you will note that the first action was in the 'testing' project The second is part of the 'confirm' project. These are used in the aggrigaions in the SUMMARY REPORT.
If time.pl is called with out any input you get the report and nothing is logged to the file. Though to make the math work out there is an entry added for 'now' in the 'off' project. This allows you to get the current time you have spent on what ever the last action is rather then assume that you will be doing this for the rest of the day.
Because this is really just tracking context changes the idea it to make a note of any change at the time that it happens. Thus you will want to mark that you are going to preform an action, then act. When you are done then note what you are planning on doing next, or mark that you are off. Thus all the slack time will be culled in to the same place.
Multiple days are grouped accordingly.
Currently the code is a mess. This works for me but it is not really ideal. I have a few ideas on ways that I want to improve things though again as this is working for me who knows how much progress I will really make on this. Feel free to fork and play!
As I think of ideas I will log them in the issue tracker, feel free to do the same.