Page MenuHomeSoftware Heritage

D2411.id8564.diff
No OneTemporary

D2411.id8564.diff

diff --git a/requirements.txt b/requirements.txt
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,4 @@
Click
Deprecated
PyYAML
+sentry-sdk
diff --git a/swh/core/cli/__init__.py b/swh/core/cli/__init__.py
--- a/swh/core/cli/__init__.py
+++ b/swh/core/cli/__init__.py
@@ -9,6 +9,7 @@
import click
import pkg_resources
+import sentry_sdk
import yaml
LOG_LEVEL_NAMES = ['NOTSET', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
@@ -65,13 +66,21 @@
@click.option('--log-config', default=None,
type=click.File('r'),
help="Python yaml logging configuration file.")
+@click.option('--sentry-dsn', default=None,
+ help="DSN of the Sentry instance to report to")
+@click.option('--sentry-debug/--no-sentry-debug',
+ default=False, hidden=True,
+ help="Enable debugging of sentry")
@click.pass_context
-def swh(ctx, log_level, log_config):
+def swh(ctx, log_level, log_config, sentry_dsn, sentry_debug):
"""Command line interface for Software Heritage.
"""
signal.signal(signal.SIGTERM, clean_exit_on_signal)
signal.signal(signal.SIGINT, clean_exit_on_signal)
+ if sentry_dsn:
+ sentry_sdk.init(dsn=sentry_dsn, debug=sentry_debug)
+
if log_level is None and log_config is None:
log_level = 'INFO'
diff --git a/swh/core/db/tests/test_cli.py b/swh/core/db/tests/test_cli.py
--- a/swh/core/db/tests/test_cli.py
+++ b/swh/core/db/tests/test_cli.py
@@ -13,6 +13,7 @@
-l, --log-level [NOTSET|DEBUG|INFO|WARNING|ERROR|CRITICAL]
Log level (defaults to INFO).
--log-config FILENAME Python yaml logging configuration file.
+ --sentry-dsn TEXT DSN of the Sentry instance to report to
-h, --help Show this message and exit.
Notes:
diff --git a/swh/core/tests/test_cli.py b/swh/core/tests/test_cli.py
--- a/swh/core/tests/test_cli.py
+++ b/swh/core/tests/test_cli.py
@@ -1,7 +1,11 @@
-#
+# Copyright (C) 2019 The Software Heritage developers
+# See the AUTHORS file at the top-level directory of this distribution
+# License: GNU General Public License version 3, or any later version
+# See top-level LICENSE file for more information
import logging
import textwrap
+from unittest.mock import patch
import click
from click.testing import CliRunner
@@ -16,6 +20,7 @@
-l, --log-level [NOTSET|DEBUG|INFO|WARNING|ERROR|CRITICAL]
Log level (defaults to INFO).
--log-config FILENAME Python yaml logging configuration file.
+ --sentry-dsn TEXT DSN of the Sentry instance to report to
-h, --help Show this message and exit.
Notes:
@@ -45,7 +50,9 @@
click.echo('Hello SWH!')
runner = CliRunner()
- result = runner.invoke(swhmain, ['test'])
+ with patch('sentry_sdk.init') as sentry_sdk_init:
+ result = runner.invoke(swhmain, ['test'])
+ sentry_sdk_init.assert_not_called()
assert result.exit_code == 0
assert result.output.strip() == 'Hello SWH!'
@@ -90,6 +97,63 @@
assert result.output.strip() == '''Hello SWH!'''
+def test_sentry(swhmain):
+ @swhmain.command(name='test')
+ @click.pass_context
+ def swhtest(ctx):
+ click.echo('Hello SWH!')
+
+ runner = CliRunner()
+ with patch('sentry_sdk.init') as sentry_sdk_init:
+ result = runner.invoke(swhmain, ['--sentry-dsn', 'test_dsn', 'test'])
+ assert result.exit_code == 0
+ assert result.output.strip() == '''Hello SWH!'''
+ sentry_sdk_init.assert_called_once_with(
+ dsn='test_dsn',
+ debug=False,
+ )
+
+
+def test_sentry_debug(swhmain):
+ @swhmain.command(name='test')
+ @click.pass_context
+ def swhtest(ctx):
+ click.echo('Hello SWH!')
+
+ runner = CliRunner()
+ with patch('sentry_sdk.init') as sentry_sdk_init:
+ result = runner.invoke(
+ swhmain, ['--sentry-dsn', 'test_dsn', '--sentry-debug', 'test'])
+ assert result.exit_code == 0
+ assert result.output.strip() == '''Hello SWH!'''
+ sentry_sdk_init.assert_called_once_with(
+ dsn='test_dsn',
+ debug=True,
+ )
+
+
+def test_sentry_env(swhmain):
+ @swhmain.command(name='test')
+ @click.pass_context
+ def swhtest(ctx):
+ click.echo('Hello SWH!')
+
+ runner = CliRunner()
+ with patch('sentry_sdk.init') as sentry_sdk_init:
+ env = {
+ 'SWH_SENTRY_DSN': 'test_dsn',
+ 'SWH_SENTRY_DEBUG': '1',
+ }
+ result = runner.invoke(
+ swhmain, ['test'], env=env, auto_envvar_prefix='SWH')
+ assert result.exit_code == 0
+ assert result.output.strip() == '''Hello SWH!'''
+ sentry_sdk_init.assert_called_once_with(
+ dsn='test_dsn',
+ debug=True,
+ )
+
+
@pytest.fixture
def log_config_path(tmp_path):
log_config = textwrap.dedent('''\

File Metadata

Mime Type
text/plain
Expires
Nov 5 2024, 5:20 AM (8 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3221499

Event Timeline