diff options
| author | David Cramer <dcramer@gmail.com> | 2016-05-19 11:47:13 -0500 |
|---|---|---|
| committer | David Cramer <dcramer@gmail.com> | 2016-05-19 11:50:59 -0500 |
| commit | 026c2301f9d60ff08c8bf8f0801195869fccf7b2 (patch) | |
| tree | d5281a1d551e0f06aad9e91be790bf94d046a7c3 | |
| parent | 520746d847682508e946811e8a05b2098079dadf (diff) | |
| download | raven-improve-record-call.tar.gz | |
Improve record UX for crumbsimprove-record-call
| -rw-r--r-- | docs/breadcrumbs.rst | 8 | ||||
| -rw-r--r-- | raven/breadcrumbs.py | 28 |
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) |
