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