From 113a2efbd24b6b99032d688d4e633968c502c48c Mon Sep 17 00:00:00 2001 From: m5ka Date: Mon, 8 Apr 2024 18:10:51 +0100 Subject: [PATCH] =?UTF-8?q?chore:=20=E2=9A=A1=EF=B8=8F=20integrate=20sentr?= =?UTF-8?q?y=20for=20exception=20reporting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 1 + moku/config/settings.py | 6 ++++ poetry.lock | 78 ++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 4 files changed, 85 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index f518535..fbe256b 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ DATABASE_URL="postgres://localhost:5432/moku" SECRET_KEY="moku-keyboard-cat" RECAPTCHA_PUBLIC_KEY="" RECAPTCHA_PRIVATE_KEY="" +SENTRY_DSN="" # The following are defaults. # Uncomment and set a value to use a different value. diff --git a/moku/config/settings.py b/moku/config/settings.py index 682c3c9..f8ce9c5 100644 --- a/moku/config/settings.py +++ b/moku/config/settings.py @@ -1,6 +1,7 @@ from pathlib import Path import environ +import sentry_sdk from django.utils.translation import gettext_lazy as _ # Initial environment @@ -181,3 +182,8 @@ if DEBUG: else: RECAPTCHA_PUBLIC_KEY = env.str("RECAPTCHA_PUBLIC_KEY") RECAPTCHA_PRIVATE_KEY = env.str("RECAPTCHA_PRIVATE_KEY") + +# Sentry integration +# https://docs.sentry.io/platforms/python/integrations/django/ +if not DEBUG: + sentry_sdk.init(env.str("SENTRY_DSN"), enable_tracing=True) diff --git a/poetry.lock b/poetry.lock index 25c0680..255e55a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,6 +14,17 @@ files = [ [package.extras] tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + [[package]] name = "colorama" version = "0.4.6" @@ -444,6 +455,54 @@ files = [ {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, ] +[[package]] +name = "sentry-sdk" +version = "1.44.1" +description = "Python client for Sentry (https://sentry.io)" +optional = false +python-versions = "*" +files = [ + {file = "sentry-sdk-1.44.1.tar.gz", hash = "sha256:24e6a53eeabffd2f95d952aa35ca52f0f4201d17f820ac9d3ff7244c665aaf68"}, + {file = "sentry_sdk-1.44.1-py2.py3-none-any.whl", hash = "sha256:5f75eb91d8ab6037c754a87b8501cc581b2827e923682f593bed3539ce5b3999"}, +] + +[package.dependencies] +certifi = "*" +django = {version = ">=1.8", optional = true, markers = "extra == \"django\""} +urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +arq = ["arq (>=0.23)"] +asyncpg = ["asyncpg (>=0.23)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +celery-redbeat = ["celery-redbeat (>=2)"] +chalice = ["chalice (>=1.16.0)"] +clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +fastapi = ["fastapi (>=0.79.0)"] +flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] +grpcio = ["grpcio (>=1.21.1)"] +httpx = ["httpx (>=0.16.0)"] +huey = ["huey (>=2)"] +loguru = ["loguru (>=0.5)"] +openai = ["openai (>=1.0.0)", "tiktoken (>=0.3.0)"] +opentelemetry = ["opentelemetry-distro (>=0.35b0)"] +opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"] +pure-eval = ["asttokens", "executing", "pure-eval"] +pymongo = ["pymongo (>=3.1)"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +starlette = ["starlette (>=0.19.1)"] +starlite = ["starlite (>=1.48)"] +tornado = ["tornado (>=5)"] + [[package]] name = "shortuuid" version = "1.0.13" @@ -482,7 +541,24 @@ files = [ {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] +[[package]] +name = "urllib3" +version = "2.2.1" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "e759f693fe3fafe547634271da1f0ba2c3de523581edd40dd78299cf7fb97c00" +content-hash = "9a193149ab56925430a792b481ef526f023daec746433edaa72272eea9332b64" diff --git a/pyproject.toml b/pyproject.toml index 72474d0..c513f06 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ pillow = "^10.2.0" psycopg2 = "^2.9.9" python = "^3.12" shortuuid = "^1.0.13" +sentry-sdk = {extras = ["django"], version = "^1.44.1"} [tool.poetry.group.dev] optional = true