feat(tradein): мониторинг ошибок через GlitchTip (#396)
Подключаем 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.
This commit is contained in:
parent
4c51406fda
commit
59ad41c183
4 changed files with 19 additions and 0 deletions
|
|
@ -22,5 +22,9 @@ class Settings(BaseSettings):
|
||||||
# Пусто = эндпоинты открыты (dev). В prod задаётся через env ADMIN_TOKEN.
|
# Пусто = эндпоинты открыты (dev). В prod задаётся через env ADMIN_TOKEN.
|
||||||
admin_token: str | None = None
|
admin_token: str | None = None
|
||||||
|
|
||||||
|
# GlitchTip DSN — мониторинг ошибок (Sentry-совместимый). #396.
|
||||||
|
# Пусто = мониторинг выключен (dev). В prod — env GLITCHTIP_DSN из .env.runtime.
|
||||||
|
glitchtip_dsn: str | None = None
|
||||||
|
|
||||||
|
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
import sentry_sdk
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
|
|
@ -20,6 +21,17 @@ logging.basicConfig(
|
||||||
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
|
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(
|
app = FastAPI(
|
||||||
title="Trade-In MVP API",
|
title="Trade-In MVP API",
|
||||||
description="Оценка вторичного жилья (выкупная стоимость) — копия trade-in feature из gendesign",
|
description="Оценка вторичного жилья (выкупная стоимость) — копия trade-in feature из gendesign",
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ dependencies = [
|
||||||
"segno>=1.6.0", # QR-код для PDF shareable URL
|
"segno>=1.6.0", # QR-код для PDF shareable URL
|
||||||
"curl-cffi>=0.7.0", # impersonate=chrome120 для Cian/Avito (TLS fingerprint)
|
"curl-cffi>=0.7.0", # impersonate=chrome120 для Cian/Avito (TLS fingerprint)
|
||||||
"python-multipart>=0.0.9", # FastAPI UploadFile — загрузка фото квартиры (#394)
|
"python-multipart>=0.0.9", # FastAPI UploadFile — загрузка фото квартиры (#394)
|
||||||
|
"sentry-sdk>=2.0.0", # мониторинг ошибок → GlitchTip (#396)
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependency-groups]
|
[dependency-groups]
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ services:
|
||||||
YANDEX_GEOCODER_KEY: "${YANDEX_GEOCODER_KEY:-}"
|
YANDEX_GEOCODER_KEY: "${YANDEX_GEOCODER_KEY:-}"
|
||||||
# Защита /api/v1/admin/* — задаётся в .env.runtime. Пусто = открыто (dev).
|
# Защита /api/v1/admin/* — задаётся в .env.runtime. Пусто = открыто (dev).
|
||||||
ADMIN_TOKEN: "${ADMIN_TOKEN:-}"
|
ADMIN_TOKEN: "${ADMIN_TOKEN:-}"
|
||||||
|
# GlitchTip DSN — мониторинг ошибок (#396). Пусто = выключено.
|
||||||
|
GLITCHTIP_DSN: "${GLITCHTIP_DSN:-}"
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue