How do I tell when a CUPS print jobs has been completed plus info about that job?
Question
I need to know each time a Mac print job is created/completed, plus some information about that job (what was printed, pages, copies, etc).
The best method I've come up with thus far is to use kqueue() on /var/spool/cups/ and then parse the c##### files as they're created, but I'm wondering if there's a better way.
Solution
I'd think about creating a filter that you can put into the CUPS pipeline that collects this information and stores it for you (say in a database). Then you can access the database to get the information using any standard database access mechanism. Basically the filter is just a command-line program that gets a number of parameters passed to it from CUPS and needs to read input on stdin and write it to stdout. You can find more information at http://www.cups.org/documentation.php/api-filter.html.
OTHER TIPS
Have you ever looked what the page_log file provides for you? There's a man page providing details about its format. Recent versions of CUPS will let you configure the amount of info logged in that file.
Have you looked into the IPP subscription schemes supported by CUPS?
These could trigger a mailto: or an rss: notification upon certain print system events. The IPP operations related to this topic are:
Create-Job-Subscriptions, Create-Printer-Subscriptions, Create-Resource-Subscriptions, Create-System-Subscriptions
Details about this feature are in the CUPS Programming Manual: