Mercurial > kallithea
view rhodecode/lib/profiler.py @ 1039:51b70569c330 beta
extended admin rescan to show what repositories was added and what removed
fixed found bugs, added expunge to cached getter since it introduce some more problems.
Added some relationship to properly clean related objects from database.
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 13 Feb 2011 01:38:39 +0100 |
parents | 1e757ac98988 |
children | 6832ef664673 |
line wrap: on
line source
from __future__ import with_statement import cProfile import pstats import cgi import pprint import threading from StringIO import StringIO class ProfilingMiddleware(object): def __init__(self, app): self.lock = threading.Lock() self.app = app def __call__(self, environ, start_response): with self.lock: profiler = cProfile.Profile() def run_app(*a, **kw): self.response = self.app(environ, start_response) profiler.runcall(run_app, environ, start_response) profiler.snapshot_stats() stats = pstats.Stats(profiler) stats.sort_stats('cumulative') # Redirect output out = StringIO() stats.stream = out stats.print_stats() resp = ''.join(self.response) # Lets at least only put this on html-like responses. if resp.strip().startswith('<'): ## The profiling info is just appended to the response. ## Browsers don't mind this. resp += '<pre style="text-align:left; border-top: 4px dashed red; padding: 1em;">' resp += cgi.escape(out.getvalue(), True) output = StringIO() pprint.pprint(environ, output, depth=3) resp += cgi.escape(output.getvalue(), True) resp += '</pre>' return resp