X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/82c3054bcdeb000aa9782da80d644070797b5cbe..ae60b2a3949e96357477cc04f90fd0873cee8a92:/wolnelektury/middleware.py?ds=sidebyside diff --git a/wolnelektury/middleware.py b/wolnelektury/middleware.py deleted file mode 100644 index 60b382cd3..000000000 --- a/wolnelektury/middleware.py +++ /dev/null @@ -1,126 +0,0 @@ -# Orignal version taken from http://www.djangosnippets.org/snippets/186/ -# Original author: udfalkso -# Modified by: Shwagroo Team - -import sys -import os -import re -import hotshot, hotshot.stats -import tempfile -import StringIO -import pprint - -from django.conf import settings -from django.db import connection - - -words_re = re.compile( r'\s+' ) - -group_prefix_re = [ - re.compile( "^.*/django/[^/]+" ), - re.compile( "^(.*)/[^/]+$" ), # extract module path - re.compile( ".*" ), # catch strange entries -] - - -class ProfileMiddleware(object): - """ - Displays hotshot profiling for any view. - http://yoursite.com/yourview/?prof - - Add the "prof" key to query string by appending ?prof (or &prof=) - and you'll see the profiling results in your browser. - It's set up to only be available in django's debug mode, is available for superuser otherwise, - but you really shouldn't add this middleware to any production configuration. - - WARNING: It uses hotshot profiler which is not thread safe. - """ - def process_request(self, request): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - connection.queries = [] - self.tmpfile = tempfile.mktemp() - self.prof = hotshot.Profile(self.tmpfile) - - def process_view(self, request, callback, callback_args, callback_kwargs): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - return self.prof.runcall(callback, request, *callback_args, **callback_kwargs) - - def get_group(self, file): - for g in group_prefix_re: - name = g.findall( file ) - if name: - return name[0] - - def get_summary(self, results_dict, sum): - list = [ (item[1], item[0]) for item in results_dict.items() ] - list.sort( reverse = True ) - list = list[:40] - - res = " tottime\n" - for item in list: - if sum == 0: - foo = 0 - else: - foo = 100*item[0]/sum - res += "%4.1f%% %7.3f %s\n" % (foo, item[0], item[1] ) - - return res - - def summary_for_files(self, stats_str): - stats_str = stats_str.split("\n")[5:] - - mystats = {} - mygroups = {} - - sum = 0 - - for s in stats_str: - fields = words_re.split(s); - if len(fields) == 7: - time = float(fields[2]) - sum += time - file = fields[6].split(":")[0] - - if not file in mystats: - mystats[file] = 0 - mystats[file] += time - - group = self.get_group(file) - if not group in mygroups: - mygroups[ group ] = 0 - mygroups[ group ] += time - - return "
" + \
-               " ---- By file ----\n\n" + self.get_summary(mystats,sum) + "\n" + \
-               " ---- By group ---\n\n" + self.get_summary(mygroups,sum) + \
-               "
" - - def process_response(self, request, response): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - self.prof.close() - - out = StringIO.StringIO() - old_stdout = sys.stdout - sys.stdout = out - - stats = hotshot.stats.load(self.tmpfile) - stats.sort_stats('time', 'calls') - stats.print_stats() - - sys.stdout = old_stdout - stats_str = out.getvalue() - - if response and response.content and stats_str: - response.content = "
" + stats_str + "
" - - response.content = "\n".join(response.content.split("\n")[:40]) - - response.content += self.summary_for_files(stats_str) - - os.unlink(self.tmpfile) - - response.content += '\n%d SQL Queries:\n' % len(connection.queries) - response.content += pprint.pformat(connection.queries) - - return response -