fix(collectors): сохранять частичный результат и актуальные GRE BGP сигналы

This commit is contained in:
Denozordec committed 2026-10-12 11:09:17 +07:00
1 parent 9fbe27c1b0
commit fdddc52019
19 files changed
+1252 -45

No files matched your search

+14 -2
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Сервер161.104.46.222: завершён 12.5.164 — selected/all BGP AS/counters/timers теперь nullable как catalog, без fake defaults/UPDATE-as-prefix; milliseconds сохранены.96 native rows replay (146 missing/104 observed zero/4 large-AS rows), live-maps/outbox profiles/15 E2E/build/988 parity/2 real UI passed. Runtime ux-bgp164/ux-bfd158 healthy. Следующий165 — GRE/BGP collector: независимые параллельные reads и запрет выдавать прошлые отсутствующие peers за current signals;12.5 открыт.
Сервер161.104.46.222: завершён 12.5.165 — GRE/BGP collector опрашивает группы параллельно, сохраняет успешную группу при sync/async отказе другой и не повторяет reads при busy. Signals берут current keys только из newest completed run, включая ошибки; malformed/null JSON — barrier, duplicate GRE aliases не создают transitions. Unit/outbox/build/996 parity/actual readonly PG SELECT/2 real UI passed; SQL stability skipped. Runtime ux-collector165/ux-bfd158 healthy. Следующий166 — isolated PostgreSQL error/partial snapshots + полная backend regression с доступным PG и cleanup;12.5 открыт.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -14,7 +14,7 @@
| 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-bgp164 и mmapp-test/frontend:ux-bfd158; запущены |
| Образы приложения | mmapp-test/backend:ux-collector165 и mmapp-test/frontend:ux-bfd158; запущены |
Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example).
@@ -1546,3 +1546,15 @@ Live-maps profile и controlled alert/outbox HTTP/JWT прошли,15 BGP data/f
Протоколы: [native replay96](ux-ui/acceptance/bgp-nullable-replay-2026-10-12.json), [compiled988](ux-ui/acceptance/bgp-nullable-compiled-2026-10-12.json), [deployed API/UI](ux-ui/acceptance/bgp-nullable-deployed-2026-10-12.json). ReUI/Frame/base-nova primitives/RouterOS конфигурация/пароли сохранены, новые fixtures/сообщения не создавались.
Следующий165 — общий GRE/BGP collector: await внутри Promise.allSettled сериализует независимые reads и не сохраняет успешный BGP при раннем GRE throw; текущие BGP signals также не должны восстанавливать отсутствующий в newest snapshot peer из старого run.12.5 открыт.
## 12.5.165 — независимый сбор GRE/BGP и актуальные сигналы оповещений (2026-10-12)
Убраны await внутри Promise.allSettled: независимые GRE/BGP reads действительно запускаются параллельно. Promise boundary сохраняет sync и async ошибки отдельно; успешная группа не теряется при отказе другой. Dependency seam проверяет production collector без SQL/RouterOS. Busy guard не запускает повторных запросов, после отказа collecting сбрасывается. Permanent collector/history tests включены в test:alert-engine.
GRE/BGP reader берёт8 newest completed runs со status ok/error, включая null result_json: более новый отказ не скрывается фильтром успешных прогонов. Invalid/version-mismatched/null/malformed payload становится barrier с пустыми current collections и явным fatalError. Valid partial snapshot сохраняет успешную группу. Current peer/tunnel keys берутся только из newest run; прошлые строки используются только как previous state существующего текущего объекта. Удалённые/непрочитанные объекты не воскресают как current. GRE duplicate labels/history barrier также исключают cross-peer transitions; BGP163 guards сохранены. Остальные collector families, age disabled jobs и stable-ID legacy target migration этим блоком не закрыты.
Unit cases проверили concurrent start до GRE completion, busy/no second fetch, scoped sync/async failures, recovery/empty, failed/null/malformed history, successful partial BGP, deleted peers и GRE alias ambiguity. Alert/outbox HTTP/JWT profiles passed; SQL confirm-stability skipped без PG подключения и не записан как pass. Backend build/996 emitted parity passed. Actual production PG SELECT выполнен compiled candidate через default_transaction_read_only=on:8 history rows, newest BGP0/current BGP0/GRE0, old owned peers0; bootstrap/writes/RouterOS/messages отсутствовали. В этих real latest rows не доказан positive error/partial fixture — отдельный seeded SQL сценарий запланирован166.
ux-collector165 развёрнут с rollback env, backend/PG healthy, frontend ux-bfd158 сохранён;3 readonly GET и2 live UI1440/320 passed/no errors/overflow. Source frontend/primitives ReUI/Frame/base-nova не менялись; широкая UI regression157 не повторялась. Пароли/RouterOS config сохранены, fixtures не создавались этим блоком.
Протоколы: [compiled996](ux-ui/acceptance/collector-compiled-2026-10-12.json), [real readonly PG](ux-ui/acceptance/collector-postgres-readonly-2026-10-12.json), [deployed API/UI](ux-ui/acceptance/collector-deployed-2026-10-12.json). Следующий166 — own isolated PG с positive error/partial fixtures и полная backend regression при доступном PG, затем проверка удаления собственной DB/containers.12.5 открыт.