annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
1 from __future__ import with_statement
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
2
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
3 import cProfile
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
4 import pstats
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
5 import cgi
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
6 import pprint
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
7 import threading
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
8
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
9 from StringIO import StringIO
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
10
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
11 class ProfilingMiddleware(object):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
12 def __init__(self, app):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
13 self.lock = threading.Lock()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
14 self.app = app
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
16
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
17 def __call__(self, environ, start_response):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
18 with self.lock:
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
19 profiler = cProfile.Profile()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
20 def run_app(*a, **kw):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
21 self.response = self.app(environ, start_response)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
22
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
23 profiler.runcall(run_app, environ, start_response)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
24
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
25 profiler.snapshot_stats()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
26
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
27 stats = pstats.Stats(profiler)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
28 stats.sort_stats('cumulative')
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
29
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
30 # Redirect output
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
31 out = StringIO()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
32 stats.stream = out
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
33
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
34 stats.print_stats()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
35
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
36 resp = ''.join(self.response)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
37
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
38 # Lets at least only put this on html-like responses.
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
39 if resp.strip().startswith('<'):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
40 ## The profiling info is just appended to the response.
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
41 ## Browsers don't mind this.
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
42 resp += '<pre style="text-align:left; border-top: 4px dashed red; padding: 1em;">'
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
43 resp += cgi.escape(out.getvalue(), True)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
44
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
45 output = StringIO()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
46 pprint.pprint(environ, output, depth=3)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
47
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
48 resp += cgi.escape(output.getvalue(), True)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
49 resp += '</pre>'
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
50
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
51 return resp
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
52
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
53