diff --git a/tradein-mvp/backend/app/core/config.py b/tradein-mvp/backend/app/core/config.py index 25504b53..3b5ffbb7 100644 --- a/tradein-mvp/backend/app/core/config.py +++ b/tradein-mvp/backend/app/core/config.py @@ -22,5 +22,9 @@ class Settings(BaseSettings): # Пусто = эндпоинты открыты (dev). В prod задаётся через env ADMIN_TOKEN. admin_token: str | None = None + # GlitchTip DSN — мониторинг ошибок (Sentry-совместимый). #396. + # Пусто = мониторинг выключен (dev). В prod — env GLITCHTIP_DSN из .env.runtime. + glitchtip_dsn: str | None = None + settings = Settings() diff --git a/tradein-mvp/backend/app/main.py b/tradein-mvp/backend/app/main.py index da2d590b..da927608 100644 --- a/tradein-mvp/backend/app/main.py +++ b/tradein-mvp/backend/app/main.py @@ -8,6 +8,7 @@ from __future__ import annotations import logging +import sentry_sdk from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware @@ -20,6 +21,17 @@ logging.basicConfig( format="%(asctime)s %(levelname)s %(name)s: %(message)s", ) +# Мониторинг ошибок — GlitchTip (Sentry-совместимый, #396). +# DSN из env GLITCHTIP_DSN; пусто (dev) → мониторинг не инициализируется. +if settings.glitchtip_dsn: + sentry_sdk.init( + dsn=settings.glitchtip_dsn, + environment=settings.environment, + traces_sample_rate=0.0, # только ошибки, без performance-трейсов + send_default_pii=False, # не шлём client_name / client_phone в отчёты + ) + logging.getLogger("app.main").info("GlitchTip monitoring enabled") + app = FastAPI( title="Trade-In MVP API", description="Оценка вторичного жилья (выкупная стоимость) — копия trade-in feature из gendesign", diff --git a/tradein-mvp/backend/pyproject.toml b/tradein-mvp/backend/pyproject.toml index 68dfe8fa..cc988bb7 100644 --- a/tradein-mvp/backend/pyproject.toml +++ b/tradein-mvp/backend/pyproject.toml @@ -19,6 +19,7 @@ dependencies = [ "segno>=1.6.0", # QR-код для PDF shareable URL "curl-cffi>=0.7.0", # impersonate=chrome120 для Cian/Avito (TLS fingerprint) "python-multipart>=0.0.9", # FastAPI UploadFile — загрузка фото квартиры (#394) + "sentry-sdk>=2.0.0", # мониторинг ошибок → GlitchTip (#396) ] [dependency-groups] diff --git a/tradein-mvp/docker-compose.prod.yml b/tradein-mvp/docker-compose.prod.yml index 5cedfa3c..83400ba1 100644 --- a/tradein-mvp/docker-compose.prod.yml +++ b/tradein-mvp/docker-compose.prod.yml @@ -43,6 +43,8 @@ services: YANDEX_GEOCODER_KEY: "${YANDEX_GEOCODER_KEY:-}" # Защита /api/v1/admin/* — задаётся в .env.runtime. Пусто = открыто (dev). ADMIN_TOKEN: "${ADMIN_TOKEN:-}" + # GlitchTip DSN — мониторинг ошибок (#396). Пусто = выключено. + GLITCHTIP_DSN: "${GLITCHTIP_DSN:-}" depends_on: postgres: condition: service_healthy