diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -15,6 +15,7 @@ from rhodecode.lib.middleware.simplehg i from rhodecode.lib.middleware.simplegit import SimpleGit from rhodecode.lib.middleware.https_fixup import HttpsFixup from rhodecode.config.environment import load_environment +from rhodecode.lib.middleware.wrapper import RequestWrapper def make_app(global_conf, full_stack=True, static_files=True, **app_conf): @@ -67,7 +68,7 @@ def make_app(global_conf, full_stack=Tru # need any pylons stack middleware in them app = SimpleHg(app, config) app = SimpleGit(app, config) - + app = RequestWrapper(app, config) # Display error documents for 401, 403, 404 status codes (and # 500 when debug is disabled) if asbool(config['debug']): diff --git a/rhodecode/lib/base.py b/rhodecode/lib/base.py --- a/rhodecode/lib/base.py +++ b/rhodecode/lib/base.py @@ -279,7 +279,6 @@ class BaseController(WSGIController): # WSGIController.__call__ dispatches to the Controller method # the request is routed to. This routing information is # available in environ['pylons.routes_dict'] - start = time.time() try: self.ip_addr = _get_ip_addr(environ) # make sure that we update permissions each time we call controller @@ -300,10 +299,6 @@ class BaseController(WSGIController): ) return WSGIController.__call__(self, environ, start_response) finally: - log.info('IP: %s Request to %s time: %.3fs' % ( - _get_ip_addr(environ), - safe_unicode(_get_access_path(environ)), time.time() - start) - ) meta.Session.remove() diff --git a/rhodecode/lib/middleware/wrapper.py b/rhodecode/lib/middleware/wrapper.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/middleware/wrapper.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.lib.middleware.wrapper + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + request time mesuring app + + :created_on: May 23, 2013 + :author: marcink + :copyright: (C) 2010-2012 Marcin Kuzminski + :license: GPLv3, see COPYING for more details. +""" +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +import time +import logging +from rhodecode.lib.base import _get_ip_addr, _get_access_path +from rhodecode.lib.utils2 import safe_unicode + + +class RequestWrapper(object): + + def __init__(self, app, config): + self.application = app + self.config = config + + def __call__(self, environ, start_response): + start = time.time() + try: + return self.application(environ, start_response) + finally: + log = logging.getLogger('rhodecode.' + self.__class__.__name__) + log.info('IP: %s Request to %s time: %.3fs' % ( + _get_ip_addr(environ), + safe_unicode(_get_access_path(environ)), time.time() - start) + ) +