Skip to content

Commit 8e3ddf9

Browse files
authored
Sort breadcrumbs before sending (#3307)
Make sure our breadcrumbs are sorted by timestamp before sending to Sentry. Fixes #3306
1 parent 6f814e6 commit 8e3ddf9

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

sentry_sdk/scope.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,6 +1298,7 @@ def _apply_breadcrumbs_to_event(self, event, hint, options):
12981298
event.setdefault("breadcrumbs", {}).setdefault("values", []).extend(
12991299
self._breadcrumbs
13001300
)
1301+
event["breadcrumbs"]["values"].sort(key=lambda crumb: crumb["timestamp"])
13011302

13021303
def _apply_user_to_event(self, event, hint, options):
13031304
# type: (Event, Hint, Optional[Dict[str, Any]]) -> None

tests/test_basics.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
import logging
23
import os
34
import sys
@@ -391,6 +392,37 @@ def test_breadcrumbs(sentry_init, capture_events):
391392
assert len(event["breadcrumbs"]["values"]) == 0
392393

393394

395+
def test_breadcrumb_ordering(sentry_init, capture_events):
396+
sentry_init()
397+
events = capture_events()
398+
399+
timestamps = [
400+
datetime.datetime.now() - datetime.timedelta(days=10),
401+
datetime.datetime.now() - datetime.timedelta(days=8),
402+
datetime.datetime.now() - datetime.timedelta(days=12),
403+
]
404+
405+
for timestamp in timestamps:
406+
add_breadcrumb(
407+
message="Authenticated at %s" % timestamp,
408+
category="auth",
409+
level="info",
410+
timestamp=timestamp,
411+
)
412+
413+
capture_exception(ValueError())
414+
(event,) = events
415+
416+
assert len(event["breadcrumbs"]["values"]) == len(timestamps)
417+
timestamps_from_event = [
418+
datetime.datetime.strptime(
419+
x["timestamp"].replace("Z", ""), "%Y-%m-%dT%H:%M:%S.%f"
420+
)
421+
for x in event["breadcrumbs"]["values"]
422+
]
423+
assert timestamps_from_event == sorted(timestamps)
424+
425+
394426
def test_attachments(sentry_init, capture_envelopes):
395427
sentry_init()
396428
envelopes = capture_envelopes()

0 commit comments

Comments
 (0)