diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-09-13 18:07:59 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-09-13 18:07:59 +0200 |
| commit | 6c948c36bbf72dd896e0bff03aa7fbddadcbb0cd (patch) | |
| tree | f8620905c011735d8a3c340c46d1417a54a75972 /odoo/service/server.py | |
| parent | 48503fcf08eac6fed12e080d4f501f9bbc8d257d (diff) | |
| parent | 197474e5b9ad43ab2d587a98136a1a809ce9a2e7 (diff) | |
[MERGE] forward port branch saas-12.5 up to 197474e5b9a
Diffstat (limited to 'odoo/service/server.py')
| -rw-r--r-- | odoo/service/server.py | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/odoo/service/server.py b/odoo/service/server.py index cab3f75fe85..490d204d166 100644 --- a/odoo/service/server.py +++ b/odoo/service/server.py @@ -554,9 +554,28 @@ class GeventServer(CommonServer): def start(self): import gevent try: - from gevent.pywsgi import WSGIServer + from gevent.pywsgi import WSGIServer, WSGIHandler except ImportError: - from gevent.wsgi import WSGIServer + from gevent.wsgi import WSGIServer, WSGIHandler + + class ProxyHandler(WSGIHandler): + """ When logging requests, try to get the client address from + the environment so we get proxyfix's modifications (if any). + + Derived from werzeug.serving.WSGIRequestHandler.log + / werzeug.serving.WSGIRequestHandler.address_string + """ + def format_request(self): + old_address = self.client_address + if getattr(self, 'environ', None): + self.client_address = self.environ['REMOTE_ADDR'] + elif not self.client_address: + self.client_address = '<local>' + # other cases are handled inside WSGIHandler + try: + return super().format_request() + finally: + self.client_address = old_address set_limit_memory_hard() if os.name == 'posix': @@ -565,7 +584,12 @@ class GeventServer(CommonServer): signal.signal(signal.SIGUSR1, log_ormcache_stats) gevent.spawn(self.watchdog) - self.httpd = WSGIServer((self.interface, self.port), self.app) + self.httpd = WSGIServer( + (self.interface, self.port), self.app, + log=logging.getLogger('longpolling'), + error_log=logging.getLogger('longpolling'), + handler_class=ProxyHandler, + ) _logger.info('Evented Service (longpolling) running on %s:%s', self.interface, self.port) try: self.httpd.serve_forever() |
