changeset 3489:d997a314d18a beta

moved time measure of request to separate middleware for better results (the last one in stack)
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 06 Mar 2013 18:12:09 +0100
parents 1b4fc33931d7
children c0ac34b8eb07
files rhodecode/config/middleware.py rhodecode/lib/base.py rhodecode/lib/middleware/wrapper.py
diffstat 3 files changed, 49 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/middleware.py	Wed Mar 06 16:31:22 2013 +0100
+++ b/rhodecode/config/middleware.py	Wed Mar 06 18:12:09 2013 +0100
@@ -15,6 +15,7 @@
 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 @@
         # 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']):
--- a/rhodecode/lib/base.py	Wed Mar 06 16:31:22 2013 +0100
+++ b/rhodecode/lib/base.py	Wed Mar 06 18:12:09 2013 +0100
@@ -279,7 +279,6 @@
         # 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 @@
             )
             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()
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/middleware/wrapper.py	Wed Mar 06 18:12:09 2013 +0100
@@ -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 <marcin@python-works.com>
+    :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 <http://www.gnu.org/licenses/>.
+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)
+            )
+