Files
core/utils/sentry.py

76 lines
3.7 KiB
Python
Raw Normal View History

2024-10-14 12:19:30 +03:00
import logging
2024-02-16 12:34:39 +03:00
import sentry_sdk
from sentry_sdk.integrations.ariadne import AriadneIntegration
[0.9.25] - 2025-01-25 ### 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**: Улучшены сообщения об ошибках для более точной диагностики проблем
2025-09-25 08:48:36 +03:00
from sentry_sdk.integrations.logging import LoggingIntegration
2024-02-16 12:34:39 +03:00
from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration
from sentry_sdk.integrations.starlette import StarletteIntegration
2024-08-09 09:37:06 +03:00
2024-04-09 19:50:27 +03:00
from settings import GLITCHTIP_DSN
2024-02-16 12:34:39 +03:00
2024-08-26 21:18:33 +03:00
logger = logging.getLogger(__name__)
2024-02-16 12:34:39 +03:00
2024-10-14 12:19:30 +03:00
def start_sentry() -> None:
[0.9.25] - 2025-01-25 ### 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**: Улучшены сообщения об ошибках для более точной диагностики проблем
2025-09-25 08:48:36 +03:00
"""🔍 Инициализация Sentry/GlitchTip с дублированием логов"""
2024-02-16 12:34:39 +03:00
try:
2025-08-17 17:56:31 +03:00
logger.info("[utils.sentry] Sentry init started...")
[0.9.25] - 2025-01-25 ### 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**: Улучшены сообщения об ошибках для более точной диагностики проблем
2025-09-25 08:48:36 +03:00
2025-09-27 13:51:15 +03:00
# 🔍 Проверяем наличие DSN
if not GLITCHTIP_DSN:
logger.warning("[utils.sentry] GLITCHTIP_DSN не установлен, пропускаем инициализацию Sentry")
return
logger.info(f"[utils.sentry] Используем DSN: {GLITCHTIP_DSN[:50]}...")
[0.9.25] - 2025-01-25 ### 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**: Улучшены сообщения об ошибках для более точной диагностики проблем
2025-09-25 08:48:36 +03:00
# 🧾 Настройка 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
2024-02-16 12:34:39 +03:00
sentry_sdk.init(
2024-08-26 21:18:33 +03:00
dsn=GLITCHTIP_DSN,
traces_sample_rate=1.0, # Захват 100% транзакций
profiles_sample_rate=1.0, # Профилирование 100% транзакций
2024-02-16 12:34:39 +03:00
enable_tracing=True,
[0.9.25] - 2025-01-25 ### 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**: Улучшены сообщения об ошибках для более точной диагностики проблем
2025-09-25 08:48:36 +03:00
before_send=before_send, # 🔍 Фильтрация спама авторизации
integrations=[
sentry_logging, # 🔍 Дублирование логов
StarletteIntegration(),
AriadneIntegration(),
SqlalchemyIntegration(),
],
2024-08-26 21:18:33 +03:00
send_default_pii=True, # Отправка информации о пользователе (PII)
2024-02-16 12:34:39 +03:00
)
2025-08-17 17:56:31 +03:00
logger.info("[utils.sentry] Sentry initialized successfully.")
2025-09-27 13:51:15 +03:00
# 🧪 Отправляем тестовое событие для проверки работы GlitchTip
try:
sentry_sdk.capture_message("🧪 GlitchTip test message - система инициализирована", level="info")
logger.info("[utils.sentry] Тестовое сообщение отправлено в GlitchTip")
except Exception as test_e:
logger.warning(f"[utils.sentry] Не удалось отправить тестовое сообщение: {test_e}")
except (sentry_sdk.utils.BadDsn, ImportError, ValueError, TypeError) as _e:
2025-08-17 17:56:31 +03:00
logger.warning("[utils.sentry] Failed to initialize Sentry", exc_info=True)