Skip to content

Commit 7d19bdd

Browse files
author
Vlad Vladov
committed
Add wrapper for Celery().send_task to support behavior as Task.apply_async
1 parent a7b4144 commit 7d19bdd

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

sentry_sdk/integrations/celery.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,10 @@ def sentry_build_tracer(name, task, *args, **kwargs):
107107
trace.build_tracer = sentry_build_tracer
108108

109109
from celery.app.task import Task # type: ignore
110+
from celery import Celery # type: ignore
110111

111112
Task.apply_async = _wrap_apply_async(Task.apply_async)
113+
Celery.send_task = _wrap_apply_async(Celery.send_task)
112114

113115
_patch_worker_exit()
114116

@@ -154,9 +156,12 @@ def apply_async(*args, **kwargs):
154156
if not propagate_traces:
155157
return f(*args, **kwargs)
156158

157-
with hub.start_span(
158-
op=OP.QUEUE_SUBMIT_CELERY, description=args[0].name
159-
) as span:
159+
if isinstance(args[0], Task):
160+
description = args[0].name
161+
else:
162+
description = args[1]
163+
164+
with hub.start_span(op=OP.QUEUE_SUBMIT_CELERY, description=description) as span:
160165
with capture_internal_exceptions():
161166
headers = dict(hub.iter_trace_propagation_headers(span))
162167
if integration.monitor_beat_tasks:

tests/integrations/celery/test_celery.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,9 +357,12 @@ def dummy_task(self):
357357

358358

359359
# TODO: This test is hanging when running test with `tox --parallel auto`. Find out why and fix it!
360-
@pytest.mark.skip
360+
# @pytest.mark.skip
361361
@pytest.mark.forked
362-
def test_redis_backend_trace_propagation(init_celery, capture_events_forksafe):
362+
@pytest.mark.parametrize("execution_way", ["apply_async", "send_task"])
363+
def test_redis_backend_trace_propagation(
364+
init_celery, capture_events_forksafe, execution_way
365+
):
363366
celery = init_celery(traces_sample_rate=1.0, backend="redis", debug=True)
364367

365368
events = capture_events_forksafe()
@@ -373,7 +376,12 @@ def dummy_task(self):
373376

374377
with start_transaction(name="submit_celery"):
375378
# Curious: Cannot use delay() here or py2.7-celery-4.2 crashes
376-
res = dummy_task.apply_async()
379+
if execution_way == "apply_async":
380+
res = dummy_task.apply_async()
381+
elif execution_way == "send_task":
382+
res = celery.send_task("dummy_task")
383+
else: # pragma: no cover
384+
raise ValueError(execution_way)
377385

378386
with pytest.raises(Exception): # noqa: B017
379387
# Celery 4.1 raises a gibberish exception

0 commit comments

Comments
 (0)