##// END OF EJS Templates
debug: add new custom logging to track unique requests across systems.
marcink -
r2794:9b8d6c69 default
parent child Browse files
Show More
@@ -0,0 +1,29 b''
1 # -*- coding: utf-8 -*-
2
3 # Copyright (C) 2017-2018 RhodeCode GmbH
4 #
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
21 from uuid import uuid4
22 from pyramid.decorator import reify
23 from pyramid.request import Request as _Request
24
25
26 class Request(_Request):
27 @reify
28 def req_id(self):
29 return str(uuid4())
@@ -38,6 +38,7 b' from rhodecode.config import utils as co'
38 38 from rhodecode.config.environment import load_pyramid_environment
39 39
40 40 from rhodecode.lib.middleware.vcs import VCSMiddleware
41 from rhodecode.lib.request import Request
41 42 from rhodecode.lib.vcs import VCSCommunicationError
42 43 from rhodecode.lib.exceptions import VCSServerUnavailable
43 44 from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled
@@ -192,6 +193,7 b' def includeme_first(config):'
192 193
193 194 def includeme(config):
194 195 settings = config.registry.settings
196 config.set_request_factory(Request)
195 197
196 198 # plugin information
197 199 config.registry.rhodecode_plugins = collections.OrderedDict()
@@ -123,6 +123,35 b' class ColorFormatter(ExceptionAwareForma'
123 123 return colored_record
124 124
125 125
126 def _inject_req_id(record):
127 from pyramid.threadlocal import get_current_request
128 req = get_current_request()
129 req_id = 'req_id:%-36s ' % (getattr(req, 'req_id', None))
130 record.req_id = req_id
131
132
133 class RequestTrackingFormatter(ExceptionAwareFormatter):
134 def format(self, record):
135 _inject_req_id(record)
136 def_record = logging.Formatter.format(self, record)
137 return def_record
138
139
140 class ColorRequestTrackingFormatter(ColorFormatter):
141 def format(self, record):
142 """
143 Changes record's levelname to use with COLORS enum
144 """
145 _inject_req_id(record)
146 levelname = record.levelname
147 start = COLOR_SEQ % (COLORS[levelname])
148 def_record = logging.Formatter.format(self, record)
149 end = RESET_SEQ
150
151 colored_record = ''.join([start, def_record, end])
152 return colored_record
153
154
126 155 class ColorFormatterSql(logging.Formatter):
127 156
128 157 def format(self, record):
@@ -158,7 +158,7 b' def detect_vcs_request(environ, backends'
158 158 log.debug('got handler:%s from environ', handler)
159 159
160 160 if not handler:
161 log.debug('checking if request is of VCS type in order: %s', backends)
161 log.debug('request start: checking if request is of VCS type in order: %s', backends)
162 162 for vcs_type in backends:
163 163 vcs_check, _handler = checks[vcs_type]
164 164 if vcs_check(environ):
@@ -21,9 +21,10 b''
21 21 import os
22 22 from pyramid.compat import configparser
23 23 from pyramid.paster import bootstrap as pyramid_bootstrap, setup_logging # noqa
24 from pyramid.request import Request
25 24 from pyramid.scripting import prepare
26 25
26 from rhodecode.lib.request import Request
27
27 28
28 29 def get_config(ini_path, **kwargs):
29 30 parser = configparser.ConfigParser(**kwargs)
@@ -41,7 +41,7 b' import pkg_resources'
41 41 from webhelpers.text import collapse, remove_formatting, strip_tags
42 42 from mako import exceptions
43 43 from pyramid.threadlocal import get_current_registry
44 from pyramid.request import Request
44 from rhodecode.lib.request import Request
45 45
46 46 from rhodecode.lib.fakemod import create_module
47 47 from rhodecode.lib.vcs.backends.base import Config
@@ -86,6 +86,8 b' def add_request_user_context(event):'
86 86 Adds auth user into request context
87 87 """
88 88 request = event.request
89 # access req_id as soon as possible
90 req_id = request.req_id
89 91
90 92 if hasattr(request, 'vcs_call'):
91 93 # skip vcs calls
@@ -98,7 +100,7 b' def add_request_user_context(event):'
98 100 auth_user = get_auth_user(request)
99 101 request.user = auth_user
100 102 request.environ['rc_auth_user'] = auth_user
101
103 request.environ['rc_req_id'] = req_id
102 104
103 105 def inject_app_settings(event):
104 106 settings = event.app.registry.settings
General Comments 0
You need to be logged in to leave comments. Login now