Mercurial > kallithea
view pylons_app/lib/profiler.py @ 483:a9e50dce3081 celery
Removed config names from whoosh and celery,
celery is now configured based on the config name it's using
on celeryconfig. And whoosh uses it's own logger configured just for whoosh
Test creates a fresh whoosh index now, for more accurate checks
fixed tests for searching
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 17 Sep 2010 22:54:30 +0200 |
parents | c8265b4f0c2a |
children |
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