TISbackup/lib/huey/bin/huey_consumer.py

122 lines
4.2 KiB
Python
Executable File

#!/usr/bin/env python
import logging
import optparse
import os
import sys
from logging.handlers import RotatingFileHandler
from huey.consumer import Consumer
from huey.utils import load_class
def err(s):
sys.stderr.write('\033[91m%s\033[0m\n' % s)
def get_loglevel(verbose=None):
if verbose is None:
return logging.INFO
elif verbose:
return logging.DEBUG
return logging.ERROR
def setup_logger(loglevel, logfile):
log_format = ('%(threadName)s %(asctime)s %(name)s '
'%(levelname)s %(message)s')
logging.basicConfig(level=loglevel, format=log_format)
if logfile:
handler = RotatingFileHandler(
logfile, maxBytes=1024*1024, backupCount=3)
handler.setFormatter(logging.Formatter(log_format))
logging.getLogger().addHandler(handler)
def get_option_parser():
parser = optparse.OptionParser(
'Usage: %prog [options] path.to.huey_instance')
parser.add_option('-l', '--logfile', dest='logfile',
help='write logs to FILE', metavar='FILE')
parser.add_option('-v', '--verbose', dest='verbose',
help='verbose logging', action='store_true')
parser.add_option('-q', '--quiet', dest='verbose',
help='log exceptions only', action='store_false')
parser.add_option('-w', '--workers', dest='workers', type='int',
help='worker threads (default=1)', default=1)
parser.add_option('-t', '--threads', dest='workers', type='int',
help='same as "workers"', default=1)
parser.add_option('-p', '--periodic', dest='periodic', default=True,
help='execute periodic tasks (default=True)',
action='store_true')
parser.add_option('-n', '--no-periodic', dest='periodic',
help='do NOT execute periodic tasks',
action='store_false')
parser.add_option('-d', '--delay', dest='initial_delay', type='float',
help='initial delay in seconds (default=0.1)',
default=0.1)
parser.add_option('-m', '--max-delay', dest='max_delay', type='float',
help='maximum time to wait between polling the queue '
'(default=10)',
default=10)
parser.add_option('-b', '--backoff', dest='backoff', type='float',
help='amount to backoff delay when no results present '
'(default=1.15)',
default=1.15)
parser.add_option('-P', '--periodic-task-interval',
dest='periodic_task_interval',
type='float', help='Granularity of periodic tasks.',
default=60.0)
parser.add_option('-S', '--scheduler-interval', dest='scheduler_interval',
type='float', help='Granularity of scheduler.',
default=1.0)
parser.add_option('-u', '--utc', dest='utc', action='store_true',
help='use UTC time for all tasks (default=True)',
default=True)
parser.add_option('--localtime', dest='utc', action='store_false',
help='use local time for all tasks')
return parser
def load_huey(path):
try:
return load_class(path)
except:
cur_dir = os.getcwd()
if cur_dir not in sys.path:
sys.path.insert(0, cur_dir)
return load_huey(path)
err('Error importing %s' % path)
raise
def consumer_main():
parser = get_option_parser()
options, args = parser.parse_args()
setup_logger(get_loglevel(options.verbose), options.logfile)
if len(args) == 0:
err('Error: missing import path to `Huey` instance')
err('Example: huey_consumer.py app.queue.huey_instance')
sys.exit(1)
huey_instance = load_huey(args[0])
consumer = Consumer(
huey_instance,
options.workers,
options.periodic,
options.initial_delay,
options.backoff,
options.max_delay,
options.utc,
options.scheduler_interval,
options.periodic_task_interval)
consumer.run()
if __name__ == '__main__':
consumer_main()