UI/документация: крошки, метрики узлов в stats, правки навигации и подвала
- Документация: хлебные крошки; секции H2 в одной карточке; заголовок вкладки от H1 - Навигация: активна только текущая пилюля (Панель без постоянного home-стиля) - GET /api/v1/stats: cluster_resources (docker stats CPU/RAM/I/O по узлам kind) - Панель: блок ресурсов в карточке статистики; убраны строки подвала про api_routes/clusters - Удалён app/docs/README.md; крошки app/docs → api_routes.md; README корня обновлён
This commit is contained in:
@@ -1,11 +0,0 @@
|
||||
# Документация приложения (app/docs)
|
||||
|
||||
Каталог описаний для разработчиков и интеграции с UI.
|
||||
|
||||
| Файл | Назначение |
|
||||
|------|------------|
|
||||
| [api_routes.md](api_routes.md) | Полное описание REST API `/api/v1/*` с примерами JSON (ориентир для фронтенда и клиентов). |
|
||||
|
||||
После запуска: **Swagger** — `/docs`, **ReDoc** — `/redoc`, **Health** — `/api/v1/health` (тот же порт, что и UI). С дашборда эти ссылки открываются в **отдельном окне** браузера. **kubectl** на машине разработчика не нужен: он в образе; см. **README.md** — цель **`make docker kubectl`** / **`make podman kubectl`** и API **`/api/v1/clusters/{name}/workloads`**.
|
||||
|
||||
**Автор:** Сергей Антропов — [devops.org.ru](https://devops.org.ru)
|
||||
+36
-7
@@ -20,7 +20,7 @@
|
||||
| Маршрут | Описание |
|
||||
|---------|----------|
|
||||
| `GET /` | HTML-панель: единая карточка «панель + среда», статистика, создание кластера (прогресс, **журнал** `kind create`, отмена), таблица кластеров с **иконками** действий и **всплывающими подсказками**, модалка узлов/подов; шапка — пилюли, Swagger / ReDoc / Health в отдельных окнах. |
|
||||
| `GET /documentation` | HTML-оболочка; **`documentation.js`**: без `path` — **`GET /api/v1/docs/readme`**, с `?path=app/docs/…` — **`GET /api/v1/docs/file`**; разбор Markdown из **`/static/js/vendor/`** (marked, DOMPurify). Секции **H2** показываются отдельными карточками (заголовок и тело). В шапке активна пилюля **Документация**. Путь к README: `KIND_K8S_README_PATH` или `README.md` рядом с `app/`; в образе — `/opt/kind-k8s/README.md`. |
|
||||
| `GET /documentation` | HTML-оболочка; **`documentation.js`**: без `path` — **`GET /api/v1/docs/readme`**, с `?path=app/docs/…` — **`GET /api/v1/docs/file`**; разбор Markdown из **`/static/js/vendor/`** (marked, DOMPurify). Каждая секция по **H2** — **одна карточка** (заголовок h2 и содержимое до следующего h2 вместе). Заголовок вкладки браузера: **«Документация — …»** + текст **первого H1** документа + имя приложения (`KIND_K8S_APP_TITLE` на `body`). В шапке на этой странице активна только **Документация**; **Панель** как обычная пилюля (на дашборде активна **Панель**). Путь к README: `KIND_K8S_README_PATH` или `README.md` рядом с `app/`; в образе — `/opt/kind-k8s/README.md`. |
|
||||
| `GET /ui` | Редирект **307** на `/` (удобный ярлык). |
|
||||
| `GET /static/…` | CSS (`style.css`), скрипты панели (`js/dashboard.js`) и документации (`js/documentation.js`); базовый URL API задаётся атрибутом `data-api-base` на `<body>` (по умолчанию `/api/v1`). |
|
||||
|
||||
@@ -160,23 +160,52 @@ Accept: text/markdown
|
||||
|
||||
## GET /api/v1/stats
|
||||
|
||||
Сводная статистика для дашборда.
|
||||
Сводная статистика для дашборда и **метрики запущенных узлов kind** (один вызов `docker stats` / `podman stats` на набор имён контейнеров `имя-control-plane`, `имя-worker`…).
|
||||
|
||||
**Пример ответа 200:**
|
||||
|
||||
```json
|
||||
{
|
||||
"kind_clusters_count": 2,
|
||||
"local_cluster_dirs_count": 2,
|
||||
"total_workers_from_meta": 4,
|
||||
"jobs_total": 5,
|
||||
"jobs_recent_failed": 1
|
||||
"kind_clusters_count": 1,
|
||||
"local_cluster_dirs_count": 1,
|
||||
"total_workers_from_meta": 2,
|
||||
"jobs_total": 3,
|
||||
"jobs_recent_failed": 0,
|
||||
"cluster_resources": [
|
||||
{
|
||||
"cluster_name": "dev",
|
||||
"nodes": [
|
||||
{
|
||||
"container_name": "dev-control-plane",
|
||||
"cpu_percent": "2.50%",
|
||||
"memory_usage": "512MiB / 7.7GiB",
|
||||
"memory_percent": "6.50%",
|
||||
"net_io": "1.2MB / 800kB",
|
||||
"block_io": "2GB / 150MB",
|
||||
"pids": 245
|
||||
},
|
||||
{
|
||||
"container_name": "dev-worker",
|
||||
"cpu_percent": "1.00%",
|
||||
"memory_usage": "380MiB / 7.7GiB",
|
||||
"memory_percent": "4.80%",
|
||||
"net_io": "512kB / 400kB",
|
||||
"block_io": "500MB / 50MB",
|
||||
"pids": 198
|
||||
}
|
||||
],
|
||||
"note": null
|
||||
}
|
||||
],
|
||||
"cluster_resources_error": null
|
||||
}
|
||||
```
|
||||
|
||||
- `total_workers_from_meta` может быть `null`, если ни в одном `meta.json` нет `worker_nodes`.
|
||||
- `jobs_total` — число заданий в текущей памяти процесса (не более 200).
|
||||
- `jobs_recent_failed` — сколько заданий в этом хранилище сейчас в статусе `failed` (не «последние N», а счётчик по всему снимку).
|
||||
- `cluster_resources` — по каждому имени из `kind get clusters`; если узлы остановлены, `nodes` пустой, в `note` пояснение.
|
||||
- `cluster_resources_error` — если CLI (`CONTAINER_CLI`) не найден в PATH и т.п.; тогда `cluster_resources` может быть пустым.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user