#!/usr/bin/env python

import web
import os
import re
import time

def update(printers):
	for printer in printers:
		try:
			info = os.popen('lpq -A none -P%s' % printer.printer, 'r').readlines()
			if info == []:
				continue
			status = info[1].strip()
		except IndexError:
			raise Exception, info
		match = re.compile("^Queue: ([0-9]+) printable job").match(status)
		if match:
			jobs = int(match.group(1))
		else:
			jobs = 0
		pname = printer.printer
		print "%s: %s" % (pname, jobs)
		web.update('queues_cache', where='printer = $pname', jobs=int(jobs), vars=locals())
		time.sleep(1)

if __name__ == "__main__":
        web.db.connect(dbn='mysql', read_default_file="/mit/queues/.my.cnf", db="queues+cache", read_default_group="mysql")
	printers = list(web.select('queues_cache'))
	while 1:
		update(printers)
