[0.9.21] - 2025-09-21
All checks were successful
Deploy on push / deploy (push) Successful in 4m0s

### 🔧 Redis Connection Pool Fix
- **🐛 Fixed "max number of clients reached" error**: Исправлена критическая ошибка превышения лимита соединений Redis
  - Добавлен `aioredis.ConnectionPool` с ограничением `max_connections=20` для 5 микросервисов
  - Реализовано переиспользование соединений вместо создания новых для каждого запроса
  - Добавлено правильное закрытие connection pool при shutdown приложения
  - Улучшена обработка ошибок соединения с автоматическим переподключением
- **📊 Health Monitoring**: Добавлен `/health` endpoint для мониторинга состояния Redis
  - Отображает количество активных соединений, использование памяти, версию Redis
  - Помогает диагностировать проблемы с соединениями в production
- **🔄 Connection Management**: Оптимизировано управление соединениями
  - Один connection pool для всех операций Redis
  - Автоматическое переподключение при потере соединения
  - Корректное закрытие всех соединений при остановке приложения

### 🧪 TypeScript Warnings Fix
- **🏷️ Type Annotations**: Добавлены явные типы для устранения implicit `any` ошибок
  - Исправлены типы в `RolesModal.tsx` для параметров `roleName` и `r`
  - Устранены все TypeScript warnings в admin panel

### 🚀 CI/CD Improvements
- ** Mypy Optimization**: Исправлена проблема OOM (exit status 137) в CI
  - Оптимизирован `mypy.ini` с исключением тяжелых зависимостей
  - Добавлен `dmypy` с fallback на обычный `mypy`
  - Ограничена область проверки типов только критичными модулями
  - Добавлена проверка доступной памяти перед запуском mypy
- **🐳 Docker Build**: Исправлены проблемы с PyTorch зависимостями
  - Увеличен `UV_HTTP_TIMEOUT=300` для загрузки больших пакетов
  - Установлен `TORCH_CUDA_AVAILABLE=0` для предотвращения CUDA зависимостей
  - Упрощены зависимости PyTorch в `pyproject.toml` для совместимости с Python 3.13
This commit is contained in:
2025-09-21 14:23:53 +03:00
parent 634cec657c
commit 4dccb84b18
3 changed files with 94 additions and 30 deletions

14
main.py
View File

@@ -143,6 +143,18 @@ async def spa_handler(request: Request) -> Response:
return JSONResponse({"error": "Admin panel not built"}, status_code=404)
async def health_handler(request: Request) -> Response:
"""Health check endpoint with Redis monitoring"""
try:
redis_info = await redis.get_info()
return JSONResponse(
{"status": "healthy", "redis": {"connected": redis.is_connected, "ping": await redis.ping(), **redis_info}}
)
except Exception as e:
logger.error(f"Health check failed: {e}")
return JSONResponse({"status": "unhealthy", "error": str(e)}, status_code=500)
async def shutdown() -> None:
"""Остановка сервера и освобождение ресурсов"""
logger.info("Остановка сервера")
@@ -293,6 +305,8 @@ app = Starlette(
# OAuth маршруты
Route("/oauth/{provider}", oauth_login, methods=["GET"]),
Route("/oauth/{provider}/callback", oauth_callback, methods=["GET"]),
# Health check endpoint
Route("/health", health_handler, methods=["GET"]),
# Статические файлы (CSS, JS, изображения)
Mount("/assets", app=StaticFiles(directory=str(DIST_DIR / "assets"))),
# Корневой маршрут для админ-панели