annotate rhodecode/lib/profiler.py @ 1205:f4807acf643d beta

added __license__ into main of rhodecode, PEP8ify
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 04 Apr 2011 19:43:31 +0200
parents 6832ef664673
children c1516b35f91d
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
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
15
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
16
15
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)
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
44
15
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)
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
47
15
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>'
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
50
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
51 return resp