summaryrefslogtreecommitdiffstats
path: root/keyedcache/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'keyedcache/views.py')
-rw-r--r--keyedcache/views.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/keyedcache/views.py b/keyedcache/views.py
new file mode 100644
index 00000000..9a3c1219
--- /dev/null
+++ b/keyedcache/views.py
@@ -0,0 +1,103 @@
+from django import forms
+from django.conf import settings
+from django.contrib.auth.decorators import user_passes_test
+from django.http import HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from django.utils.translation import ugettext_lazy as _
+import keyedcache
+import logging
+
+log = logging.getLogger('keyedcache.views')
+
+YN = (
+ ('Y', _('Yes')),
+ ('N', _('No')),
+ )
+
+class CacheDeleteForm(forms.Form):
+ tag = forms.CharField(label=_('Key to delete'), required=False)
+ children = forms.ChoiceField(label=_('Include Children?'), choices=YN, initial="Y")
+ kill_all = forms.ChoiceField(label=_('Delete all keys?'), choices=YN, initial="Y")
+
+ def delete_cache(self):
+
+ data = self.cleaned_data
+ if data['kill_all'] == "Y":
+ keyedcache.cache_delete()
+ result = "Deleted all keys"
+ elif data['tag']:
+ keyedcache.cache_delete(data['tag'], children=data['children'])
+ if data['children'] == "Y":
+ result = "Deleted %s and children" % data['tag']
+ else:
+ result = "Deleted %s" % data['tag']
+ else:
+ result = "Nothing selected to delete"
+
+ log.debug(result)
+ return result
+
+def stats_page(request):
+ calls = keyedcache.CACHE_CALLS
+ hits = keyedcache.CACHE_HITS
+
+ if (calls and hits):
+ rate = float(keyedcache.CACHE_HITS)/keyedcache.CACHE_CALLS*100
+ else:
+ rate = 0
+
+ try:
+ running = keyedcache.cache_require()
+
+ except keyedcache.CacheNotRespondingError:
+ running = False
+
+ ctx = RequestContext(request, {
+ 'cache_count' : len(keyedcache.CACHED_KEYS),
+ 'cache_running' : running,
+ 'cache_time' : settings.CACHE_TIMEOUT,
+ 'cache_backend' : settings.CACHE_BACKEND,
+ 'cache_calls' : keyedcache.CACHE_CALLS,
+ 'cache_hits' : keyedcache.CACHE_HITS,
+ 'hit_rate' : "%02.1f" % rate
+ })
+
+ return render_to_response('keyedcache/stats.html', context_instance=ctx)
+
+stats_page = user_passes_test(lambda u: u.is_authenticated() and u.is_staff, login_url='/accounts/login/')(stats_page)
+
+def view_page(request):
+ keys = keyedcache.CACHED_KEYS.keys()
+
+ keys.sort()
+
+ ctx = RequestContext(request, {
+ 'cached_keys' : keys,
+ })
+
+ return render_to_response('keyedcache/view.html', context_instance=ctx)
+
+view_page = user_passes_test(lambda u: u.is_authenticated() and u.is_staff, login_url='/accounts/login/')(view_page)
+
+def delete_page(request):
+ log.debug("delete_page")
+ if request.method == "POST":
+ form = CacheDeleteForm(request.POST)
+ if form.is_valid():
+ log.debug('delete form valid')
+ results = form.delete_cache()
+ return HttpResponseRedirect('../')
+ else:
+ log.debug("Errors in form: %s", form.errors)
+ else:
+ log.debug("new form")
+ form = CacheDeleteForm()
+
+ ctx = RequestContext(request, {
+ 'form' : form,
+ })
+
+ return render_to_response('keyedcache/delete.html', context_instance=ctx)
+
+delete_page = user_passes_test(lambda u: u.is_authenticated() and u.is_staff, login_url='/accounts/login/')(delete_page)