104 lines
3.2 KiB
Python
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)
|