Журнал: пагинация 30 записей на страницу, API offset/total_pages

- job_journal: collect_recent_journal_entries_page_sync(limit, offset)
- GET /api/v1/journal/recent: limit по умолчанию 30, offset, total, page, total_pages
- journal.html/js: навигация Первая/Назад/номера/Вперёд/Последняя, стили
- app/docs/api_routes.md: описание query и пример ответа
- Прочие изменения UI/API (аддоны, helm, job_journal в кластерах) в том же коммите
This commit is contained in:
Sergey Antropoff
2026-04-04 11:16:43 +03:00
parent 52538d9816
commit 17f6233fd7
22 changed files with 2811 additions and 4 deletions
+30
View File
@@ -120,6 +120,36 @@ async def cluster_edit_page(request: Request, cluster_name: str) -> HTMLResponse
)
@app.get("/cluster-addons", response_class=HTMLResponse, summary="Helm-аддоны для кластера")
async def cluster_addons_page(request: Request) -> HTMLResponse:
"""Выбор кластера и установка/удаление ingress-nginx, prometheus-stack, metrics-server, Istio+Kiali."""
if not _templates_dir.is_dir():
return HTMLResponse(
content="<p>Шаблоны не найдены. Ожидается каталог app/templates/</p>",
status_code=500,
)
return templates.TemplateResponse(
request,
"cluster_addons.html",
{"app_title": settings.app_title, "nav_active": "cluster_addons"},
)
@app.get("/journal", response_class=HTMLResponse, summary="Журнал завершённых заданий по кластерам")
async def journal_page(request: Request) -> HTMLResponse:
"""Агрегат записей из ``clusters/<имя>/journal/jobs_history.json`` (создание/старт/стоп и др.)."""
if not _templates_dir.is_dir():
return HTMLResponse(
content="<p>Шаблоны не найдены. Ожидается каталог app/templates/</p>",
status_code=500,
)
return templates.TemplateResponse(
request,
"journal.html",
{"app_title": settings.app_title, "nav_active": "journal"},
)
@app.get("/cluster-create", response_class=HTMLResponse, summary="Создание кластера и задания")
async def cluster_create_page(request: Request) -> HTMLResponse:
"""Форма создания кластера, прогресс и список последних заданий."""