Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

Commit af74e2f

Browse files
authored
Merge pull request #987 from arnavk/arnav/sample_rate
Add provision to sample per message
2 parents 9c309c8 + f6ec18d commit af74e2f

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

raven/base.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,8 @@ def tags_context(self, data, **kwargs):
566566
})
567567

568568
def capture(self, event_type, data=None, date=None, time_spent=None,
569-
extra=None, stack=None, tags=None, **kwargs):
569+
extra=None, stack=None, tags=None, sample_rate=None,
570+
**kwargs):
570571
"""
571572
Captures and processes an event and pipes it off to SentryClient.send.
572573
@@ -636,7 +637,10 @@ def capture(self, event_type, data=None, date=None, time_spent=None,
636637
**kwargs)
637638

638639
# should this event be sampled?
639-
if self._random.random() < self.sample_rate:
640+
if sample_rate is None:
641+
sample_rate = self.sample_rate
642+
643+
if self._random.random() < sample_rate:
640644
self.send(**data)
641645

642646
self._local_state.last_event_id = data['event_id']

raven/handlers/logging.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,9 @@ def _emit(self, record, **kwargs):
174174
tags.update(getattr(record, 'tags', {}))
175175

176176
kwargs.update(handler_kwargs)
177+
sample_rate = extra.pop('sample_rate', None)
177178

178179
return self.client.capture(
179180
event_type, stack=stack, data=data,
180-
extra=extra, date=date, **kwargs)
181+
extra=extra, date=date, sample_rate=sample_rate,
182+
**kwargs)

tests/base/tests.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,20 @@ def test_client_extra_context(self):
551551
expected = {'logger': "u'test'", 'foo': "u'bar'"}
552552
self.assertEquals(event['extra'], expected)
553553

554+
def test_sample_rate(self):
555+
self.client.sample_rate = 0.0
556+
self.client.captureMessage(message='test')
557+
self.assertEquals(len(self.client.events), 0)
558+
559+
def test_sample_rate_per_message(self):
560+
self.client.sample_rate = 1
561+
self.client.captureMessage(message='test', sample_rate=0.0)
562+
self.assertEquals(len(self.client.events), 0)
563+
564+
self.client.sample_rate = 0
565+
self.client.captureMessage(message='test', sample_rate=1.0)
566+
self.assertEquals(len(self.client.events), 1)
567+
554568
def test_transport_registration(self):
555569
client = Client('http://public:[email protected]/1',
556570
transport=HTTPTransport)

tests/handlers/logging/tests.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,17 @@ def test_server_name_on_event(self):
262262
event = self.client.events.pop(0)
263263
assert event['server_name'] == 'foo'
264264

265+
def test_sample_rate(self):
266+
record = self.make_record('Message', extra={'sample_rate': 0.0})
267+
self.handler.emit(record)
268+
269+
self.assertEqual(len(self.client.events), 0)
270+
271+
record = self.make_record('Message', extra={'sample_rate': 1.0})
272+
self.handler.emit(record)
273+
274+
self.assertEqual(len(self.client.events), 1)
275+
265276

266277
class LoggingHandlerTest(TestCase):
267278
def test_client_arg(self):

0 commit comments

Comments
 (0)