chore(ux): зафиксировать аудит скоростных измерений

This commit is contained in:
Denozordec committed 2026-10-07 13:26:05 +07:00
1 parent 4fee9e371f
commit 7d331aff41
4 files changed
+34 -2

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-07: 12.3.69 завершён: first-match WAN/JH map и skip JH/Exit без WAN,13pure+12browser/type/lint/build.100000routes≈44–50ms; zeroWAN heapDelta24.6MB→0.17MB. Следующий12.3.70: зафиксировать аудит TX/RX, WAN-binding и missing→0 producer по RouterOS docs/code; затем адресные исправления, без изменения команд/правил сетевых операций. Внешняя12.5 отдельно.
Актуальное продолжение 2026-10-07: 12.3.70 аудит observed сохранён: TX/RX≠DL/UL, WAN speed binding не подтверждён, producer missing→0 и unvalidated terminal status. Следующий12.3.71: Home/JH forward RX→DL, TX→UL, reverse Exit/JH с разворотом; null/zero/asymmetric limits/tests. Далее72scope labels,73nullable producer,74terminal validation. Команды и права не менять; внешняя12.5 отдельно.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-04. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
+1 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-07: 12.3.69 завершён: first-match WAN/JH map и skip JH/Exit без WAN,13pure+12browser/type/lint/build.100000routes≈44–50ms; zeroWAN heapDelta24.6MB→0.17MB. Следующий12.3.70: зафиксировать аудит TX/RX, WAN-binding и missing→0 producer по RouterOS docs/code; затем адресные исправления, без изменения команд/правил сетевых операций. Внешняя12.5 отдельно.
Актуальное продолжение 2026-10-07: 12.3.70 аудит observed сохранён: TX/RX≠DL/UL, WAN speed binding не подтверждён, producer missing→0 и unvalidated terminal status. Следующий12.3.71: Home/JH forward RX→DL, TX→UL, reverse Exit/JH с разворотом; null/zero/asymmetric limits/tests. Далее72scope labels,73nullable producer,74terminal validation. Команды и права не менять; внешняя12.5 отдельно.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения.
+7
View File
@@ -783,3 +783,10 @@ Baseline в UI не запускался. Повторный Array.find по1000
CPU final:1000routes13.3ms;100000(10×100×100)49.7ms;100000(100×10×100)44.0ms. До lookup ~284–329ms и267–287ms. Дополнительный zeroWAN baseline0×100×1000 строил100000unused JH/Exit legs:45.6ms/heapDelta24.6MB; после skip11.5ms/0.17MB. Новый profiler допускаетWAN0 и ограничивает также JH×Exit≤100000. HeapDelta не peak/retained memory; полный nonzero product по-прежнему хранится и сортируется в памяти. Evidence docs/ux-ui/acceptance/optimizer-routes-final-2026-10-07.json содержит source SHA256 и точные результаты.
После чтения реального producer обнаружены следующие вопросы достоверности:source btest выполняется на srcClient,TX/RX экспортируются без переименования,optimizer пока читаетTX какDL. srcInterface передаётся только after-ping, не bandwidthTest; поле не доказывает WAN скоростного теста. Producer parser/fallback отсутствующую скорость превращает в0, а explicit avg0 может заменяться mean series. Следующий12.3.70 фиксирует аудит с первичными RouterOS источниками и планирует точечные исправления данных/подписей. Команды/права/правила сетевых операций не менялись; real PG/RouterOS/integrations12.5 не выполнялись.
## 12.3.70 — аудит источника и смысла observed metrics
2026-10-07. Код сопоставлен с первичной RouterOS bandwidth-test документацией. Подтверждены неверное TX→DL, неподтверждённая связь btest с srcInterface/WAN, missing→0/explicit0→mean и отсутствие проверки terminal status перед success write. Это новые ограничения, которые ранее проверенные mock snapshots не доказывали. Отдельный протокол/таблица/схема: docs/ux-ui/optimizer-observed-audit-2026-10-07.md.
Только read-only audit/docs, без DB/RouterOS/сетевых операций. Дальше71direction mapping,72scope labels,73nullable rate parser/producer/DTO,74terminal confirmation. Фактические команды, права и routing rules не меняются этой серией; real12.5 отдельно. Исторические0 не переписывать автоматически.
@@ -0,0 +1,25 @@
# Аудит достоверности скоростных снимков оптимизатора
Дата: 2026-10-07. Это анализ кода и первичных RouterOS документов, без запуска сетевых тестов или PostgreSQL.
Первичный источник: [RouterOS bandwidth-test CLI](https://manual.mikrotik.com/docs/cli-reference/tool/bandwidth-test/) (на момент чтения версия документации 7.26). TX относится к отправке клиента, RX — к его приёму. Успех HTTP-запроса отдельно не определяет терминальный статус теста.
| Проблема | Доказательство в проекте | Последствие | Следующий блок |
| --- | --- | --- | --- |
| TX/RX перепутаны с DL/UL | `backend/src/services/uptime-speed-service.ts`: тест выполняет srcClient, TX/RX сохраняются напрямую. `lib/route-optimizer-data.ts`: TX читается как DL и RX как UL | Для Home→JH download к Home соответствует RX, upload от Home — TX. Для обратной пробы Exit→JH стороны нужно развернуть | 12.3.71: исправить отображение и модельные лимиты, проверить forward/reverse, null/zero/asymmetric rates |
| Сопоставление скорости конкретному WAN не подтверждено | `MikrotikClient.bandwidthTest` принимает address/protocol/direction/duration/user/password; `srcInterface` туда не передаётся. Он используется в after-ping. `srcAddress` вычисляется для метаданных, не передаётся команде | Даже выбранный source-интерфейс не доказывает WAN bandwidth-test. Wildcard-проба тем более не измеряет выбранный WAN. Скорость относится к паре устройств; привязка — модель | 12.3.72: показать область измерения и границу сопоставления; не добавлять недокументированные RouterOS параметры/временные routing rules |
| Отсутствие скорости превращается в zero | `parseRateToMbps` возвращает0 для пустого/неразобранного поля. `txAvg || mean || 0` / `rxAvg || mean || 0` заменяют даже explicit avg0 | Receive-only/transmit-only и повреждённый ответ могут публиковать ненаблюдаемый0. Explicit измеренный0 может быть заменён другой оценкой | 12.3.73: pure nullable parser/average selector, адаптация DTO/producer/consumer; сохранить измеренный0 и отделить отсутствие данных |
| Терминальный статус bandwidth-test не проверяется | После `bandwidthTest` producer агрегирует поля, записывает `status:done` без проверки последнего status. Документация перечисляет auth/connect/busy/disconnected ошибки | HTTP200 с терминальным отказом может выглядеть выполненным тестом; пустой ответ не доказывает завершение | 12.3.74: pure result interpreter и validation до success write, сохраняя pending/unknown пояснение и прежние команды/права |
Нулевой маршрутный каталог без WAN остаётся известным отсутствием модельных комбинаций, а не нулевым наблюдаемым трафиком. Исторические сохранённые0 нельзя автоматически считать неизвестными без исходного RouterOS ответа; массовую коррекцию/удаление данных не выполнять.
```mermaid
flowchart LR
A["RouterOS на srcClient"] --> B["TX: отправка / RX: приём"]
B --> C["Снимок пары устройств"]
C --> D["Направление к Home: DL / от Home: UL"]
C --> E["WAN: модельное сопоставление"]
F["srcInterface"] --> G["after-ping / метаданные"]
```
Проверки по блокам: pure функции без DB/network side effects, live API e2e с подменой HTTP, TypeScript/lint/build и профильные context сценарии при изменениях общей основы. Изменение фактической маршрутизации или новая стратегия принудительного выбора WAN требует отдельного дизайна и внешней приёмки12.5; в этой серии таких изменений нет.