Files
playground/worker.py
T
2023-02-18 07:39:08 +01:00

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})