From 65d04baf2f91020117da2cd7e6d0f79db284a177 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Wed, 7 Oct 2026 21:39:59 +0700 Subject: [PATCH] =?UTF-8?q?chore(deploy):=20=D0=B7=D0=B0=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BD=D0=BE=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=B2=D1=91=D1=80=D1=82=D1=8B=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=81=D1=82=D0=B5=D0=BD=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/env.test.example | 2 +- docs/ux-ui-external-acceptance.md | 2 +- docs/ux-ui-plan.md | 4 +- docs/ux-ui-progress.md | 10 +- docs/ux-ui-stage-12.md | 8 +- docs/ux-ui-test-server.md | 19 +- .../test-server-smoke-fixed-2026-10-07.json | 262 ++++++++++++++++++ .../test-server-dashboard-320-2026-10-07.png | Bin 0 -> 55559 bytes 8 files changed, 294 insertions(+), 13 deletions(-) create mode 100644 docs/ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json create mode 100644 docs/ux-ui/screens/test-server-dashboard-320-2026-10-07.png diff --git a/deploy/env.test.example b/deploy/env.test.example index 92167009..c7ae6ec0 100644 --- a/deploy/env.test.example +++ b/deploy/env.test.example @@ -2,7 +2,7 @@ # Generate unique hex secrets on that server; never reuse production credentials. POSTGRES_PASSWORD= AUTH_JWT_SECRET= -MMAPP_IMAGE_TAG=ux-6255f44 +MMAPP_IMAGE_TAG=ux-673e5ba AUTH_REQUIRED=false AUTH_ISSUER=https://auth.test.local AUTH_PORTAL_URL=http://localhost:5175 diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 3120b095..66c004b2 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Статус на 2026-10-07: подготовлен по исходникам; на реальном стенде не выполнен. Локальные браузерные и DI-проверки записаны в [журнале](ux-ui-progress.md), общий объём — в [плане](ux-ui-plan.md). Результат каждого внешнего сценария заполняется после выполнения, с указанием HEAD и стенда. +Статус на 2026-10-07:стенд161.104.46.222 развёрнут;PG-1 проверенbootstrap/restart/schema/control-row,приложение прошлоreal smoke. ОстальныеPG/Q/ROS/интеграционные сценарии ещё не выполнены. [Паспорт и evidence](ux-ui-test-server.md). Локальные браузерные и DI-проверки записаны в [журнале](ux-ui-progress.md), общий объём — в [плане](ux-ui-plan.md). Результат каждого внешнего сценария заполняется после выполнения, с указанием HEAD и стенда. ## Паспорт стенда diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index acbda83e..fe97321e 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены. +Актуальное продолжение 2026-10-07: тестовый Docker-стенд161.104.46.222 развёрнут,source673e5ba/version1.0.0-test.673e5ba. PG bootstrap/restart/schema/control-row проверены;Internet path timestamp defect исправлен. Real browser smoke:3экрана200/54APIreads200/0JSerrors/320px,безHTTP-моков. Следующий12.5.4 — PG backup/restore/concurrency/права/workers. RouterOS/интеграции ещё не проверены;вся12.5 остаётся открытой. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-07. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-07 -Этапы0–11 завершены в описанных локальных границах. Локальная часть этапа12 проверена до12.3.83: main12.4.10 —1186/1186 на9680a64, context12.4.11 —221/221 на683148d с тем же runtime. Дополнительно прошли44 чистых теста, HTTP/DI/RBAC speed API и сборки. Этап12 остаётся открытым: стенд12.5.1 подготовлен на161.104.46.222;следующий12.5.2 — сборка и bootstrap/smoke,затем внешние сценарии. Протокол и ограничения: [внешняя приёмка](ux-ui-external-acceptance.md); точные результаты: [подробный журнал этапа12](ux-ui-stage-12.md). +Этапы0–11 завершены в описанных локальных границах. Локальная часть этапа12 проверена до12.3.83: main12.4.10 —1186/1186 на9680a64, context12.4.11 —221/221 на683148d с тем же runtime. Дополнительно прошли44 чистых теста, HTTP/DI/RBAC speed API и сборки. Этап12 остаётся открытым: стенд12.5.1–3 развёрнут на161.104.46.222,bootstrap/restart/smoke проверены;следующий12.5.4 — PG backup/restore/concurrency/права/workers,затемRouterOS/интеграции. Протокол и ограничения: [внешняя приёмка](ux-ui-external-acceptance.md); точные результаты: [подробный журнал этапа12](ux-ui-stage-12.md). Реальные pg_dump/pg_restore, PG rollback и остановка UDP worker требуют внешней приёмки. Датированные продолжения ниже — история; точный следующий шаг также указан в начале [журнала](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index c6ff696a..98f44236 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены. +Актуальное продолжение 2026-10-07: тестовый Docker-стенд161.104.46.222 развёрнут,source673e5ba/version1.0.0-test.673e5ba. PG bootstrap/restart/schema/control-row проверены;Internet path timestamp defect исправлен. Real browser smoke:3экрана200/54APIreads200/0JSerrors/320px,безHTTP-моков. Следующий12.5.4 — PG backup/restore/concurrency/права/workers. RouterOS/интеграции ещё не проверены;вся12.5 остаётся открытой. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -32,11 +32,15 @@ | 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 | | 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 | | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | -| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1 подготовлен,bootstrap/сценарии12.5 не выполнены. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1–3 развёрнут,bootstrap/smoke проверены;остальные сценарии12.5 не выполнены. | ## 12.5.3 — нормализация даты Internet path на границе API (2026-10-07) -Выявленный live-smoke дефект исправлен в mapper/GET latest: внешний PostgreSQL sampledAt преобразуется вISO без смены instant;payload не изменяется. Неверная дата/payload отклоняются502. Строгийfrontend DTO не ослаблен. Pure collector/mapper tests прошли,включаяPostgreSQL+07/ISO/invalid/null/blank,contracts/backend build passed. На сервере пока работает прежний образ;блок в работе до пересборки и live проверки. +Выявленный на реальном Docker/PG дефект исправлен mapper/GET latest: внешний PostgreSQL sampledAt преобразован вISO без смены instant;payload не изменён. Неверные дата/payload возвращают502. Строгийfrontend DTO сохранён. Pure collector/mapper tests и6frontend path contract tests прошли,contracts/backend build passed. Сетевые команды/правила не менялись. + +Source673e5ba444ced304ea099a99108964e1c471482f:backend/frontend пересобраны с version1.0.0-test.673e5ba и revision labels;образыux-673e5ba запущены,backend/PG healthy. APIlatest отдаёт одинаковыеISO датыsnapshot/outer;записьPG и контрольные настройки/9миграций сохранились. [Итоговый real browser smoke](ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json):3экрана200,54APIreads200,0JSerrors,320px fits,Internet path подтверждён,HTTP-моков нет. Первое повторное ожидание скрытой подписи свежести поправлено раскрытием штатного блока;проверка данных послеpatch прошла. [Дашборд320px](ux-ui/screens/test-server-dashboard-320-2026-10-07.png) просмотрен. + +[Паспорт стенда](ux-ui-test-server.md) содержит image IDs,версии,доступ и ограничения. SSH-туннельlocalhost3000/8000 открыт;приложение работаетнаloopback тестового сервера. Следующий12.5.4 — PG backup/restore/concurrency/права и остановка writers/workers по протоколу. NativeRouterOS/Telegram/Portal не проверены,вся12.5 не закрыта. Предыдущие общиеmain/context относятся к своимHEAD,не к этомуbackend patch. Локальные коммиты безpush;секреты/чужие изменения не включены. ## 12.5.2 — сборка Docker и запуск приложения на тестовом сервере (2026-10-07) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 92a263b9..483d40b9 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены. +Актуальное продолжение 2026-10-07: тестовый Docker-стенд161.104.46.222 развёрнут,source673e5ba/version1.0.0-test.673e5ba. PG bootstrap/restart/schema/control-row проверены;Internet path timestamp defect исправлен. Real browser smoke:3экрана200/54APIreads200/0JSerrors/320px,безHTTP-моков. Следующий12.5.4 — PG backup/restore/concurrency/права/workers. RouterOS/интеграции ещё не проверены;вся12.5 остаётся открытой. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -971,4 +971,8 @@ Smoke обнаружил ошибку Internet path приHTTP200: внешни ## 12.5.3 — нормализация даты Internet path на границе API (2026-10-07) -Выявленный live-smoke дефект исправлен в mapper/GET latest: внешний PostgreSQL sampledAt преобразуется вISO без смены instant;payload не изменяется. Неверная дата/payload отклоняются502. Строгийfrontend DTO не ослаблен. Pure collector/mapper tests прошли,включаяPostgreSQL+07/ISO/invalid/null/blank,contracts/backend build passed. На сервере пока работает прежний образ;блок в работе до пересборки и live проверки. +Выявленный на реальном Docker/PG дефект исправлен mapper/GET latest: внешний PostgreSQL sampledAt преобразован вISO без смены instant;payload не изменён. Неверные дата/payload возвращают502. Строгийfrontend DTO сохранён. Pure collector/mapper tests и6frontend path contract tests прошли,contracts/backend build passed. Сетевые команды/правила не менялись. + +Source673e5ba444ced304ea099a99108964e1c471482f:backend/frontend пересобраны с version1.0.0-test.673e5ba и revision labels;образыux-673e5ba запущены,backend/PG healthy. APIlatest отдаёт одинаковыеISO датыsnapshot/outer;записьPG и контрольные настройки/9миграций сохранились. [Итоговый real browser smoke](ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json):3экрана200,54APIreads200,0JSerrors,320px fits,Internet path подтверждён,HTTP-моков нет. Первое повторное ожидание скрытой подписи свежести поправлено раскрытием штатного блока;проверка данных послеpatch прошла. [Дашборд320px](ux-ui/screens/test-server-dashboard-320-2026-10-07.png) просмотрен. + +[Паспорт стенда](ux-ui-test-server.md) содержит image IDs,версии,доступ и ограничения. SSH-туннельlocalhost3000/8000 открыт;приложение работаетнаloopback тестового сервера. Следующий12.5.4 — PG backup/restore/concurrency/права и остановка writers/workers по протоколу. NativeRouterOS/Telegram/Portal не проверены,вся12.5 не закрыта. Предыдущие общиеmain/context относятся к своимHEAD,не к этомуbackend patch. Локальные коммиты безpush;секреты/чужие изменения не включены. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 945a7ca7..a13370cf 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-07 -Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение ещё не собрано и не запущено. +Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный source HEAD673e5ba444ced304ea099a99108964e1c471482f;версия1.0.0-test.673e5ba. | Параметр | Проверенное состояние | | --- | --- | @@ -14,13 +14,13 @@ | PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed | | Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data | | Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска | -| Образы приложения | mmapp-test/backend:ux-6255f44 и mmapp-test/frontend:ux-6255f44;ещё не созданы | +| Образы приложения | mmapp-test/backend:ux-673e5ba и mmapp-test/frontend:ux-673e5ba;запущены | Compose SHA256:99900547ed18b62e2cdcf9aae3975cbd6c3598a699a79dc04a4b7a0fec295348. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example). ## Развёртывание приложения -Следующий блок: подготовить чистые frontend/backend build contexts по .gitea/workflows/docker.yml для проверенного runtime и собрать закреплённые образы без push. Локально docker CLI сейчас отсутствует, на сервере доступен Docker. В корневом .dockerignore исключён backend, поэтому обычный backend build из корня не повторяет CI: использовать отдельный backend context, как main workflow. Не передавать .env.local,backend/.env,ключи и локальные node_modules/.next. +Чистые frontend/backend build contexts подготовлены по .gitea/workflows/docker.yml из закреплённого Git HEAD;образы собраны на сервере без push. Локально docker CLI сейчас отсутствует, на сервере доступен Docker. В корневом .dockerignore исключён backend, поэтому обычный backend build из корня не повторяет CI: использовать отдельный backend context, как main workflow. Не передавать .env.local,backend/.env,ключи и локальные node_modules/.next. После сборки/загрузки образов выполнить на сервере: @@ -43,4 +43,15 @@ ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222 ## Границы результата -Это подготовка инфраструктуры12.5.1, не закрытие PostgreSQL PG-1: bootstrap/migrations ещё не выполнялись backend. Backup/restore,отказы транзакций,concurrency,workers,RouterOS,Telegram и остальные сценарии [12.5](ux-ui-external-acceptance.md) не выполнены. Для сети потребуются отдельные тестовые устройства/CHR; для интеграций — тестовые учётные записи. 1CPU/2GiB не представляют production performance. +Выполнены подготовка12.5.1,сборка/запуск12.5.2 и исправление обнаруженной live ошибки12.5.3. На реальном PG применились9миграций0000–0009 (без0001),проверены0008/0009 и CHECK статусов/resolution_version;restart сохранил контрольную настройкуuptime_settings(id1/retention14) и список миграций. Пустые API каталоги прочитаны успешно. Это PG-1 в границе bootstrap/restart/schema/control-row,не проверка backup/restore или транзакционных отказов. + +[Первый smoke](ux-ui/acceptance/test-server-smoke-2026-10-07.json) обнаружил PostgreSQL timestamp в outer sampledAt Internet path. Исправлено producer ISO преобразование,без ослабленияfrontend. [Итоговый smoke](ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json):3экрана200,54чтенияAPI200,безJSerrors,320px fits,Internet path подтверждён. HTTP-моков нет. Первое повторное ожидание подписи свежести исправлено раскрытием штатного блока;ошибка данных послеpatch отсутствует. [Дашборд320px](ux-ui/screens/test-server-dashboard-320-2026-10-07.png) просмотрен. + +Активные image IDs: + +- backend: sha256:cfc25f3aa30ea39236af7eb60b4bbcdd7ae3ccc0663f5aff710a5f21776a9af2 +- frontend: sha256:bfba2785b33a72965a029a3692178ba69c80eca75a12934c1dcc04c7970db53f + +После пересборки контрольныйid1/retention14 и9миграций сохранились. Подробные build logs и контрольные файлы расположены в /opt/mmapp-test/artifacts. Секреты остаются только в серверном.env0600. Временный SSH-туннель3000/8000 открыт в этой задаче;если процесс остановится,повторить команду выше. + +Следующий12.5.4 — PG backup/restore/concurrency/права и наблюдаемая остановка workers по [протоколу12.5](ux-ui-external-acceptance.md). Эти сценарии ещё не выполнены. Для RouterOS/Telegram/Portal и других интеграций нужны тестовые устройства/учётные записи. 1CPU/2GiB не представляют production performance. diff --git a/docs/ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json b/docs/ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json new file mode 100644 index 00000000..5b58ab78 --- /dev/null +++ b/docs/ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json @@ -0,0 +1,262 @@ +{ + "sourceHead": "673e5ba444ced304ea099a99108964e1c471482f", + "server": "161.104.46.222", + "url": "http://localhost:3000 via SSH", + "mockedResponses": false, + "results": [ + { + "route": "/dashboard", + "status": 200, + "mainVisible": true, + "internetPathConfirmed": true + }, + { + "route": "/uptime?tab=speed", + "status": 200, + "mainVisible": true + }, + { + "route": "/servers", + "status": 200, + "mainVisible": true + } + ], + "mobileFits": true, + "health": { + "status": "ok", + "timestamp": "2026-10-07T14:37:04.115Z", + "version": "1.0.0-test.673e5ba", + "eventLoopDelayMs": 20, + "flowWorker": { + "alive": false, + "bound": false, + "pendingSize": 0, + "dropped": 0, + "packetsReceived": 0 + } + }, + "pathMetadata": { + "sampledAt": "2026-10-07T14:32:24.630Z", + "snapshotSampledAt": "2026-10-07T14:32:24.630Z", + "collectionComplete": true + }, + "pageErrors": [], + "apiReads": [ + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/events", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/filters/rules", + "status": 200 + }, + { + "path": "/api/uptime/overview", + "status": 200 + }, + { + "path": "/api/bgp/catalog", + "status": 200 + }, + { + "path": "/api/internet-path/latest", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/wireguard", + "status": 200 + }, + { + "path": "/api/traffic/servers", + "status": 200 + }, + { + "path": "/api/vxlan", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + }, + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/uptime/speed-probes", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/uptime/speed-test/runs", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + }, + { + "path": "/api/uptime/overview", + "status": 200 + }, + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + }, + { + "path": "/api/auth/config", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/events", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/health", + "status": 200 + }, + { + "path": "/api/sidebar-counts", + "status": 200 + }, + { + "path": "/api/uptime/overview", + "status": 200 + }, + { + "path": "/api/servers", + "status": 200 + }, + { + "path": "/api/filters/rules", + "status": 200 + }, + { + "path": "/api/bgp/catalog", + "status": 200 + }, + { + "path": "/api/internet-path/latest", + "status": 200 + }, + { + "path": "/api/filters/gre-tunnels", + "status": 200 + }, + { + "path": "/api/wireguard", + "status": 200 + }, + { + "path": "/api/traffic/servers", + "status": 200 + }, + { + "path": "/api/vxlan", + "status": 200 + }, + { + "path": "/api/evobgp/settings", + "status": 200 + } + ] +} diff --git a/docs/ux-ui/screens/test-server-dashboard-320-2026-10-07.png b/docs/ux-ui/screens/test-server-dashboard-320-2026-10-07.png new file mode 100644 index 0000000000000000000000000000000000000000..71b5433f0bfb3bb87f545e4be914c19aac1166c0 GIT binary patch literal 55559 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

&l%Wie( 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 EUm$65qyPW_ literal 0 HcmV?d00001