added support for rpm packaging and basic support for deb
This commit is contained in:
Executable
+121
@@ -0,0 +1,121 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user