Files
MikrotikManager/docs/ux-ui/optimizer-observed-audit-2026-10-07.md

26 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Аудит достоверности скоростных снимков оптимизатора
Дата: 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; в этой серии таких изменений нет.