You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-10-31 18:30:33 +03:00
77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
import logging
|
|
|
|
import sentry_sdk
|
|
from sentry_sdk.integrations.logging import LoggingIntegration
|
|
|
|
from cmapi_server import helpers
|
|
from cmapi_server.constants import CMAPI_CONF_PATH
|
|
from tracing.sentry_backend import SentryBackend
|
|
from tracing.tracer import get_tracer
|
|
from cmapi_server.managers.application import AppManager
|
|
|
|
SENTRY_ACTIVE = False
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def maybe_init_sentry() -> bool:
|
|
"""Initialize Sentry from CMAPI configuration.
|
|
|
|
Reads config and initializes Sentry only if dsn parameter is present
|
|
in corresponding section of cmapi config.
|
|
The initialization enables LoggingIntegration: it captures error-level logs as Sentry events
|
|
and uses lower-level logs as breadcrumbs.
|
|
|
|
Returns: True if Sentry is initialized, False otherwise.
|
|
"""
|
|
global SENTRY_ACTIVE
|
|
try:
|
|
cfg_parser = helpers.get_config_parser(CMAPI_CONF_PATH)
|
|
dsn = helpers.dequote(
|
|
cfg_parser.get('Sentry', 'dsn', fallback='').strip()
|
|
)
|
|
if not dsn:
|
|
return False
|
|
|
|
environment = helpers.dequote(
|
|
cfg_parser.get('Sentry', 'environment', fallback='development').strip()
|
|
)
|
|
except Exception:
|
|
logger.exception('Failed to initialize Sentry.')
|
|
return False
|
|
|
|
try:
|
|
sentry_logging = LoggingIntegration(
|
|
level=logging.INFO,
|
|
event_level=logging.ERROR,
|
|
)
|
|
|
|
# Compose release string: cmapi-version(+shortrev)
|
|
version = AppManager.get_version()
|
|
shortrev = (AppManager.get_git_revision() or '').strip()
|
|
shortrev = shortrev[:12] if shortrev else ''
|
|
release = version if not shortrev else f"{version}+{shortrev}"
|
|
|
|
sentry_sdk.init(
|
|
dsn=dsn,
|
|
environment=environment,
|
|
sample_rate=1.0,
|
|
traces_sample_rate=1.0,
|
|
integrations=[sentry_logging],
|
|
release=release,
|
|
)
|
|
# Add tags for easier filtering in Sentry
|
|
if shortrev:
|
|
sentry_sdk.set_tag("git_revision", shortrev)
|
|
sentry_sdk.set_tag("cmapi_version", version)
|
|
SENTRY_ACTIVE = True
|
|
# Register backend to mirror our internal spans into Sentry
|
|
get_tracer().register_backend(SentryBackend())
|
|
logger.info('Sentry initialized for CMAPI via config.')
|
|
except Exception:
|
|
logger.exception('Failed to initialize Sentry.')
|
|
return False
|
|
|
|
logger.info('Sentry successfully initialized.')
|
|
return True
|
|
|