From 2c7f68d55a6a0c101c41bd23ccb2d0ce9b332e42 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sat, 31 Mar 2012 17:11:11 +0200 Subject: Merge branch 'master' of https://github.com/ivirabyan/django-debug-toolbar into ivirabyan-master Conflicts: debug_toolbar/panels/cache.py debug_toolbar/toolbar/loader.py--- debug_toolbar/panels/cache.py | 89 ++++++++++++++++++++++++++++++------------- 1 file changed, 62 insertions(+), 27 deletions(-) (limited to 'debug_toolbar/panels/cache.py') diff --git a/debug_toolbar/panels/cache.py b/debug_toolbar/panels/cache.py index aa37858..e3b9dad 100644 --- a/debug_toolbar/panels/cache.py +++ b/debug_toolbar/panels/cache.py @@ -1,5 +1,6 @@ import time import inspect +import sys from django.core import cache from django.core.cache.backends.base import BaseCache @@ -19,17 +20,18 @@ class CacheStatTracker(BaseCache): self.misses = 0 self.sets = 0 self.gets = 0 - self.get_many = 0 + self.get_manys = 0 self.deletes = 0 self.total_time = 0 def _get_func_info(self): - stack = inspect.stack()[2] - return (stack[1], stack[2], stack[3], stack[4]) + frame = sys._getframe(3) + info = inspect.getframeinfo(frame) + return (info[0], info[1], info[2], info[3]) - def get(self, key, **kwargs): + def get(self, *args, **kwargs): t = time.time() - value = self.cache.get(key, **kwargs) + value = self.cache.get(*args, **kwargs) this_time = time.time() - t self.total_time += this_time * 1000 if value is None: @@ -37,37 +39,74 @@ class CacheStatTracker(BaseCache): else: self.hits += 1 self.gets += 1 - self.calls.append((this_time, 'get', (key,), self._get_func_info())) + self.calls.append((this_time, 'get', args, kwargs, self._get_func_info())) return value - def set(self, key, value, timeout=None, **kwargs): + def set(self, *args, **kwargs): t = time.time() - self.cache.set(key, value, timeout, **kwargs) + self.cache.set(*args, **kwargs) this_time = time.time() - t self.total_time += this_time * 1000 self.sets += 1 - self.calls.append((this_time, 'set', (key, value, timeout), self._get_func_info())) + self.calls.append((this_time, 'set', args, kwargs, self._get_func_info())) - def delete(self, key, **kwargs): + def delete(self, *args, **kwargs): t = time.time() - self.cache.delete(key, **kwargs) + self.cache.delete(*args, **kwargs) this_time = time.time() - t self.total_time += this_time * 1000 self.deletes += 1 - self.calls.append((this_time, 'delete', (key,), self._get_func_info())) + self.calls.append((this_time, 'delete', args, kwargs, self._get_func_info())) - def get_many(self, keys, **kwargs): + def get_many(self, *args, **kwargs): t = time.time() - results = self.cache.get_many(keys) + results = self.cache.get_many(*args, **kwargs) this_time = time.time() - t self.total_time += this_time * 1000 - self.get_many += 1 + self.get_manys += 1 for key, value in results.iteritems(): if value is None: self.misses += 1 else: self.hits += 1 - self.calls.append((this_time, 'get_many', (keys,), self._get_func_info())) + self.calls.append((this_time, 'get_many', args, kwargs, self._get_func_info())) + return results + + def make_key(self, *args, **kwargs): + return self.cache.make_key(*args, **kwargs) + + def add(self, *args, **kwargs): + return self.cache.add(*args, **kwargs) + + def has_key(self, *args, **kwargs): + return self.cache.has_key(*args, **kwargs) + + def incr(self, *args, **kwargs): + return self.cache.incr(*args, **kwargs) + + def decr(self, *args, **kwargs): + return self.cache.decr(*args, **kwargs) + + def __contains__(self, key): + return self.cache.__contains__(key) + + def set_many(self, *args, **kwargs): + self.cache.set_many(*args, **kwargs) + + def delete_many(self, *args, **kwargs): + self.cache.delete_many(*args, **kwargs) + + def clear(self): + self.cache.clear() + + def validate_key(self, *args, **kwargs): + self.cache.validate_key(*args, **kwargs) + + def incr_version(self, *args, **kwargs): + return self.cache.incr_version(*args, **kwargs) + + def decr_version(self, *args, **kwargs): + return self.cache.decr_version(*args, **kwargs) class CacheDebugPanel(DebugPanel): @@ -80,16 +119,10 @@ class CacheDebugPanel(DebugPanel): def __init__(self, *args, **kwargs): super(CacheDebugPanel, self).__init__(*args, **kwargs) - # This is hackish but to prevent threading issues is somewhat needed - if isinstance(cache.cache, CacheStatTracker): - cache.cache.reset() - self.cache = cache.cache - else: - self.cache = CacheStatTracker(cache.cache) - cache.cache = self.cache + cache.cache.reset() def nav_title(self): - return _('Cache') + return _('Cache: %.2fms') % cache.cache.total_time def nav_subtitle(self): cache_calls = len(self.cache.calls) @@ -106,7 +139,9 @@ class CacheDebugPanel(DebugPanel): def process_response(self, request, response): self.record_stats({ - 'cache_calls': len(self.cache.calls), - 'cache_time': self.cache.total_time, - 'cache': self.cache, + 'cache_calls': len(cache.cache.calls), + 'cache_time': cache.cache.total_time, + 'cache': cache.cache, }) + +cache.cache = CacheStatTracker(cache.cache) -- cgit v1.2.3