Skip to content

Commit add2c4c

Browse files
committed
ref: correctly count bytes for attachments
1 parent 1ccaf30 commit add2c4c

File tree

3 files changed

+29
-15
lines changed

3 files changed

+29
-15
lines changed

sentry_sdk/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ def _should_capture(
245245
):
246246
# record a lost event if we did not sample this.
247247
if self.transport:
248-
self.transport.record_lost_event("sample_rate", "error")
248+
self.transport.record_lost_event("sample_rate", data_category="error")
249249
return False
250250

251251
if self._is_ignored_error(event, hint):

sentry_sdk/tracing.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,9 @@ def finish(self, hub=None):
518518
# exclusively based on sample rate but also traces sampler, but
519519
# we handle this the same here.
520520
if client and client.transport:
521-
client.transport.record_lost_event("sample_rate", "transaction")
521+
client.transport.record_lost_event(
522+
"sample_rate", data_category="transaction"
523+
)
522524

523525
return None
524526

sentry_sdk/transport.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ def kill(self):
9898
def record_lost_event(
9999
self,
100100
reason, # type: str
101-
data_category="default", # type: str
101+
data_category=None, # type: Optional[str]
102+
item=None, # type: Optional[Item]
102103
):
103104
# type: (...) -> None
104105
"""This increments a counter for event loss by reason and
@@ -164,11 +165,22 @@ def __init__(
164165
def record_lost_event(
165166
self,
166167
reason, # type: str
167-
data_category="default", # type: str
168+
data_category=None, # type: Optional[str]
169+
item=None, # type: Optional[Item]
168170
):
169171
# type: (...) -> None
170-
if self.options["send_client_reports"]:
171-
self._discarded_events[data_category, reason] += 1
172+
if not self.options["send_client_reports"]:
173+
return
174+
175+
quantity = 1
176+
if item is not None:
177+
data_category = item.data_category
178+
if data_category == "attachment":
179+
quantity = len(item.get_bytes())
180+
elif data_category is None:
181+
raise TypeError("data category not provided")
182+
183+
self._discarded_events[data_category, reason] += quantity
172184

173185
def _update_rate_limits(self, response):
174186
# type: (urllib3.HTTPResponse) -> None
@@ -201,10 +213,10 @@ def _send_request(
201213
def record_loss(reason):
202214
# type: (str) -> None
203215
if envelope is None:
204-
self.record_lost_event(reason, "error")
216+
self.record_lost_event(reason, data_category="error")
205217
else:
206218
for item in envelope.items:
207-
self.record_lost_event(reason, item.data_category)
219+
self.record_lost_event(reason, item=item)
208220

209221
headers.update(
210222
{
@@ -251,9 +263,9 @@ def on_dropped_event(self, reason):
251263
return None
252264

253265
def _fetch_pending_client_report(self, force=False):
254-
# type: (bool) -> None
266+
# type: (bool) -> Optional[Item]
255267
if not self.options["send_client_reports"]:
256-
return
268+
return None
257269
discarded_events = self._discarded_events
258270

259271
if (
@@ -264,7 +276,7 @@ def _fetch_pending_client_report(self, force=False):
264276
)
265277
or not discarded_events
266278
):
267-
return
279+
return None
268280

269281
self._discarded_events = defaultdict(int)
270282
self._last_event_loss_sent = time.time()
@@ -307,7 +319,7 @@ def _send_event(
307319

308320
if self._check_disabled("error"):
309321
self.on_dropped_event("self_rate_limits")
310-
self.record_lost_event("ratelimit_backoff", "error")
322+
self.record_lost_event("ratelimit_backoff", data_category="error")
311323
return None
312324

313325
body = io.BytesIO()
@@ -342,7 +354,7 @@ def _send_envelope(
342354
if self._check_disabled(item.data_category):
343355
if item.data_category in ("transaction", "error", "default"):
344356
self.on_dropped_event("self_rate_limits")
345-
self.record_lost_event("ratelimit_backoff", item.data_category)
357+
self.record_lost_event("ratelimit_backoff", item=item)
346358
else:
347359
new_items.append(item)
348360

@@ -441,7 +453,7 @@ def send_event_wrapper():
441453

442454
if not self._worker.submit(send_event_wrapper):
443455
self.on_dropped_event("full_queue")
444-
self.record_lost_event("queue_overflow", "error")
456+
self.record_lost_event("queue_overflow", data_category="error")
445457

446458
self._flush_client_reports()
447459

@@ -460,7 +472,7 @@ def send_envelope_wrapper():
460472
if not self._worker.submit(send_envelope_wrapper):
461473
self.on_dropped_event("full_queue")
462474
for item in envelope.items:
463-
self.record_lost_event("queue_overflow", item.data_category)
475+
self.record_lost_event("queue_overflow", item=item)
464476

465477
self._flush_client_reports()
466478

0 commit comments

Comments
 (0)