Skip to content

Latest commit

 

History

History
96 lines (60 loc) · 23.5 KB

server-view-consistency.md

File metadata and controls

96 lines (60 loc) · 23.5 KB

Согласованность представления серверов, баз и сеансов

Документ описывает поведение версии 1.2.0. Инструкции по установке находятся в README, список изменений — в описании релиза.

Общие фильтры

В разделах «Информационные базы» и «Сеансы» выбор находится в общей панели над таблицей: Сервер → Кластер → База → Поиск. Для сервера используется один ComboBox в этой панели. При первом открытии раздела в новом запуске приложения выбраны «Все серверы», «Все кластеры», «Все базы», и данные загружаются автоматически.

В фильтре сервера показаны имя · версия платформы. Подсказка оформлена стандартным ToolTip: адрес агента и версия, источник подключения, затем состояние или сводка загруженных данных. Фильтр базы показывает имя и адреса агента и кластера; подробности доступны в подсказке. Общая строка состояния и InfoBar показывают состояние загрузки и ошибки.

«Все серверы» всегда стоит первым. Далее идут локальные подключения, сгруппированные по компьютеру и отсортированные по числовому порту агента. После них идут удалённые подключения по имени, адресу и порту. Оба раздела используют один порядок; обновление и повторное обнаружение службы его не меняют.

Выбор Какие данные показывает
Все серверы Объединённый список из успешно загруженных подключений этого раздела.
Конкретный сервер Данные только выбранного подключения.
Все кластеры Данные всех загруженных кластеров в выбранной области серверов.
Конкретный кластер Данные только этого кластера и его сервера.
Все базы Все базы или сеансы в выбранной области серверов и кластеров.
Конкретная база Только выбранная база либо её сеансы.
Поиск Дополнительно сужает результат остальных фильтров; параметры подключения не меняет.

Для ручного чтения используется единая команда «Обновить»: она проверяет доступность и получает свежие данные текущей области. Если выбран конкретный сервер, читается он. Если серверы не ограничены, но выбран конкретный кластер или база, читается сервер, которому принадлежит этот объект. При трёх значениях «Все» читаются все серверы. Команда «Обновить все серверы» в меню применяется ко всему списку независимо от фильтров.

Смена фильтра сразу перестраивает представление загруженных данных. При возвращении в раздел после перехода на другую вкладку сохранённая область автоматически читается заново. Сервер, кластер, база, поисковая строка и переключатель «Автообновление» каждого раздела сохраняются на время текущего запуска приложения. При новом запуске просмотр снова начинается с «Все»; это состояние не записывается в файл подключений.

Выбор конкретного кластера автоматически выбирает подключение его сервера. Выбор конкретного сервера автоматически подставляет кластер, если успешное чтение подтвердило ровно один кластер. Пока данные сервера не получены, этот выбор ожидает чтения; при нескольких кластерах остаётся «Все кластеры» или ранее выбранный кластер этого же сервера. Пользователь может выбрать «Все кластеры» вручную: обычное обновление и возвращение в раздел сохраняют этот выбор.

«Автообновление» повторяет чтение текущей области каждые 15 секунд, пока соответствующий раздел видим и не занят другой операцией или диалогом. При уходе с вкладки таймер останавливается; завершение начатой ранее загрузки не запускает таймер скрытой страницы. Выключенный переключатель останавливает периодическое чтение, а первое открытие и возвращение в раздел по-прежнему обновляют данные автоматически.

Повторный вход во время незавершённой загрузки ожидает текущую операцию и затем обновляет область возвращённого раздела; одновременно дублирующиеся чтения не запускаются. Профили подключений и введённые в текущем запуске пароли общие для двух разделов; загруженные данные и состояние каждого раздела хранятся отдельно. После сохранения нового или изменённого подключения данные выбранного сервера автоматически читаются заново.

Происхождение и идентичность строк

Имя базы или кластера не является идентификатором. Выбор кластера задаётся парой ID подключения + UUID кластера, выбор базы — тройкой ID подключения + UUID кластера + UUID базы. UUID сравниваются без учёта регистра. Одинаковые имена и UUID на разных серверах остаются отдельными целями.

Пункты «Все кластеры» и «Все базы» имеют отдельные значения выбора. База с буквальным именем «Все базы» остаётся обычной конкретной базой.

Подсказка подключения содержит адрес агента, версию платформы, источник и состояние подключения. Подсказки кластеров и баз содержат сервер, адрес агента, версию платформы и сведения о кластере; они позволяют различать одинаковые имена. В списке ИБ сервер и кластер представлены отдельными колонками с адресами, версия — колонкой «Платформа». В строке сеанса показан сервер; его адрес агента и версия доступны в подсказке. Кластер и UUID базы сохраняются в самой строке сеанса и используются для фильтрации и адресации команды завершения.

Подпись кластера в фильтрах обоих разделов и колонке «Кластер» списка ИБ начинается с адреса:

  • Для имени по умолчанию Локальный кластер или Local cluster показан только адрес:порт, без повторяющегося имени. Регистр и пробелы по краям при распознавании этого имени не учитываются.
  • Для другого имени показано адрес:порт · имя кластера.
  • Подсказка сохраняет фактическое имя и адрес; данные кластера не переименовываются.

В официальном описании хранения настроек кластера 1С:Предприятия 8.1 «Локальный кластер» приведён как описание кластера по умолчанию, а имя или IP-адрес сервера хранится отдельно. Поэтому в интерфейсе местонахождение определяется по адресу, а это имя используется как описание, без вывода о том, что сервер находится на текущем компьютере.

Обновление сохраняет выбор по составному идентификатору. Если успешное чтение подтвердило исчезновение выбранного объекта или объект больше не входит в область просмотра, соответствующий фильтр возвращается к «Все». При первом открытии общий список сохраняет значения «Все»; сервер для конкретного кластера определяется по ID подключения, а не по позиции в списке. При удалении подключения или изменении его параметров старые данные исключаются; повторное обнаружение неизменённой локальной службы сохраняет выбор и состояние просмотра.

Ошибка чтения сохраняет выбранные значения фильтров и их подписи для следующей попытки. Эти сведения описывают область запроса; прежние строки недоступного сервера удаляются, и создание базы остаётся недоступным. Благодаря сохранённому выбору повторное «Обновить» и возвращение в раздел продолжают проверять нужный сервер.

Явная цель создания базы

«Все серверы» и «Все кластеры» используются для просмотра. Создание доступно только при выборе конкретного сервера и принадлежащего ему конкретного кластера. После выбора сервера с единственным подтверждённым кластером цель подставляется автоматически; выбор кластера из общего списка подставляет его сервер. Само открытие общего списка не выбирает цель, даже если в нём только один сервер и один кластер. Перед созданием цель показана в диалоге проверки параметров.

Для доступности команды нужны успешно загруженные данные текущего профиля, отсутствие ошибки чтения выбранного кластера и работающая локальная служба, если подключение связано с ней. Во время загрузки команда недоступна. Выбор конкретной базы в фильтре не определяет цель создания: цель задают сервер и кластер.

Диалог получает выбранные профиль и кластер. Перед отправкой команды сценарий создания повторно проверяет версию агента, адрес кластера и отсутствие ИБ с таким именем. Изменение профиля или неудачное обновление не оставляет прежний снимок данных действующей целью создания.

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

Загрузка, ошибки и пустые списки

Состояние Поведение
Первое открытие или возвращение в раздел Автоматически читается текущая область. Первое открытие нового запуска начинается с общего списка всех серверов.
Выполняется загрузка Показан индикатор; команды и изменение фильтров блокируются до завершения операции.
Локальная служба остановлена Служба остаётся в списке серверов; сетевое чтение для неё не выполняется. Сообщение предлагает запустить службу в разделе «Службы».
Ошибка одного сервера Данные остальных успешных подключений сохраняются; прежние данные недоступного сервера удаляются. Выбор фильтров сохраняется для повторной попытки.
Ошибка чтения части кластера Полученные данные сохраняются, подключение отмечается как «Частичные данные». Создание в кластере с сообщением об ошибке недоступно.
Есть успешные подключения и ошибки Сообщения подключения показаны как предупреждение и называют сервер, а для ошибок кластера — также кластер.
В выбранной области нет успешных подключений Ошибки подключения показаны как ошибки; подсказка отличает их от пустого успешного результата.
Успешно загружен пустой результат Подсказка сообщает об отсутствии баз или сеансов; при ограничивающих фильтрах — об отсутствии совпадений.

Ошибка обновления списка локальных служб показывается отдельно от ошибок подключения. Сохранённые подключения остаются доступны. Отмена, запрошенная вызывающей стороной, прекращает чтение; незапрошенное исключение отмены от клиента чтения ИБ обрабатывается как ошибка отдельного сервера. Пароль подключения скрывается в сообщении такой ошибки.

Согласованность имён, версий и служб

В этом изменении также устранены расхождения между разделами:

  • Автоматическое имя локального подключения везде имеет вид имя компьютера:порт агента, например SERVER01:1540. Старые автоматические подписи «Этот компьютер · версия» приводятся к этому представлению без перезаписи сохранённого профиля. Пользовательские имена сохраняются.
  • Версия локального исполняемого файла читается из его метаданных; версия из пути установки используется как запасной источник. Один механизм применяется к службам, процессам, компонентам администрирования и выбору платформы при регистрации службы.
  • Для агента ragent без явно заданного порта одинаково используется порт 1540. Порты показываются по назначению: агент, кластер, RAS, отладка HTTP, рабочие процессы.
  • Отображаемое имя службы Windows и её системное имя разделены и подписаны. Процесс сопоставляется со службой по PID или цепочке родительских процессов; запасное сопоставление по параметрам портов требует единственного совместимого работающего кандидата. Неоднозначное соответствие не выдаётся за установленную связь.
  • Если сведения о службах Windows недоступны, список процессов всё равно загружается. Предупреждение сообщает, что сопоставление со службами не выполнено; отсутствие этих сведений не обозначается как доказанное отсутствие службы.

Проверка изменения

Логика выбора и состояния данных сверяется с текущим кодом. Проверки рабочих ViewModel охватывают объединение серверов, совпадающие имена и UUID, сохранение фильтров, конкретную цель создания, частичные ошибки, удаление и изменение профиля, остановленные службы, изменение категории обнаруженного подключения, ошибки отмены, повторное открытие страницы и изменение профиля во время чтения. Для автоматического входа дополнительно проверяются первое чтение общего списка, возвращение в сохранённую область, сохранение переключателя автообновления и отсутствие параллельных дублирующихся запросов. Клиенты в стенде заменены тестовыми; команды создания и завершения сеансов не выполняются.

Прошёл 41 сценарий рабочей ViewModel информационных баз, 22 сценария рабочей ViewModel сеансов и 185 модульных тестов. Проверены взаимный выбор сервера и кластера, отложенный выбор единственного кластера, сохранение ручного «Все кластеры», повторные входы во время чтения, переход из сеансов к базам во время первого чтения профилей и ожидание общей операции без потери автоматического обновления. Автономная Release-сборка 1.2.0 запущена на Windows 11; состав комплекта и загрузка встроенных библиотек проверены штатными скриптами проекта.

В запущенной сборке проверены общая панель без бокового списка, раскрытие фильтров, адреса кластеров, выбор конкретного сервера и доступность создания только после явного выбора цели. После перезапуска первое открытие ИБ автоматически прочитало четыре сервера и показало 54 базы с тремя фильтрами «Все». Открытие сеансов автоматически показало 19 сеансов; их число меняется по мере работы пользователей. Возвращение в ИБ сохранило выбранные сервер, кластер, базу, поисковую строку и включённое автообновление. Итоговые отступы проверены в широком окне; узкое окно отдельно не проверено. Создание баз, завершение сеансов и изменение служб в этой проверке не выполнялись.

Основные места реализации: общие значения фильтров, информационные базы, сеансы, чтение ИБ нескольких серверов, имена подключений.