"""Sentry common functions.""" import sentry_sdk from sentry_sdk.integrations.aws_lambda import AwsLambdaIntegration from . import common_config from .secrets_manager import AssetTranscoderLambdaSecretsManager def init(sentry_dsn=None, environment=None): """ Initilize sentry_sdk. It's safe to init with empty or None values. In that case sentry_sdk perform zero-configuration. Args: sentry_dsn (str): using common_config.SENTRY_DSN as default value. environment (str): using common_config.ENVIRONMENT as default value.. """ if sentry_dsn is None: sentry_dsn = common_config.SENTRY_DSN if environment is None: environment = common_config.ENVIRONMENT sentry_sdk.init( dsn=sentry_dsn, environment=environment, integrations=[AwsLambdaIntegration()] ) def capture_exception(exception=None): """ Send exception to Sentry. If no exception provided then send current exception from sys.exc_info(). """ sentry_sdk.capture_exception(exception) def capture_message(message): """Send message to Sentry.""" sentry_sdk.capture_message(message) def init_for_lambda(lambda_name): """ Initialize sentry for given lambda name. The SENTRY_DSN is taken from secrets manger. Note: It does nothing if run in test environment. """ if common_config.ENVIRONMENT != 'test': secrets_manager_client = AssetTranscoderLambdaSecretsManager(lambda_name) init(sentry_dsn=secrets_manager_client.get_cred('SENTRY_DSN'))