diff --git a/gso/__init__.py b/gso/__init__.py index bb036cdc5882276b2239d1c42ac8f791a27b1764..2df27bcb762638dee24e7c6449b34f7e99b4782d 100644 --- a/gso/__init__.py +++ b/gso/__init__.py @@ -1,5 +1,7 @@ """The main entrypoint for :term:`GSO`, and the different ways in which it can be run.""" +import os + import sentry_sdk import typer from orchestrator import OrchestratorCore, app_settings @@ -13,16 +15,10 @@ from gso.api import router as api_router from gso.auth.oidc import oidc_instance from gso.auth.opa import graphql_opa_instance, opa_instance from gso.graphql_api.types import GSO_SCALAR_OVERRIDES +from gso.settings import load_oss_params SCALAR_OVERRIDES.update(GSO_SCALAR_OVERRIDES) -sentry_sdk.init( - dsn="https://2b0b82245bfa6631041802c997ed8b58@test-observer01.geant.org/3", - # Set traces_sample_rate to 1.0 to capture 100% - # of transactions for performance monitoring. - traces_sample_rate=1.0, -) - def init_gso_app() -> OrchestratorCore: """Initialise the :term:`GSO` app.""" @@ -47,3 +43,12 @@ def init_cli_app() -> typer.Typer: cli_app.add_typer(imports.app, name="import-cli") cli_app.add_typer(netbox.app, name="netbox-cli") return cli_app() + + +def init_sentry() -> None: + """Only initialize Sentry if not in testing mode.""" + if os.getenv("TESTING", "false").lower() == "false" and (sentry_config := load_oss_params().SENTRY): + sentry_sdk.init(dsn=sentry_config.DSN, environment=sentry_config.environment, traces_sample_rate=1.0) + + +init_sentry() diff --git a/gso/settings.py b/gso/settings.py index 47720f1db83fda119e5fd6eea943b25d50403653..8feb2ed16f2a0437ecd635ffa36ff91b597bd779 100644 --- a/gso/settings.py +++ b/gso/settings.py @@ -12,7 +12,7 @@ from pathlib import Path from typing import Annotated from pydantic import Field -from pydantic_forms.types import UUIDstr +from pydantic_forms.types import UUIDstr, strEnum from pydantic_settings import BaseSettings from typing_extensions import Doc @@ -190,6 +190,22 @@ class KentikParams(BaseSettings): md5_password: str +class EnvironmentEnum(strEnum): + """The different environments in which the GSO system can run.""" + + DEVELOPMENT = "development" + TEST = "test" + UAT = "uat" + PRODUCTION = "production" + + +class SentryParams(BaseSettings): + """Settings for Sentry.""" + + DSN: str + environment: EnvironmentEnum + + class OSSParams(BaseSettings): """The set of parameters required for running :term:`GSO`.""" @@ -203,6 +219,7 @@ class OSSParams(BaseSettings): EMAIL: EmailParams SHAREPOINT: SharepointParams KENTIK: KentikParams + SENTRY: SentryParams | None = None def load_oss_params() -> OSSParams: diff --git a/test/__init__.py b/test/__init__.py index 433e89b0fcb66b0730237cc78cded4048140751c..d9001c9314bacef63647c108731562e2f4194f99 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -1,3 +1,4 @@ +import os from uuid import uuid4 LSO_RESULT_SUCCESS = { @@ -19,3 +20,5 @@ LSO_RESULT_FAILURE = { } USER_CONFIRM_EMPTY_FORM = [{}] + +os.environ["TESTING"] = "true"