y83 code / справочник

Туннели

Раздел «Туннели» показывает обратные SSH-туннели ко всем сохранённым удалённым серверам сразу — одним списком, а не по одному серверу, как в разделе удалённых агентов.

раздел
Подсистемы приложения
пунктов возможностей
26
источник
docs/about/tunnels.md

Здесь и состояние канала, и кнопки, чтобы его починить: открыть, переподключить, проверить, закрыть, перезапустить демон на сервере и посмотреть его логи.

Возможности

  • Список всех серверов. Показывается всё, что сохранено, включая серверы без туннеля — они видны как отключённые.
  • Карточка на сервер. Цветная точка и подпись статуса, имя, адрес и порт, состояние обратного канала и демона, число переподключений и время последней проверки. Живые туннели всегда сверху, дальше по имени.
  • Шапка с двумя числами: сколько туннелей сейчас живо и сколько серверов всего в списке.
  • Всплывающие сообщения внизу экрана: итог действия или текст ошибки.
  • Кнопка Open. Открывает туннель — видна, пока туннеля нет.
  • Кнопка Reconnect. Полностью переподнимает туннель — видна, когда туннель уже есть.
  • Кнопка Check now. Сквозная проверка обоих направлений с попыткой починить.
  • Меню действий (три точки): перезапустить демон на сервере, открыть его логи, закрыть туннель.
  • Копирование порта. Тап по строке с адресом кладёт локальный порт в буфер.
  • Логи демона в отдельном окне с кнопкой Refresh.
  • Кнопка обновления в шапке — перечитать список разом.
  • Автообновление: пока экран на виду, список перечитывается каждые 5 секунд.

Технические данные

ПараметрЗначение
Интервал опроса5 секунд
Статусов у туннеля6, все перечислены в разделе ниже
Статусов без туннеля2: отключён и неизвестно
Строк лога демона200
Высота окна логовдо 360 единиц, дальше прокрутка
Где берутся туннелиодин запрос всех туннелей сразу
Где берутся серверылокальная база приложения
Что проверяет Check nowоба направления, с лечением
На этом устройстве сейчастуннелей нет, список пуст

Как читать карточку

Цвет точки и подпись справа говорят о главном:

  • Зелёный — канал живой. Это состояния «готов», «туннель поднят» и «кодекс запускается».
  • Жёлтый — канал в процессе: подключается или переподключается.
  • Красный — упал.
  • Серый — туннеля нет, сервер просто отключён, либо статус неизвестен.

Всего у туннеля шесть состояний: три зелёных (готов, туннель поднят, кодекс запускается), два жёлтых (подключается, переподключается) и одно красное (упал). У сервера без туннеля — два серых: отключён и неизвестен.

Под точкой идёт строка деталей: адрес и порт сервера, затем состояние обратного канала и демона, число переподключений и когда была последняя проверка. Если туннеля нет, эта строка показывает только адрес.

Почему ошибка бывает серая

Самая частая путаница на этом экране — старая ошибка, которая выглядит как свежая. Поэтому текст ошибки бывает двух видов:

  • Красный и без времени — сбой происходит прямо сейчас.
  • Серый, с пометкой вида «последний сбой 12 мин назад» — сбой был, но туннель после него поднялся.

Если красной строки нет, а статус зелёный, туннель живой и тревожиться не о чем.

Почему после закрытия туннель не поднимается сам

У туннелей есть фоновая страховка: если канал не поднялся, она пробует его пересоздать. Но она не должна отменять ручное решение человека, поэтому при нажатии «закрыть» сначала ставится метка «пользователь закрыл» — и только потом уходит запрос. Метка снимается при следующем открытии.

Побочный эффект: если запрос на закрытие не прошёл из-за сети, метка снимается и страховка снова берёт туннель под присмотр. Сам канал при этом может остаться живым — тогда он продолжит работать, но закрытым не считается.

Метки живут только в памяти: после перезапуска приложения туннели сами не поднимутся, открывать их нужно вручную.

Если туннеля нет, но сервер есть

Это не поломка, а обычное состояние: сервер сохранён, канал не открывали. Чтобы поднять, нажмите Open. Если сервер вообще не добавлялся, экран покажет пустое состояние с подсказкой добавить сервер в разделе удалённых агентов.

Бывает и обратная ситуация: туннель жив, а записи сервера в приложении уже нет. Такая строка помечена словами «нет записи сервера» и остаётся в списке, чтобы живой канал не потерялся. Переподключение и проверка на ней работают, а вот кнопки Open и меню действий не покажутся: без записи сервера нечем ни открыть туннель заново, ни перезапустить демон.

Что агент умеет

Агент может открыть этот экран через мост командой app_navigate на экран tunnels и прочитать состояние командой app_ui_tree.

Агент также может сам обратиться к серверу за состоянием всех туннелей и за сквозной проверкой — это обычные запросы, доступные и человеку через любой HTTP-клиент. Кнопки на экране агент не нажимает: открытие, закрытие и перезапуск демона меняют живое соединение к чужому серверу, и такое решение должен принимать человек.

Ограничения

  • Опрос каждые 5 секунд идёт, пока экран открыт. При слабой сети это заметно.
  • После любого действия список перечитывается сам, ждать следующего опроса не нужно.
  • Возраст ошибок и проверок обновляется только вместе с опросом, поэтому в первые пять секунд после действия подписи ещё показывают старое время.
  • Кнопки на карточке блокируются на время действия, но остальные карточки остаются доступны.
  • Логи демона тянутся по SSH к самому серверу: без доступа окно покажет ошибку или пустоту.
  • Переподключение не требует пароля, если туннель уже есть: серверная часть берёт сохранённые данные из самого туннеля. Для первого открытия пароль нужен.
  • Список серверов — общий с разделом удалённых агентов, но кнопок установки и сервисных действий здесь нет: только соединение.
  • Все тексты на экране английские.

Источник: docs/about/tunnels.md. Страница собрана из документации проекта при сборке сайта — без пересказа.