70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
import flask
|
|
import huey
|
|
import sentry_sdk
|
|
import sentry_sdk.integrations.flask
|
|
from huey import signals
|
|
|
|
sentry_sdk.init(
|
|
"https://379e370d4dee471b8ca5c7884d2137c0@o271257.ingest.sentry.io/6214795",
|
|
# Set traces_sample_rate to 1.0 to capture 100%
|
|
# of transactions for performance monitoring.
|
|
# We recommend adjusting this value in production.
|
|
traces_sample_rate=1.0,
|
|
with_locals=True,
|
|
max_breadcrumbs=100,
|
|
integrations=[sentry_sdk.integrations.flask.FlaskIntegration()],
|
|
)
|
|
|
|
worker = huey.SqliteHuey(filename='worker.sqlite3')
|
|
|
|
|
|
@worker.signal(signals.SIGNAL_EXECUTING, signals.SIGNAL_LOCKED, signals.SIGNAL_CANCELED, signals.SIGNAL_REVOKED)
|
|
def task_executing_handler(signal: str, task: huey.api.Task):
|
|
sentry_sdk.add_breadcrumb(
|
|
category='worker',
|
|
data=dict(
|
|
signal=signal,
|
|
task_id=task.id,
|
|
task_name=task.name,
|
|
task_retries=task.retries,
|
|
task_args=task.args,
|
|
task_kwargs=task.kwargs,
|
|
),
|
|
)
|
|
|
|
|
|
@worker.signal(signals.SIGNAL_ERROR)
|
|
def task_not_executed_handler(signal: str, task: huey.api.Task, exc: Exception):
|
|
with sentry_sdk.push_scope():
|
|
sentry_sdk.capture_exception(exc)
|
|
|
|
|
|
class SomeService:
|
|
@classmethod
|
|
@worker.task()
|
|
def do_something(cls, *args, **kwargs):
|
|
print(args, kwargs)
|
|
|
|
@classmethod
|
|
@worker.task()
|
|
def fail_something(cls, *args, **kwargs):
|
|
raise Exception('boom')
|
|
|
|
def do(self):
|
|
self.do_something(2, a=1)
|
|
|
|
def fail(self):
|
|
self.fail_something(2, a=1)
|
|
|
|
|
|
def test_request():
|
|
flask_app = flask.Flask(__name__)
|
|
|
|
@flask_app.post('/')
|
|
def fail():
|
|
SomeService().fail()
|
|
return {'a': 5}
|
|
|
|
flask_app.add_url_rule('/', 'home', fail)
|
|
flask_app.test_client().post('/', json={'a': 10})
|