diff options
| -rw-r--r-- | debug_toolbar/middleware.py | 13 | ||||
| -rw-r--r-- | debug_toolbar/panels/cache.py | 12 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 35 |
3 files changed, 34 insertions, 26 deletions
diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index f49a29f..1d332c0 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -5,7 +5,6 @@ import imp import thread from django.conf import settings -from django.conf.urls.defaults import include, patterns from django.http import HttpResponseRedirect from django.shortcuts import render_to_response from django.utils.encoding import smart_unicode @@ -97,6 +96,7 @@ class DebugToolbarMiddleware(object): for panel in toolbar.panels: panel.process_request(request) self.__class__.debug_toolbars[thread.get_ident()] = toolbar + request.debug_toolbar = toolbar def process_view(self, request, view_func, view_args, view_kwargs): __traceback_hide__ = True @@ -124,13 +124,14 @@ class DebugToolbarMiddleware(object): ) response.cookies = cookies if 'gzip' not in response.get('Content-Encoding', '') and \ - response.get('Content-Type', '').split(';')[0] in _HTML_TYPES: + response.get('Content-Type', '').split(';')[0] in _HTML_TYPES: + toolbar.stats = {} for panel in toolbar.panels: - panel.process_response(request, response) + panel.process_response(request, response) response.content = replace_insensitive( - smart_unicode(response.content), - self.tag, - smart_unicode(toolbar.render_toolbar() + self.tag)) + smart_unicode(response.content), + self.tag, + smart_unicode(toolbar.render_toolbar() + self.tag)) if response.get('Content-Length', None): response['Content-Length'] = len(response.content) del self.__class__.debug_toolbars[ident] diff --git a/debug_toolbar/panels/cache.py b/debug_toolbar/panels/cache.py index 5617ec2..c03971d 100644 --- a/debug_toolbar/panels/cache.py +++ b/debug_toolbar/panels/cache.py @@ -95,11 +95,15 @@ class CacheDebugPanel(DebugPanel): def url(self): return '' - def content(self): - context = self.context.copy() - context.update({ + def process_response(self, request, response): + self.stats = { 'cache_calls': len(self.cache.calls), 'cache_time': self.cache.total_time, 'cache': self.cache, - }) + } + request.debug_toolbar.stats['cache'] = self.stats + + def content(self): + context = self.context.copy() + context.update(self.stats) return render_to_string('debug_toolbar/panels/cache.html', context) diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 9687a5c..2eced7c 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -23,7 +23,7 @@ def cursor(func, self): if not djdt: return result logger = djdt.get_panel(SQLDebugPanel) - + return CursorWrapper(result, self, logger=logger) def get_isolation_level_display(engine, level): @@ -38,7 +38,7 @@ def get_isolation_level_display(engine, level): } else: raise ValueError(engine) - + return choices.get(level) def get_transaction_status_display(engine, level): @@ -53,7 +53,7 @@ def get_transaction_status_display(engine, level): } else: raise ValueError(engine) - + return choices.get(level) class SQLDebugPanel(DebugPanel): @@ -73,7 +73,7 @@ class SQLDebugPanel(DebugPanel): self._databases = {} self._transaction_status = {} self._transaction_ids = {} - + def get_transaction_id(self, alias): conn = connections[alias].connection if not conn: @@ -97,9 +97,9 @@ class SQLDebugPanel(DebugPanel): self._transaction_ids[alias] = uuid.uuid4().hex else: self._transaction_ids[alias] = None - + return self._transaction_ids[alias] - + def record(self, alias, **kwargs): self._queries.append((alias, kwargs)) if alias not in self._databases: @@ -126,7 +126,7 @@ class SQLDebugPanel(DebugPanel): def title(self): count = len(self._databases) - + return __('SQL Queries from %(count)d connection', 'SQL Queries from %(count)d connections', count) % dict( count=count, ) @@ -134,7 +134,7 @@ class SQLDebugPanel(DebugPanel): def url(self): return '' - def content(self): + def process_response(self, request, response): if self._queries: width_ratio_tally = 0 colors = [ @@ -157,14 +157,14 @@ class SQLDebugPanel(DebugPanel): nn = 0 rgb[nn] = nc db['rgb_color'] = rgb - + trans_ids = {} trans_id = None i = 0 for alias, query in self._queries: trans_id = query.get('trans_id') last_trans_id = trans_ids.get(alias) - + if trans_id != last_trans_id: if last_trans_id: self._queries[i-1][1]['ends_trans'] = True @@ -173,7 +173,7 @@ class SQLDebugPanel(DebugPanel): query['starts_trans'] = True if trans_id: query['in_trans'] = True - + query['alias'] = alias if 'iso_level' in query: query['iso_level'] = get_isolation_level_display(query['engine'], query['iso_level']) @@ -190,7 +190,7 @@ class SQLDebugPanel(DebugPanel): query['start_offset'] = width_ratio_tally query['end_offset'] = query['width_ratio'] + query['start_offset'] width_ratio_tally += query['width_ratio'] - + stacktrace = [] for frame in query['stacktrace']: params = map(escape, frame[0].rsplit('/', 1) + list(frame[1:])) @@ -204,14 +204,17 @@ class SQLDebugPanel(DebugPanel): if trans_id: self._queries[i-1][1]['ends_trans'] = True - - context = self.context.copy() - context.update({ + + self.stats = { 'databases': sorted(self._databases.items(), key=lambda x: -x[1]['time_spent']), 'queries': [q for a, q in self._queries], 'sql_time': self._sql_time, - }) + } + request.debug_toolbar.stats['sql'] = getattr(self, 'stats', None) + def content(self): + context = self.context.copy() + context.update(self.stats) return render_to_string('debug_toolbar/panels/sql.html', context) class BoldKeywordFilter(sqlparse.filters.Filter): |
