Заметки из Зазеркалья

15.06.2018

Развитие режима агента конфигуратора

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версии 8.3.14.

Мы расширили набор команд, выполняемых в режиме агента, добавили новые команды, которые есть только в этом режиме, а также реализовали отображение прогресса выполнения длительных операций для большинства команд этого режима.

Про запуск конфигуратора в режиме агента мы рассказывали в прошлом году. Для администраторов и разработчиков главное преимущество этого режима заключается в том, что выполнение регламентных операций можно автоматизировать с помощью стандартных ssh-клиентов. Однако на тот момент набор этих операций был небольшим, а одна из главных «хотелок», знать процент выполнения команды, осталась у нас в статусе пожелания. Теперь мы устранили оба этих недостатка.

Команды, существующие в пакетном режиме

Во-первых, как и обещали, мы расширили состав команд, которые можно выполнять в режиме агента. У нас не было цели реализовать абсолютно все возможности, существующие в пакетном режиме конфигуратора. Мы отбирали из них наиболее приоритетные операции.

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

  • Выгрузить информационную базу в файл (DumpIB);
  • Загрузить информационную базу из файла (RestoreIB);
  • Удалить данные из информационной базы (EraseData);
  • Выгрузить конфигурацию (расширение) в файл (DumpCfg);
  • Загрузить конфигурацию (расширение) из файла (LoadCfg);
  • Снять конфигурацию с поддержки (ManageCfgSupport);
  • Записать xml-файл мобильного приложения (MobileAppWriteFile);
  • Подписать конфигурацию мобильного клиента (MobileClientDigiSign);
  • Записать xml-файл мобильного клиента (MobileClientWriteFile).

Прогресс выполнения длительных операций

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

Теперь мы эту работу закончили, и в режиме агента вы можете получать и отображать прогресс выполнения длительных операций процентах. В текстовом режиме выводится текстовый статус и число, например, так (строка выводится в одно и то же место):

designer> load-config-from-files --dir=/some_dir
Прогресс: 10%  

В режиме json-сообщений мы добавили новый тип сообщения progress:

{
  “type”: “progress”,
  “body”:
  {
    “message”: Строка
    “percent”: Число
  }
}  

Здесь message это описание текущего этапа, оно совпадает с описанием расширенного статуса конфигуратора, но может быть и пустым. А percent это процент выполнения операции.

Не все команды могут выдавать сообщение о прогрессе своего выполнения. Здесь мы тоже отбирали наиболее приоритетные операции. Это:

  • Выгрузить конфигурацию в файл;
  • Загрузить конфигурацию из файла;
  • Выгрузить конфигурацию в xml-файлы;
  • Загрузить конфигурацию из xml-файлов;
  • Обновить конфигурацию базы данных;
  • Выгрузить внешнюю обработку (внешний отчёт) в xml-файлы;
  • Загрузить внешнюю обработку (внешний отчёт) из xml-файлов.

Для настройки прогресса выполнения мы добавили два новых параметра: notify-progress и notify-progress-interval. Команды отправляют информацию о прогрессе, если в настройках агента конфигуратора включен параметр notify-progress. Эта информация отправляется не чаще, чем количество секунд, указанное в параметре progress-interval (по умолчанию 1 секунда). Если за указанный интервал времени прогресс не изменился, то сообщение не отправляется. Для одной операции прогресс изменяется от 1 и доходит до 100 только один раз.

Новые команды

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

  • Создать расширение (config extensions create) - создаёт пустое расширение;
  • Удалить расширение (config extensions delete) - удаляет расширение из информационной базы;
  • Получить свойства расширения (config extensions properties get) - получает информацию о расширении из информационной базы (имя, версия, безопасный режим, область действия и так далее);
  • Установить свойства расширения (config extensions properties set) - устанавливает параметры расширения в информационной базе.

Новые типы ошибок

Также мы расширили состав ошибок, о которых может сообщать агент конфигуратора. Прежде всего, мы добавили несколько новых типов ошибок, которые могут возникать при работе с информационной базой. Это:

  • Информационная база не найдена (InfoBaseNotFound);
  • Для операции необходимы административные права (AdministrationAccessRightRequired);
  • Уже запущен конфигуратор (DesignerAlreadyStarted);
  • Требуется исключительная блокировка информационной базы (InfoBaseExclusiveLockRequired);
  • Язык не найден (LanguageNotFound);
  • Расширение конфигурации активно и содержит данные (ExtensionWithDataIsActive);
  • Расширение не найдено (ExtensionNotFound).

Кроме этого мы добавили новый тип ошибки для исключений, которые могут возникнуть в процессе загрузки конфигурации из xml-файлов и выгрузки конфигурации в xml-файлы - ConfigFilesError.

А для ошибок и предупреждений, накопленных в процессе загрузки конфигурации из xml-файлов, мы реализовали новый тип json-сообщения - loading-issue.

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

Рассказать друзьям: