9 from optparse import OptionParser
11 parser = OptionParser()
12 parser.add_option('-d', '--debug',
13 action='store_true', dest='debug', default=False,
15 options, args = parser.parse_args()
18 print >> sys.stderr, "That program doesn't take any argument"
22 loglevel = logging.DEBUG
25 loglevel = logging.INFO
26 logging.basicConfig(level=loglevel, format='%(asctime)s %(levelname)s %(message)s')
28 sqlexec(u'SELECT id, pid FROM job WHERE start_time IS NOT NULL AND finish_time IS NULL')
29 row = get_common_cursor().fetchone()
31 logging.debug('Job %s is running: pid=%s', row[0], row[1])
34 sqlexec(u'SELECT id, command, extension, user_id FROM job WHERE start_time IS NULL ORDER BY queue_time LIMIT 1')
35 row = get_common_cursor().fetchone()
37 logging.debug('Queue is empty.')
40 jobid, command, extension, user_id = row
41 logging.info('Starting job %s: %s', jobid, command)
43 sqlexec(u'UPDATE job SET start_time=now() WHERE id=%(jobid)s', {'jobid': jobid})
46 output = file('/var/lib/ais/jobs/'+unicode(jobid)+'.'+extension, 'wb')
47 p = subprocess.Popen(command, stdout=output, shell=True)
48 logging.debug('System process id = %s', p.pid)
49 sqlexec(u'UPDATE job SET pid=' + unicode(p.pid) + ' WHERE id=%(jobid)s', {'jobid': jobid})
53 sqlexec(u'UPDATE job SET pid=NULL, finish_time=now(), result=' + unicode(returncode) + ' WHERE id=%(jobid)s', {'jobid': jobid})
55 logging.info('Job complete: result=%s', returncode)
57 sqlexec(u"INSERT INTO user_message (user_id, user_message_category_id, txt) VALUES(%(user_id)s, 'info', %(msg)s)", {'user_id':user_id, 'msg':('Your <a href="/job/%(jobid)s">job %(jobid)s</a> is complete.' % {'jobid': jobid}) })
60 if __name__ == '__main__':