[FIX] sentry: enable use of "sentry_odoo_dir" config parameter

Allow using `sentry_release` or `sentry_odoo_dir` in the Odoo
configuration file.

Previously, the `sentry_odoo_dir` was never actually respected. It would
always be overridden by `sentry_release`. Even if `sentry_release` is
not set, it will use an empty value instead of using `sentry_odoo_dir`
to find the Git commit hash.

After this commit, the `sentry_release` parameter still takes
precedence. However, if `sentry_release` is not set and
`sentry_odoo_dir` is set, then `sentry_odoo_dir` will be used to find
the appropriate Git commit hash, which will be used as the `release`
value.

Both cases are covered by the added unit tests.
pull/2516/head
Travis Waelbroeck 2021-09-24 22:24:27 -05:00 committed by prabakaran
parent d4cab37f13
commit 93b758bf11
2 changed files with 39 additions and 5 deletions

View File

@ -46,11 +46,7 @@ def initialize_raven(config, client_cls=None):
_logger.debug(
"Both sentry_odoo_dir and sentry_release defined, choosing sentry_release"
)
options = {
"release": config.get(
"sentry_release", get_odoo_commit(config.get("sentry_odoo_dir"))
)
}
options = {}
for option in const.get_sentry_options():
value = config.get("sentry_%s" % option.key, option.default)
if isinstance(option.converter, abc.Callable):
@ -64,6 +60,11 @@ def initialize_raven(config, client_cls=None):
if level not in const.LOG_LEVEL_MAP:
level = const.DEFAULT_LOG_LEVEL
if not options.get("release"):
options["release"] = config.get(
"sentry_release", get_odoo_commit(config.get("sentry_odoo_dir"))
)
client_cls = client_cls or raven.Client
client = client_cls(**options)
handler = OdooSentryHandler(

View File

@ -6,12 +6,16 @@ import sys
import unittest
import raven
from mock import patch
from odoo import exceptions
from .. import initialize_raven
from ..logutils import OdooSentryHandler
GIT_SHA = "d670460b4b4aece5915caf5c68d12f560a9fe3e4"
RELEASE = "test@1.2.3"
def log_handler_by_class(logger, handler_cls):
for handler in logger.handlers:
@ -117,3 +121,32 @@ class TestClientSetup(unittest.TestCase):
record = logging.LogRecord(__name__, level, __file__, 42, msg, (), exc_info)
handler.emit(record)
self.assertEventNotCaptured(client, level, msg)
@patch("odoo.addons.sentry.get_odoo_commit", return_value=GIT_SHA)
def test_config_odoo_dir(self, get_odoo_commit):
config = {
"sentry_enabled": True,
"sentry_dsn": "http://public:secret@example.com/1",
"sentry_odoo_dir": "/opt/odoo/core",
}
client = initialize_raven(config, client_cls=InMemoryClient)
self.assertEqual(
client.release,
GIT_SHA,
"Failed to use 'sentry_odoo_dir' parameter appropriately",
)
@patch("odoo.addons.sentry.get_odoo_commit", return_value=GIT_SHA)
def test_config_release(self, get_odoo_commit):
config = {
"sentry_enabled": True,
"sentry_dsn": "http://public:secret@example.com/1",
"sentry_odoo_dir": "/opt/odoo/core",
"sentry_release": RELEASE,
}
client = initialize_raven(config, client_cls=InMemoryClient)
self.assertEqual(
client.release,
RELEASE,
"Failed to use 'sentry_release' parameter appropriately",
)