Рефакторинг инфраструктуры и конфигурации проекта
- Перенесена структура Django-конфига в src/core и src/settings - Унифицирована Docker-сборка и docker-compose для dev/prod - Добавлены startup-checks (DB/Redis) и обновлены env-шаблоны - Расширена OpenAPI-документация и ответы API - Удалены устаревшие deploy/requirements/служебные скрипты - Обновлены CI/CD, README и тесты
This commit is contained in:
@@ -11,6 +11,8 @@ import logging
|
||||
import time
|
||||
from typing import Any
|
||||
|
||||
from apps.core.openapi import CommonResponses, ErrorResponses, swagger_tag
|
||||
from apps.core.serializers import BackgroundJobListSerializer, BackgroundJobSerializer
|
||||
from django.conf import settings
|
||||
from django.db import connection
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
@@ -23,8 +25,8 @@ from rest_framework.views import APIView
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Swagger теги
|
||||
HEALTH_TAG = "Мониторинг"
|
||||
JOBS_TAG = "Фоновые задачи"
|
||||
HEALTH_TAG = swagger_tag("Мониторинг", "monitoring")
|
||||
JOBS_TAG = swagger_tag("Фоновые задачи", "background_jobs")
|
||||
|
||||
|
||||
class HealthCheckView(APIView):
|
||||
@@ -44,6 +46,11 @@ class HealthCheckView(APIView):
|
||||
"Комплексная проверка всех зависимостей системы.\n"
|
||||
"Возвращает статус: healthy, degraded или unhealthy."
|
||||
),
|
||||
responses={
|
||||
200: "Сервис работает в режиме healthy/degraded",
|
||||
503: CommonResponses.SERVICE_UNAVAILABLE,
|
||||
**ErrorResponses.PUBLIC,
|
||||
},
|
||||
)
|
||||
def get(self, request: Request) -> Response:
|
||||
"""Run all health checks and return status."""
|
||||
@@ -117,7 +124,7 @@ class HealthCheckView(APIView):
|
||||
def _check_celery(self) -> dict[str, Any]:
|
||||
"""Check Celery worker availability."""
|
||||
try:
|
||||
from config.celery import app as celery_app
|
||||
from core.celery import app as celery_app
|
||||
|
||||
inspector = celery_app.control.inspect(timeout=2.0)
|
||||
active = inspector.active()
|
||||
@@ -144,6 +151,10 @@ class LivenessView(APIView):
|
||||
tags=[HEALTH_TAG],
|
||||
operation_summary="Liveness probe",
|
||||
operation_description="Возвращает 200 если приложение запущено.",
|
||||
responses={
|
||||
200: "Приложение запущено",
|
||||
**ErrorResponses.PUBLIC,
|
||||
},
|
||||
)
|
||||
def get(self, request: Request) -> Response:
|
||||
"""Simple liveness check."""
|
||||
@@ -166,6 +177,11 @@ class ReadinessView(APIView):
|
||||
operation_description=(
|
||||
"Возвращает 200 если приложение готово обрабатывать запросы."
|
||||
),
|
||||
responses={
|
||||
200: "Приложение готово обрабатывать запросы",
|
||||
503: CommonResponses.SERVICE_UNAVAILABLE,
|
||||
**ErrorResponses.PUBLIC,
|
||||
},
|
||||
)
|
||||
def get(self, request: Request) -> Response:
|
||||
"""Check if app is ready to serve traffic."""
|
||||
@@ -202,10 +218,15 @@ class BackgroundJobStatusView(APIView):
|
||||
"Возвращает статус конкретной фоновой задачи.\n"
|
||||
"Доступно только владельцу задачи или администратору."
|
||||
),
|
||||
responses={
|
||||
200: BackgroundJobSerializer,
|
||||
403: CommonResponses.FORBIDDEN,
|
||||
404: CommonResponses.NOT_FOUND,
|
||||
**ErrorResponses.AUTHENTICATED,
|
||||
},
|
||||
)
|
||||
def get(self, request: Request, task_id: str) -> Response:
|
||||
"""Получить статус задачи по task_id."""
|
||||
from apps.core.serializers import BackgroundJobSerializer
|
||||
from apps.core.services import BackgroundJobService
|
||||
|
||||
job = BackgroundJobService.get_by_task_id(task_id)
|
||||
@@ -239,10 +260,13 @@ class BackgroundJobListView(APIView):
|
||||
"Возвращает список фоновых задач текущего пользователя.\n"
|
||||
"Поддерживает фильтрацию по статусу (status) и лимит (limit)."
|
||||
),
|
||||
responses={
|
||||
200: BackgroundJobListSerializer(many=True),
|
||||
**ErrorResponses.AUTHENTICATED,
|
||||
},
|
||||
)
|
||||
def get(self, request: Request) -> Response:
|
||||
"""Получить список задач пользователя."""
|
||||
from apps.core.serializers import BackgroundJobListSerializer
|
||||
from apps.core.services import BackgroundJobService
|
||||
|
||||
status_filter = request.query_params.get("status")
|
||||
|
||||
Reference in New Issue
Block a user