mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
from . import controllers
|
|
|
|
from logging import getLogger
|
|
_logger = getLogger(__name__)
|
|
|
|
try:
|
|
import odoo
|
|
target = odoo.service.server.server
|
|
|
|
try:
|
|
instrumented = target._nr_instrumented
|
|
except AttributeError:
|
|
instrumented = target._nr_instrumented = False
|
|
|
|
if instrumented:
|
|
_logger.info("NewRelic instrumented already")
|
|
else:
|
|
import odoo.tools.config as config
|
|
import newrelic.agent
|
|
|
|
|
|
try:
|
|
newrelic.agent.initialize(config['new_relic_config_file'], config['new_relic_environment'])
|
|
except KeyError:
|
|
try:
|
|
newrelic.agent.initialize(config['new_relic_config_file'])
|
|
except KeyError:
|
|
_logger.info('NewRelic setting up from env variables')
|
|
newrelic.agent.initialize()
|
|
|
|
# Main WSGI Application
|
|
target._nr_instrumented = True
|
|
target.app = newrelic.agent.WSGIApplicationWrapper(target.app)
|
|
|
|
# Workers new WSGI Application
|
|
target = odoo.service.wsgi_server
|
|
target.application_unproxied = newrelic.agent.WSGIApplicationWrapper(target.application_unproxied)
|
|
|
|
# Error handling
|
|
def should_ignore(exc, value, tb):
|
|
from werkzeug.exceptions import HTTPException
|
|
|
|
# Werkzeug HTTPException can be raised internally by Odoo or in
|
|
# user code if they mix Odoo with Werkzeug. Filter based on the
|
|
# HTTP status code.
|
|
|
|
if isinstance(value, HTTPException):
|
|
if newrelic.agent.ignore_status_code(value.code):
|
|
return True
|
|
|
|
def _nr_wrapper_handle_exception_(wrapped):
|
|
def _handle_exception(*args, **kwargs):
|
|
transaction = newrelic.agent.current_transaction()
|
|
|
|
if transaction is None:
|
|
return wrapped(*args, **kwargs)
|
|
|
|
transaction.record_exception(ignore_errors=should_ignore)
|
|
|
|
name = newrelic.agent.callable_name(args[1])
|
|
with newrelic.agent.FunctionTrace(transaction, name):
|
|
return wrapped(*args, **kwargs)
|
|
|
|
return _handle_exception
|
|
|
|
target = odoo.http.WebRequest
|
|
target._handle_exception = _nr_wrapper_handle_exception_(target._handle_exception)
|
|
|
|
|
|
except ImportError:
|
|
_logger.warn('newrelic python module not installed or other missing module') |