From 6f859445c88a2336f228a8bc370254e0e4abc244 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Sun, 24 Apr 2022 14:32:40 +0300 Subject: [PATCH] Add sentry --- poetry.lock | 53 ++++++++++++++++++++++++++++++- pyproject.toml | 1 + src/app/services/cache_updater.py | 4 +-- src/core/app.py | 1 + src/core/config.py | 2 ++ src/core/sentry.py | 8 +++++ src/core/setup_arq.py | 1 + 7 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/core/sentry.py diff --git a/poetry.lock b/poetry.lock index 439019e..b773086 100644 --- a/poetry.lock +++ b/poetry.lock @@ -376,6 +376,36 @@ idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} [package.extras] idna2008 = ["idna"] +[[package]] +name = "sentry-sdk" +version = "1.5.10" +description = "Python client for Sentry (https://sentry.io)" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +certifi = "*" +urllib3 = ">=1.10.0" + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +chalice = ["chalice (>=1.16.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +flask = ["flask (>=0.11)", "blinker (>=1.1)"] +httpx = ["httpx (>=0.16.0)"] +pure_eval = ["pure-eval", "executing", "asttokens"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["quart (>=0.16.1)", "blinker (>=1.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +tornado = ["tornado (>=5)"] + [[package]] name = "sniffio" version = "1.2.0" @@ -438,6 +468,19 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "urllib3" +version = "1.26.9" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + [[package]] name = "uvicorn" version = "0.16.0" @@ -470,7 +513,7 @@ test = ["aiohttp", "flake8 (>=3.9.2,<3.10.0)", "psutil", "pycodestyle (>=2.7.0,< [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "31f59d7e79ff1afd72a6cc4ffc0750a37487a55af82391305e7d125b95f490e0" +content-hash = "9ba20214aaa175c082882cec2cef976468c22be1260d24a720a7645c09c25edd" [metadata.files] aioredis = [ @@ -880,6 +923,10 @@ rfc3986 = [ {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, ] +sentry-sdk = [ + {file = "sentry-sdk-1.5.10.tar.gz", hash = "sha256:0a9eb20a84f4c17c08c57488d59fdad18669db71ebecb28fb0721423a33535f9"}, + {file = "sentry_sdk-1.5.10-py2.py3-none-any.whl", hash = "sha256:972c8fe9318a415b5cf35f687f568321472ef94b36806407c370ce9c88a67f2e"}, +] sniffio = [ {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, @@ -929,6 +976,10 @@ typing-extensions = [ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, ] +urllib3 = [ + {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, + {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, +] uvicorn = [ {file = "uvicorn-0.16.0-py3-none-any.whl", hash = "sha256:d8c839231f270adaa6d338d525e2652a0b4a5f4c2430b5c4ef6ae4d11776b0d2"}, {file = "uvicorn-0.16.0.tar.gz", hash = "sha256:eacb66afa65e0648fcbce5e746b135d09722231ffffc61883d4fac2b62fbea8d"}, diff --git a/pyproject.toml b/pyproject.toml index d739384..d71b77b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ prometheus-fastapi-instrumentator = "^5.7.1" uvloop = "^0.16.0" gunicorn = "^20.1.0" orjson = "^3.6.7" +sentry-sdk = "^1.5.10" [tool.poetry.dev-dependencies] diff --git a/src/app/services/cache_updater.py b/src/app/services/cache_updater.py index c27cf43..62fff01 100644 --- a/src/app/services/cache_updater.py +++ b/src/app/services/cache_updater.py @@ -48,7 +48,7 @@ async def check_books_page(ctx, page_number: int) -> None: ) -async def check_books(ctx: dict, *args, **kwargs) -> None: +async def check_books(ctx: dict, *args, **kwargs) -> None: # NOSONAR arq_pool: ArqRedis = ctx["arc_pool"] try: books_page = await get_books(1, PAGE_SIZE) @@ -89,7 +89,7 @@ async def cache_file(book: Book, file_type: str) -> Optional[CachedFile]: async def cache_file_by_book_id( - ctx: dict, + ctx: dict, # NOSONAR book_id: int, file_type: str, by_request: bool = True, diff --git a/src/core/app.py b/src/core/app.py index a7265c3..5f44c47 100644 --- a/src/core/app.py +++ b/src/core/app.py @@ -6,6 +6,7 @@ from prometheus_fastapi_instrumentator import Instrumentator from app.views import router, healthcheck_router from core.arq_pool import get_arq_pool from core.db import database +import core.sentry # noqa: F401 def start_app() -> FastAPI: diff --git a/src/core/config.py b/src/core/config.py index 9042cf5..767c6cf 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -23,5 +23,7 @@ class EnvConfig(BaseSettings): REDIS_PORT: int REDIS_DB: int + SENTRY_SDN: str + env_config = EnvConfig() diff --git a/src/core/sentry.py b/src/core/sentry.py new file mode 100644 index 0000000..d83860d --- /dev/null +++ b/src/core/sentry.py @@ -0,0 +1,8 @@ +import sentry_sdk + +from core.config import env_config + + +sentry_sdk.init( + env_config.SENTRY_SDN, +) diff --git a/src/core/setup_arq.py b/src/core/setup_arq.py index 2daa8c4..462198c 100644 --- a/src/core/setup_arq.py +++ b/src/core/setup_arq.py @@ -7,6 +7,7 @@ from app.services.cache_updater import ( ) from core.arq_pool import get_redis_settings, get_arq_pool from core.db import database +import core.sentry # noqa: F401 async def startup(ctx):