We've also made a couple variations of this. One ties into the BP db, as Sahil mentioned, another sends JSON data to an external db. Personally, the custom db is a little easier to keep track of, as you don't need to have 2-4 joins per query to make the reports work.
The other nice thing about having a custom db, is that you can feed it custom data to generate FTE counts more appropriate to your business unit. I've found that no two organizations calculate it the same way, nor do they typically trust the charting from another tool (Such as BP's calculations with MI reporting enabled), without seeing all the data behind it.
Some things you might consider including:
-Resource Machine Name
-Timestamp
-Process
-Queue name
-GUID for report
-Tag
-Status (Success/Fail)
-Result (Sub-status, IE: ""Ticket Resolved"")
-Details (Verbose message for result)
-Machine seconds spent
-Estimated human seconds required for that particular endpoint
You can also use the JSON API method to update a live status table by having the bot occasionally say ""I'm alive! Here's what I'm doing!"" We've come up with at least ten different reports based on this data and use them on a regular basis.