Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7066313
D2411.id8529.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
D2411.id8529.diff
View Options
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,20 @@
@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',
+ 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/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
@@ -45,7 +49,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 +96,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
Details
Attached
Mime Type
text/plain
Expires
Nov 5 2024, 5:41 AM (8 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3222499
Attached To
D2411: Make the CLI initialize sentry-sdk based on CLI options/envvars.
Event Timeline
Log In to Comment