86 lines
3.0 KiB
Python
86 lines
3.0 KiB
Python
# Copyright 2016-2017 Versada <https://versada.eu/>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
import collections
|
|
import logging
|
|
|
|
import odoo.loglevels
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
try:
|
|
import raven
|
|
from raven.conf import defaults
|
|
except ImportError:
|
|
_logger.debug('Cannot import "raven". Please make sure it is installed.')
|
|
|
|
|
|
def split_multiple(string, delimiter=",", strip_chars=None):
|
|
"""Splits :param:`string` and strips :param:`strip_chars` from values."""
|
|
if not string:
|
|
return []
|
|
return [v.strip(strip_chars) for v in string.split(delimiter)]
|
|
|
|
|
|
SentryOption = collections.namedtuple("SentryOption", ["key", "default", "converter"])
|
|
|
|
# Mapping of Odoo logging level -> Python stdlib logging library log level.
|
|
LOG_LEVEL_MAP = {
|
|
getattr(odoo.loglevels, "LOG_%s" % x): getattr(logging, x)
|
|
for x in ("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET")
|
|
}
|
|
DEFAULT_LOG_LEVEL = "warn"
|
|
|
|
ODOO_USER_EXCEPTIONS = [
|
|
"odoo.exceptions.AccessDenied",
|
|
"odoo.exceptions.AccessError",
|
|
"odoo.exceptions.DeferredException",
|
|
"odoo.exceptions.MissingError",
|
|
"odoo.exceptions.RedirectWarning",
|
|
"odoo.exceptions.UserError",
|
|
"odoo.exceptions.ValidationError",
|
|
"odoo.exceptions.Warning",
|
|
"odoo.exceptions.except_orm",
|
|
]
|
|
DEFAULT_IGNORED_EXCEPTIONS = ",".join(ODOO_USER_EXCEPTIONS)
|
|
|
|
PROCESSORS = (
|
|
"raven.processors.SanitizePasswordsProcessor",
|
|
"odoo.addons.sentry.logutils.SanitizeOdooCookiesProcessor",
|
|
)
|
|
DEFAULT_PROCESSORS = ",".join(PROCESSORS)
|
|
|
|
EXCLUDE_LOGGERS = ("werkzeug",)
|
|
DEFAULT_EXCLUDE_LOGGERS = ",".join(EXCLUDE_LOGGERS)
|
|
|
|
DEFAULT_TRANSPORT = "threaded"
|
|
|
|
|
|
def select_transport(name=DEFAULT_TRANSPORT):
|
|
return {
|
|
"requests_synchronous": raven.transport.RequestsHTTPTransport,
|
|
"requests_threaded": raven.transport.ThreadedRequestsHTTPTransport,
|
|
"synchronous": raven.transport.HTTPTransport,
|
|
"threaded": raven.transport.ThreadedHTTPTransport,
|
|
}.get(name, DEFAULT_TRANSPORT)
|
|
|
|
|
|
def get_sentry_options():
|
|
return [
|
|
SentryOption("dsn", "", str.strip),
|
|
SentryOption("install_sys_hook", False, None),
|
|
SentryOption("transport", DEFAULT_TRANSPORT, select_transport),
|
|
SentryOption("include_paths", "", split_multiple),
|
|
SentryOption("exclude_paths", "", split_multiple),
|
|
SentryOption("machine", defaults.NAME, None),
|
|
SentryOption("auto_log_stacks", defaults.AUTO_LOG_STACKS, None),
|
|
SentryOption("capture_locals", defaults.CAPTURE_LOCALS, None),
|
|
SentryOption("string_max_length", defaults.MAX_LENGTH_STRING, None),
|
|
SentryOption("list_max_length", defaults.MAX_LENGTH_LIST, None),
|
|
SentryOption("site", None, None),
|
|
SentryOption("include_versions", True, None),
|
|
SentryOption("ignore_exceptions", DEFAULT_IGNORED_EXCEPTIONS, split_multiple),
|
|
SentryOption("processors", DEFAULT_PROCESSORS, split_multiple),
|
|
SentryOption("environment", None, None),
|
|
SentryOption("release", None, None),
|
|
]
|