Веб-интерфейс: страница /clusters, навигация и крошки для кластеров

- Выделена страница списка кластеров, панель упрощена; nav_active и крошки
  ведут в раздел Кластеры; theme.js синхронизирует активную пилюлю по URL.
- Доработки дашборда, аддонов, журнала, стилей и API-документации.
- Поддержка Podman: docker-compose.podman.yml, скрипты сокета; Makefile и env.
This commit is contained in:
Sergey Antropoff
2026-04-04 13:42:21 +03:00
parent 17f6233fd7
commit eb063aec20
38 changed files with 3990 additions and 734 deletions
+18 -3
View File
@@ -60,9 +60,24 @@ if _static_dir.is_dir():
templates = Jinja2Templates(directory=str(_templates_dir))
@app.get("/clusters", response_class=HTMLResponse, summary="Список кластеров и сводка узлов")
async def clusters_page(request: Request) -> HTMLResponse:
"""Страница «Кластеры»: донаты ресурсов узлов и таблица (как раньше на панели)."""
if not _templates_dir.is_dir():
return HTMLResponse(
content="<p>Шаблоны не найдены. Ожидается каталог app/templates/</p>",
status_code=500,
)
return templates.TemplateResponse(
request,
"clusters.html",
{"app_title": settings.app_title, "nav_active": "clusters"},
)
@app.get("/", response_class=HTMLResponse, summary="Веб-интерфейс")
async def dashboard(request: Request) -> HTMLResponse:
"""Главная страница: обзор, сводка по узлам, таблица кластеров."""
"""Главная панель: CTA создания, статистика среды (без таблицы кластеров — см. /clusters)."""
if not _templates_dir.is_dir():
return HTMLResponse(
content="<p>Шаблоны не найдены. Ожидается каталог app/templates/</p>",
@@ -92,7 +107,7 @@ async def cluster_detail_page(request: Request, cluster_name: str) -> HTMLRespon
"cluster_detail.html",
{
"app_title": settings.app_title,
"nav_active": "panel",
"nav_active": "clusters",
"cluster_name": n,
},
)
@@ -114,7 +129,7 @@ async def cluster_edit_page(request: Request, cluster_name: str) -> HTMLResponse
"cluster_edit.html",
{
"app_title": settings.app_title,
"nav_active": "panel",
"nav_active": "clusters",
"cluster_name": n,
},
)