Skip to content

Commit 391396a

Browse files
authored
feat: Send transactions in envelopes (#729)
This matches what the JS SDK does and what the Tracing dev docs indicates.
1 parent e083488 commit 391396a

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

sentry_sdk/client.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77

88
from sentry_sdk._compat import string_types, text_type, iteritems
99
from sentry_sdk.utils import (
10-
handle_in_app,
11-
get_type_name,
1210
capture_internal_exceptions,
1311
current_stacktrace,
1412
disable_capture_event,
13+
format_timestamp,
14+
get_type_name,
15+
handle_in_app,
1516
logger,
1617
)
1718
from sentry_sdk.serializer import serialize
@@ -20,7 +21,7 @@
2021
from sentry_sdk.integrations import setup_integrations
2122
from sentry_sdk.utils import ContextVar
2223
from sentry_sdk.sessions import SessionFlusher
23-
from sentry_sdk.envelope import Envelope
24+
from sentry_sdk.envelope import Envelope, Item, PayloadRef
2425

2526
from sentry_sdk._types import MYPY
2627

@@ -334,7 +335,22 @@ def capture_event(
334335
if session:
335336
self._update_session_from_event(session, event)
336337

337-
self.transport.capture_event(event_opt)
338+
if event_opt.get("type") == "transaction":
339+
# Transactions should go to the /envelope/ endpoint.
340+
self.transport.capture_envelope(
341+
Envelope(
342+
headers={
343+
"event_id": event_opt["event_id"],
344+
"sent_at": format_timestamp(datetime.utcnow()),
345+
},
346+
items=[
347+
Item(payload=PayloadRef(json=event_opt), type="transaction"),
348+
],
349+
)
350+
)
351+
else:
352+
# All other events go to the /store/ endpoint.
353+
self.transport.capture_event(event_opt)
338354
return event_id
339355

340356
def capture_session(

tests/conftest.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,20 @@ def inner():
211211
events = []
212212
test_client = sentry_sdk.Hub.current.client
213213
old_capture_event = test_client.transport.capture_event
214+
old_capture_envelope = test_client.transport.capture_envelope
214215

215-
def append(event):
216+
def append_event(event):
216217
events.append(event)
217218
return old_capture_event(event)
218219

219-
monkeypatch.setattr(test_client.transport, "capture_event", append)
220+
def append_envelope(envelope):
221+
for item in envelope:
222+
if item.headers.get("type") in ("event", "transaction"):
223+
events.append(item.payload.json)
224+
return old_capture_envelope(envelope)
225+
226+
monkeypatch.setattr(test_client.transport, "capture_event", append_event)
227+
monkeypatch.setattr(test_client.transport, "capture_envelope", append_envelope)
220228
return events
221229

222230
return inner

tests/test_tracing.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def test_basic(sentry_init, capture_events, sample_rate):
2222
pass
2323

2424
if sample_rate:
25-
(event,) = events
25+
assert len(events) == 1
26+
event = events[0]
2627

2728
span1, span2 = event["spans"]
2829
parent_span = event

0 commit comments

Comments
 (0)