aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/panels/cache.py
diff options
context:
space:
mode:
authorJannis Leidel2012-03-31 17:11:11 +0200
committerJannis Leidel2012-03-31 17:14:25 +0200
commit2c7f68d55a6a0c101c41bd23ccb2d0ce9b332e42 (patch)
tree5e93142d5fb3f464e50e36151c4c25d8347353e7 /debug_toolbar/panels/cache.py
parent37a30194a1d5c9ebd7080954725dae38e19264fc (diff)
downloaddjango-debug-toolbar-2c7f68d55a6a0c101c41bd23ccb2d0ce9b332e42.tar.bz2
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
Diffstat (limited to 'debug_toolbar/panels/cache.py')
-rw-r--r--debug_toolbar/panels/cache.py89
1 files changed, 62 insertions, 27 deletions
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)