Files @ e13a747e9c6a
Branch filter:

Location: kallithea/rhodecode/lib/profiler.py

Bradley M. Kuhn
Migrate to jQuery 1.10.2 from 1.10.1.

Include the minified version of jQuery 1.10.2 instead of 1.10.1. The 1.10.2
files were download via these commands:

$ wget -N http://code.jquery.com/jquery-1.10.2.min.js
$ wget -N http://code.jquery.com/jquery-1.10.2.min.map

Meanwhile, since the Javascript code is covered by GPLv3, we should always
provide an up-to-date version of the source code. I have included it
here by creating the directory jquery-src. I extracted the correct version
of the source with the following commands:

$ git clone git://github.com/jquery/jquery.git
$ git checkout 1.10.2

which is what the jQuery website instructs to do: http://jquery.com/download/

This repository is mirrorred at https://kallithea-scm.org/repos/mirror/jquery/ .
from __future__ import with_statement

import gc
import objgraph
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('calls') #cummulative

            # 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)

                ct = objgraph.show_most_common_types()
                print ct

                resp += ct if ct else '---'

                output = StringIO()
                pprint.pprint(environ, output, depth=3)

                resp += cgi.escape(output.getvalue(), True)
                resp += '</pre>'

            return resp