summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2017-04-03 11:33:19 -0700
committerGitHub <noreply@github.com>2017-04-03 11:33:19 -0700
commitaf74e2f5c40b6b379d2c583a764fb6810fc1b819 (patch)
tree7ef1e3edefd451a1473836ba140f8c197be5e3f0
parent9c309c88ecad1d728597e07f7f1a7f7b9f077753 (diff)
parentf6ec18d1a233ed4fe6596db0edda8a6e63a4e6ec (diff)
downloadraven-af74e2f5c40b6b379d2c583a764fb6810fc1b819.tar.gz
Merge pull request #987 from arnavk/arnav/sample_rate
Add provision to sample per message
-rw-r--r--raven/base.py8
-rw-r--r--raven/handlers/logging.py4
-rw-r--r--tests/base/tests.py14
-rw-r--r--tests/handlers/logging/tests.py11
4 files changed, 34 insertions, 3 deletions
diff --git a/raven/base.py b/raven/base.py
index 3627f33..a41508b 100644
--- a/raven/base.py
+++ b/raven/base.py
@@ -566,7 +566,8 @@ class Client(object):
})
def capture(self, event_type, data=None, date=None, time_spent=None,
- extra=None, stack=None, tags=None, **kwargs):
+ extra=None, stack=None, tags=None, sample_rate=None,
+ **kwargs):
"""
Captures and processes an event and pipes it off to SentryClient.send.
@@ -636,7 +637,10 @@ class Client(object):
**kwargs)
# should this event be sampled?
- if self._random.random() < self.sample_rate:
+ if sample_rate is None:
+ sample_rate = self.sample_rate
+
+ if self._random.random() < sample_rate:
self.send(**data)
self._local_state.last_event_id = data['event_id']
diff --git a/raven/handlers/logging.py b/raven/handlers/logging.py
index 3764c07..39f60d8 100644
--- a/raven/handlers/logging.py
+++ b/raven/handlers/logging.py
@@ -174,7 +174,9 @@ class SentryHandler(logging.Handler, object):
tags.update(getattr(record, 'tags', {}))
kwargs.update(handler_kwargs)
+ sample_rate = extra.pop('sample_rate', None)
return self.client.capture(
event_type, stack=stack, data=data,
- extra=extra, date=date, **kwargs)
+ extra=extra, date=date, sample_rate=sample_rate,
+ **kwargs)
diff --git a/tests/base/tests.py b/tests/base/tests.py
index 736cf1c..5644db0 100644
--- a/tests/base/tests.py
+++ b/tests/base/tests.py
@@ -551,6 +551,20 @@ class ClientTest(TestCase):
expected = {'logger': "u'test'", 'foo': "u'bar'"}
self.assertEquals(event['extra'], expected)
+ def test_sample_rate(self):
+ self.client.sample_rate = 0.0
+ self.client.captureMessage(message='test')
+ self.assertEquals(len(self.client.events), 0)
+
+ def test_sample_rate_per_message(self):
+ self.client.sample_rate = 1
+ self.client.captureMessage(message='test', sample_rate=0.0)
+ self.assertEquals(len(self.client.events), 0)
+
+ self.client.sample_rate = 0
+ self.client.captureMessage(message='test', sample_rate=1.0)
+ self.assertEquals(len(self.client.events), 1)
+
def test_transport_registration(self):
client = Client('http://public:secret@example.com/1',
transport=HTTPTransport)
diff --git a/tests/handlers/logging/tests.py b/tests/handlers/logging/tests.py
index 163b8ab..5b6dc5b 100644
--- a/tests/handlers/logging/tests.py
+++ b/tests/handlers/logging/tests.py
@@ -262,6 +262,17 @@ class LoggingIntegrationTest(TestCase):
event = self.client.events.pop(0)
assert event['server_name'] == 'foo'
+ def test_sample_rate(self):
+ record = self.make_record('Message', extra={'sample_rate': 0.0})
+ self.handler.emit(record)
+
+ self.assertEqual(len(self.client.events), 0)
+
+ record = self.make_record('Message', extra={'sample_rate': 1.0})
+ self.handler.emit(record)
+
+ self.assertEqual(len(self.client.events), 1)
+
class LoggingHandlerTest(TestCase):
def test_client_arg(self):