Files
KindClustersDashboard/app/templates/journal.html
T
Sergey Antropoff 17f6233fd7 Журнал: пагинация 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 в кластерах) в том же коммите
2026-04-04 11:16:43 +03:00

85 lines
3.6 KiB
HTML

{# Агрегированный журнал завершённых заданий (JSON в каталогах кластеров).
Автор: Сергей Антропов — https://devops.org.ru #}
{% extends "base.html" %}
{% block page_title %}Журнал{% endblock %}
{% block body_extra_class %} journal-page-loading{% endblock %}
{% block body_attrs %}data-dashboard-mode="journal"{% endblock %}
{% block footer %}
<div class="footer-inner">
<p class="footer-copyright">
© {{ app_title }} ·
<a href="https://devops.org.ru" target="_blank" rel="noopener">devops.org.ru</a>
</p>
</div>
{% endblock %}
{% block content %}
{# Полноэкранный спиннер до первой загрузки журнала; скрывается в journal.js #}
<div
id="journal-page-loading-overlay"
class="page-loading-overlay"
role="status"
aria-live="polite"
aria-busy="true"
aria-label="Загрузка журнала"
>
<div class="page-loading-backdrop" aria-hidden="true"></div>
<div class="page-loading-center">
<span class="spinner page-loading-spinner" aria-hidden="true"></span>
<span class="page-loading-label">Загрузка журнала…</span>
</div>
</div>
<section class="card hero-panel cluster-create-hero" aria-labelledby="journal-hero-title">
<h1 class="page-title" id="journal-hero-title">Журнал заданий</h1>
<p class="muted page-lead">
Записи о завершённых операциях (<strong>create</strong>, <strong>start</strong>, <strong>stop</strong> и др.) хранятся в
<code>clusters/&lt;имя&gt;/journal/jobs_history.json</code> на томе с хоста. Сводка по всем кластерам, по <strong>30</strong> записей на страницу;
детали задания в процессе — по-прежнему в <a href="/cluster-create">создании кластера</a> и <code>GET /api/v1/jobs/{id}</code>.
</p>
</section>
<section class="card create-cluster-card journal-toolbar-card">
<h2 class="create-cluster-card__title">Действия</h2>
<div class="journal-toolbar-row">
<button type="button" class="btn-secondary" id="journal-refresh-btn">Обновить</button>
<span class="muted journal-page-size-hint">На странице по <strong>30</strong> записей.</span>
</div>
<p id="journal-status" class="muted journal-status" role="status" aria-live="polite"></p>
</section>
<section class="card journal-list-card">
<h2 class="create-cluster-card__title">Последние записи</h2>
<div id="journal-empty" class="muted journal-empty hidden">Нет записей в журналах кластеров (или каталоги кластеров ещё не созданы).</div>
<div id="journal-table-wrap" class="journal-table-wrap">
<table class="journal-table" id="journal-table" aria-describedby="journal-hero-title">
<thead>
<tr>
<th scope="col">Завершено (UTC)</th>
<th scope="col">Кластер</th>
<th scope="col">Тип</th>
<th scope="col">Статус</th>
<th scope="col">Сообщение</th>
<th scope="col">Журнал</th>
</tr>
</thead>
<tbody id="journal-tbody"></tbody>
</table>
</div>
<nav
id="journal-pagination"
class="journal-pagination hidden"
aria-label="Страницы журнала"
role="navigation"
></nav>
</section>
{% endblock %}
{% block scripts %}
<script src="/static/js/journal.js" defer></script>
{% endblock %}