# Этап 8: трафик и статистика Статус: завершён 2026-09-28 в границах локальной приёмки. Итоговая матрица 8.13 ниже уточняет и заменяет промежуточные точки продолжения. Основа: установленные ReUI PRO/base-nova, Frame, KpiStatGrid, DataGrid, Filters и DateSelector. Каждый законченный блок — профильные проверки, журнал и локальный коммит без push. | Блок | Результат | Приёмка | | --- | --- | --- | | 8.1 | Данные статистики привязаны к периоду/срезу; ошибка не равна нулю; повтор запроса | Задержка нового периода, 403/500, успешный пустой ответ, поздний ответ | | 8.2 | Валидные периоды, URL-контекст, единицы | Ошибочные даты, история, срезы и pivot | | 8.3 | Разделение live и истории трафика; состояния потока и polling | Разрыв SSE, смена интерфейса/периода, неизвестные значения и гонки | | 8.4 | Связь графиков/таблиц и мобильная приёмка | Общий период/объект, пустые состояния, 320/390/1440 px | | Область | Референс | Схема | | --- | --- | --- | | Фильтры и таблицы | [Data Grid Filtering 2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Период → срез → график → строки того же запроса | | Сводка | [Stats 12](https://reui.io/preview/base/stats-12?ref=mcp) | Контекст → подтверждённые метрики → детали | ```text [Период] [Срезы] [История / live] ↓ один контекст запроса [Загрузка / Ошибка + повтор / Подтверждённые данные] [Метрики] → [График] → [Таблица] → [Уточнить срез] ``` Исходные наблюдения 2026-09-23: - Statistics оставляет прежний data/pivot до ответа нового запроса; catch подставляет EMPTY, совмещая ошибку с нулями и «Нет данных куба». - readRange сравнивает строки без строгой проверки даты; parseYmd нормализует несуществующие дни через JavaScript Date. Проверить в 8.2. - useTrafficLive требует отдельной проверки завершения SSE и позднего ответа после abort в 8.3; это пока риск, а не доказанный дефект UI. - Реальный IPFIX/RouterOS недоступен локально. HTTP/SSE-моки не доказывают сбор и точность сетевой телеметрии. ## Промежуточная приёмка 2026-09-28 (блок 8.5) | Проверка | Результат и границы | | --- | --- | | Периоды, URL и срезы статистики | 12 браузерных и 10 модульных проверок прошли; ошибки и некорректные параметры не становятся пустым/расширенным отчётом | | Трафик: REST, SSE, гонки и время получения | 41 браузерный сценарий прошёл: детали, списки, flow, разрывы графиков, поздние ответы, ошибки, временные подписи | | Смена backend | 3 сценария отдельной конфигурации прошли (трафик и два Ping); переход через настройки размонтирует экран | | ReUI и адаптивность | Сохранены Frame/KpiStatGrid/DataGrid; профильные проверки 320/390/1440 проходят; осмотрен месячный flow на 390px. Полный аудит клавиатуры/скринридера ещё не выполнен | | Недостоверная сводка flow | Убрана подстановка общих метрик коллектора вместо выбранного среза при ошибке/загрузке. Она также неверно переводила bytesPerMin в бит/с без деления на 60. Теперь три метрики среза показывают «—», доступное количество экспортёров сохраняется | | Действия и подписи | Неработающая кнопка «Экспорт» удалена. RX/TX больше не называются «сейчас», поскольку данные могут быть историческими; источник и временные отметки остаются рядом | Этап 8 пока не закрыт. Следующий блок — обработка молчащего открытого SSE: после прекращения валидных sample нельзя бесконечно показывать live; сохранить последнее значение/время, обозначить отсутствие обновлений, проверить возобновление и смену контекста. Порог определить по фактической частоте backend и проверить управляемыми часами. После этого требуется итоговое решение по месячному отчёту: текущий список экспортёров охватывает только 24 часа, архивные серверы и прошлые месяцы недоступны. Экспорт трафика не реализован. Проверку CRLF/heartbeat и единичной точки основного графика включить в оставшийся аудит, затем закончить ReUI/accessibility checklist. Реальные RouterOS, JWT и IPFIX не проверены локальными HTTP/SSE-моками. Обновление 8.6 (2026-09-28): молчащий SSE обработан в обоих hook — 15 секунд без валидного sample снимают live, сохраняя данные; следующий sample восстанавливает live. 24 прежних и 2 новых сценария прошли, как и lint/build. Следующий шаг — оставшийся аудит CRLF/heartbeat, первого sample, единичной точки графика и месячных ограничений; этап пока открыт. Обновление 8.7 (2026-09-28): LF/CRLF и комментарий перед event поддержаны в обоих hook. Два потоковых сценария проверяют разделитель между chunk и heartbeat, не продлевающий свежесть. Все 26 профильных E2E прошли; далее одиночная точка графика и остальные ограничения, перечисленные выше. Обновление 8.8 (2026-09-28): одиночные точки RX/TX, включая нули между пропусками, получили маркеры. Итоговые 10 тестов деталей и build/lint прошли; перед финальным подключением TX проверены 38 сценариев потребителей. Далее — первый SSE sample и оставшаяся приёмка. Обновление 8.9 (2026-09-28): проверено ожидание первого sample в открытом SSE для flow и сервера, heartbeat без sample, таймаут и переход с истории на live. 28 профильных E2E, lint/TypeScript прошли; production-код не менялся. Далее — решение по месячному отчёту и доступность. Обновление 8.10 (2026-09-28): добавлен выбор прошлого/текущего месяца UTC; валидация не отправляет пустые/будущие значения, ключ запроса защищает от позднего отчёта. 23 прежних и 1 новый flow-E2E прошли, lint/build чистые. Ограничение списка серверов по активности 24 часа остаётся следующим шагом; полный аудит доступности ещё не завершён. Обновление 8.11 (2026-09-28): месячный режим выбирает сервер из каталога независимо от активности за 24 часа. 25 flow-E2E и дополнительная проверка пустого списка экспортёров прошли, как и lint/build. Удалённые из каталога серверы не перечисляются; далее доступность и итоговая регрессия этапа 8. Обновление 8.12: получен checklist ReUI; имена поиска и aria-pressed исправлены. Клавиатурный E2E Enter/Space, lint/build прошли. Полный аудит Tab/фокуса/слоёв/статистики и итоговая регрессия ещё нужны; этап не закрыт. ## Итоговая локальная приёмка — блок 8.13 (2026-09-28) | Проверка | Результат и границы | | --- | --- | | Профильная регрессия | 63 E2E в общем запуске; затем 15 сценариев статистики с 2 новыми проверками повреждённого HTTP 200. Всего 65 различных сценариев трафика/статистики проверены, включая 320/390/1440 px | | Смена backend и контекст | Отдельно прошли 3 backend-switch E2E и 10 unit-тестов периодов, контекста и фильтров | | Клавиатура и слои | Проверены Enter/Space, список измерений через стрелку, Escape, Tab внутри панели jump-host, возврат фокуса и сброс формы при повторном открытии без записи | | Доступные состояния | Поиск, измерения и поля панели имеют имена; SegmentedControl и выборы трафика — aria-pressed; ошибка flow — role=alert | | Достоверность статистики | Основной и pivot-ответы проверяются схемами contracts; повреждённый ответ даёт ошибку с повтором без падения и фиктивных KPI | | ReUI checklist | Используются существующие Frame/DataGrid/Filters и base-nova; новые зависимости, копии registry-компонентов и изменения сетевых правил не добавлены. Профильная доступность проверена, полный аудит остаётся этапом 12 | | Проверки кода | Production build/TypeScript: 34 страницы; lint изменённых файлов и diff-check прошли. После изменения сброса формы повторён E2E панели | Границы приёмки: HTTP/SSE-моки не подтверждают реальную работу RouterOS/IPFIX/JWT. Серверы, удалённые из каталога, недоступны в месячном выборе; экспорт не реализован. После закрытия SSE автоматическое переподключение отсутствует; поддержаны LF/CRLF, одиночный CR не поддержан. Временные отметки получения не подменяют время измерения на устройстве. Полный аудит скринридером, контраста, производительности и сквозная регрессия предусмотрены этапом 12. Следующий этап — 9: VPN и сетевые операции. Исторические записи выше сохраняются как журнал промежуточных решений.