diff --git a/app/api/v1/endpoints/pages.py b/app/api/v1/endpoints/pages.py index 8d4f209..059319b 100644 --- a/app/api/v1/endpoints/pages.py +++ b/app/api/v1/endpoints/pages.py @@ -39,14 +39,13 @@ def healthz(): """Health check endpoint""" return "ok" -@router.get("/settings") -async def get_settings(current_user: str = Depends(get_current_user)): - """Получить настройки приложения""" - return { - "ajax_update_interval": AJAX_UPDATE_INTERVAL, - "default_tail": DEFAULT_TAIL, - "skip_unhealthy": SKIP_UNHEALTHY - } +@router.get("/favicon.ico") +async def favicon(): + """Favicon redirect""" + from fastapi.responses import RedirectResponse + return RedirectResponse(url="/static/images/favicon.ico") + + # Маршруты для тестирования страниц ошибок (только в режиме разработки) @router.get("/test/error/404") diff --git a/app/api/v1/endpoints/settings.py b/app/api/v1/endpoints/settings.py new file mode 100644 index 0000000..1d650bd --- /dev/null +++ b/app/api/v1/endpoints/settings.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +LogBoard+ - Настройки API +Автор: Сергей Антропов +Сайт: https://devops.org.ru +""" + +from fastapi import APIRouter, Depends + +from app.core.auth import get_current_user +from app.core.config import AJAX_UPDATE_INTERVAL, DEFAULT_TAIL, SKIP_UNHEALTHY + +router = APIRouter() + +@router.get("/settings") +async def get_settings(current_user: str = Depends(get_current_user)): + """Получить настройки приложения""" + return { + "ajax_update_interval": AJAX_UPDATE_INTERVAL, + "default_tail": DEFAULT_TAIL, + "skip_unhealthy": SKIP_UNHEALTHY + } diff --git a/app/api/v1/endpoints/websocket.py b/app/api/v1/endpoints/websocket.py index 46a1097..5c0d092 100644 --- a/app/api/v1/endpoints/websocket.py +++ b/app/api/v1/endpoints/websocket.py @@ -9,12 +9,11 @@ LogBoard+ - WebSocket API import asyncio from typing import Optional -from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Query +from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Query, Depends from fastapi.responses import JSONResponse -from app.core.auth import verify_token +from app.core.auth import verify_token, get_current_user from app.core.docker import docker_client, DEFAULT_TAIL -from app.core.auth import get_current_user from datetime import datetime router = APIRouter() diff --git a/app/api/v1/router.py b/app/api/v1/router.py index 50fad4e..c1dba74 100644 --- a/app/api/v1/router.py +++ b/app/api/v1/router.py @@ -8,7 +8,7 @@ LogBoard+ - API Router from fastapi import APIRouter -from .endpoints import auth, logs, containers, websocket, pages +from .endpoints import auth, logs, containers, websocket, pages, settings # Создаем основной роутер API v1 api_router = APIRouter(prefix="/api", tags=["api"]) @@ -21,6 +21,7 @@ api_router.include_router(auth.router, prefix="/auth", tags=["auth"]) api_router.include_router(logs.router, prefix="/logs", tags=["logs"]) api_router.include_router(containers.router, prefix="/containers", tags=["containers"]) api_router.include_router(websocket.router, prefix="/websocket", tags=["websocket"]) +api_router.include_router(settings.router, tags=["settings"]) # Подключаем маршруты страниц pages_router.include_router(pages.router) diff --git a/app/static/images/favicon.ico b/app/static/images/favicon.ico new file mode 100644 index 0000000..9d3e151 --- /dev/null +++ b/app/static/images/favicon.ico @@ -0,0 +1 @@ +data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAD///8A/5YAAP//AADV1dUA