annotate rhodecode/lib/profiler.py @ 3774:60335b702a00 beta

invalidation: don't create CacheInvalidation records on startup Creating the records early gave an advantage before lightweight was introduced. With lightweight it is no longer necessary. The records will be created on demand anyway and there is no reason to create and maintain them before they are used.
author Mads Kiilerich <madski@unity3d.com>
date Wed, 03 Apr 2013 15:56:12 +0200
parents 2c2bdaeca912
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
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
3 import gc
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
4 import objgraph
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
5 import cProfile
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
6 import pstats
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
7 import cgi
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
8 import pprint
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
9 import threading
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
10
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
11 from StringIO import StringIO
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
12
1307
c1516b35f91d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
13
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
14 class ProfilingMiddleware(object):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
15 def __init__(self, app):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
16 self.lock = threading.Lock()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
17 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
18
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
19 def __call__(self, environ, start_response):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
20 with self.lock:
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
21 profiler = cProfile.Profile()
1307
c1516b35f91d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
22
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
23 def run_app(*a, **kw):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
24 self.response = self.app(environ, start_response)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
25
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
26 profiler.runcall(run_app, environ, start_response)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
27
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
28 profiler.snapshot_stats()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
29
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
30 stats = pstats.Stats(profiler)
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
31 stats.sort_stats('calls') #cummulative
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
32
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
33 # Redirect output
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
34 out = StringIO()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
35 stats.stream = out
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
36
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
37 stats.print_stats()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
38
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
39 resp = ''.join(self.response)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
40
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
41 # Lets at least only put this on html-like responses.
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
42 if resp.strip().startswith('<'):
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
43 ## The profiling info is just appended to the response.
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
44 ## Browsers don't mind this.
1307
c1516b35f91d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
45 resp += ('<pre style="text-align:left; '
c1516b35f91d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
46 'border-top: 4px dashed red; padding: 1em;">')
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
47 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
48
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
49 ct = objgraph.show_most_common_types()
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
50 print ct
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
51
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
52 resp += ct if ct else '---'
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 1307
diff changeset
53
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
54 output = StringIO()
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
55 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
56
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
57 resp += cgi.escape(output.getvalue(), True)
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
58 resp += '</pre>'
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
59
15
c8265b4f0c2a added log4j to development,
Marcin Kuzminski
parents:
diff changeset
60 return resp