def testAlternateDatabase(self): settings.DATABASE_USING = 'default' try: Message.objects.get(id=999999979) except Message.DoesNotExist, exc: SentryClient.create_from_exception(exc)
def sentry_exception_handler(sender, request=None, **kwargs): try: exc_type, exc_value, exc_traceback = sys.exc_info() if not settings.CATCH_404_ERRORS \ and issubclass(exc_type, Http404): return if dj_settings.DEBUG or getattr(exc_type, 'skip_sentry', False): return if transaction.is_dirty(): transaction.rollback() # kudos to Tapz for this idea modules = get_installed_apps() # only retrive last 10 lines tb = traceback.extract_tb(exc_traceback) # retrive final file and line number where the exception occured file, line_number = tb[-1][:2] # tiny hack to get the python path from filename for (filename, line, function, text) in reversed(tb): for path in sys.path: if filename.startswith(path): view = '%s.%s' % (filename[len(path)+1:].replace('/', '.').replace('.py', ''), function) break if view.split('.')[0] in modules: break else: view = '%s.%s' % (exc_traceback.tb_frame.f_globals['__name__'], tb[-1][2]) if request: data = dict( META=request.META, POST=request.POST, GET=request.GET, COOKIES=request.COOKIES, ) else: data = dict() extra = dict( url=request and request.build_absolute_uri() or None, data=data, view=view, ) if settings.USE_LOGGING: logger.critical(exc_value, exc_info=sys.exc_info(), extra=extra) else: SentryClient.create_from_exception(**extra) except Exception, exc: try: logger.exception(u'Unable to process log entry: %s' % (exc,)) except Exception, exc: warnings.warn(u'Unable to process log entry: %s' % (exc,))
def testAPI(self): try: Message.objects.get(id=999999989) except Message.DoesNotExist, exc: SentryClient.create_from_exception(exc)
self.assertEquals(last.class_name, 'DoesNotExist') self.assertEquals(last.level, logging.ERROR) self.assertEquals(last.message, smart_unicode(exc)) def testAPI(self): try: Message.objects.get(id=999999989) except Message.DoesNotExist, exc: SentryClient.create_from_exception(exc) else: self.fail('Unable to create `Message` entry.') try: Message.objects.get(id=999999989) except Message.DoesNotExist, exc: error = SentryClient.create_from_exception() self.assertTrue(error.data.get('__sentry__', {}).get('exc')) else: self.fail('Unable to create `Message` entry.') cur = (Message.objects.count(), GroupedMessage.objects.count()) self.assertEquals(cur, (2, 2), 'Assumed logs failed to save. %s' % (cur,)) last = Message.objects.all().order_by('-id')[0:1].get() self.assertEquals(last.logger, 'root') self.assertEquals(last.class_name, 'DoesNotExist') self.assertEquals(last.level, logging.ERROR) self.assertEquals(last.message, smart_unicode(exc)) SentryClient.create_from_text('This is an error', level=logging.DEBUG)