@@ -98,7 +98,8 @@ def kill(self):
98
98
def record_lost_event (
99
99
self ,
100
100
reason , # type: str
101
- data_category = "default" , # type: str
101
+ data_category = None , # type: Optional[str]
102
+ item = None , # type: Optional[Item]
102
103
):
103
104
# type: (...) -> None
104
105
"""This increments a counter for event loss by reason and
@@ -164,11 +165,22 @@ def __init__(
164
165
def record_lost_event (
165
166
self ,
166
167
reason , # type: str
167
- data_category = "default" , # type: str
168
+ data_category = None , # type: Optional[str]
169
+ item = None , # type: Optional[Item]
168
170
):
169
171
# 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
172
184
173
185
def _update_rate_limits (self , response ):
174
186
# type: (urllib3.HTTPResponse) -> None
@@ -201,10 +213,10 @@ def _send_request(
201
213
def record_loss (reason ):
202
214
# type: (str) -> None
203
215
if envelope is None :
204
- self .record_lost_event (reason , "error" )
216
+ self .record_lost_event (reason , data_category = "error" )
205
217
else :
206
218
for item in envelope .items :
207
- self .record_lost_event (reason , item . data_category )
219
+ self .record_lost_event (reason , item = item )
208
220
209
221
headers .update (
210
222
{
@@ -251,9 +263,9 @@ def on_dropped_event(self, reason):
251
263
return None
252
264
253
265
def _fetch_pending_client_report (self , force = False ):
254
- # type: (bool) -> None
266
+ # type: (bool) -> Optional[Item]
255
267
if not self .options ["send_client_reports" ]:
256
- return
268
+ return None
257
269
discarded_events = self ._discarded_events
258
270
259
271
if (
@@ -264,7 +276,7 @@ def _fetch_pending_client_report(self, force=False):
264
276
)
265
277
or not discarded_events
266
278
):
267
- return
279
+ return None
268
280
269
281
self ._discarded_events = defaultdict (int )
270
282
self ._last_event_loss_sent = time .time ()
@@ -307,7 +319,7 @@ def _send_event(
307
319
308
320
if self ._check_disabled ("error" ):
309
321
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" )
311
323
return None
312
324
313
325
body = io .BytesIO ()
@@ -342,7 +354,7 @@ def _send_envelope(
342
354
if self ._check_disabled (item .data_category ):
343
355
if item .data_category in ("transaction" , "error" , "default" ):
344
356
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 )
346
358
else :
347
359
new_items .append (item )
348
360
@@ -441,7 +453,7 @@ def send_event_wrapper():
441
453
442
454
if not self ._worker .submit (send_event_wrapper ):
443
455
self .on_dropped_event ("full_queue" )
444
- self .record_lost_event ("queue_overflow" , "error" )
456
+ self .record_lost_event ("queue_overflow" , data_category = "error" )
445
457
446
458
self ._flush_client_reports ()
447
459
@@ -460,7 +472,7 @@ def send_envelope_wrapper():
460
472
if not self ._worker .submit (send_envelope_wrapper ):
461
473
self .on_dropped_event ("full_queue" )
462
474
for item in envelope .items :
463
- self .record_lost_event ("queue_overflow" , item . data_category )
475
+ self .record_lost_event ("queue_overflow" , item = item )
464
476
465
477
self ._flush_client_reports ()
466
478
0 commit comments