summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2016-05-19 11:47:13 -0500
committerDavid Cramer <dcramer@gmail.com>2016-05-19 11:50:59 -0500
commit026c2301f9d60ff08c8bf8f0801195869fccf7b2 (patch)
treed5281a1d551e0f06aad9e91be790bf94d046a7c3
parent520746d847682508e946811e8a05b2098079dadf (diff)
downloadraven-improve-record-call.tar.gz
Improve record UX for crumbsimprove-record-call
-rw-r--r--docs/breadcrumbs.rst8
-rw-r--r--raven/breadcrumbs.py28
2 files changed, 24 insertions, 12 deletions
diff --git a/docs/breadcrumbs.rst b/docs/breadcrumbs.rst
index df0dcec..3f45489 100644
--- a/docs/breadcrumbs.rst
+++ b/docs/breadcrumbs.rst
@@ -1,5 +1,5 @@
-Logging Breadcrumbs
-===================
+Breadcrumbs
+===========
Newer Sentry versions support logging of breadcrumbs in addition of
errors. This means that whenever an error or other Sentry event is
@@ -88,7 +88,7 @@ Example:
from raven.breadcrumbs import record_breadcrumb
- record_breadcrumb('default', message='This is an important message',
+ record_breadcrumb(message='This is an important message',
category='my_module', level='warning')
Because crumbs go into a ring buffer, often it can be useful to defer
@@ -103,7 +103,7 @@ modifications:
def process_crumb(data):
data['data'] = compute_expensive_data()
- record_breadcrumb('default', message='This is an important message',
+ record_breadcrumb(message='This is an important message',
category='my_module', level='warning',
processor=process_crumb)
diff --git a/raven/breadcrumbs.py b/raven/breadcrumbs.py
index 6d298e9..fa78923 100644
--- a/raven/breadcrumbs.py
+++ b/raven/breadcrumbs.py
@@ -30,8 +30,11 @@ class BreadcrumbBuffer(object):
self.buffer = []
self.limit = limit
- def record(self, type, timestamp=None, level=None, message=None,
+ def record(self, message=None, timestamp=None, level=None, type='default',
category=None, data=None, processor=None):
+ if not (message or data or processor):
+ raise ValueError('You must pass either `message`, `data`, or `processor`')
+
if timestamp is None:
timestamp = time.time()
self.buffer.append(({
@@ -56,6 +59,8 @@ class BreadcrumbBuffer(object):
except Exception:
logger.exception('Failed to process breadcrumbs. Ignored')
payload = None
+ if not (payload.get('data') or payload.get('message')):
+ raise ValueError('Missing required attribute: `message` or `data`')
self.buffer[idx] = (payload, None)
if payload is not None and \
(not rv or not event_payload_considered_equal(rv[-1], payload)):
@@ -74,8 +79,8 @@ def make_buffer(enabled=True):
return BlackholeBreadcrumbBuffer()
-def record_breadcrumb(type, timestamp=None, level=None,
- message=None, category=None, data=None,
+def record_breadcrumb(message=None, timestamp=None, level=None,
+ type='default', category=None, data=None,
processor=None):
"""Records a breadcrumb for all active clients. This is what integration
code should use rather than invoking the `captureBreadcrumb` method
@@ -84,8 +89,15 @@ def record_breadcrumb(type, timestamp=None, level=None,
if timestamp is None:
timestamp = time.time()
for ctx in raven.context.get_active_contexts():
- ctx.breadcrumbs.record(type, timestamp, level, message,
- category, data, processor)
+ ctx.breadcrumbs.record(
+ type=type,
+ timestamp=timestamp,
+ level=level,
+ message=message,
+ category=category,
+ data=data,
+ processor=processor,
+ )
def _record_log_breadcrumb(logger, level, msg, *args, **kwargs):
@@ -118,7 +130,7 @@ def _record_log_breadcrumb(logger, level, msg, *args, **kwargs):
'level': logging.getLevelName(level).lower(),
'data': kwargs,
})
- record_breadcrumb('default', processor=processor)
+ record_breadcrumb(type='default', processor=processor)
def _wrap_logging_method(meth, level=None):
@@ -261,7 +273,7 @@ def _hook_requests():
def send(self, request, *args, **kwargs):
def _record_request(response):
- record_breadcrumb('http', category='requests', data={
+ record_breadcrumb(type='http', category='requests', data={
'url': request.url,
'method': request.method,
'status_code': response and response.status_code or None,
@@ -313,7 +325,7 @@ def _install_httplib():
}
data['data'].update(status)
return data
- record_breadcrumb('http', category='requests',
+ record_breadcrumb(type='http', category='requests',
processor=processor)
return real_putrequest(self, method, url, *args, **kwargs)