From 59ad41c1838cf2cf3168d54c8ba7d5af1a826a11 Mon Sep 17 00:00:00 2001 From: TradeIn Deploy Date: Fri, 22 May 2026 11:18:26 +0500 Subject: [PATCH] =?UTF-8?q?feat(tradein):=20=D0=BC=D0=BE=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20GlitchTip=20(#396)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Подключаем tradein-backend к GlitchTip (Sentry-совместимый, уже на сервере). Необработанные исключения FastAPI улетают в дашборд — баг estimate-500 (#388/#389) был бы виден сразу с трейсбеком. - sentry-sdk в зависимостях. - main.py — sentry_sdk.init(), env-gated: пусто GLITCHTIP_DSN → off. - config.glitchtip_dsn + GLITCHTIP_DSN в docker-compose.prod.yml. - traces_sample_rate=0 (только ошибки), send_default_pii=False. Активация: создать проект в GlitchTip → DSN в .env.runtime. --- tradein-mvp/backend/app/core/config.py | 4 ++++ tradein-mvp/backend/app/main.py | 12 ++++++++++++ tradein-mvp/backend/pyproject.toml | 1 + tradein-mvp/docker-compose.prod.yml | 2 ++ 4 files changed, 19 insertions(+) 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