y83 code / инструмент

Диагностика сети

Экран сетевой диагностики: восемь независимых проверок, каждую из которых можно запустить отдельно или все сразу. Показывает, где именно ломается связь — на уровне сети, DNS, TLS или конкретного эндпоинта.

раздел реестра
Безопасность и сеть
код
1 318 строк в 4 файлах
документ
24-netdiag.md
Раздел: Security & Network
Идентификатор: netdiag · Экран: ui/network/NetworkDiagnosticsScreen.kt (578) + NetworkDiagnosticsViewModel.kt (476)
Снимок: 2026-10-11

1. Зачем и что это

Проверки выполняет backend (у него есть shell-инструменты), приложение только показывает результат. Это важно: часть проверок (ping, traceroute, SSL) требует инструментов, которых в Android-приложении нет.

2. Как попасть

Хаб инструментов → секция Security & Network → карточка «Диагностика сети» (hub_netdiag_title, подпись «Ping, DNS, TLS, эндпоинты и маршруты», тайл — «Сеть»).

Откуда ещёПуть
Мостapp_navigate с screen: "netdiag"

Маршрут: Screen.kt → MainRouter (NetworkDiagnosticsScreen).

3. Экран: элементы и действия

ЭлементЧто делаетГде в коде
ШапкаЗаголовок и кнопки управленияNetworkDiagnosticsScreen:86
SummaryCardСводка: сколько проверок ок, сколько с ошибкойSummaryCard
Карточки секцийsectionItem с состоянием загрузки/ошибки и повторомretrySection(name)
NetworkStatusContentТип сети, внешний/локальный IP, наличие интернетаNetNetworkInfo
DNSItemХост, IP-адреса, задержкаNetDNSResult
EndpointItemURL, код статуса, заголовки, задержкаNetEndpointResult
PingItemmin/avg/max, потериNetPingResult
SSLItemIssuer, CN, SAN, срок действия, дней осталосьNetSSLResult
TracerouteHopItemНомер хопа, хост, задержка, таймаутNetTracerouteHop
ConnectionItemПротокол, локальный адрес, пир, состояниеNetConnectionInfo
HealthContentЗадержка и статус健康 backendNetHealthResult
HostsCardСвой список хостов + кнопка AddaddHost / removeHost
Диалог Add HostВвод своего хостаAddHostDialog
Кнопка копированияВсе результаты текстом в буферcopyResults
Тумблер автообновленияПерезапуск всех проверок каждые 30 сtoggleAutoRefresh

4. Возможности подробно

Восемь секций

СекцияЧто проверяетПоля результата
networkТип сети, локальный и внешний IP, доступен ли интернетtype, localIp, externalIp, internet
dnsРезолв хостовhost, ips, latencyMs, ok
endpointHTTP-эндпоинтыurl, status, latencyMs, headers, ok
pingДоступность и задержкиminMs, avgMs, maxMs, loss, ok
sslСертификатыissuer, cn, sans, expires, daysLeft
tracerouteМаршрут по хопамhop, host, latencyMs, isTimeout
connectionsТекущие соединенияproto, local, peer, state
healthЖивость backendlatencyMs, ok

Каждая секция хранится в своём SectionState<T>: data, loading, error, loadedAt. Поэтому секции не мешают друг другу: упавшая проверка не стирает результаты соседних, а у каждой есть своя кнопка повтора.

Запуск

runAll() прогоняет всё сразу; runNetwork(), runDns(), runEndpoints(), runPing(), runSsl(), runTraceroute(), runConnections(), runHealth() — по отдельности. Все запросы идут на backend: baseUrl(path) строит адрес {backend}/api/v1/diagnostics/{path}.

Автообновление

toggleAutoRefresh() запускает цикл с delay(30_000) и повторяет runAll(). Выключение отменяет задачу. Так сеть проверяется непрерывно, без ручного обновления.

Свои хосты

addHost нормализует хост (trim, lowercase) и не добавляет дубли; removeHost убирает. Свои хосты попадают в DNS, ping и traceroute вместе с дефолтными — так можно проверить конкретный проблемный домен.

Копирование результатов

copyResults() собирает текстовый отчёт со всеми секциями (с временем запуска в формате yyyy-MM-dd HH:mm:ss) и кладёт в буфер — удобно приложить к багу или передать агенту для анализа.

5. Данные: БД, файлы, настройки

ЧтоГде лежитКак меняетсяКто читает
Результаты проверокТолько в состоянии VMrun*Экран
Список своих хостовВ состоянии VM (customHosts)addHost / removeHostDNS/ping/traceroute

Постоянного хранилища нет: после перезапуска экрана проверки выполняются заново.

6. Backend: REST/роуты

Метод и путьНазначениеОбработчик
GET /api/v1/diagnostics/networkтип сети, IP, интернетdg.Network
GET /api/v1/diagnostics/dnsрезолв хостовdg.DNS
GET /api/v1/diagnostics/endpointпроверка HTTP-эндпоинтовdg.Endpoint
GET /api/v1/diagnostics/pingpingdg.Ping
GET /api/v1/diagnostics/sslсертификатыdg.SSL
GET /api/v1/diagnostics/tracerouteтрассировка маршрутаdg.Traceroute
GET /api/v1/diagnostics/connectionsтекущие соединенияdg.Connections
POST /api/v1/diagnostics/run-allвсе проверки сразуdg.RunAll
GET /api/v1/diagnostics/healthживость backenddg.Health

Роуты: backend/internal/api/v1/routes.go:375–383, обработчики — backend/internal/handlers/diagnostics.

7. Мост и MCP

ЧтоКакПримечание
Открыть экранapp_navigate с screen: "netdiag"BridgeScreenCatalog

Отдельных MCP-тулов для диагностики сети нет, но агент может вызвать те же REST- эндпоинты backend напрямую.

8. Настройки, конфиг, квоты и лимиты

ПараметрЗначениеГде задаётся
Интервал автообновления30 секундtoggleAutoRefresh
Число секций8DiagnosticsUiState
Формат времени отчётаyyyy-MM-dd HH:mm:sscopyResults

9. Ловушки и ограничения

  • Проверки идут с телефона, а не через VPN backend. Backend не использует VPN-туннель устройства, поэтому результат отражает связь самого сервера, а не устройства через VPN.
  • Ping и traceroute требуют системных утилит. На backend они есть; в приложении их нет, поэтому раздел живёт именно там.
  • Ошибка одной секции не рушит остальные. Секции изолированы в SectionState, так что можно читать частичный результат.
  • SSL-проверка показывает daysLeft — удобно ловить скоро истекающие сертификаты.
  • Traceroute может долго идти. Пропуски хопов отмечаются isTimeout — это нормально, а не обрыв.
  • Автообновление каждые 30 секунд создаёт постоянную нагрузку на backend; при проблемах с сетью разумнее выключить.
  • Свои хосты живут только в текущей сессии экрана — после перезапуска их нужно добавить заново.
  • Все строки захардкожены по-английски — экран не локализован.

10. Источники правды

  • app/src/main/java/com/y83/ws/ui/network/NetworkDiagnosticsScreen.kt — экран, карточки секций.
  • app/src/main/java/com/y83/ws/ui/network/NetworkDiagnosticsViewModel.kt — модели, запросы, автообновление.
  • backend/internal/handlers/diagnostics/ — выполнение проверок.
  • backend/internal/api/v1/routes.go:375–383 — роуты.

Источник: docs/project/hub/24-netdiag.md · Безопасность и сеть · 1 318 строк в 4 файлах. Страница собирается из документации проекта при сборке сайта.