Initial Commit
This commit is contained in:
0
sentry/__init__.py
Normal file
0
sentry/__init__.py
Normal file
58
sentry/sentry.py
Normal file
58
sentry/sentry.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
import tornado.gen
|
||||
|
||||
from common.log import logUtils as log
|
||||
from objects import glob
|
||||
|
||||
def capture():
|
||||
"""
|
||||
Sentry capture decorator. Use like this to send all unhandled exceptions to Sentry:
|
||||
```
|
||||
@sentry.capture()
|
||||
def blablabla():
|
||||
print("a a ben warem a ben ben)
|
||||
```
|
||||
When running `blablabla()`, the traceback will be print on screen and the
|
||||
exception will be sent to Sentry, if enabled.
|
||||
Requires tornado app in `glob.application` and sentry client in `glob.application.sentry_client`
|
||||
|
||||
:return:
|
||||
"""
|
||||
def decorator(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
try:
|
||||
return func(*args, **kwargs)
|
||||
except:
|
||||
log.error("Unhandled exception!\n```\n{}\n{}```".format(sys.exc_info(), traceback.format_exc()))
|
||||
if glob.sentry:
|
||||
glob.application.sentry_client.captureException()
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
def captureTornado(func):
|
||||
"""
|
||||
Capture an exception asynchronously in a tornado handler.
|
||||
Use it with asyncGet/asyncPost, like this:
|
||||
|
||||
```
|
||||
@tornado.web.asynchronous
|
||||
@tornado.gen.engine
|
||||
@sentry.captureTornado
|
||||
def asyncGet(self):
|
||||
...
|
||||
```
|
||||
|
||||
:param func:
|
||||
:return:
|
||||
"""
|
||||
def wrapper(self, *args, **kwargs):
|
||||
try:
|
||||
return func(self, *args, **kwargs)
|
||||
except:
|
||||
log.error("Unhandled exception!\n```\n{}\n{}```".format(sys.exc_info(), traceback.format_exc()))
|
||||
if glob.sentry:
|
||||
yield tornado.gen.Task(self.captureException, exc_info=True)
|
||||
return wrapper
|
Reference in New Issue
Block a user