diff --git a/django_q/cluster.py b/django_q/cluster.py index 8913f50..9bd4ef0 100644 --- a/django_q/cluster.py +++ b/django_q/cluster.py @@ -29,7 +29,7 @@ from django import db import signing import tasks -from django_q.conf import Conf, logger, psutil, get_ppid +from django_q.conf import Conf, logger, psutil, get_ppid, rollbar from django_q.models import Task, Success, Schedule from django_q.status import Stat, Status from django_q.brokers import get_broker @@ -363,6 +363,8 @@ def worker(task_queue, result_queue, timer, timeout=Conf.TIMEOUT): f = getattr(m, func) except (ValueError, ImportError, AttributeError) as e: result = (e, False) + if rollbar: + rollbar.report_exc_info() # We're still going if not result: db.close_old_connections() @@ -372,7 +374,9 @@ def worker(task_queue, result_queue, timer, timeout=Conf.TIMEOUT): res = f(*task['args'], **task['kwargs']) result = (res, True) except Exception as e: - result = (e, False) + result = ('{}'.format(e), False) + if rollbar: + rollbar.report_exc_info() # Process result task['result'] = result[0] task['success'] = result[1] diff --git a/django_q/conf.py b/django_q/conf.py index ccfd080..4a798aa 100644 --- a/django_q/conf.py +++ b/django_q/conf.py @@ -128,6 +128,9 @@ class Conf(object): # The redis stats key Q_STAT = 'django_q:{}:cluster'.format(PREFIX) + # Optional Rollbar key + ROLLBAR = conf.get('rollbar', {}) + # OSX doesn't implement qsize because of missing sem_getvalue() try: QSIZE = Queue().qsize() == 0 @@ -160,6 +163,21 @@ if not logger.handlers: handler.setFormatter(formatter) logger.addHandler(handler) +# rollbar +if Conf.ROLLBAR: + rollbar_conf = Conf.ROLLBAR + try: + import rollbar + rollbar.init(rollbar_conf.pop('access_token'), environment=rollbar_conf.pop('environment'), **rollbar_conf) + except ImportError: + rollbar = None + +else: + rollbar = None + + + + # get parent pid compatibility def get_ppid(): diff --git a/requirements.in b/requirements.in index 0cc619b..9105803 100644 --- a/requirements.in +++ b/requirements.in @@ -9,3 +9,4 @@ django-redis iron-mq boto3 pymongo +rollbar diff --git a/requirements.txt b/requirements.txt index c487ac8..d03ae2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,6 +20,7 @@ psutil==3.3.0 pymongo==3.2 python-dateutil==2.4.2 # via arrow, botocore, iron-core redis==2.10.5 -requests==2.9.1 # via iron-core -six==1.10.0 # via blessed, python-dateutil +requests==2.9.1 # via iron-core, rollbar +rollbar==0.11.1 +six==1.10.0 # via blessed, python-dateutil, rollbar wcwidth==0.1.5 # via blessed