diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2010-04-27 19:42:33 -0400 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2010-04-27 19:42:33 -0400 |
commit | 8130338044d635ce9038d7dd58af06f59cc330bc (patch) | |
tree | 25c74fe61ab9279f04746370cdd21a7436cf4568 /keyedcache/views.py | |
parent | e48efec236c3aaae4e669427ef7f6c614d12fe0c (diff) | |
download | askbot-8130338044d635ce9038d7dd58af06f59cc330bc.tar.gz askbot-8130338044d635ce9038d7dd58af06f59cc330bc.tar.bz2 askbot-8130338044d635ce9038d7dd58af06f59cc330bc.zip |
started adding admin interface
Diffstat (limited to 'keyedcache/views.py')
-rw-r--r-- | keyedcache/views.py | 103 |
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) |