diff options
Diffstat (limited to 'debug_toolbar/panels/sql.py')
| -rw-r--r-- | debug_toolbar/panels/sql.py | 67 | 
1 files changed, 31 insertions, 36 deletions
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index b27e6c0..18fffdc 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -18,12 +18,12 @@ from debug_toolbar.utils.tracking import replace_call  @replace_call(BaseDatabaseWrapper.cursor)  def cursor(func, self):      result = func(self) -     +      djdt = DebugToolbarMiddleware.get_current()      if not djdt:          return result      logger = djdt.get_panel(SQLDebugPanel) -     +      return CursorWrapper(result, self, logger=logger) @@ -39,7 +39,7 @@ def get_isolation_level_display(engine, level):          }      else:          raise ValueError(engine) -     +      return choices.get(level) @@ -55,7 +55,7 @@ def get_transaction_status_display(engine, level):          }      else:          raise ValueError(engine) -     +      return choices.get(level) @@ -67,7 +67,7 @@ class SQLDebugPanel(DebugPanel):      name = 'SQL'      template = 'debug_toolbar/panels/sql.html'      has_content = True -     +      def __init__(self, *args, **kwargs):          super(SQLDebugPanel, self).__init__(*args, **kwargs)          self._offset = dict((k, len(connections[k].queries)) for k in connections) @@ -77,33 +77,33 @@ class SQLDebugPanel(DebugPanel):          self._databases = {}          self._transaction_status = {}          self._transaction_ids = {} -     +      def get_transaction_id(self, alias):          conn = connections[alias].connection          if not conn:              return None -         +          engine = conn.__class__.__module__.split('.', 1)[0]          if engine == 'psycopg2':              cur_status = conn.get_transaction_status()          else:              raise ValueError(engine) -         +          last_status = self._transaction_status.get(alias)          self._transaction_status[alias] = cur_status -         +          if not cur_status:              # No available state              return None -         +          if cur_status != last_status:              if cur_status:                  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: @@ -116,10 +116,10 @@ class SQLDebugPanel(DebugPanel):              self._databases[alias]['num_queries'] += 1          self._sql_time += kwargs['duration']          self._num_queries += 1 -     +      def nav_title(self):          return _('SQL') -     +      def nav_subtitle(self):          # TODO l10n: use ngettext          return "%d %s in %.2fms" % ( @@ -127,30 +127,25 @@ class SQLDebugPanel(DebugPanel):              (self._num_queries == 1) and 'query' or 'queries',              self._sql_time          ) -     +      def title(self):          count = len(self._databases) -         +          return __('SQL Queries from %(count)d connection', 'SQL Queries from %(count)d connections', count) % dict(              count=count,          ) -     +      def url(self):          return '' -     +      def process_response(self, request, response):          if self._queries:              width_ratio_tally = 0 -            colors = [ -                (256, 0, 0), # red -                (0, 256, 0), # blue -                (0, 0, 256), # green -            ] -            factor = int(256.0/(len(self._databases)*2.5)) +            factor = int(256.0 / (len(self._databases) * 2.5))              for n, db in enumerate(self._databases.itervalues()):                  rgb = [0, 0, 0]                  color = n % 3 -                rgb[color] = 256 - n/3*factor +                rgb[color] = 256 - n / 3 * factor                  nn = color                  # XXX: pretty sure this is horrible after so many aliases                  while rgb[color] < factor: @@ -161,23 +156,23 @@ 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 +                        self._queries[(i - 1)][1]['ends_trans'] = True                      trans_ids[alias] = trans_id                      if trans_id:                          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']) @@ -187,14 +182,14 @@ class SQLDebugPanel(DebugPanel):                  query['rgb_color'] = self._databases[alias]['rgb_color']                  try:                      query['width_ratio'] = (query['duration'] / self._sql_time) * 100 -                    query['width_ratio_relative'] =  100.0 * query['width_ratio'] / (100.0 - width_ratio_tally) +                    query['width_ratio_relative'] = 100.0 * query['width_ratio'] / (100.0 - width_ratio_tally)                  except ZeroDivisionError:                      query['width_ratio'] = 0                      query['width_ratio_relative'] = 0                  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:])) @@ -205,10 +200,10 @@ class SQLDebugPanel(DebugPanel):                          continue                  query['stacktrace'] = mark_safe('\n'.join(stacktrace))                  i += 1 -             +              if trans_id: -                self._queries[i-1][1]['ends_trans'] = True -         +                self._queries[(i - 1)][1]['ends_trans'] = True +          self.record_stats({              'databases': sorted(self._databases.items(), key=lambda x: -x[1]['time_spent']),              'queries': [q for a, q in self._queries], @@ -236,6 +231,6 @@ def swap_fields(sql):  def reformat_sql(sql):      stack = sqlparse.engine.FilterStack() -    stack.preprocess.append(BoldKeywordFilter()) # add our custom filter -    stack.postprocess.append(sqlparse.filters.SerializerUnicode()) # tokens -> strings +    stack.preprocess.append(BoldKeywordFilter())  # add our custom filter +    stack.postprocess.append(sqlparse.filters.SerializerUnicode())  # tokens -> strings      return swap_fields(''.join(stack.run(sql)))  | 
