[0.9.25] - 2025-01-25
Some checks failed
Deploy on push / deploy (push) Failing after 24s

### Added
- 🔍 **OAuth Detailed Logging**: Добавлено пошаговое логирование OAuth callback для диагностики ошибок `auth_failed`
- 🧪 **OAuth Diagnostic Tools**: Создан `oauth_debug.py` для анализа OAuth callback параметров и диагностики проблем
- 📊 **OAuth Test Helper**: Добавлен `oauth_test_helper.py` для создания тестовых состояний OAuth в Redis
- 🔧 **OAuth Provider Detection**: Автоматическое определение OAuth провайдера по формату authorization code

### Fixed
- 🚨 **OAuth Callback Error Handling**: Улучшена обработка исключений в OAuth callback с детальным логированием каждого шага
- 🔍 **OAuth Exception Tracking**: Добавлено логирование исключений на каждом этапе: token exchange, profile fetch, user creation, session creation
- 📋 **OAuth Error Diagnosis**: Реализована система диагностики для выявления точной причины `error=auth_failed` редиректов

### Changed
- 🔧 **OAuth Callback Flow**: Разделен OAuth callback на логические шаги с индивидуальным error handling
- 📝 **OAuth Error Messages**: Улучшены сообщения об ошибках для более точной диагностики проблем
This commit is contained in:
2025-09-25 08:48:36 +03:00
parent 2ce8a5b957
commit 34738ae611
7 changed files with 765 additions and 650 deletions

View File

@@ -2,27 +2,57 @@ import logging
import sentry_sdk
from sentry_sdk.integrations.ariadne import AriadneIntegration
from sentry_sdk.integrations.logging import LoggingIntegration
from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration
from sentry_sdk.integrations.starlette import StarletteIntegration
from settings import GLITCHTIP_DSN
logger = logging.getLogger(__name__)
# Настройка логирования для отправки логов в Sentry
sentry_logging_handler = sentry_sdk.integrations.logging.SentryHandler(level=logging.WARNING)
logger.addHandler(sentry_logging_handler)
logger.setLevel(logging.DEBUG) # Более подробное логирование
def start_sentry() -> None:
"""🔍 Инициализация Sentry/GlitchTip с дублированием логов"""
try:
logger.info("[utils.sentry] Sentry init started...")
# 🧾 Настройка LoggingIntegration для дублирования логов
# level=logging.WARNING - отправляем в GlitchTip только WARNING и выше
# event_level=logging.ERROR - создаем события только для ERROR и выше
sentry_logging = LoggingIntegration(
level=logging.WARNING, # Захватываем WARNING+ в breadcrumbs
event_level=logging.ERROR, # Создаем события только для ERROR+
)
# 🔍 Настраиваем фильтрацию через before_send callback
def before_send(event, hint):
"""Фильтрует события перед отправкой в Sentry"""
if "logentry" in event and "message" in event["logentry"]:
message = event["logentry"]["message"]
auth_spam_phrases = [
"Требуется авторизация",
"AuthorizationError",
"load_drafts",
"GetUserDocuments",
"GetDrafts",
"decorated_function",
]
if any(phrase in message for phrase in auth_spam_phrases):
return None # Блокируем отправку
return event
sentry_sdk.init(
dsn=GLITCHTIP_DSN,
traces_sample_rate=1.0, # Захват 100% транзакций
profiles_sample_rate=1.0, # Профилирование 100% транзакций
enable_tracing=True,
integrations=[StarletteIntegration(), AriadneIntegration(), SqlalchemyIntegration()],
before_send=before_send, # 🔍 Фильтрация спама авторизации
integrations=[
sentry_logging, # 🔍 Дублирование логов
StarletteIntegration(),
AriadneIntegration(),
SqlalchemyIntegration(),
],
send_default_pii=True, # Отправка информации о пользователе (PII)
)
logger.info("[utils.sentry] Sentry initialized successfully.")