This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
bistro/keyedcache/views.py

104 lines
3.2 KiB
Python

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)