fix(ui): не подменять неполные сетевые счётчики нулями

This commit is contained in:
Denozordec committed 2026-10-03 19:44:13 +07:00
1 parent 587dd94f82
commit 1deccf862c
13 files changed
+84 -99

No files matched your search

+9 -1
View File
@@ -28,7 +28,7 @@
| 9 | VPN, Firewall и Filters | Завершён в границах локальной приёмки 2026-09-30; блоки 9.1–9.64, ограничения в 9.64 |
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | В работе: 11Б.1–11Б.4.4.3.7; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | В работе: 11Б.1–11Б.4.4.3.8; scheduler и GeoIP приняты локально; NetFlow принят локально; Evolution принят локально; далее общие Settings |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
@@ -36,6 +36,14 @@
## Блок 11Б.4.4.3.8 — честные backend счётчики каталогов (2026-10-03)
- WireGuard/IPsec/VXLAN/BGP/certificates count берётся только из полного результата с явным failures:[]; containers — из нового typed state с available containers на всех устройствах. Legacy BGP/container list с swallowed errors не используется для count. Known empty даёт 0; timeout/throw/partial/malformed count даёт undefined, который HTTP не выдаёт как числовое значение.
- Общий bounded helper очищает timer и не публикует поздний результат после deadline. WireGuard больше не await-ит list до старта timeout. Core DB count не подменяет отсутствующий aggregate row нулём; HTTP строго проверяет core и monitoring sum, ошибки core дают 500; optional failures не уничтожают другие числа. No-store response, no payload/secret echo. Правила сетевого применения не менялись.
- 2 count helper DI + HTTP unknown/zero/core-malformed проверки, backend build, containers/live-maps профиль и lint прошли; browser sidebar/dashboard limited rights 7/7 прошли. Count functions имеют единственного consumer — sidebar-counts; callers проверены сборкой.
- Реальный RouterOS/PG не проверен. Deadline ограничивает ожидание результата; не отменяет уже начатый RouterOS polling внутри legacy reader. Counts разных каталогов не являются общей атомарной сетевой transaction. При partial refresh sidebar сохраняет ранее подтверждённый optional badge; первоначальное missing значение скрыто.
- Следующий точный шаг 11Б.4.4.3.9: исправить семантику выбора объектов/условий и один scroll owner в Alerts Sheet; затем обозначить неподдерживаемое BGP-prefix событие, Releases/probe scheduling и приёмка 11Б/12. Processing recovery требует сценария остановки отправителя.
## Блок 11Б.4.4.3.7 — права каждого источника дашборда (2026-10-03)
- Все запросы useDashboardLive проходят ensureAuthConfig и per-path/method gate до запроса и публикации, включая standalone WireGuard/events. Dashboard:read не выдаёт servers/uptime/filters/BGP/network/traffic rights; fallback diagnostic POST требует servers:write как на backend. Unknown route не получает разрешение по умолчанию. Отозванные источники очищаются перед обновлением.