refactor: extract all routes to app/api/v1/endpoints/ with proper structure
This commit is contained in:
95
app/api/v1/endpoints/containers.py
Normal file
95
app/api/v1/endpoints/containers.py
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
LogBoard+ - Контейнеры API
|
||||
Автор: Сергей Антропов
|
||||
Сайт: https://devops.org.ru
|
||||
"""
|
||||
|
||||
from typing import List, Optional
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, Body
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
from app.core.auth import get_current_user
|
||||
from app.core.docker import (
|
||||
load_excluded_containers,
|
||||
save_excluded_containers,
|
||||
get_all_projects,
|
||||
list_containers,
|
||||
DEFAULT_PROJECT,
|
||||
DEFAULT_PROJECTS
|
||||
)
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.get("/excluded")
|
||||
def api_get_excluded_containers(current_user: str = Depends(get_current_user)):
|
||||
"""Получить список исключенных контейнеров"""
|
||||
return JSONResponse(
|
||||
content={"excluded_containers": load_excluded_containers()},
|
||||
headers={
|
||||
"Cache-Control": "no-cache, no-store, must-revalidate",
|
||||
"Pragma": "no-cache",
|
||||
"Expires": "0"
|
||||
}
|
||||
)
|
||||
|
||||
@router.post("/excluded")
|
||||
def api_update_excluded_containers(
|
||||
containers: List[str] = Body(...),
|
||||
current_user: str = Depends(get_current_user)
|
||||
):
|
||||
"""Обновить список исключенных контейнеров"""
|
||||
success = save_excluded_containers(containers)
|
||||
if success:
|
||||
return JSONResponse(
|
||||
content={"status": "success", "message": "Список исключенных контейнеров обновлен"},
|
||||
headers={
|
||||
"Cache-Control": "no-cache, no-store, must-revalidate",
|
||||
"Pragma": "no-cache",
|
||||
"Expires": "0"
|
||||
}
|
||||
)
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail="Ошибка сохранения списка исключенных контейнеров. Попробуйте еще раз или обратитесь к администратору."
|
||||
)
|
||||
|
||||
@router.get("/projects")
|
||||
def api_projects(current_user: str = Depends(get_current_user)):
|
||||
"""Получить список всех проектов Docker Compose"""
|
||||
return JSONResponse(
|
||||
content=get_all_projects(),
|
||||
headers={
|
||||
"Cache-Control": "no-cache, no-store, must-revalidate",
|
||||
"Pragma": "no-cache",
|
||||
"Expires": "0"
|
||||
}
|
||||
)
|
||||
|
||||
@router.get("/services")
|
||||
def api_services(
|
||||
projects: Optional[str] = Query(None),
|
||||
include_stopped: bool = Query(False),
|
||||
current_user: str = Depends(get_current_user)
|
||||
):
|
||||
"""Получить список контейнеров с поддержкой множественных проектов"""
|
||||
project_list = None
|
||||
if projects:
|
||||
project_list = [p.strip() for p in projects.split(",") if p.strip()]
|
||||
elif DEFAULT_PROJECTS and DEFAULT_PROJECTS.strip():
|
||||
project_list = [p.strip() for p in DEFAULT_PROJECTS.split(",") if p.strip()]
|
||||
elif DEFAULT_PROJECT and DEFAULT_PROJECT.strip():
|
||||
project_list = [DEFAULT_PROJECT]
|
||||
# Если ни одна переменная не указана или пустая, показываем все контейнеры (project_list остается None)
|
||||
|
||||
return JSONResponse(
|
||||
content=list_containers(projects=project_list, include_stopped=include_stopped),
|
||||
headers={
|
||||
"Cache-Control": "no-cache, no-store, must-revalidate",
|
||||
"Pragma": "no-cache",
|
||||
"Expires": "0"
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user