From fee2a4f17bbd168b23a19fcd8005dbf2653affa8 Mon Sep 17 00:00:00 2001 From: Sonny Bakker Date: Sun, 25 Apr 2021 12:15:02 +0200 Subject: [PATCH] Use sentry in all environments It still is optional though --- docker/django | 2 +- gitlab-ci/test.yml | 2 +- src/newsreader/conf/base.py | 20 ++++++++++++++++++-- src/newsreader/conf/dev.py | 11 +++++++++++ src/newsreader/conf/docker.py | 12 ++++++++++++ src/newsreader/conf/gitlab.py | 15 +++++++++++++++ src/newsreader/conf/production.py | 17 +++++++++-------- src/newsreader/conf/version.py | 11 ++++++++++- 8 files changed, 77 insertions(+), 13 deletions(-) diff --git a/docker/django b/docker/django index 871828a..5b9b7e0 100644 --- a/docker/django +++ b/docker/django @@ -5,6 +5,6 @@ RUN pip install poetry WORKDIR /app COPY poetry.lock pyproject.toml /app/ -RUN poetry config virtualenvs.create false && poetry install --no-interaction +RUN poetry config virtualenvs.create false && poetry install --no-interaction --extras sentry COPY . /app/ diff --git a/gitlab-ci/test.yml b/gitlab-ci/test.yml index 3114a87..4716c59 100644 --- a/gitlab-ci/test.yml +++ b/gitlab-ci/test.yml @@ -9,7 +9,7 @@ python-tests: - pip install poetry --quiet - poetry config cache-dir .cache/poetry - poetry config virtualenvs.in-project true - - poetry install --no-interaction --quiet + - poetry install --no-interaction --quiet --extras sentry script: - poetry run coverage run src/manage.py test newsreader - poetry run coverage report diff --git a/src/newsreader/conf/base.py b/src/newsreader/conf/base.py index 51dfe67..11ba8cc 100644 --- a/src/newsreader/conf/base.py +++ b/src/newsreader/conf/base.py @@ -2,7 +2,13 @@ import os from pathlib import Path -from .version import get_current_version + +try: + from sentry_sdk.integrations.celery import CeleryIntegration + from sentry_sdk.integrations.django import DjangoIntegration +except ImportError: + CeleryIntegration = None + DjangoIntegration = None BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent @@ -199,7 +205,7 @@ STATICFILES_FINDERS = [ EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" # Project settings -VERSION = get_current_version() +ENVIRONMENT = "development" # Reddit integration REDDIT_CLIENT_ID = "CLIENT_ID" @@ -246,3 +252,13 @@ CELERY_WORKER_HIJACK_ROOT_LOGGER = False REGISTRATION_OPEN = True REGISTRATION_AUTO_LOGIN = True ACCOUNT_ACTIVATION_DAYS = 7 + +# Sentry +SENTRY_CONFIG = { + "dsn": os.environ.get("SENTRY_DSN"), + "send_default_pii": True, + "environment": ENVIRONMENT, + "integrations": [DjangoIntegration(), CeleryIntegration()] + if DjangoIntegration and CeleryIntegration + else [], +} diff --git a/src/newsreader/conf/dev.py b/src/newsreader/conf/dev.py index 8186db7..9372350 100644 --- a/src/newsreader/conf/dev.py +++ b/src/newsreader/conf/dev.py @@ -1,4 +1,5 @@ from .base import * # isort:skip +from .version import get_current_version SECRET_KEY = "mv4&5#+)-=abz3^&1r^nk_ca6y54--p(4n4cg%z*g&rb64j%wl" @@ -9,11 +10,21 @@ EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" INSTALLED_APPS += ["debug_toolbar", "django_extensions"] +# Project settings +VERSION = get_current_version() + # Third party settings AXES_FAILURE_LIMIT = 50 AXES_COOLOFF_TIME = None try: from .local import * # noqa + + # Optionally use sentry integration + from sentry_sdk import init as sentry_init + + SENTRY_CONFIG.update({"release": VERSION}) + + sentry_init(**SENTRY_CONFIG) except ImportError: pass diff --git a/src/newsreader/conf/docker.py b/src/newsreader/conf/docker.py index f5665fa..9b62961 100644 --- a/src/newsreader/conf/docker.py +++ b/src/newsreader/conf/docker.py @@ -1,4 +1,5 @@ from .base import * # isort:skip +from .version import get_current_version SECRET_KEY = "=q(ztyo)b6noom#a164g&s9vcj1aawa^g#ing_ir99=_zl4g&$" @@ -30,6 +31,10 @@ CACHES = { }, } +# Project settings +VERSION = get_current_version() +ENVIRONMENT = "docker" + # Third party settings # Axes AXES_FAILURE_LIMIT = 50 @@ -41,5 +46,12 @@ CELERY_BROKER_URL = "amqp://guest:guest@rabbitmq:5672//" try: from .local import * # noqa + + # Optionally use sentry integration + from sentry_sdk import init as sentry_init + + SENTRY_CONFIG.update({"release": VERSION, "environment": ENVIRONMENT}) + + sentry_init(**SENTRY_CONFIG) except ImportError: pass diff --git a/src/newsreader/conf/gitlab.py b/src/newsreader/conf/gitlab.py index 67a20dd..1b06ba9 100644 --- a/src/newsreader/conf/gitlab.py +++ b/src/newsreader/conf/gitlab.py @@ -1,4 +1,5 @@ from .base import * # isort:skip +from .version import get_current_version SECRET_KEY = "29%lkw+&n%^w4k#@_db2mo%*tc&xzb)x7xuq*(0$eucii%4r0c" @@ -17,3 +18,17 @@ CACHES = { "LOCATION": "memcached:11211", }, } + +# Project settings +VERSION = get_current_version() +ENVIRONMENT = "gitlab" + +try: + # Optionally use sentry integration + from sentry_sdk import init as sentry_init + + SENTRY_CONFIG.update({"release": VERSION, "environment": ENVIRONMENT}) + + sentry_init(**SENTRY_CONFIG) +except ImportError: + pass diff --git a/src/newsreader/conf/production.py b/src/newsreader/conf/production.py index b25fe09..6bce6f6 100644 --- a/src/newsreader/conf/production.py +++ b/src/newsreader/conf/production.py @@ -2,6 +2,8 @@ import os from dotenv import load_dotenv +from .version import get_current_version + from .base import * # isort:skip @@ -58,6 +60,10 @@ EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD", "") EMAIL_USE_TLS = bool(os.environ.get("EMAIL_USE_TLS")) EMAIL_USE_SSL = bool(os.environ.get("EMAIL_USE_SSL")) +# Project settings +VERSION = get_current_version(debug=False) +ENVIRONMENT = "production" + # Reddit integration REDDIT_CLIENT_ID = os.environ.get("REDDIT_CLIENT_ID", "") REDDIT_CLIENT_SECRET = os.environ.get("REDDIT_CLIENT_SECRET", "") @@ -76,14 +82,9 @@ REGISTRATION_OPEN = False # Optionally use sentry integration try: from sentry_sdk import init as sentry_init - from sentry_sdk.integrations.celery import CeleryIntegration - from sentry_sdk.integrations.django import DjangoIntegration - sentry_init( - dsn=os.environ.get("SENTRY_DSN"), - integrations=[DjangoIntegration(), CeleryIntegration()], - send_default_pii=False, - release=VERSION, - ) + SENTRY_CONFIG.update({"release": VERSION, "environment": ENVIRONMENT}) + + sentry_init(**SENTRY_CONFIG) except ImportError: pass diff --git a/src/newsreader/conf/version.py b/src/newsreader/conf/version.py index f8b4c8d..4ed2d96 100644 --- a/src/newsreader/conf/version.py +++ b/src/newsreader/conf/version.py @@ -2,10 +2,19 @@ import os import subprocess -def get_current_version(): +def get_current_version(debug=True): if "VERSION" in os.environ: return os.environ["VERSION"] + if debug: + try: + output = subprocess.check_output( + ["git", "show", "--no-patch", "--format=%s"], universal_newlines=True + ) + return output.strip() + except (subprocess.CalledProcessError, OSError): + return "" + try: output = subprocess.check_output( ["git", "describe", "--tags"], universal_newlines=True