import logging import daemon import argparse import requests import json from data.queue import webhook_queue from workers.worker import Worker root_logger = logging.getLogger('') root_logger.setLevel(logging.DEBUG) FORMAT = '%(asctime)-15s - %(levelname)s - %(pathname)s - %(funcName)s - %(message)s' formatter = logging.Formatter(FORMAT) logger = logging.getLogger(__name__) class WebhookWorker(Worker): def process_queue_item(self, job_details): url = job_details['url'] payload = job_details['payload'] headers = {'Content-type': 'application/json'} try: resp = requests.post(url, data=json.dumps(payload), headers=headers) if resp.status_code/100 != 2: logger.error('%s response for webhook to url: %s' % (resp.status_code, url)) return False except requests.exceptions.RequestException as ex: logger.exception('Webhook was unable to be sent: %s' % ex.message) return False return True parser = argparse.ArgumentParser(description='Worker daemon to send webhooks') parser.add_argument('-D', action='store_true', default=False, help='Run the worker in daemon mode.') parser.add_argument('--log', default='webhooks.log', help='Specify the log file for the worker as a daemon.') args = parser.parse_args() worker = WebhookWorker(webhook_queue, poll_period_seconds=15, reservation_seconds=3600) if args.D: handler = logging.FileHandler(args.log) handler.setFormatter(formatter) root_logger.addHandler(handler) with daemon.DaemonContext(files_preserve=[handler.stream]): worker.start() else: handler = logging.StreamHandler() handler.setFormatter(formatter) root_logger.addHandler(handler) worker.start()