summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Ronacher <armin.ronacher@active-4.com>2016-05-02 17:03:08 +0200
committerArmin Ronacher <armin.ronacher@active-4.com>2016-05-02 17:03:08 +0200
commit74a4e3fcef00ae18f3897f520585f4587a2f1048 (patch)
tree9ee67acd3e8bd3091921f4198f5c1741172ae28e
parent6073a9c3249e26402e8d7901a45594ba95248355 (diff)
downloadraven-74a4e3fcef00ae18f3897f520585f4587a2f1048.tar.gz
Converted to new submission system
-rw-r--r--raven/base.py2
-rw-r--r--raven/breadcrumbs.py63
2 files changed, 35 insertions, 30 deletions
diff --git a/raven/base.py b/raven/base.py
index 4be8568..4d03e22 100644
--- a/raven/base.py
+++ b/raven/base.py
@@ -828,7 +828,7 @@ class Client(object):
# Note: framework integration should not call this method but
# instead use the raven.breadcrumbs.record_breadcrumb function
# which will record to the correct client automatically.
- self.context.breadcrumbs.record(type, dict(*args, **kwargs))
+ self.context.breadcrumbs.record(type, *args, **kwargs)
capture_breadcrumb = captureBreadcrumb
diff --git a/raven/breadcrumbs.py b/raven/breadcrumbs.py
index 9d8bd78..8f4ed86 100644
--- a/raven/breadcrumbs.py
+++ b/raven/breadcrumbs.py
@@ -17,10 +17,19 @@ class BreadcrumbBuffer(object):
self.buffer = []
self.limit = limit
- def record(self, type, data=None, timestamp=None):
+ def record(self, type, timestamp=None, duration=None, level=None,
+ message=None, category=None, data=None, processor=None):
if timestamp is None:
timestamp = time.time()
- self.buffer.append((type, timestamp, data))
+ self.buffer.append(({
+ 'type': type,
+ 'timestamp': timestamp,
+ 'duration': duration,
+ 'level': level,
+ 'message': message,
+ 'category': category,
+ 'data': data,
+ }, processor))
del self.buffer[:-self.limit]
def clear(self):
@@ -28,30 +37,26 @@ class BreadcrumbBuffer(object):
def get_buffer(self):
rv = []
- for type, timestamp, data in self.buffer:
- if data is None:
- data = {}
- elif callable(data):
- data = data()
- rv.append({
- 'type': type,
- 'data': data,
- 'timestamp': timestamp,
- })
+ for idx, (payload, processor) in enumerate(self.buffer):
+ if processor is not None:
+ processor(payload)
+ self.buffer[idx] = (payload, None)
+ rv.append(payload)
return rv
-def record_breadcrumb(type, data=None, timestamp=None):
+def record_breadcrumb(type, timestamp=None, duration=None, level=None,
+ message=None, 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
- on a specific client. This also additionally permits data to be a
- callable that will be invoked to generate the data if the crumb is not
- discarded.
+ on a specific client.
"""
if timestamp is None:
timestamp = time.time()
for ctx in raven.context.get_active_contexts():
- ctx.breadcrumbs.record(type, data, timestamp)
+ ctx.breadcrumbs.record(type, timestamp, duration, level, message,
+ category, data, processor)
def _record_log_breadcrumb(logger, level, msg, *args, **kwargs):
@@ -61,16 +66,17 @@ def _record_log_breadcrumb(logger, level, msg, *args, **kwargs):
if rv:
return
- def _make_data():
+ def processor(data):
formatted_msg = text_type(msg)
if args:
formatted_msg = msg % args
- return {
+ data.update({
'message': formatted_msg,
- 'logger': logger.name,
+ 'category': logger.name,
'level': logging.getLevelName(level).lower(),
- }
- record_breadcrumb('message', _make_data)
+ 'data': kwargs,
+ })
+ record_breadcrumb('default', processor=processor)
def _wrap_logging_method(meth, level=None):
@@ -213,12 +219,11 @@ def _hook_requests():
def send(self, request, *args, **kwargs):
def _record_request(response):
- record_breadcrumb('http_request', {
+ record_breadcrumb('http', category='requests', data={
'url': request.url,
'method': request.method,
'status_code': response and response.status_code or None,
'reason': response and response.reason or None,
- 'classifier': 'requests',
})
try:
resp = real_send(self, request, *args, **kwargs)
@@ -251,7 +256,7 @@ def _install_httplib():
port = self.port
default_port = self.default_port
- def _make_data():
+ def processor(data):
real_url = url
if not real_url.startswith(('http://', 'https://')):
real_url = '%s://%s%s%s' % (
@@ -260,14 +265,14 @@ def _install_httplib():
port != default_port and ':%s' % port or '',
url,
)
- data = {
+ data['data'] = {
'url': real_url,
'method': method,
- 'classifier': 'httplib',
}
- data.update(status)
+ data['data'].update(status)
return data
- record_breadcrumb('http_request', _make_data)
+ record_breadcrumb('http', category='requests',
+ processor=processor)
return real_putrequest(self, method, url, *args, **kwargs)
def getresponse(self, *args, **kwargs):