diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -317,6 +317,10 @@ def includeme(config): 'rhodecode.lib.partial_renderer.get_partial_renderer', 'get_partial_renderer') + config.add_request_method( + 'rhodecode.lib.request_counter.get_request_counter', + 'request_count') + # Set the authorization policy. authz_policy = ACLAuthorizationPolicy() config.set_authorization_policy(authz_policy) diff --git a/rhodecode/lib/middleware/request_wrapper.py b/rhodecode/lib/middleware/request_wrapper.py --- a/rhodecode/lib/middleware/request_wrapper.py +++ b/rhodecode/lib/middleware/request_wrapper.py @@ -18,11 +18,10 @@ # RhodeCode Enterprise Edition, including its added features, Support services, # and proprietary license terms, please see https://rhodecode.com/licenses/ - +import gc import time import logging - from rhodecode.lib.base import get_ip_addr, get_access_path, get_user_agent from rhodecode.lib.utils2 import safe_str @@ -44,9 +43,10 @@ class RequestWrapperTween(object): finally: end = time.time() total = end - start + count = request.request_count() log.info( - 'IP: %s %s Request to %s time: %.4fs [%s]', - get_ip_addr(request.environ), request.environ.get('REQUEST_METHOD'), + 'Req[%4s] IP: %s %s Request to %s time: %.4fs [%s]', + count, get_ip_addr(request.environ), request.environ.get('REQUEST_METHOD'), safe_str(get_access_path(request.environ)), total, get_user_agent(request. environ) ) diff --git a/rhodecode/lib/request_counter.py b/rhodecode/lib/request_counter.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/request_counter.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +# Copyright (C) 2017-2019 RhodeCode GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License, version 3 +# (only), as published by the Free Software Foundation. +# +# 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 Affero General Public License +# along with this program. If not, see . +# +# This program is dual-licensed. If you wish to learn more about the +# RhodeCode Enterprise Edition, including its added features, Support services, +# and proprietary license terms, please see https://rhodecode.com/licenses/ + +counter = 0 + + +def get_request_counter(request): + global counter + counter += 1 + return counter