Новые возможности сервера удалённого анализа

Мы подготовили улучшения сервера удалённого анализа. Самая главное изменение - это возможность сервера работать с клиентами разных версий. Помимо этого было сделано множество других улучшений. Улучшения сервера истории будут доступны в следующем обновлении 4.0, а также во всех новых релизах 5.0.

Об архитектуре сервера удалённого анализа

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

Удалённый анализ был реализован следующим образом. Сервер создаёт директорию .svace-dir и ожидает клиентских подключений. Клиент после подключения к серверу передаёт нужные для анализа данные на сервер, после чего отправляется команда запуска анализа. Для выполнения анализа используется тот же дистрибутив svace, который использовался для сервера удалённого анализа.

Возникает две проблемы:

Обе эти проблемы были решены. Разработан протокол общения клиента/сервера, который мы будем поддерживать и который имеет возможности по расширению. Также реализована схема добавления дистрибутивов Svace на сервер удалённого анализа для других версий.

Быстрый старт

Настроим на сервере Svace 5.0 возможность анализа версий 4.0.

Для инициализации директории сервера необходимо вызвать следующую команду:

svace server init

Команда

svace server admin create-defaults

позволяет быстро настроить сервер с двумя пользователями:

В настроенной директории сервера администратор может вызвать команду

svace server admin remote-show

для просмотра зарегистрированных дистрибутивов. При первом запуске она напечатает:

No any registered svace distros.

Для добавления дистрибутива нужно вызвать команду remote-add-distro, например

svace server admin remote-add-distro --name main --version 5.0.0 --path /path/svace-5.0.0-x64-linux 

Команда проверит, что по указанному пути существует дистрибутив нужной версии и зарегистрирует его как агент для удалённого анализа. При следующем запуске команда remote-show покажет добавленный дистрибутив:

Version: 5.0.0
  Name: main
  Distro path: /path/svace-5.0.0-x64-linux

Запуск сервера осуществляется также как и раньше с помощью команды svace server start.

Команды удалённого анализа также не поменялись. На клиентах нужной версии необходимо вызвать

svace remote analyze

Особенности

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

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

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

Передача дистрибутива с клиента

В некоторых случаях серверная и клиентская машины имеют одинаковую архитектуру и операционную систему. В этом случае было бы удобно передавать дистрибутив прямо с клиента. Для этого мы реализовали новую команду svace remote add_distro. По своему синтаксису она похожа на команду svace server admin remote-add-distro, но в отличии от неё позволяет зарегистрировать релиз прямо с клиента:

svace remote add_distro --name main --version 5.0.0 --path /path/svace-5.0.0-x64-linux 

Помимо этого с клиента можно посмотреть список зарегистрированных релизов на сервере с помощью команды:

svace remote show

которая выведет содержимое на сервере:

==================================================
Version: 5.0.0
  Name: main
  Distro path: /path/svace-5.0.0-x64-linux
==================================================

Безопасное соединение между сервером и клиентом

Теперь между сервером и клиентом используется защищённое соединение. По умолчанию сервер сам создаёт сертификат, а клиент верит всем сертификатам. Это поведение можно поменять. Для сервера опции SSL_CERT_FILE и SSL_KEY_FILE позволяют указать нужный сертификат, например:

svace server-config SSL_CERT_FILE path/server.crt
svace server-config SSL_KEY_FILE path/server.key

У команды svace remote, используемой на стороне клиента, появился параметр -ssl-cert, который позволяет указать нужный сертификат. Например:

svace remote --ssl-cert path/ca.crt analyze

Если используемый сертификат не соответствует ожидаемому, то клиент получит ошибку:

Using ssl certificate 'path/ca.crt'
Using CA certificate: ca.crt
Problem detected: File does not contain valid certificates: path/ca.crt

Дисклеймер

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

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


Алексей Бородин