@@ -168,6 +168,45 @@ def test_metrics_tracing_without_performance(sentry_init, capture_envelopes):
168168def test_metrics_before_send (sentry_init , capture_envelopes ):
169169 before_metric_called = False
170170
171+ def _before_metric (record , hint ):
172+ nonlocal before_metric_called
173+
174+ assert set (record .keys ()) == {
175+ "timestamp" ,
176+ "trace_id" ,
177+ "span_id" ,
178+ "name" ,
179+ "type" ,
180+ "value" ,
181+ "unit" ,
182+ "attributes" ,
183+ }
184+
185+ if record ["name" ] == "test.skip" :
186+ return None
187+
188+ before_metric_called = True
189+ return record
190+
191+ sentry_init (
192+ before_send_metric = _before_metric ,
193+ )
194+ envelopes = capture_envelopes ()
195+
196+ sentry_sdk .metrics .count ("test.skip" , 1 )
197+ sentry_sdk .metrics .count ("test.keep" , 1 )
198+
199+ get_client ().flush ()
200+
201+ metrics = envelopes_to_metrics (envelopes )
202+ assert len (metrics ) == 1
203+ assert metrics [0 ]["name" ] == "test.keep"
204+ assert before_metric_called
205+
206+
207+ def test_metrics_experimental_before_send (sentry_init , capture_envelopes ):
208+ before_metric_called = False
209+
171210 def _before_metric (record , hint ):
172211 nonlocal before_metric_called
173212
@@ -204,3 +243,27 @@ def _before_metric(record, hint):
204243 assert len (metrics ) == 1
205244 assert metrics [0 ]["name" ] == "test.keep"
206245 assert before_metric_called
246+
247+
248+ def test_batcher_drops_metrics (sentry_init , monkeypatch ):
249+ sentry_init ()
250+ client = sentry_sdk .get_client ()
251+
252+ def no_op_flush ():
253+ pass
254+
255+ monkeypatch .setattr (client .metrics_batcher , "_flush" , no_op_flush )
256+
257+ lost_event_calls = []
258+
259+ def record_lost_event (reason , data_category , quantity ):
260+ lost_event_calls .append ((reason , data_category , quantity ))
261+
262+ monkeypatch .setattr (client .metrics_batcher , "_record_lost_func" , record_lost_event )
263+
264+ for i in range (10_005 ): # 5 metrics over the hard limit
265+ sentry_sdk .metrics .count ("test.counter" , 1 )
266+
267+ assert len (lost_event_calls ) == 5
268+ for lost_event_call in lost_event_calls :
269+ assert lost_event_call == ("queue_overflow" , "trace_metric" , 1 )
0 commit comments