# Copyright 2016-2017 Versada # 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 = dict([ (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), ]