From 4793ad040c1974cb2b9f7f2ed9657bc7f1838c65 Mon Sep 17 00:00:00 2001
From: Neda Moeini <neda.moeini@geant.org>
Date: Tue, 30 Jul 2024 12:02:31 +0200
Subject: [PATCH] - Added an environment variable (TESTING) to prevent Sentry
 from initializing during test runs. - Configured Sentry to include
 environment information in its setup.

---
 gso/__init__.py  | 19 ++++++++++++-------
 gso/settings.py  | 20 ++++++++++++++++++--
 test/__init__.py |  3 +++
 3 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/gso/__init__.py b/gso/__init__.py
index bb036cdc..2df27bcb 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 07f7bbdd..68d95d1d 100644
--- a/gso/settings.py
+++ b/gso/settings.py
@@ -10,9 +10,8 @@ import logging
 import os
 from pathlib import Path
 from typing import Annotated
-
 from pydantic import EmailStr, Field
-from pydantic_forms.types import UUIDstr
+from pydantic_forms.types import UUIDstr, strEnum
 from pydantic_settings import BaseSettings
 from typing_extensions import Doc
 
@@ -193,6 +192,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`."""
 
@@ -206,6 +221,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 433e89b0..d9001c93 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"
-- 
GitLab