diff --git a/backend/Pipfile b/backend/Pipfile index f020342b..ecc3364c 100644 --- a/backend/Pipfile +++ b/backend/Pipfile @@ -24,6 +24,7 @@ pyjwt = ">=2.6.0" click = ">=8.1.3" python-multipart = ">=0.0.5" parameterized = ">=0.8.1" +sentry-sdk = ">=1.13.0" [dev-packages] mypy = ">=0.991" diff --git a/backend/bracket/app.py b/backend/bracket/app.py index c855f590..a1c8ecba 100644 --- a/backend/bracket/app.py +++ b/backend/bracket/app.py @@ -2,10 +2,13 @@ from fastapi import FastAPI from starlette.middleware.cors import CORSMiddleware from starlette.staticfiles import StaticFiles -from bracket.config import Environment, config, environment +from bracket.config import Environment, config, environment, init_sentry from bracket.database import database, init_db_when_empty from bracket.routes import auth, clubs, matches, players, rounds, teams, tournaments + +init_sentry() + app = FastAPI( title="Bracket API", docs_url="/docs", diff --git a/backend/bracket/config.py b/backend/bracket/config.py index 7e7e4e84..6c02077e 100644 --- a/backend/bracket/config.py +++ b/backend/bracket/config.py @@ -2,6 +2,7 @@ import logging import os from enum import auto +import sentry_sdk from pydantic import BaseSettings, PostgresDsn from bracket.utils.types import EnumAutoStr @@ -10,6 +11,7 @@ from bracket.utils.types import EnumAutoStr class Environment(EnumAutoStr): PRODUCTION = auto() DEVELOPMENT = auto() + DEMO = auto() CI = auto() def get_env_filepath(self) -> str: @@ -17,6 +19,7 @@ class Environment(EnumAutoStr): Environment.PRODUCTION: 'prod.env', Environment.DEVELOPMENT: 'dev.env', Environment.CI: 'ci.env', + Environment.DEMO: 'demo.env', }[self] def get_log_level(self) -> int: @@ -24,6 +27,7 @@ class Environment(EnumAutoStr): Environment.CI: logging.WARNING, Environment.DEVELOPMENT: logging.DEBUG, Environment.PRODUCTION: logging.INFO, + Environment.DEMO: logging.INFO, }[self] @@ -34,7 +38,17 @@ class Config(BaseSettings): cors_origin_regex: str = '' admin_email: str | None = None admin_password: str | None = None + sentry_dsn: str | None = None environment = Environment(os.getenv('ENVIRONMENT', 'DEVELOPMENT')) config = Config(_env_file=environment.get_env_filepath()) + + +def init_sentry() -> None: + if config.sentry_dsn: + sentry_sdk.init( + dsn=config.sentry_dsn, + environment=str(environment.value), + with_locals=False, + ) diff --git a/backend/precommit.sh b/backend/precommit.sh index a421d0cd..50bc29f3 100755 --- a/backend/precommit.sh +++ b/backend/precommit.sh @@ -3,6 +3,6 @@ set -evo pipefail black . dmypy run -- --follow-imports=normal --junit-xml= . -ENVIRONMENT=CI pytest --cov --cov-report=xml . +SQLALCHEMY_SILENCE_UBER_WARNING=1 ENVIRONMENT=CI pytest --cov --cov-report=xml . pylint alembic bracket tests isort .