def test_raise_exception_on_send_error(self, should_try, _send_remote): should_try.return_value = True client = Client( servers=['sync+http://example.com'], public_key='public', secret_key='secret', project=1, ) # Test for the default behaviour in which a send error is handled by the client _send_remote.side_effect = Exception() client.capture('Message', data={}, date=None, time_spent=10, extra={}, stack=None, tags=None, message='Test message') assert client.state.status == client.state.ERROR # Test for the case in which a send error is raised to the calling frame. client = Client( servers=['sync+http://example.com'], public_key='public', secret_key='secret', project=1, raise_send_errors=True, ) with self.assertRaises(Exception): client.capture('Message', data={}, date=None, time_spent=10, extra={}, stack=None, tags=None, message='Test message')
def test_raise_exception_on_send_error(self, should_try, _send_remote): should_try.return_value = True client = Client(dsn='sync+http://public:[email protected]/1', ) # Test for the default behaviour in which a send error is handled by the client _send_remote.side_effect = Exception() client.capture('Message', data={}, date=None, time_spent=10, extra={}, stack=None, tags=None, message='Test message') assert client.state.status == client.state.ERROR # Test for the case in which a send error is raised to the calling frame. client = Client( dsn='sync+http://public:[email protected]/1', raise_send_errors=True, ) with self.assertRaises(Exception): client.capture('Message', data={}, date=None, time_spent=10, extra={}, stack=None, tags=None, message='Test message')
class ThreadedTransportTest(TestCase): def setUp(self): self.client = Client( dsn="threaded+http://some_username:some_password@localhost:8143/1", ) @mock.patch('raven.transport.base.HTTPTransport.send') def test_does_send(self, send): self.client.capture('Message', message='foo') time.sleep(0) # TODO: This test could be more precise by ensuring it's sending the same params that are sent # to the ThreadedHTTPTransport.send() method send.assert_called_once()
def test_raise_exception_on_send_error(self, should_try, _send_remote): should_try.return_value = True client = Client(dsn="sync+http://public:[email protected]/1") # Test for the default behaviour in which a send error is handled by the client _send_remote.side_effect = Exception() client.capture( "Message", data={}, date=None, time_spent=10, extra={}, stack=None, tags=None, message="Test message" ) assert client.state.status == client.state.ERROR # Test for the case in which a send error is raised to the calling frame. client = Client(dsn="sync+http://public:[email protected]/1", raise_send_errors=True) with self.assertRaises(Exception): client.capture( "Message", data={}, date=None, time_spent=10, extra={}, stack=None, tags=None, message="Test message" )
class SentryHandler(logging.Handler, object): reserved = ['threadName', 'name', 'thread', 'created', 'process', 'processName', 'args', 'module', 'filename', 'levelno', 'exc_text', 'pathname', 'lineno', 'msg', 'exc_info', 'funcName', 'relativeCreated', 'levelname', 'msecs', 'data', 'stack', 'message'] def __init__(self, *args, **kwargs): if len(args) == 1: self.client = args[0] elif 'client' in kwargs: self.client = kwargs['client'] elif len(args) == 2 and not kwargs: servers, key = args self.client = Client(servers=servers, key=key) else: self.client = Client(*args, **kwargs) logging.Handler.__init__(self) def emit(self, record): # from sentry.client.middleware import SentryLogMiddleware # # Fetch the request from a threadlocal variable, if available # request = getattr(SentryLogMiddleware.thread, 'request', None) self.format(record) # Avoid typical config issues by overriding loggers behavior if record.name == 'sentry.errors': print >> sys.stderr, record.message return try: return self._emit(record) except Exception: print >> sys.stderr, "Top level Sentry exception caught - failed creating log record" print >> sys.stderr, record.msg print >> sys.stderr, traceback.format_exc() try: self.client.capture('Exception') except Exception: pass def _emit(self, record, **kwargs): # {'threadName': 'MainThread', 'name': 'foo', 'thread': 140735216916832, 'created': 1319164393.308008, 'process': 89141, 'processName': 'MainProcess', 'args': (), 'module': 'Unknown module', 'filename': None, 'levelno': 20, 'exc_text': None, 'pathname': None, 'lineno': None, 'msg': 'test', 'exc_info': (None, None, None), 'funcName': None, 'relativeCreated': 3441.9949054718018, 'levelname': 'INFO', 'msecs': 308.00795555114746} extra = {} for k, v in record.__dict__.iteritems(): if k in self.reserved: continue extra[k] = v data = getattr(record, 'data', {}) date = datetime.datetime.utcfromtimestamp(record.created) # If there's no exception being processed, exc_info may be a 3-tuple of None # http://docs.python.org/library/sys.html#sys.exc_info if record.exc_info and all(record.exc_info): handler = self.client.get_handler('raven.events.Exception') data.update(handler.capture(exc_info=record.exc_info)) data['level'] = record.levelno data['logger'] = record.name return self.client.capture('Message', message=record.msg, params=record.args, stack=getattr(record, 'stack', None), data=data, extra=extra, date=date, **kwargs)
class SentryHandler(logging.Handler, object): def __init__(self, *args, **kwargs): if len(args) == 1: self.client = args[0] elif 'client' in kwargs: self.client = kwargs['client'] elif len(args) == 2 and not kwargs: servers, key = args self.client = Client(servers=servers, key=key) else: self.client = Client(*args, **kwargs) logging.Handler.__init__(self) def emit(self, record): # from sentry.client.middleware import SentryLogMiddleware # # Fetch the request from a threadlocal variable, if available # request = getattr(SentryLogMiddleware.thread, 'request', None) self.format(record) # Avoid typical config issues by overriding loggers behavior if record.name == 'sentry.errors': print >> sys.stderr, record.message return try: return self._emit(record) except Exception: print >> sys.stderr, "Top level Sentry exception caught - failed creating log record" print >> sys.stderr, record.msg print >> sys.stderr, traceback.format_exc() try: self.client.capture('Exception') except Exception: pass def _emit(self, record, **kwargs): data = {} for k, v in record.__dict__.iteritems(): if '.' not in k: continue data[k] = v stack = getattr(record, 'stack', None) if stack is True: stack = iter_stack_frames() if stack: frames = [] started = False last_mod = '' for frame in iter_stack_frames(): if not started: f_globals = getattr(frame, 'f_globals', {}) module_name = f_globals.get('__name__', '') if last_mod.startswith('logging') and not module_name.startswith('logging'): started = True else: last_mod = module_name continue frames.append(frame) stack = frames extra = getattr(record, 'data', {}) date = datetime.datetime.utcfromtimestamp(record.created) # If there's no exception being processed, exc_info may be a 3-tuple of None # http://docs.python.org/library/sys.html#sys.exc_info if record.exc_info and all(record.exc_info): handler = self.client.get_handler('raven.events.Exception') data.update(handler.capture(exc_info=record.exc_info)) data['level'] = record.levelno data['logger'] = record.name return self.client.capture('Message', message=record.msg, params=record.args, stack=stack, data=data, extra=extra, date=date, **kwargs)
def error_reporter(request): request._request.CORS = ['POST'] client = Client(settings.SENTRY_DSN) client.capture('raven.events.Exception', data=request.DATA) return Response(status=204)
class SentryHandler(logging.Handler): reserved = ['threadName', 'name', 'thread', 'created', 'process', 'processName', 'args', 'module', 'filename', 'levelno', 'exc_text', 'pathname', 'lineno', 'msg', 'exc_info', 'funcName', 'relativeCreated', 'levelname', 'msecs', 'data', 'stack', 'message'] def __init__(self, *args, **kwargs): if len(args) == 1: self.client = args[0] elif 'client' in kwargs: self.client = kwargs['client'] elif len(args) == 2 and not kwargs: servers, key = args self.client = Client(servers=servers, key=key) else: self.client = Client(*args, **kwargs) logging.Handler.__init__(self) def emit(self, record): # from sentry.client.middleware import SentryLogMiddleware # # Fetch the request from a threadlocal variable, if available # request = getattr(SentryLogMiddleware.thread, 'request', None) self.format(record) # Avoid typical config issues by overriding loggers behavior if record.name == 'sentry.errors': print >> sys.stderr, record.message return try: return self._emit(record) except Exception: print >> sys.stderr, "Top level Sentry exception caught - failed creating log record" print >> sys.stderr, record.msg print >> sys.stderr, traceback.format_exc() try: self.client.capture('Exception') except Exception: pass def _emit(self, record, **kwargs): # {'threadName': 'MainThread', 'name': 'foo', 'thread': 140735216916832, 'created': 1319164393.308008, 'process': 89141, 'processName': 'MainProcess', 'args': (), 'module': 'Unknown module', 'filename': None, 'levelno': 20, 'exc_text': None, 'pathname': None, 'lineno': None, 'msg': 'test', 'exc_info': (None, None, None), 'funcName': None, 'relativeCreated': 3441.9949054718018, 'levelname': 'INFO', 'msecs': 308.00795555114746} extra = {} for k, v in record.__dict__.iteritems(): if k in self.reserved: continue extra[k] = v data = getattr(record, 'data', {}) date = datetime.datetime.utcfromtimestamp(record.created) # If there's no exception being processed, exc_info may be a 3-tuple of None # http://docs.python.org/library/sys.html#sys.exc_info if record.exc_info and all(record.exc_info): handler = self.client.get_handler('raven.events.Exception') data.update(handler.capture(exc_info=record.exc_info)) data['level'] = record.levelno data['logger'] = record.name return self.client.capture('Message', message=record.msg, params=record.args, stack=getattr(record, 'stack', None), data=data, extra=extra, date=date, **kwargs)