class CeleryTestCase(TestCase): def setUp(self): super(CeleryTestCase, self).setUp() self.celery = celery.Celery(__name__) self.celery.conf.CELERY_ALWAYS_EAGER = True self.client = InMemoryClient() self.handler = SentryCeleryHandler(self.client, ignore_expected=True) self.handler.install() self.addCleanup(self.handler.uninstall) def test_simple(self): @self.celery.task(name='dummy_task') def dummy_task(x, y): return x / y dummy_task.delay(1, 2) dummy_task.delay(1, 0) assert len(self.client.events) == 1 event = self.client.events[0] exception = event['exception']['values'][-1] assert event['culprit'] == 'dummy_task' assert exception['type'] == 'ZeroDivisionError' def test_ignore_expected(self): @self.celery.task(name='dummy_task', throws=(ZeroDivisionError,)) def dummy_task(x, y): return x / y dummy_task.delay(1, 2) dummy_task.delay(1, 0) assert len(self.client.events) == 0
class SentryDjangoHandler(object): def __init__(self, client=client): self.client = client try: import celery except ImportError: self.has_celery = False else: self.has_celery = celery.VERSION >= (2, 5) self.celery_handler = None def install_celery(self): from raven.contrib.celery import ( SentryCeleryHandler, register_logger_signal ) self.celery_handler = SentryCeleryHandler(client).install() # try: # ga = lambda x, d=None: getattr(settings, 'SENTRY_%s' % x, d) # options = getattr(settings, 'RAVEN_CONFIG', {}) # loglevel = options.get('celery_loglevel', # ga('CELERY_LOGLEVEL', logging.ERROR)) # register_logger_signal(client, loglevel=loglevel) # except Exception: # logger.exception('Failed to install Celery error handler') def install(self): request_started.connect(self.before_request, weak=False) got_request_exception.connect(self.exception_handler, weak=False) if self.has_celery: try: self.install_celery() except Exception: logger.exception('Failed to install Celery error handler') def uninstall(self): request_started.disconnect(self.before_request) got_request_exception.disconnect(self.exception_handler) if self.celery_handler: self.celery_handler.uninstall() def exception_handler(self, request=None, **kwargs): try: self.client.captureException(exc_info=sys.exc_info(), request=request) except Exception as exc: try: logger.exception('Unable to process log entry: %s' % (exc,)) except Exception as exc: warnings.warn('Unable to process log entry: %s' % (exc,)) def before_request(self, *args, **kwargs): self.client.context.activate()
def setUp(self): super(CeleryTestCase, self).setUp() self.celery = celery.Celery(__name__) self.celery.conf.CELERY_ALWAYS_EAGER = True self.client = InMemoryClient() self.handler = SentryCeleryHandler(self.client, ignore_expected=True) self.handler.install() self.addCleanup(self.handler.uninstall)
def install_celery(self): from raven.contrib.celery import (SentryCeleryHandler, register_logger_signal) ignore_expected = getattr(settings, 'SENTRY_CELERY_IGNORE_EXPECTED', False) self.celery_handler = SentryCeleryHandler(client, ignore_expected=ignore_expected)\ .install()
def install_celery(self): from raven.contrib.celery import ( SentryCeleryHandler, register_logger_signal ) ignore_expected = getattr(settings, 'SENTRY_CELERY_IGNORE_EXPECTED', False) self.celery_handler = SentryCeleryHandler(client, ignore_expected=ignore_expected)\ .install()
def get_sentry_handler(): from raven.contrib.celery import SentryCeleryHandler client = talisker.sentry.get_client() signal_handler = SentryCeleryHandler(client) return signal_handler
def install_celery(self): from raven.contrib.celery import ( SentryCeleryHandler, register_logger_signal ) self.celery_handler = SentryCeleryHandler(client).install()
def install_celery(self): self.celery_handler = SentryCeleryHandler( client, ignore_expected=True).install()