Журнал: пагинация 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
+44
View File
@@ -0,0 +1,44 @@
"""Справочник версий Helm-чартов для страницы аддонов (``helm search repo … --versions``).
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
from __future__ import annotations
import asyncio
import logging
from fastapi import APIRouter, HTTPException
from core.helm_addons import HelmAddonError, helm_addon_chart_versions_all, require_helm_binary
from models.schemas import HelmAddonChartVersionsResponse
logger = logging.getLogger("kind_k8s.api.helm_charts")
router = APIRouter(tags=["helm-charts"])
@router.get(
"/helm/chart-versions",
response_model=HelmAddonChartVersionsResponse,
summary="Версии чартов аддонов (для выпадающих списков)",
)
async def get_helm_addon_chart_versions() -> HelmAddonChartVersionsResponse:
"""
Выполняет ``helm repo update`` и для каждого аддона — ``helm search repo <chart> --versions``.
Результат кэшируется на ``KIND_K8S_HELM_VERSIONS_CACHE_SEC`` (по чарту).
Пустой список — если helm недоступен или репозиторий не ответил.
"""
try:
require_helm_binary()
except HelmAddonError as e:
logger.warning("helm недоступен для списка версий: %s", e)
raise HTTPException(status_code=503, detail=str(e)) from e
try:
data = await asyncio.to_thread(helm_addon_chart_versions_all)
except HelmAddonError as e:
logger.exception("Ошибка получения версий чартов")
raise HTTPException(status_code=500, detail=str(e)) from e
return HelmAddonChartVersionsResponse(**data)